التغليف
جزء من قسم Object Oriented Programming في رحلة JavaScript على Coddy — الدرس 17 من 56.
التغليف (Encapsulation) هو عملية دمج البيانات داخل class ضمن وحدة واحدة.
يساعد هذا في وضع قيود على الوصول إلى بيانات class بشكل مباشر، مما يساعدنا في النهاية على منع أي تعديل عرضي للبيانات.
دعونا نرى التغليف (encapsulation) في العمل من خلال مثال بسيط. أنشئ كائناً أساسياً بخصائص عامة:
const user = {
name: "John",
email: "john@example.com"
};يمكن لأي شخص الوصول إلى هذه الخصائص وتعديلها مباشرة:
user.name = "Jane"; // من السهل تعديلها من الخارج
console.log(user.email); // من السهل الوصول إليها من الخارجيستخدم نهج أكثر تغليفاً الإغلاقات (closures) لإخفاء البيانات:
function createUser(name, email) {
// هذه المتغيرات خاصة (مغلفة)
let userName = name;
let userEmail = email;
// إرجاع كائن يحتوي على دوال للتفاعل مع البيانات الخاصة
return {
getName: function() {
return userName;
},
getEmail: function() {
return userEmail;
},
setName: function(newName) {
userName = newName;
}
};
}
const encapsulatedUser = createUser("John", "john@example.com");الآن، للتفاعل مع البيانات:
console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"
// لا يمكن الوصول إلى البيانات مباشرة
console.log(encapsulatedUser.userName); // undefinedالتحدي
لقد تم تزويدك بكود يستخدم التغليف (encapsulation) لحماية بيانات المستخدم. مهمتك هي إضافة طريقة getAge() للوصول إلى العمر.
ستتحقق الاختبارات مما يلي:
- وجود طريقة
getAge() - أنها تعيد العمر الصحيح
- أن تظل معلومات العمر خاصة
المخرجات المتوقعة:
john_doe
25
ورقة مرجعية
التغليف (Encapsulation) هو عملية دمج البيانات داخل فئة ضمن وحدة واحدة وتقييد الوصول المباشر إلى تلك البيانات، مما يمنع التعديل غير المقصود.
بدون التغليف، يمكن الوصول إلى خصائص الكائن بشكل عام:
const user = {
name: "John",
email: "john@example.com"
};
user.name = "Jane"; // يمكن تعديله مباشرة
console.log(user.email); // يمكن الوصول إليه مباشرةاستخدام الإغلاقات (closures) لتغليف البيانات:
function createUser(name, email) {
// متغيرات خاصة (مغلفة)
let userName = name;
let userEmail = email;
// طرق عامة للتفاعل مع البيانات الخاصة
return {
getName: function() {
return userName;
},
getEmail: function() {
return userEmail;
},
setName: function(newName) {
userName = newName;
}
};
}
const encapsulatedUser = createUser("John", "john@example.com");
console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"
console.log(encapsulatedUser.userName); // undefined (البيانات الخاصة لا يمكن الوصول إليها)جرّب بنفسك
import { createUser } from './createUser.js';
// كود اختبار - لا تقم بالتعديل
const user = createUser("john_doe", 25);
console.log(user.getUsername()); // يجب أن تكون النتيجة "john_doe"
console.log(user.getAge()); // يجب أن تكون النتيجة 25
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1الكائنات والكلمة المفتاحية this
مراجعة سريعة: الكائناتإضافة Methods إلى الكائناتفهم الكلمة المفتاحية thisConstructor Functionsالكلمة المفتاحية newتحدي المراجعة7الوراثة والكلمة المفتاحية extends
الوراثةعلاقة "is-a"الكلمة المفتاحية extendsالدالة super()وراثة الخصائص والوظائفتحدي المراجعة2تنظيم الكود
ما هي الـ Modules؟التصدير باستخدام exportالاستيراد باستخدام importالـ Default مقابل الـ Named Exports8تنظيم كود OOP
تنظيم الـ Classes في Modules11مشروع: مصيّر الأشكال
إعداد: فئة Shape والتصديروراثة فئة Circle