آموزش جاوا - کپسوله سازی
Encapsulation ( کپسوله سازی) یکی از چهار مفهوم بنیادی OOP است. سه مفهوم دیگر به ترتیب ارثبری (inheritance)، چندریختی (polymorphism) و تجریهگرایی (abstraction) هستند.
کپسوله سازی در جاوا مکانیزمی است که دادهها (متغیرها) و کدهایی که بر روی دادهها عمل میکنند (متدها) را به صورت یک واحد تکی بستهبندی میکند. در کپسوله سازی، متغیرهای یک کلاس از کلاسهای دیگر پنهان خواهند بود و تنها از طریق متدهای کلاس فعلیشان قابل دسترسی خواهند بود. بنابراین، این همچنین به عنوان مخفیسازی داده شناخته میشود.
برای دستیابی به کپسوله سازی در جاوا −
-
متغیرهای یک کلاس را به صورت خصوصی (private) تعریف کنید.
-
متدهای عمومی (public) setter و getter را ارائه دهید تا بتوانید مقادیر متغیرها را تغییر داده و مشاهده کنید.
مثال
مثال زیر نشاندهنده چگونگی دستیابی به کپسوله سازی در جاوا است −
/* 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() عمومی (public) نقاط دسترسی (access points) متغیرهای نمونه کلاس EncapTest هستند. به طور عمومی، این متدها به عنوان getters و setters شناخته میشوند. بنابراین، هر کلاسی که میخواهد به متغیرها دسترسی داشته باشد باید از طریق این getters و setters به آنها دسترسی پیدا کند.
متغیرهای کلاس 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) باشند.
-
یک کلاس میتواند کنترل کاملی بر روی آنچه در فیلدهایش ذخیره میشود داشته باشد.