(برنامه نویسی JAVA) قلمرو زمانِ حیات متغیرها در محیط جاوا (رباتیک - الکترونیک)

پژوهشگر و نویسنده: (  افشین رشید )

نکته: کلیه متغیرهای استفاده شده ، در زمان شروع روش main () اعلان می شدند .اما جاوا همچنین به متغیرهـا امکـان مـی دهـد تـا درون یک بلوک نیز اعلام شوند . 


یک بلوک با یک ابرو باز و یک ابرو بسته محصور می شود () یک بلوک تعریف کننده یک قلمرو است . بدین ترتیب هر بار که یک بلوک جدید را شروع میکنید ، یـک قلمـرو جدیـد نیـز بوجـود مـیآورید . همانطوریکه احتمالا "از تجربیات برنامه نویسی قبلی بیاد دارید ، یک قلمرو (scope) تعیین کننده آن اسـت کـه چـه اشـیائی برای سایر بخشهای برنامه قابل رویت هستند . این قلمرو همچنین زمان حیات (lifetime) آن اشیائ را تعیین می کند . اکثـر زبانهـای کامپیوتری دو طبقه بندی از قلمروها را تعریف می کنند : سراسری (global) و محلی . (local) اما این قلمروهـای سـنتی بخـوبی بـا مدل موکد شی  گرایی جاوا مطابقت ندارند . 

اگر چه در جاوا هم می توان مقادیری را بعنوان قلمرو سراسری ایجاد نمود ، اما این فقـط یک نوع استثنائ است و عمومیت ندارد . در جاوا قلمرو اصلی همانهایی هستند که توسط یک کلاس یا یـک روش تعریـف مـی شـوند . حتی همین تمایز نیزتا حدی ساختگی و مصنوعی است . اما از آنجاییکه قلمـرو کـلاس دارای مشخصـات و خصـلتهای منحصـر بفـردی است که قابل استفاده در قلمرو تعریف شده توسط روش نیست ، این تمایز تا حـدی محسـوس خواهـد بـود . بخـاطر تفاوتهـای موجـود ،بحث قلمرو کلاس ( و متغیرهای اعلان شده داخل آن ) این مبحث بتعوق افتـاده اسـت . در حـال حاضـرفقـط قلمرو هـای تعریـف شـده توسط یک روش یا داخل یک روش را بررسی می کنیم . قلمرو تعریف شده توسط یک روش با یک ابروی باز شروع می شود. اما اگر آن روش دارای پارامترهایی باشد ، آنها نیز داخل قلمرو روش گنجانده خواهند شد . بعدا "نگاه دقیقتری بـه پارامترهـا خـواهیم داشـت و فعلا" کافی است بدانیم که پارامترها مشابه هر متغیر دیگری در یک روش کار می کنند . بعنوان یک قانون عمـومی ، متغیر هـای اعـلانشده داخل یک قلمرو برای کد هایی که خارج از قلمرو تعریف می شوند ، قابل رویت نخواهنـد بـود ( قابـل دسترسـی نیسـتند .( بـدین ترتیب ، هنگامیکه یک متغیررا درون یک قلمرو اعلان می کنید ، در حقیقـت آن متغیـررا محلـی دانسـته و آن را در مقابـل دسـتیابی ها و تغییرات غیر مجاز محافظت می کنید . در حقیقت ،قوانین قلمرو اساس کپسول سازی را فراهم می کنند . قلمروها را مـی تـوان بصـورت تودرتو (nesting) محفوظ داشت . بعنوان مثال ، هر زمان یک بلوک کد ایجاد کنید ، یک قلمرو جدید تودرتـو ایجـاد نمـوده ایـد. 

  1. class A{  
  2. int data=50;//instance variable  
  3. static int m=100;//static variable  
  4. void method(){  
  5. int n=90;//local variable  
  6. }  
  7. }//end of class  

هنگامیکه این واقعه روی می دهد ، قلمرو بیرونی ، قلمرو درونی را دربرمی گیرد . این بدان معنی است که اشیائ اعـلان شـده در قلمـرو بیرونی برای کدهای داخل قلمرو درونی قابل رویت هستند اما عکس این قضیه صادق نیست . اشیائ اعلان شده داخل قلمرو درونی بـرای بیرون قلمرو قابل رویت نخواهند بود.

نویسنده:  (افشین رشید )