الموضوع 7
التغليف Encapsulation
نُخفي البيانات داخل الكلاس، ونسمح بالتعامل معها فقط عبر دوال تفرض شروطنا.
بعد هذا الدرس ستستطيع أن:
- تعرّف التغليف Encapsulation، وتوضّح فائدته في حماية البيانات.
- تحوّل خصائص الكلاس إلى private، وتكتب لها دوال get و set.
- تضيف شروط تحقق داخل دوال set تمنع القيم غير الصالحة.
- تولّد دوال get و set تلقائيًّا في NetBeans.
١ما هو التغليف؟
إخفاء بيانات الكائن ومنع قراءتها أو تعديلها مباشرة، مع إتاحة التعامل معها بشروط عبر دوال عامة. فكرته: إخفاء من جهة، وإتاحة مضبوطة من جهة أخرى.
خطوتان لتطبيقه
- اجعل الخصائص
private. - اكتب لكل خاصية دالتين
public:getX()تعيد القيمة، وsetX(...)تعدّلها بعد التحقق.
+ public- private# protected~ defaultمسطّر: staticمائل: abstract
٢بدون تغليف: لا حماية
package user;public class User { public String username; public String password;}
بهذه الطريقة لا قيود على username ولا password، فيمكن إسناد أي قيمة نصية لهما مباشرة.
٣مع التغليف: شروط عند الإدخال
package lab10;public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { if (username.contains("=")) { System.out.println("Error: username cannot " + "contain an equals sign (=)"); } else { this.username = username; } } public String getPassword() { return password; } public void setPassword(String password) { if (password.length() >= 6 && password.length() < 30) { this.password = password; } else { System.out.println("Error: password must be " + "6-30 characters long"); } }}
ملفات المشروع في تبويبات كما في NetBeans. زر التشغيل يجمعها في ملف واحد ليعمل على OneCompiler.
run:
Error: username cannot contain an equals sign (=)
Error: password must be 6-30 characters long
username: null
password: null
username: med88
password: tu88tu
BUILD SUCCESSFUL (total time: 0 seconds)
user1 لم يحقق الشرطين، فرُفضت القيمتان وبقيتا null. أما user2 فقُبل.
التوليد التلقائي في NetBeans
بدل كتابة دوال get و set يدويًّا، يولّدها NetBeans لك:
- انقر بالزر الأيمن داخل الكلاس User، واختر Insert Code (أو اضغط Alt+Insert).

- من قائمة Generate اختر Getter and Setter.

- حدّد الخصائص password و username، وفعّل خيار Encapsulate Fields ليحوّلها NetBeans إلى private تلقائيًّا، ثم اضغط Generate.
- أضف شروطك داخل دوال set، كما في التدريب 10.

٤فوائد التغليف
🛡️ حماية البياناتلا قيم غير صالحة: كلمة مرور قصيرة، عمر سالب…
🔧 سهولة التعديلتغيّر طريقة التخزين داخل الكلاس دون أن تتأثر الكلاسات الأخرى.
👁️ تحكّم في القراءةتستطيع إعادة القيمة بالشكل الذي تريده، أو منع قراءتها بحذف get.
توقّع وتحقّق
أجب قبل أن تنظر إلى الشرح. التصحيح فوري، وإجاباتك تُحفظ.
في التغليف تكون الخصائص عادةً:
الدالة التي تعيد قيمة الخاصية name تُسمّى عادةً:
ما الناتج إذا رفضت setPassword القيمة ولم تُعطَ password قيمة قبلها؟
user.setPassword("12"); // أقل من 6System.out.println(user.getPassword());
أين نضع شرط «العمر لا يكون سالبًا»؟
الخلاصة
- التغليف: خصائص private + دوال get و set عامة.
- get تعيد القيمة، و set تعدّلها بعد التحقق.
- الشروط داخل set تمنع القيم غير الصالحة.
- NetBeans يولّدها: Insert Code ← Getter and Setter.