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



