مقدمة
في الدرس السابق تعرفنا على الوراثة (Inheritance)، وعرفنا كيف يمكن لفئة أن تستفيد من خصائص ودوال فئة أخرى.
ومن المفاهيم المهمة التي ترتبط بالوراثة في البرمجة كائنية التوجه تعدد الأشكال (Polymorphism).
يسمح تعدد الأشكال للكائنات المختلفة باستخدام الواجهة أو الدالة نفسها، مع إمكانية تنفيذها بطريقة مختلفة حسب نوع الكائن.
---
ما هو تعدد الأشكال؟
تعدد الأشكال يعني أن العملية نفسها يمكن أن يكون لها سلوك مختلف حسب الكائن الذي يتم التعامل معه.
بمعنى آخر، يمكننا استخدام اسم الدالة نفسه مع كائنات مختلفة، لكن كل كائن قد ينفذ العملية بطريقة تناسبه.
---
تعدد الأشكال مع الوراثة
يظهر تعدد الأشكال بشكل واضح عندما توجد فئة أساسية وفئات مشتقة منها.
يمكن للفئات المشتقة إعادة تعريف دالة موجودة في الفئة الأساسية، بحيث يكون لكل فئة تنفيذ خاص بها.
وهذا يسمى Method Overriding.
---
لماذا نستخدم تعدد الأشكال؟
يساعد تعدد الأشكال على:
تقليل التعقيد
جعل الكود أكثر مرونة
تسهيل إضافة أنواع جديدة
التعامل مع كائنات مختلفة بطريقة موحدة
تحسين تصميم البرامج
---
نفس الدالة وسلوك مختلف
يمكن أن تمتلك عدة فئات دالة تحمل الاسم نفسه، لكن كل فئة تنفذها بطريقة مختلفة.
عند استدعاء الدالة من خلال الكائن المناسب، يتم تنفيذ السلوك الخاص بذلك الكائن.
وهذه الفكرة تجعل البرامج أكثر قابلية للتوسع.
---
Duck Typing في Python
تشتهر Python بمفهوم يسمى Duck Typing.
الفكرة الأساسية هي أن Python تهتم بما يستطيع الكائن القيام به أكثر من اهتمامها بنوعه المحدد.
فإذا كان كائنان يوفران العملية المطلوبة، يمكن التعامل معهما بطريقة متشابهة حتى لو كانا من فئتين مختلفتين.
---
تعدد الأشكال دون الوراثة
لا يشترط دائمًا وجود وراثة لاستخدام مفهوم تعدد الأشكال في Python.
يمكن أن تتعامل الدالة مع أي كائن يوفر السلوك المطلوب.
وهذا من نقاط القوة في Python ويجعل الكود أكثر مرونة.
---
استخدام تعدد الأشكال في المشاريع
يستخدم تعدد الأشكال في العديد من المشاريع، مثل:
الألعاب
تطبيقات الويب
البرامج المكتبية
الأنظمة الإدارية
المشاريع البرمجية الكبيرة
---
فوائد تعدد الأشكال
من أهم فوائده:
زيادة مرونة البرنامج
تقليل الاعتماد على أنواع محددة
تسهيل إضافة فئات جديدة
إعادة استخدام الكود
تحسين تصميم الأنظمة البرمجية
---
أخطاء شائعة عند المبتدئين
من الأخطاء الشائعة:
الخلط بين Polymorphism وInheritance
الاعتقاد أن تعدد الأشكال يتطلب الوراثة دائمًا
استخدام نفس الدالة مع كائنات لا توفر السلوك المطلوب
إنشاء تصميم معقد دون الحاجة إليه
---
ملخص الدرس
تعرفنا في هذا الدرس على تعدد الأشكال (Polymorphism) في Python، وعرفنا كيف يمكن للكائنات المختلفة تنفيذ العملية نفسها بطرق مختلفة، كما تعرفنا على إعادة تعريف الدوال ومفهوم Duck Typing في Python.
في الدرس السابع والثلاثون سنتعرف على التغليف (Encapsulation) في Python، وسنفهم كيف يمكن تنظيم وحماية البيانات داخل الفئات.



