کپسوله سازی (encapsulation) در جاوا
کپسوله سازی یکی از ویژگی های برنامه نویسی شی گراست . اگر برنامه ما از دو بخش داده و کد تشکیل شده باشد کپسوله سازی یعنی همه این کدها و داده ها در یک کپسول قرار بگیرند. این امر باعث می شود که داده ها و کدها از استفاده نادرست ایمن نگه داشته می شود.
در کپسوله سازی داده ها همون متغیرها و متدها همون کدهای ما هستند.
در شی گرایی کپسول ها کلاس ها هستند.
سطوح دسترسی در کلاس ها در جاوا
به طور کلی مبحث کپسوله سازی یا encapsulation همون ایجاد سطوح دسترسی برای داده ها و کدهاست که ما سطوح دسترسی مختلفی داریم که به صورت زیر مشاهده می کنید.
private | default | protected | public | visibility |
Yes | Yes | Yes | Yes | from the same class |
No | Yes | Yes | Yes | from any class in the same package |
No | Yes(package) | Yes(package,inheritance) | Yes | from the subclass in the same package |
No | No | Yes(inheritance) | Yes | from the subclass outside the same package |
No | No | No | Yes | from the non-subclass class outside the same package |
پنهان سازی اطلاعات روندی است که در آن عناصر مربوط به آن مفهوم پنهان می شود و تنها رابط کاربری مناسب برای آن نمایش داده می شود.
- public : حالت عمومی ، در این حالت چه در داخل package و چه در خارج آن دسترسی آزاد است.
- prrotected : حالت محافظت شده ، در صورتی در خارج package دسترسی خواهیم داشت که کلاس به ارث برده شده باشد.
- default : حالت پیش فرض (زمانی که سطح دسترسی برای عنصر انتخاب نشه این حالت در نظر گرفته میشه) فقط در داخل package و در خارج آن قابل دسترسی نیست.
- private : حالت خصوصی ، که فقط در داخل package و در داخل کلاس مربوطه قابل دسترسی است. یعنی حتی اگر داخل package کلاس دیگری تعریف کنیم قابل دسترسی نیست.
یک مثال از کپسوله سازی
یک بشقاب غذا را در نظر بگیرید که در داخل یخچال شما قرار دارد .
اگر بشقاب غذا تنها برای شما قابل دسترس باشد می شود حالت private یا خصوصی.
اگر کل اعضای خانواده به بشقاب غذا دسترسی داشته باشند (یعنی در زنجیره ارث بری باشد) می شود حالت protected یا محافظت شده برای خانواده .
اگر به صورت عمومی برای هر فردی قابل دسترس باشد . یعنی هر کس بتواند وارد خانه شده و بشقاب را بردارد می شود حالت محافظت شده.
get method (getters)
در مبحث کپسوله سازی در فیلدهایی از جدول بالا که سطح دسترسی براشون امکان پذیر نیست میتونیم متدهایی رو تعریف کنیم که این مقادیر رو بگیره(getters) یا تغییرشون بده(setters).
نکته : به عنوان یک عادت برنامه نویسی خوب در زمان تعریف متد به عنوان getters حتما باید متد رو با get شروع کنید و در زمان تعریف setters متد رو با set شروع کنید.
کلاس A :
public class A { private int x = 10; public int getX(){ return this.x; } public void setX(int x){ this.x = x; } }
کلاس B :
public class B { public static void main(String args[]){ A a = new A(); a.setX(15); System.out.println(a.getX()); } }
دیدگاهتان را بنویسید