مفهوم تعدد الأشكال
تعدد الأشكال أو بوليمورفيزم ( Polymorphism ) هو مجرد أسلوب في كتابة الكود يقصد منه بناء دالة تنفذ أوامر مختلفة على حسب الكائن الذي نمرره لها عند إستدعائها.
في العادة تعدد الأشكال يكون مرتبط بشكل أساسي بالوراثة حيث تكون الدالة مبنية على أساس الكلاس الأب, و لكننا عند إستدعائها نمرر لها كائن من إحدى الكلاسات التي ترث منه.
إذاً, تعدد الأشكال يمكن أن يتحقق بأشكال مختلفة على حسب الكود الذي تبنيه أو تستخدمه.
و أحياناً تجد نفسك تستخدم نفس الدالة مع مصفوفة أو مع نص, فتجد أن طريقة عمل هذه الدالة و ما ترجعه لك يختلف تماماً على حسب نوع الكائن الذي تمرره لها.
تعدد الأشكال أو بوليمورفيزم ( Polymorphism ) هو مجرد أسلوب في كتابة الكود يقصد منه بناء دالة تنفذ أوامر مختلفة على حسب الكائن الذي نمرره لها عند إستدعائها.
في العادة تعدد الأشكال يكون مرتبط بشكل أساسي بالوراثة حيث تكون الدالة مبنية على أساس الكلاس الأب, و لكننا عند إستدعائها نمرر لها كائن من إحدى الكلاسات التي ترث منه.
إذاً, تعدد الأشكال يمكن أن يتحقق بأشكال مختلفة على حسب الكود الذي تبنيه أو تستخدمه.
و أحياناً تجد نفسك تستخدم نفس الدالة مع مصفوفة أو مع نص, فتجد أن طريقة عمل هذه الدالة و ما ترجعه لك يختلف تماماً على حسب نوع الكائن الذي تمرره لها.
دوال جاهزة في بايثون تطبق مبدأ تعدد الأشكال
من أبرز الدوال التي نستخدمها و التي تطبق مبدأ تعدد الأشكال هي الدالة
التي سبق أن تعاملنا معها في أكثر من درس و لكن كل مرة كنا نستخدمها لسبب مختلف.
فمثلاً, عند تمرير نص لهذه الدالة فإنها ترجع عدد أحرفه. و عند تمرير مصفوفة لهذه الدالة فإنها ترجع عدد عناصرها.
في المثال التالي قمنا بتعريف كائن إسمه
وضعنا فيه نص عادي, و كائن نوعه إسمه وضعنا فيه 5 عناصر.
بعدها قمنا بطباعة ما سترجعه الدالة في حال تمرير الكائن و الكائن لها.
من أبرز الدوال التي نستخدمها و التي تطبق مبدأ تعدد الأشكال هي الدالة
التي سبق أن تعاملنا معها في أكثر من درس و لكن كل مرة كنا نستخدمها لسبب مختلف.فمثلاً, عند تمرير نص لهذه الدالة فإنها ترجع عدد أحرفه. و عند تمرير مصفوفة لهذه الدالة فإنها ترجع عدد عناصرها.
في المثال التالي قمنا بتعريف كائن إسمه
وضعنا فيه نص عادي, و كائن نوعه إسمه وضعنا فيه 5 عناصر.بعدها قمنا بطباعة ما سترجعه الدالة في حال تمرير الكائن و الكائن لها.
مثال
سنحصل على النتيجة التالية عند تشغيل الملف
.
إذاً, نلاحظ أنه عند تمرير الكائن
للدالة قامت بإرجاع عدد أحرفه. و عند تمرير الكائن قامت بإرجاع عدد عناصره. مما يعني أن الدالة تقوم بالتشييك على نوع الكائن الذي يمرر لها و على أساس نوعه تقوم بإرجاع القيمة.
سنحصل على النتيجة التالية عند تشغيل الملف
.إذاً, نلاحظ أنه عند تمرير الكائن
للدالة قامت بإرجاع عدد أحرفه. و عند تمرير الكائن قامت بإرجاع عدد عناصره. مما يعني أن الدالة تقوم بالتشييك على نوع الكائن الذي يمرر لها و على أساس نوعه تقوم بإرجاع القيمة.معلومة تقنية
في بايثون, يوجد دالة جاهزة إسمها
يمكن استخدامها لمعرفة ما إذا كان الكائن قد تم إنشاؤه من كلاس معين أم لا.
في حال كان منشئاً منه فإنها ترجع أما إذا لم يكن منشئاً منه فإنها ترجع , .
الآن, بما أن الدالة
تقوم بالتشييك على نوع الكائن الذي نمرره لها فهذا يعني أنها على الأرجح معرفة كالتالي.
في بايثون, يوجد دالة جاهزة إسمها
يمكن استخدامها لمعرفة ما إذا كان الكائن قد تم إنشاؤه من كلاس معين أم لا.في حال كان منشئاً منه فإنها ترجع أما إذا لم يكن منشئاً منه فإنها ترجع , .
الآن, بما أن الدالة
تقوم بالتشييك على نوع الكائن الذي نمرره لها فهذا يعني أنها على الأرجح معرفة كالتالي.بناء دالة تطبق مبدأ تعدد الأشكال
في المثال التالي قمنا بتعريف دالة إسمها
مصممة للتعامل مع ثلاث أنواع من الكائنات.- إذا مررت لها عدد صحيح, أي نوعه فإنها تقوم بطباعة ناتج جمع الأرقام الموجودة فيه. ,
- إذا مررت لها نص يمثل عدد صحيح, أي نوعه فإنها تقوم بتحويل الأحرف الموجودة فيه لأرقام و من ثم تقوم بطباعة ناتج جمع هذه الأرقام. ,
- إذا مررت لها مصفوفة نوعها
تحتوي على أعداد صحيحة أو نصوص تمثل أعداد صحيحة, فإنها تقوم بطباعة ناتج جمع هذه العناصر.
في المثال التالي قمنا بتعريف دالة إسمها
مصممة للتعامل مع ثلاث أنواع من الكائنات.- إذا مررت لها عدد صحيح, أي نوعه فإنها تقوم بطباعة ناتج جمع الأرقام الموجودة فيه. ,
- إذا مررت لها نص يمثل عدد صحيح, أي نوعه فإنها تقوم بتحويل الأحرف الموجودة فيه لأرقام و من ثم تقوم بطباعة ناتج جمع هذه الأرقام. ,
- إذا مررت لها مصفوفة نوعها تحتوي على أعداد صحيحة أو نصوص تمثل أعداد صحيحة, فإنها تقوم بطباعة ناتج جمع هذه العناصر.
مثال
سنحصل على النتيجة التالية عند تشغيل الملف
.
سنحصل على النتيجة التالية عند تشغيل الملف
.تطبيق مبدأ تعدد الأشكال مع الوراثة
في المثال التالي قمنا بتعريف كلاس مجرّد إسمه
يعتبر الكلاس الأساسي لأي كلاس يمثل بلد و بالتالي أي كلاس سننشئه ليمثل بلد ما يجب أن يرث منه. في هذا الكلاس قمنا بتجهيز 3 دوال مجرّدة أيضاً.
بعدها قمنا بتعريف كلاس إسمه و كلاس إسمه يرثان من الكلاس و يفعلان Override لكل الدوال التي ورثوها منه.
بعدها قمنا بإنشاء دالة إسمها مهمتها إستدعاء جميع الدوال الموجودة في الكائن الذي نمرره لها بشرط أن يكون هذا الكائن قد تم إنشاؤه من كلاس يرث من الكلاس .في الأخير قمنا بإنشاء كائن من الكلاس
و كائن من الكلاس و تمرير كل كائن منهما للدالة .
في المثال التالي قمنا بتعريف كلاس مجرّد إسمه
يعتبر الكلاس الأساسي لأي كلاس يمثل بلد و بالتالي أي كلاس سننشئه ليمثل بلد ما يجب أن يرث منه. في هذا الكلاس قمنا بتجهيز 3 دوال مجرّدة أيضاً.بعدها قمنا بتعريف كلاس إسمه و كلاس إسمه يرثان من الكلاس و يفعلان Override لكل الدوال التي ورثوها منه.
بعدها قمنا بإنشاء دالة إسمها مهمتها إستدعاء جميع الدوال الموجودة في الكائن الذي نمرره لها بشرط أن يكون هذا الكائن قد تم إنشاؤه من كلاس يرث من الكلاس .
في الأخير قمنا بإنشاء كائن من الكلاس
و كائن من الكلاس و تمرير كل كائن منهما للدالة .مثال
سنحصل على النتيجة التالية عند تشغيل الملف
.
سنحصل على النتيجة التالية عند تشغيل الملف
.تطبيق مبدأ تعدد الأشكال مع المصفوفات و مع الوراثة
في المثال التالي قمنا بتعريف كلاس مجرّد إسمه
يعتبر الكلاس الأساسي لأي كلاس يمثل بلد و بالتالي أي كلاس سننشئه ليمثل بلد ما يجب أن يرث منه. في هذا الكلاس قمنا بتجهيز 3 دوال مجرّدة أيضاً.
بعدها قمنا بتعريف كلاس إسمه و كلاس إسمه يرثان من الكلاس و يفعلان Override لكل الدوال التي ورثوها منه.في الأخير قمنا بإنشاء كائن من الكلاس
و كائن من الكلاس و من ثم وضعناهما في إسمه .
و بعدها قمنا بإنشاء حلقة تمر على جميع الكائنات الموضوعة في الكائن و تستدعي الدوال الثلالثة من كل كائن تم إنشاؤه من كلاس يرث من الكلاس .
في المثال التالي قمنا بتعريف كلاس مجرّد إسمه
يعتبر الكلاس الأساسي لأي كلاس يمثل بلد و بالتالي أي كلاس سننشئه ليمثل بلد ما يجب أن يرث منه. في هذا الكلاس قمنا بتجهيز 3 دوال مجرّدة أيضاً.بعدها قمنا بتعريف كلاس إسمه و كلاس إسمه يرثان من الكلاس و يفعلان Override لكل الدوال التي ورثوها منه.
في الأخير قمنا بإنشاء كائن من الكلاس
و كائن من الكلاس و من ثم وضعناهما في إسمه .و بعدها قمنا بإنشاء حلقة تمر على جميع الكائنات الموضوعة في الكائن و تستدعي الدوال الثلالثة من كل كائن تم إنشاؤه من كلاس يرث من الكلاس .
مثال
سنحصل على النتيجة التالية عند تشغيل الملف
.
سنحصل على النتيجة التالية عند تشغيل الملف
.
تعليقات
إرسال تعليق