مدیریت سطح دسترسی ها در زبان برنامه نویسی جاوا

*بانو بهار*

کاربر نگاه دانلود
کاربر نگاه دانلود
عضویت
2016/08/15
ارسالی ها
3,937
امتیاز واکنش
10,965
امتیاز
804
محل سکونت
میان شکوفه‌ها
در این قسمت قصد داریم تا به بررسی Access Control (اکسس کنترل) به معنی "مدیریت سطح دسترسی" در کلاس ها، متغیر ها و متد ها بپردازیم. در واقع، یکی از مواقعی که این مبحث اهمیتش دو چندان می شود، زمانی است که تیمی از برنامه نویسان بخواهند به صورت گروهی روی پروژه ای یکسان کار کنند.

فرض کنیم که قرار است به عنوان سرپرست گروهی از برنامه نویسانی باشیم که روی طراحی یک نرم افزار کار می کنند. وظیفه ای که مدیر پروژه بر عهده ی ما گذاشته این است که کنترل کنیم که هر برنامه نویسی بنا به وظیفه ای که دارد تا چه حدی به دیگر کلاس ها، متغیر ها و متد هایی که توسط دیگر برنامه نویسان نوشته می شوند، می تواند دسترسی داشته باشد.

اگر ما به عنوان سرپرست مابقی برنامه نویسان کار خود را به خوبی انجام دهیم، به نظر می رسد که مشکلی حادی در این رابـ ـطه بوجود نیاید. فرض کنیم ما آن طور که باید و شاید در مورد اکسس کنترل در زبان برنامه نویسی جاوا آگاهی نداریم. در این جا است که پروژه ما با مشکلات جدی مواجه خواهد شد چرا به طور مثال برنامه نویسی که نمی بایست به یک متغیر از جنس int دسترسی داشته باشد حال این امکان برایش فراهم شده و ایشان هم بدون هیچ سوء قصدی مقدار اولیه آن متغیر را تغییر داده اند و نتیجه ای که برنامه در حین کار می بایست داشته باشد به نتیجه ای غیر قابل باور تبدیل خواهد شد!

برای درک بهتر سطح دسترسی در زبان برنامه نویسی جاوا پروژه ای تحت عنوان Access Control ایجاد می کنیم. در زبان برنامه نویسی جاوا، ما با قرار دادن کلیدواژگان public, protected, private و گاهی اوقات هم هیچ کلیدواژه ای، مشخص می کنیم که اکسس یا «میزان دسترسی» به یک کلاس، متد و یا متغیر چقدر می بایست باشد.

در حقیقت با قرار دادن کلید واژه ی public پیش از یک کلاس، متد و یا متغیر این دستور را به برنامه خود می دهیم که این کلاس، متد و یا متغیر در دیگر بخش های برنامه و توسط دیگر کلاس ها قابل دسترسی است. به عبارت دیگر از هر جای دیگر برنامه من جمله بخش های دیگر همان کلاس، دیگر پکیج ها، کلاس های ارث بری شده از آن می توان به عناصر public دسترسی داشته و در صورت لزوم تغییری در آن ها ایجاد کرد.

کلید واژه ی protected حاکی از آن است که عنصری که این کلید واژه قبل از آن قرار گرفته است در همان کلاس، دیگر پکیج ها و کلاس های ارث بری شده از آن قابل دسترسی خواهد بود.

کلید واژه ی private این معنا را می رساند که مثلا متغیری که private است فقط و فقط در همان کلاس قابل دسترسی خواهد بود.

زمانی هم که هیچ کلید واژه ی محدود کننده ای قبل از نام یک کلاس، متد و یا متغیر نباشد، این سطح دسترسی Package Access نامیده می شود و بدان معنا است که عنصری که فاقد هرگونه public, protected, private باشد در همان کلاس و یا دیگر کلاس های موجود در همان پکیج قابل دسترسی خواهد بود. برای روشن شدن تفاوت مابین این چهار سطح دسترسی می توان از جدول زیر کمک گرفت:

c2985dbf64d2843e3916d533def92a16.jpg


اکنون برای درک بهتر کلیه سطوح دسترسی نیاز داریم تا یک پروژه کوچک تعریف کرده و بر اساس آن یک برنامه بنویسیم. فرض کنیم که می خواهیم دو کلاس داخل یک پکیج ایجاد کنیم که یکی از آن ها دارای محدودیت بیشتری نسبت به کلاس دیگری است.

در پروژه ای که در ابتدای این آموزش ایجاد کردیم یک کلاس تحت عنوان MainClass به معنی کلاس اصلی ایجاد می کنیم. پیش از زدن دکمه Finish می بایست یک نام برای پکیج خود نیز انتخاب کنیم. برای همین منظور نام MainPackage را نیز به معنی "پکیج اصلی" در نظر می گیریم. برای روش تر شدن مطلب به تصویر زیر توجه کنید:

0b2ae7b2b4f486a3c448d9e71a72203a.jpg


همان طور که در این تصویر مشاهده می شود جایی که با فلش قرمز مشخص شده می بایست برای نام پکیج نوشته شود و جایی که با فلش سبز رنگ مشخص شده می بایست برای نام کلاس پر شود. از آنجا که این کلاس قرار است کلاسی باشد که برنامه در آن شروع شود از این رو در حین ساختن آن می بایست گزینه public static void main(String[] args) را تیک بزنیم.

در این مرحله کد ما می بایست به شکل زیر باشد:

package MainPackage;
public class MainClass {
public static void main (String[] args){
}
}
همان طور که در کد بالا ملاحظه می شود، در خط اول نام پکیج نوشته شده است. حال اقدام به ایجاد یک کلاس دیگر تحت عنوان SecondClass به معنی "کلاس دوم" می کنیم. از آنجا که این کلاس قرار نیست که به منزله نقطه شروع برنامه باشد گزینه ی (public static void main(String[] args را تیک نمی زنیم. کد مربوط به کلاس دوم ما نیز می بایست به شکل زیر باشد:

package MainPackage;
public class SecondClass {

}
حال می خواهیم تا کلاس اول ما یکسری از خصوصیات کلاس SecondClass را به ارث ببرد از این رو کد MainClass را به شکل زیر بازنویسی می کنیم:

package MainPackage;
public class MainClass extends SecondClass{
public static void main (String[] args){
}
}
در ادامه کلاس دوم خود را به شکل زیر تکمیل می کنیم:

package MainPackage;
public class SecondClass {
static int number = 123;
public static void testMethod() {
System.out.println(number);
}
}
در این کد ما یک متغیر از جنس int تحت عنوان number به معنی "شماره" ایجاد کرده سپس یک متد به اسم testMethod ایجاد کرده و در آن دستور داده ایم که مقدار متغیر ما تحت عنوان number در پنجره ی کنسول نمایش داده شود. البته این کلاس از آن جا که نقطه آغازین یا همان متد main را ندارد چیزی اجرا نخواهد کرد. اکنون در کلاس MainClass متد testMethod را اجرا می کنیم (از آنجا که کلاس MainClass از روی کلاس SecondClass ارث بری می کند، دیگری نیازی به ساخت یک آبجکت از روی کلاس دوم نداشته و به سادگی می توانیم متد testMethod را اصطلاحا Call یا «فراخوانی» کنیم.) کد ما در کلاس MainClass به شکل زیر خواهد بود:

package MainPackage;
public class MainClass extends SecondClass {
public static void main(String[] args) {
testMethod();
}
}
حال اگر
 

برخی موضوعات مشابه

بالا