التغليف Encapsulation في Java | private و getters و setters بشرح تفصيلي للغاية
20:00 دقائق
مجاني
شرح Encapsulation من الصفر: لماذا نخفي البيانات؟ وما معنى private؟ وكيف نستخدم getters و setters مع التحقق من القيم؟
في الدروس السابقة جعلنا خصائص الكلاس عامة مثل:
class Person {
String name;
int age;
}
هذا يعني أن أي جزء من البرنامج يستطيع أن يغيّر العمر والاسم مباشرة:
p1.age = -100; // قيمة غير منطقية
وهنا تظهر المشكلة: البرنامج يسمح بقيم خاطئة، وقد تتسبب في نتائج غير صحيحة. لذلك نحتاج طريقة لحماية البيانات وجعل تغييرها “منضبطًا”. هذه الفكرة تُسمّى التغليف (Encapsulation).
فكرة Encapsulation ببساطة
التغليف يعني:
- نخفي البيانات داخل الكلاس باستخدام
private. - نسمح بالوصول إليها أو تعديلها عبر طرق (Methods) منظّمة.
- يمكننا داخل هذه الطرق أن نضع شروطًا تمنع القيم غير المنطقية.
مثال عملي كامل: Person بطريقة احترافية للمبتدئ
سنحوّل الخصائص إلى private، ثم نكتب:
- Getter: لإرجاع القيمة (قراءة فقط).
- Setter: لتغيير القيمة مع التحقق.
class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String n) {
name = n;
}
public int getAge() {
return age;
}
public void setAge(int a) {
if (a >= 0) {
age = a;
}
}
}
لاحظ الشرط داخل setAge: يمنع وضع عمر سالب.
هذا مثال بسيط، لكنه يوضح الفكرة.
كيفية الاستخدام من خارج الكلاس
بعد التغليف لن تستطيع فعل هذا:
p.age = 10; // خطأ: لأن age أصبحت private
بل ستستخدم الطرق:
Person p = new Person();
p.setName("Ahmed");
p.setAge(25);
System.out.println(p.getName());
System.out.println(p.getAge());
بهذه الطريقة أصبح التحكم في البيانات داخل الكلاس نفسه، وهذا أكثر أمانًا وتنظيمًا.
لماذا هذا مهم جدًّا في البرمجة الحقيقية؟
- لأنك تمنع إدخال بيانات غير صحيحة (مثل عمر سالب).
- لأن تغيير القيم يصبح عبر نقطة واحدة (setter) مما يسهل الصيانة.
- لأنك تستطيع لاحقًا إضافة قواعد تحقق معقدة دون تغيير طريقة استخدام الكلاس.
أخطاء شائعة للمبتدئين
- نسيان كتابة Getter/Setter ثم الاستغراب لماذا لا يمكن الوصول للخاصية.
- كتابة Setter دون أي تحقق، فتفقد جزءًا كبيرًا من فائدة التغليف.
- الخلط بين أسماء الدوال:
getAgeللقراءة وsetAgeللتعديل.
✅ ممتاز. الآن دخلت فعلًا في أساسيات OOP بشكل صحيح. في الدروس القادمة سنكمل بناء مهارات أساسية أخرى (الثوابت، static، المصفوفات، النصوص، ثم مشروع صغير وخاتمة).