آموزش کپسوله سازی (Encapsulation) در جاوا
در زبان برنامه نویسی جاوا، encapsulation یا کپسوله سازی یکی از چهار مفاهیم اصلی شیءگرایی است. سه مفهوم دیگر ارث بری، پلی مورفیسم و abstraction می باشند.
کپسوله سازی در جاوا مکانیزمی برای پنهان کردن داده ها (متغیرها) و عملکرد کد در داده ها (توابع) با یکدیگر به صورت واحد می باشد. در عمل کپسوله سازی، متغیرهای یک کلاس، از کلاس های دیگر پنهان می مانند، و تنها برای توابع همان کلاس قابل دسترسی خواهند بود، به همین دلیل به کپسوله سازی، پنهان کردن داده ها (data hiding) نیز گفته میشود.
برای کپسوله سازی در جاوا:
- متغیرهای کلاس را به صورت private تعریف کنید.
- توابع getter و setter متغیرهای تعریف شده را به صورت public، برای نمایش و ویرایش مقدار آن ها ایجاد کنید.
مثال:
کد زیر نحوه کپسوله سازی را در جاوا نشان میدهد:
/* File name : EncapTest.java */
public class EncapTest {
private String name;
private String idNum;
private int age;
public int getAge() {
return age;
}
public String getName() {
return name;
}
public String getIdNum() {
return idNum;
}
public void setAge( int newAge) {
age = newAge;
}
public void setName(String newName) {
name = newName;
}
public void setIdNum( String newId) {
idNum = newId;
}
}
توابع عمومی setXXX() و getXXX() نقاط دسترسی به متغیرها برای کلاس EncapTest می باشند. به طور معمول، این توابع را getter و setter می نامند. بنابراین هر کلاسی که بخواهد به متغیرها دسترسی پیدا کند، باید از طریق این getter و setter ها به آن ها دسترسی داشته باشد.
نحوه دسترسی به متغیرهای کلاس EncapTest به شکل زیر است:
/* File name : RunEncap.java */
public class RunEncap {
public static void main(String args[]) {
EncapTest encap = new EncapTest();
encap.setName("James");
encap.setAge(20);
encap.setIdNum("12343ms");
System.out.print("Name : " encap.getName() " Age : " encap.getAge());
}
}
خروجی برنامه:
Name : James Age : 20
مزایای استفاده از Encapsulation:
- فیلدهای یک کلاس در جاوا می توانند به صورت فقط خواندنی (read-only) یا فقط نوشتنی (write-only) ایجاد شوند.
- یک کلاس کنترل کاملی بر روی چیزی که در فیلدهاش ذخیره میشود دارد.
- کاربران و کسانی که از کلاس استفاده میکنند، نمی دانند که کلاس داده های خود را چگونه ذخیره می کند. یک کلاس می تواند نوع داده های یک فیلد را تغییر دهد و کاربران کلاس نیازی به کوچکترین تغییر در کدهایشان نخواهند داشت.