Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

التغليف

جزء من قسم 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
challenge icon

التحدي

لقد تم تزويدك بكود يستخدم التغليف (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

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming