Encapsulation
التغليف - حماية البيانات والتحكم في الوصول
🔒إيه هو التغليف Encapsulation؟
💊 تشبيه الكبسولة
فكر في كبسولة الدوا:
- • الدوا اللي جوه محمي - مش هتقدر تلمسه مباشرة
- • بتاخد الكبسولة كلها كوحدة واحدة
- • مش محتاج تعرف التركيبة الكيميائية عشان تستخدمها
ده بالظبط الـ Encapsulation: تجميع البيانات مع الدوال اللي بتتعامل معاها، وإخفاء التفاصيل! 🎯
❌ من غير Encapsulation
⚠️ أي حد يقدر يغير الرصيد لـ -1000!
✅ مع Encapsulation
✓ الـ balance محمي - التعديل بس من خلال الـ methods
🎚️Access Modifiers
Public
متاح للـ كل الناس
زي باب البيت الرئيسي - أي حد يقدر يدخل منه
Private
متاح للـ Class نفسها بس
زي الخزنة السرية - صاحب البيت بس يقدر يفتحها
Protected
متاح للـ Class والأولاد
زي أسرار العيلة - العيلة بس تعرفها
🚪Getters & Setters
🎫 إيه هي الـ Getters و Setters؟
لو البيانات الـ private زي الخزنة، فالـ Getters و Setters هم زي موظف البنك:
- • Getter: بيجيبلك القيمة (زي لما تسأل عن الرصيد)
- • Setter: بيغير القيمة بعد ما يتحقق (زي لما تعمل إيداع)
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!
لما حد يستخدم account.balance، الـ getter بيرجع القيمة بدون ما يكشف الـ private variable
قبل ما يغير القيمة، بيتحقق إنها مش سالبة! لو سالبة، بيرمي Error 💥
الـ deposit() و withdraw() بيتحققوا قبل ما يعملوا أي حاجة
🏦جرب بنفسك - حساب بنكي محمي
BankAccount
الرصيد الحالي
1000 جنيه
📋 سجل العمليات
💡 لاحظ: مش هتقدر تسحب أكتر من الرصيد! ده لأن الـ withdraw() بتتحقق الأول. ده معنى حماية البيانات.
📝 ملخص Encapsulation
Data Hiding
private و protected بيحموا البيانات
Getters/Setters
التحكم في القراءة والكتابة
Validation
التحقق قبل التعديل