درک کپسولاسیون در برنامه نویسی شی گرا

کپسوله سازی یک مفهوم اساسی برنامه نویسی شی گرا است که شامل مجموعه داده ها (فیلدها) و روش هایی (توابع) است که روی داده ها در یک واحد واحد، معمولاً یک کلاس، عمل می کنند. دسترسی مستقیم به برخی از اجزای شی را محدود می کند و حفظ و ایمن سازی کد را آسان تر می کند.
مزایای کپسولاسیون
- پنهان کردن داده ها: حالت داخلی از دنیای خارج پنهان است و دسترسی از طریق روش هایی (گیرنده و تنظیم کننده) کنترل می شود.
- بهبود قابلیت نگهداری کد: تغییرات در فیلدها یا متدها را می توان بدون تأثیر بر روی کد خارجی که از کلاس استفاده می کند ایجاد کرد.
- امنیت پیشرفته: با محدود کردن دسترسی مستقیم به فیلدها، میتوانیم دادهها را از حالتهای نامعتبر تأیید و محافظت کنیم.
مثال کد: کپسوله سازی در عمل
// Encapsulation refers to restricting access of a class from the outside world
public class Person {
private String name;
private String profession;
private double height;
private int ID;
private int age;
// Constructor
public Person(String name, String profession, double height, int iD, int age) {
this.name = name;
this.profession = profession;
this.height = height;
ID = iD;
this.age = age;
}
// Getters and setters for accessing private fields
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getProfession() {
return profession;
}
public void setProfession(String profession) {
this.profession = profession;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// Main method to demonstrate encapsulation
public static void main(String[] args) {
Person myPerson = new Person("Robert", "doctor", 130.4, 39, 23);
// Accessing private fields through getter methods
System.out.println(myPerson.getName());
System.out.println(myPerson.getProfession());
System.out.println(myPerson.getID());
System.out.println(myPerson.getAge());
}
}
زمینه های خصوصی
زمینه ها name
، profession
، height
، ID
، و age
خصوصی اعلام می شوند. این باعث می شود که آنها مستقیماً از خارج کلاس غیرقابل دسترسی باشند.
دریافت کننده ها و تنظیم کننده ها
روش های عمومی مانند getName()
، setName()
، getProfession()
و دیگران به عنوان نقاط دسترسی کنترل شده برای فیلدهای خصوصی عمل می کنند. این روشها به کدهای خارجی اجازه میدهند تا دادههای خصوصی را به طور ایمن بازیابی و اصلاح کنند.
سازنده
سازنده زمانی که یک شی از کلاس، فیلدها را مقداردهی اولیه می کند Person
ایجاد می شود. این تضمین می کند که شی در یک حالت معتبر شروع می شود.
روش اصلی
را main
روش نشان می دهد که چگونه کپسولاسیون استفاده می شود. فیلدهای خصوصی به طور غیرمستقیم از طریق روش های دریافت کننده قابل دسترسی هستند.
مزایا در مثال
-
حفاظت از داده ها:
- فیلدهای خصوصی را نمی توان مستقیماً در دسترس قرار داد یا تغییر داد و از تغییرات تصادفی یا مخرب جلوگیری می کند.
-
دسترسی کنترل شده:
- با استفاده از تنظیم کننده ها، می توانید منطق اعتبارسنجی را برای اطمینان از تنظیم فقط داده های معتبر وارد کنید. به عنوان مثال:
public void setAge(int age) { if (age > 0) { this.age = age; } else { System.out.println("Age must be positive."); } }
-
انعطاف پذیری کد:
- اگر اجرای فیلدها تغییر کند (مثلاً افزودن فیلدهای مشتق شده)، کد خارجی با استفاده از کلاس بیتأثیر باقی میماند.
این مثال نشان می دهد که چگونه کپسولاسیون تضمین می کند که Person
کلاس یکپارچگی را حفظ می کند و جزئیات پیاده سازی خود را پنهان می کند در حالی که یک رابط کنترل شده برای تعامل فراهم می کند.