🛡️ ما هو التغليف (Encapsulation) في جافا؟ دليلك الشامل لفهم كبسولة البيانات
التغليف (Encapsulation) هو أحد المبادئ الأساسية للبرمجة كائنية التوجه (OOP) الذي يساعدنا في حماية بيانات الكائن ومنع الوصول المباشر إليها من خارج الكلاس. تخيل أن التغليف يشبه كبسولة الدواء - حيث يتم حماية المادة الفعالة داخل غلاف يحميها ويحدد كيفية استخدامها.
🔒 لماذا نحتاج التغليف؟
بدون التغليف، تكون بيانات الكائن معرضة للتعديل المباشر مما قد يؤدي إلى:
- قيم غير صالحة أو غير متوقعة
- صعوبة في تتبع الأخطاء
- كود غير آمن وسهل الكسر
مثال على مشكلة بدون تغليف:
class BankAccount {
public double balance; // خطأ! يجب أن لا تكون public
}
// في برنامج آخر
BankAccount account = new BankAccount();
account.balance = -1000; // يمكن وضع قيم غير منطقية!
🧩 كيف نطبق التغليف عملياً؟
يتم تطبيق التغليف عبر خطوتين رئيسيتين:
- إخفاء البيانات: جعل الحقول (fields) خاصة باستخدام
private - توفير وصول آمن: استخدام دوال get و set للتحكم في الوصول
class BankAccount {
// الخطوة 1: جعل الحقل خاص
private double balance;
// الخطوة 2: توفير دالة get للقراءة الآمنة
public double getBalance() {
return balance;
}
// الخطوة 3: توفير دالة set للكتابة الآمنة
public void setBalance(double amount) {
if (amount >= 0) { // تحقق من صحة القيمة
balance = amount;
} else {
System.out.println("لا يمكن أن يكون الرصيد سالباً!");
}
}
}
🔧 دوال Get و Set بالتفصيل
- دالة Get: تقوم بإرجاع قيمة الحقل الخاص
- دالة Set: تقوم بتعديل قيمة الحقل مع التحقق من صحتها
مثال أكثر تفصيلاً:
class Student {
private String name;
private int age;
// Getter for name
public String getName() {
return name;
}
// Setter for name
public void setName(String newName) {
if (newName != null && !newName.isEmpty()) {
name = newName;
}
}
// Getter for age
public int getAge() {
return age;
}
// Setter for age with validation
public void setAge(int newAge) {
if (newAge >= 6 && newAge <= 60) {
age = newAge;
} else {
System.out.println("العمر غير صالح!");
}
}
}
💡 فوائد التغليف الرئيسية
- المرونة: يمكنك تغيير التطبيق الداخلي دون التأثير على المستخدمين
- الأمان: منع الوصول غير المصرح به إلى البيانات الحساسة
- التحكم: إضافة شروط التحقق من صحة البيانات قبل تخزينها
- الصيانة: تسهيل عملية صيانة الكود وتحديثه
🧪 مثال تطبيقي شامل
لنرى كيف يعمل التغليف في مشروع حقيقي:
public class Car {
private String model;
private int speed; // سرعة السيارة
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public int getSpeed() {
return speed;
}
public void accelerate(int increase) {
if (increase > 0 && speed + increase <= 200) {
speed += increase;
}
}
public void brake(int decrease) {
if (decrease > 0 && speed - decrease >= 0) {
speed -= decrease;
}
}
}
// استخدام الكلاس
Car myCar = new Car();
myCar.setModel("Toyota");
myCar.accelerate(50); // زيادة السرعة بطريقة آمنة
🎯 ماذا سنتعلم في الدرس القادم؟
في الدرس القادم، سننتقل إلى مفهوم آخر مهم في البرمجة كائنية التوجه وهو الوراثة (Inheritance)، حيث سنتعلم كيف يمكن للكلاسات أن ترث خصائص ووظائف من كلاسات أخرى، مما يمكننا من إعادة استخدام الكود وإنشاء هرميات منطقية بين الكائنات.
🎓 اختبر نفسك
السؤال 1 من 30% أكملت
ما هو الهدف الرئيسي من استخدام التغليف (Encapsulation) في جافا؟
آخر تحديث: ١٥ مارس ٢٠٢٦
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال
جاري تحميل التعليقات...