کپسوله‌سازی در جاوا

از ویکی کد
(تغییرمسیر از کپسوله‌سازی در جاوا)
پرش به ناوبری پرش به جستجو
Main Page Tutorial
Java-menu.jpeg
خانه
متدها در جاوا
کلاس‌ها در جاوا
۱برنامه‌نویسی شیءگرایی
۲کلاس‌ها و اشیاء
۳خاصیت‌های کلاس
۴متدهای کلاس
۵سازنده‌ها
۶Modifier ها
۷کپسوله‌سازی
۸پکیج‌ها
۹ارث بری
۱۰چند ریختی
۱۱کلاس‌های داخلی
۱۲مفهوم انتزاعی
۱۳رابط‌ها
۱۴Enum ها
۱۵دریافت اطلاعات از کاربر
۱۶تاریخ و زمان
۱۷ArrayList
۱۸HashMap
۱۹کلاس‌های Wrapper
۲۰خطاهای جاوا
فایل‌ها در جاوا
مرجع جاوا
مثال‌های جاوا

کپسوله‌سازی

معنای کپسوله‌سازی، اطمینان حاصل کردن از مخفی بودن داده «حساس» از کاربران است. برای رسیدن به این هدف، شما می‌بایست: [۱]

  • متغیرها/خاصیت‌های کلاس را به صورت private تعریف کنید.
  • متدهایی از نوع public برای عمل get و متدی برای عمل set برای دسترسی و به روز رسانی مقادیر متغیرهای private فراهم کنید.

متدهای Get و Set

شما از فصل گذشته آموختید که متغیرهای private را تنها می‌توان درون کلاس خود دسترسی داشت (بیرون کلاس به این نوع فیلد دسترسی نمی‌توانیم داشته باشیم). اما، ساخت متدهایی از نوع public برای عمل get و عمل set ممکن است.

متد get مقدار متغیر را برمی‌گرداند و متد set مقدار متغیر را تنظیم می‌کند.

شیوه نوشتار برای هر دوی این متدها این است که نام آنها با کلمه get یا set شروع می‌شود و پس از این کلمات نام متغیر با حرف اول بزرگ قرار می‌گیرد:

مثال

 1 public class Person {
 2   private String name; // private = restricted access
 3 
 4   // Getter
 5   public String getName() {
 6     return name;
 7   }
 8 
 9   // Setter
10   public void setName(String newName) {
11     this.name = newName;
12   }
13 }

توضیح مثال

متد get مقدار متغیر name را برمی‌گرداند.

متد set یک پارامتر (newName) دریافت کرده و متغیر name را با آن مقداردهی می‌کند. کلمه کلیدی this نیز برای اشاره به شیء جاری استفاده می‌شود.

اما، از آنجا که متغیر name از نوع private تعریف شده‌است، ما نمی‌توانیم از بیرون کلاس به آن دسترسی پیدا کنیم:

مثال

{{کد بد|public class MyClass {

 public static void main(String[] args) {
   Person myObj = new Person();
   myObj.name = "John";  // error
   System.out.println(myObj.name); // error 
 }

}</syntaxhighlight> مشاهدهٔ نتیجه


اگر متغیر name از نوع public می‌بود، ما خروجی زیر را داشتیم:

Terminal.png Get and Set

اما، هنگامی که ما سعی برای دسترسی به یک فیلد private می‌کنیم، یک خطا دریافت می‌کنیم:

Terminal.png Get and Set

به جای این کار، ما از متدهای getName() و setName() برای دسترسی و بروزرسانی مقدار متغیر استفاده می‌کنیم:

مثال

1 public class MyClass {
2   public static void main(String[] args) {
3     Person myObj = new Person();
4     myObj.setName("John"); // Set the value of the name variable to "John"
5     System.out.println(myObj.getName());
6   }
7 }
8 
9 // Outputs "John"

مشاهدهٔ نتیجه


چرا کپسوله‌سازی؟

  • کنترل بهتر روی خاصیت‌های کلاس و متدهای کلاس
  • خاصیت‌های کلاس را می‌توان به صورت فقط خواندنی تبدیل کرد (این کار در صورتی که شما فقط از متد get استفاده کنید) صورت می‌گیرد، یا می‌توان آنها را به صورت فقط نوشتنی تبدیل کرد (اگر شما فقط از متد set استفاده کنید)
  • انعطاف‌پذیری: برنامه‌نویس می‌تواند بخشی از کد را بدون تأثیر گذاشتن روی بخش دیگر تغییر دهد
  • امنیت داده‌ها افزایش پیدا می‌کند

منابع آموزشی