
- بواسطة x32x01 ||
في برمجة الكائنات (OOP)، الـ Interfaces أداة مهمة جدًا لتنظيم الكود وضمان تطبيق بعض الـ methods في الكلاسات المختلفة بطريقة مرتبة وواضحة.
خلينا ندي مثال عملي يوضح فايدتها:
تخيل عندك نظام بيسمحلك تنشر عليه 3 حاجات:
services خدمات
articles مقالات
products منتجات
هنمثل ده في الـ OOP ازاي؟
دلوقتي كل كلاس منهم هيبقى فيه تلقائي الـ 3 methods: add(), edit(), show()
لو مش فاهم لحد هنا، نصيحتي ترجع تراجع مفهوم Inheritance في الـ OOP.
لو حاولنا نزودها في الكلاس الأساسي Post، هيظهر عندنا مشكلة: لأن كلاس Service هيبقى عنده نفس الميثود delete() بالرغم من إنه مش محتاجها.
وأي كلاس محتاج يكون فيه ميثود
خلينا ندي مثال عملي يوضح فايدتها:
تخيل عندك نظام بيسمحلك تنشر عليه 3 حاجات:
services خدمات
articles مقالات
products منتجات
هنمثل ده في الـ OOP ازاي؟
1. إنشاء الكلاس الأساسي
هنعمل class أساسي اسمه Post، ويحتوي على 3 methods أساسية: Code:
add()
edit()
show()
2. إنشاء الكلاسات الخاصة
بعد كده، هنعمل 3 كلاسز تانية للمنتجات والمقالات والخدمات: Code:
class Product extends Post {}
class Article extends Post {}
class Service extends Post {}
لو مش فاهم لحد هنا، نصيحتي ترجع تراجع مفهوم Inheritance في الـ OOP.
3. إضافة ميثود جديدة لبعض الكلاسات
دلوقتي قررنا نضيف ميثود جديدة للكلاسات Article و Product وهي:delete()
لو حاولنا نزودها في الكلاس الأساسي Post، هيظهر عندنا مشكلة: لأن كلاس Service هيبقى عنده نفس الميثود delete() بالرغم من إنه مش محتاجها.
4. الحل باستخدام Interface
الحل الأمثل هنا هو عمل Interface باسم Deletable، ونخلي فيها الميثود:delete()
وأي كلاس محتاج يكون فيه ميثود
delete()
يعمل implement للـ Interface ده. PHP:
class Article extends Post implements Deletable {
public function delete() {
// logic here
}
}
class Product extends Post implements Deletable {
public function delete() {
// logic here
}
}
5. فايدة الـ Interface
- تضمن أن كل الكلاسات اللي بتستخدم الـ Interface هتحتوي على نفس الميثود بنفس الاسم ونفس الـ response data type.
- تسهّل كتابة لوجيك مشروط على أساس وجود Interface معين في الكلاس.
- تجعل الكود مرتب ومرن للتطوير لاحقًا بدون مشاكل في الوراثة (Inheritance).
التعديل الأخير: