Home
Module 4
Pillar 3 of OOP
Polymorphism
تعدد الأشكال - نفس الـ interface، سلوكيات مختلفة
🎭إيه هو تعدد الأشكال Polymorphism؟
🎮 تشبيه الريموت
فكر في زرار "Play" ▶️ في الريموت:
- • على التلفزيون → بيشغل القناة
- • على CD Player → بيشغل الأغنية
- • على YouTube → بيشغل الفيديو
نفس الزرار (play)، لكن النتيجة مختلفة حسب الجهاز! 🎯
✅ أنواع Polymorphism
- • Compile-time - Method Overloading (نفس الاسم، parameters مختلفة)
- • Runtime - Method Overriding (نفس الـ method في child)
📌 الفايدة
- • كود مرن وقابل للتوسع
- • التعامل مع Objects مختلفة بنفس الطريقة
- • Open/Closed Principle
🔷 نفس الـ Interface، سلوكيات مختلفة
💡 كلهم عندهم
calculateArea() لكن كل واحد بيحسبها بطريقته📦Interface & Implementation
shapes.ts
// Interface - العقد
interface Shape {
calculateArea(): number;
getInfo(): string;
}
// Implementation 1 - Circle
class Circle implements Shape {
constructor(private radius: number) {}
calculateArea(): number {
return Math.PI * this.radius ** 2;
}
getInfo(): string {
return `Circle with radius ${this.radius}`;
}
}
// Implementation 2 - Rectangle
class Rectangle implements Shape {
constructor(
private width: number,
private height: number
) {}
calculateArea(): number {
return this.width * this.height;
}
getInfo(): string {
return `Rectangle ${this.width}×${this.height}`;
}
}
// Polymorphism in action!
function printArea(shape: Shape): void {
console.log(`Area: ${shape.calculateArea()}`);
}
const circle = new Circle(5);
const rect = new Rectangle(4, 6);
printArea(circle); // Area: 78.54
printArea(rect); // Area: 24🔍 شرح كل جزء:
📋 الـ Interface - العقد
Shape بيقول: "أي shape لازم يكون عنده calculateArea() و getInfo()"
🔌 implements - التنفيذ
Circle implements Shape يعني Circle بيوعد إنه ينفذ كل حاجة في الـ interface
🔢 كل واحد بيحسب بطريقته
Circle بيستخدم π×r² والـ Rectangle بيستخدم width×height
✨ السحر - Polymorphism!
الـ printArea() بتاخد أي Shape - مش مهم نوعه! كل واحد هيشتغل بطريقته
🎮جرب بنفسك - حساب المساحة
اختار الشكل:
النتيجة:
⭕
shape.calculateArea()
78.54
square units
const shape = new Circle(5);
💡 لاحظ: كلهم بيستخدموا نفس الـ method اسمها calculateArea() - لكن كل واحد بيحسبها بطريقته!
📝 ملخص Polymorphism
🎭
One Interface
نفس الـ interface
🔀
Many Forms
سلوكيات مختلفة
📋
Interface
العقد اللي بيتنفذ
🏛️
Abstract
نص implementation