Home
Module 2
Pillar 1 of OOP

Encapsulation

التغليف - حماية البيانات والتحكم في الوصول

🔒إيه هو التغليف Encapsulation؟

💊 تشبيه الكبسولة

فكر في كبسولة الدوا:

  • • الدوا اللي جوه محمي - مش هتقدر تلمسه مباشرة
  • • بتاخد الكبسولة كلها كوحدة واحدة
  • • مش محتاج تعرف التركيبة الكيميائية عشان تستخدمها

ده بالظبط الـ Encapsulation: تجميع البيانات مع الدوال اللي بتتعامل معاها، وإخفاء التفاصيل! 🎯

❌ من غير Encapsulation

BankAccountbalance = 1000Anyonecan modify!

⚠️ أي حد يقدر يغير الرصيد لـ -1000!

✅ مع Encapsulation

🔒 private_balance = 1000deposit()withdraw()Throughmethods only

✓ الـ balance محمي - التعديل بس من خلال الـ methods

🎚️Access Modifiers

🌍

Public

متاح للـ كل الناس

زي باب البيت الرئيسي - أي حد يقدر يدخل منه

public name: string;
🔐

Private

متاح للـ Class نفسها بس

زي الخزنة السرية - صاحب البيت بس يقدر يفتحها

private _balance: number;
👨‍👩‍👧

Protected

متاح للـ Class والأولاد

زي أسرار العيلة - العيلة بس تعرفها

protected id: number;

🚪Getters & Setters

🎫 إيه هي الـ Getters و Setters؟

لو البيانات الـ private زي الخزنة، فالـ Getters و Setters هم زي موظف البنك:

  • Getter: بيجيبلك القيمة (زي لما تسأل عن الرصيد)
  • Setter: بيغير القيمة بعد ما يتحقق (زي لما تعمل إيداع)
bankAccount.ts
class BankAccount {
  // Private - محمي ومش ظاهر
  private _balance: number;

  constructor(initialBalance: number) {
    this._balance = initialBalance;
  }

  // Getter - للقراءة بس
  get balance(): number {
    return this._balance;
  }

  // Setter - للتعديل مع validation
  set balance(value: number) {
    if (value < 0) {
      throw new Error("الرصيد مينفعش يكون سالب!");
    }
    this._balance = value;
  }

  // Safe deposit method
  deposit(amount: number): void {
    if (amount > 0) {
      this._balance += amount;
    }
  }

  // Safe withdraw method
  withdraw(amount: number): boolean {
    if (amount > 0 && amount <= this._balance) {
      this._balance -= amount;
      return true;
    }
    return false;
  }
}

🔍 شرح كل جزء:

🔒 البيانات المحمية

الـ _balance عليه private - يعني محدش يقدر يوصله من بره الـ class!

👁️ الـ Getter

لما حد يستخدم account.balance، الـ getter بيرجع القيمة بدون ما يكشف الـ private variable

✏️ الـ Setter مع Validation

قبل ما يغير القيمة، بيتحقق إنها مش سالبة! لو سالبة، بيرمي Error 💥

🛡️ Methods آمنة

الـ deposit() و withdraw() بيتحققوا قبل ما يعملوا أي حاجة

🏦جرب بنفسك - حساب بنكي محمي

💳

BankAccount

الرصيد الحالي

1000 جنيه

📋 سجل العمليات

💰 تم إنشاء الحساب برصيد 1000 جنيه

💡 لاحظ: مش هتقدر تسحب أكتر من الرصيد! ده لأن الـ withdraw() بتتحقق الأول. ده معنى حماية البيانات.

📝 ملخص Encapsulation

🔒

Data Hiding

private و protected بيحموا البيانات

🚪

Getters/Setters

التحكم في القراءة والكتابة

Validation

التحقق قبل التعديل