ایجاد متغییرها
خصوصیات یک شیء مشخص کننده کایه متغییرهایی هستند که این
شیء برای عملکرد خود بدانها نیازمند است . این متغییرها می
توانند انواع داده ای ساده ای از قبیل
String
یا
Graphics
باشند.متغییرهای یک شیء را در تمامی برنامه مربوط به آن ،
یعنی در تمامی متدهای آن شیء، می توان مورد استفاده قرار
داد. این متغییرها بلافاصله پس از جمله
class
مربوط به شیء و قبل از کلیه متدهای آن تعریف می شوند.
یکی از چیزهای مورد نیاز برای یک شیءVirus
، روشی است برای دانستن اینکه آیا یک فایل قبلاً آلوده
شده است یا نه . برخی از ویروسهای کامپیوتری برای این
منظور، محتویات فیلدی از فایل را که زمان آخرین تغییر آن
فایل را نگهداری می کند، تغییر می دهند.
برای مثال یک ویروس ممکن است زمان فوق را از 13:41:20 به
13:41:61 تغییر می دهد . از آنجایی که هیچ فایلی در شرایط
عادی در ثانیه 61 تغییر نمی یابد ، این زمان می تواند
تعیین کننده آلودگی فایل باشد .
شیء
Virus
فیلد ثانیه از زمان تغییر فایل را به عدد 86 تغییر می
دهد(علت انتخاب این عدد ، اصطلاح عامیانه ای است در زبان
انگلیسی که در آن ، این عدد به معنای دور انداختن و طرد
کردن به کار می رود). این مقدار در یک متغییر صحیح به نام
newSeconds
ذخیره خواهد شد.
جملات زیر ، تعریف کلاس به نام
Virus
را با یک خصوصیت به نام
newSeconds
و دو خصوصیت دیگر آغاز می کنند :
Public class Virus {
Public int newSeconds = 86;
Public String author = ?Sam Snett?;
Int maxFileSize = 30000;
هر سه متغییر
newSeconds
و
maxFileSize
و
author
جزو خصوصیات این کلاس می باشند . قرار دادن جملاتی مانند
public
را در معرفی یک متغییر ، کنترل دسترسی
(access control)
می نامیم . چرا که این جملات چگونگی دسترسی سایر کلاسها به
این متغییر را مشخص می سازند .
متغییر
newSeconds
دارای مقدار اولیه 86 است و جمله ای که آن را ایجاد می کند
، با
public
شروع می شود .
public
کردن به این معنا است که هر برنامه ای که از اشیای
Virus
استفاده می کند، می تواند این متغییر را
تغییر دهد . مثلاً اگر عدد 92 برای این برنامه حائز اهمیت
باشد ، می تواند مقدار
newSeconds
را به این عدد تغییر دهد. فرض کنید که برنامه ای یک شی
Virus
به نام
influenza
ایجاد کند. این برنامه می تواند مقدار متغییر
newSeconds
این شیء را توسط جمله زیر تنظیم کند :
influenza.newSeconds=92;
در کلاس
Virus،
متغییر
author
نیز
public
است و لذا برنامه های دیگر می توانند آزادانه مقدار آن را
تغییر دهند. لیکن متغییر
maxFileSize
تنها در درون خود این کلاس قابل استفاده است .
با
public
کردن یک متغییر از یک کلاس ، این کلاس کنترل خود را روی
چگونگی استفاده از آن متغییر، توسط برنامه های دیگر از دست
می دهد. در بسیاری از موارد ، این امر مساله خاصی ایجاد
نخواهد کرد. برای مثال ، متغییر
author
می تواند مساوی هر نام یا لقبی که مو لف ویروس را مشخص کند
، قرار گیرد.
محدود کردن دسترسی به یک متغییر باعث جلوگیری از خطاهایی
می شود که ممکن است در اثر تخصیص مقادیر نادرست به آن
متغییر رخ دهد. در مورد کلاس
Virus،
اگر متغییر
newSeconds
برابر عدد 60 یا عددی کوچکتر از آن قرار داده شود ، دیگر
این کلاس به طور صحیح قادر به تعیین آلودگی فایلها نخواهد
بود ، چرا که برخی از فایلها که بدون دخالت ویروس ، در
همان ثانیه تغییر یافته اند ، از نظر این کلاس به عنوان
فایلهای آلوده شناسایی خواهند شد . اگر کلاس
Virus
بخواهد از این مساله اجتناب کند، باید دو عمل زیر انجام
پذیرد :
?
متغییر
newSeconds
را از حالت
public
به حالت
protected
یا
private
تبدیل کنید. این جملات دسترسی به متغییر را محدودتر می
سازند.
?
رفتارهای لازم را برای تغییر مقدار این متغییر و گزارش
کردن مقدار آن به دیگر برنامه ها به ابن کلاس بیفزایید.
یک متغییر
protected
فقط توسط خود کلاس ، کلیه زیر کلاسهای آن و کلیه کلاسهای
موجود در همان بسته
(package)
قابل استفاده می باشد، بسته گروهی از کلاسهای مرتبط است که
هدف مشترک را تعقیب می کنند.
یک متغییر
private
از نظر دسترسی، حتی از متغییر
protected
نیز محدودتر است و فقط توسط خود کلاس قابل استفاده می باشد
. بهتر است که متغییر ها را عموماً به صورت
protected
یا
private
تعریف کنید . مگر در مواردی که بدانید
تغییر یک متغییر توسط برنامه های دیگر، خللی به عملکرد
کلاس مربوطه وارد نخواهد کرد .
جمله زیر
newSecond
را به یک متغییر
private
تبدیل می کند:
private int newSeconds=86;
نوع دیگری از کنترل دسترسی نیز وجود دارد که عبارت است از
عدم استفاده از هیچ یک از جملات
public,private,protected
هنگام ایجاد متغییر .
وقتی یک متغییر بدون استفاده از جملات کنترل دسترسی را
اغلب دسترسی پیش فرض(default
access)
یا دسترسی بسته
(package access)
می نامند ، هر چند جمله خاصی برای آن در نظر گرفته نشده
است .