- بواسطة x32x01 ||
يعني إيه Encapsulation أصلاً؟
بص يا صاحبي… كلمة Encapsulation يمكن تبان كبيرة أو معقدة أول ما تسمعها، وتحس إنك داخل درس كيمياء مش درس برمجة. بس في الحقيقة… الموضوع أبسط بكتير جدًا من اللي الناس فاكرينه.تعالى نفهمها واحدة واحدة بطريقة كده خفيفة وبتقرب المعلومة للمخ زي المية الساقعة في الحر
الـ Encapsulation باختصار هو إنك تغلف البيانات اللي جوه الـ object وما تسمحش لأي كود بره يلعب فيها مباشرة.
يعني بمنتهى البساطة:
البيانات جوه… والتعامل برا.
إنت كتير قوي بتتعامل مع حاجات في حياتك كده من غير ما تحس. خليني أشرحلك أكتر.
مثال من الحياة يخليك تفهم Encapsulation بنظرة واحدة 
تخيل إنك داخل بنك.هل ممكن تقوم داخل على الخزنة الكبيرة وتفتحها وتاخد فلوسك وتروح؟
أكيد لأ
ليه؟
لإن الخزنة = بيانات خاصة… محدش يلمسها غير النظام أو الناس المصرح لهم.
طب إنت كعميل بتتعامل إزاي؟
من خلال شباك السحب والإيداع = public methods.
إنت بتقول للموظف:
- "عايز أسحب"
- "عايز أودّع"
وملوش دعوة بتفاصيل الخزنة جوه فيها إيه أو بتتفتح إزاي…
بالظبط زي ما الكود محتاج يعمل مع الـ object:
إنت تتعامل بس من خلال واجهة آمنة… مش مباشرة مع البيانات.
طيب ده معناه إيه في البرمجة؟
لما تعمل Class في أي لغة OOP زي Java, Python, PHP, أو C#…لازم تحدد مستويات الوصول للبيانات:
- private → أسرار الكلاس… محدش يشوفها
- public → اللي تسمح الناس تتعامل بيه
- protected → لأولاد الكلاس (subclasses)
مثال عملي بكود بسيط عشان الصورة تكتمل 
تعالى نبص على مثال بلغة Java: Java:
public class BankAccount {
private double balance; // البيانات السرية
public BankAccount(double initialBalance) {
balance = initialBalance;
}
// public method للسحب
public void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
}
}
// public method للإيداع
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
// طريقة آمنة لعرض الرصيد
public double getBalance() {
return balance;
}
} - مفيش أي كود بره الكلاس يقدر يلمس balance مباشرة.
- كله لازم يعدّي من خلال public methods.
- ده هو الـ Encapsulation بالظبط.
ليه الـ Encapsulation مهم قوي كده؟
الموضوع مش رفاهية… ده أساس من أساسيات الـ OOP.1. بيحمي بياناتك من التخريب
لو كل واحد يقدر يغيّر البيانات براحتهم… الكود هيتحول لكارثة، ومش هتعرف تتتبع الأخطاء.2. بيخلي الكود نظيف وواضح
لما فيه واجهة واحدة للتعامل، تقدر تفهم المنظومة بسهولة، وده مهم جدًا للفرق الكبيرة.3. بيدّي الكلاس التحكم الكامل في نفسه
الكلاس يبقى مسؤول عن حالته… ومحدش يتدخل في خصوصيته.4. بيسهّل التطوير والـ validation
عايز تضيف شرط؟ قفل؟ حماية؟تقدر تعمل ده في مكان واحد بس… من غير تغييرات عشوائية في المشروع كله.
تخيل لو مفيش Encapsulation…
بصراحة الكود هيبقى زي شارع من غير مطبات:- أي كود ممكن يدخل يغير في البيانات
- مفيش حماية
- مفيش ترتيب
- أي Bug صغير هيوقع البرنامج كله
ووقتها هتقول:
"آه يا ريتني سمعت كلام عم أبو السيد من الأول"
إيه علاقة Encapsulation بالـ Inheritance؟
خد بالك… الـ Encapsulation بيشتغل مع الـ Inheritance إيد في إيد.إنت لما تعمل Class أب (Parent Class) وتاخد منه Class ابن (Child)…
الابن يقدر يشوف protected ويستخدمه
لكن ميسمحش لغيره يتعامل مع البيانات الخاصة private.
وده بيدّي قوة رهيبة للبرمجة الكائنية…
ويخلي بناء الـ Systems الكبيرة سهل ومترتب ومرن.
طيب… نرجع لحوار سيد وأبو السيد
سيد بيسأل:"يعني لازم أقلل وصول أي حد لبياناتي؟"
وأبو السيد بيرد عليه:
"أيوه يا ابني… ده الكود من غير Encapsulation يبقى فوضى!"
وصدقني… أبو السيد عنده حق 100%.
الEncapsulation مش مجرد ميزة…
ده مبدأ،
وهو اللي بيخلي الكود يبقى "عاقل" ومش بيخبط في نفسه.
خلاصة الكلام: لو عايز تبقى مبرمج محترف… لازم تتقن Encapsulation 
انت مش بس بتخلي كودك آمن…إنت بتخليه قابل للتطوير، سهل الصيانة، ومنطقي.
وعلشان كل حاجة تبقى واضحة، ده تلخيص سريع:
- Encapsulation = حماية + تنظيم + مرونة
- استخدم private للبيانات
- استخدم public methods للتعامل
- استخدم protected للوراثة
- خليك دايمًا ماشي بمبدأ “الحدود بين أجزاء الكود”
وإن شاء الله لما نتنقل لمفهوم Inheritance هتعرف إزاي الكود "يولّد كود" وتبني أنظمة أكبر بكتير.
تابعنا في منتديات أكتب كود