شنبه ۲۹ دي ۱۴۰۳
Tut24 آموزش برنامه نویسی و مجله تخصصی فناوری ورود/عضویت

آموزش جاوا - کپسوله سازی

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) باشند.

  • یک کلاس می‌تواند کنترل کاملی بر روی آنچه در فیلدهایش ذخیره می‌شود داشته باشد.