ما هو التغليف؟
التغليف (Encapsulation) هو أحد المبادئ الأساسية في البرمجة كائنية التوجه.
فكرته ببساطة هي حماية البيانات والتفاصيل الداخلية للكائن، بحيث لا يمكن لأي جزء آخر من البرنامج الوصول إليها أو تعديلها مباشرة.
وبذلك يتحكم الكائن بنفسه في كيفية استخدام بياناته، بدلاً من السماح لأي شخص بالتعامل معها كيفما يشاء.
لماذا نستخدم التغليف؟
تخيل مصنعًا لتصنيع السيارات.
العميل يرى المنتج النهائي، لكنه لا يرى تفاصيل خطوط الإنتاج أو الحسابات الداخلية أو آلية التصنيع.
هذه التفاصيل خاصة بالمصنع، ولا يحتاج المستخدم إلى معرفتها.
الأمر نفسه في البرمجة.
قد يحتوي الكائن على بيانات أو دوال تُستخدم داخليًا فقط، ولا يوجد سبب يجعل أي جزء آخر من البرنامج يتعامل معها مباشرة.
في هذه الحالة نجعلها خاصة (Private).
جعل الخاصية خاصة
في JavaScript يمكن جعل الخاصية خاصة بإضافة الرمز # قبل اسمها.
class Car { #profit = 0;
constructor(price) { this.#profit += price; }}
const car = new Car(10000);
console.log(car.#profit); // SyntaxErrorفي هذا المثال أنشأنا خاصية خاصة باسم #profit.
يمكن الوصول إليها من داخل الـ Class فقط، أما خارجه فلن يسمح JavaScript بذلك، وستظهر رسالة خطأ.
جعل الدوال خاصة
لا يقتصر الأمر على الخصائص فقط، بل يمكن أيضًا جعل Methods خاصة.
class Car { #profit = 0;
constructor(price) { this.#profit += price; this.#printProfit(); }
#printProfit() { console.log(this.#profit); }}
const car = new Car(10000);
car.#printProfit(); // SyntaxErrorفي هذا المثال، الدالة #printProfit() خاصة أيضًا.
يمكن استدعاؤها من داخل الـ Class، لكنها غير متاحة لأي كود خارج الكائن.
متى نستخدم العناصر الخاصة؟
نجعل الخاصية أو الدالة Private عندما تكون جزءًا من التنفيذ الداخلي للكائن، ولا نريد أن يعتمد عليها أي كود خارجي.
فهذا يساعد على:
- حماية البيانات من التعديل غير المقصود.
- إخفاء تفاصيل التنفيذ.
- تقليل الأخطاء الناتجة عن الاستخدام الخاطئ.
- جعل الكائن مسؤولًا عن إدارة بياناته بنفسه.
ماذا يجب أن تتذكر؟
- Encapsulation يعني إخفاء التفاصيل الداخلية وحماية بيانات الكائن.
- يمكن جعل الخصائص والدوال Private باستخدام الرمز
#. - لا يمكن الوصول إلى العناصر الخاصة من خارج الـ Class.
- تستخدم العناصر الخاصة لإخفاء التفاصيل التي لا يحتاج المستخدم إلى التعامل معها مباشرة.