تعدد الأشكال Polymorphism، تُستخدم هذه الكلمة في سياقات مختلفة لتصف الحالات التي يكون فيها شيء ما في عدة أشكال مختلفة. أمّا في علم الكمبيوتر وبكلماتٍ بسيطة يمكننا تعريف تعدد الأشكال بأنه قدرة الرسالة على العرض في أكثر من شكل واحد، وتستطيع عزيزي تخيُّل مثال واقعي لتعدد الأشكال، فمثلًا يمكن للشخص في نفس الوقت أن يكون له خاصيات مختلفة، الرجل في نفس الوقت هو الأب والزوج والموظف، لذا فإن الشخص نفسه يمتلك سلوكًا مختلفًا في مواقف مختلفة، وهذا ما يسمى تعدد الأشكال.

يعتبر تعدد الأشكال أحد الميزات الهامة البرمجة كائنية التوجُّه، حيث يتيح لنا القيام بإجراء واحد بطرق مختلفة، بمعنى آخر، يتيح لك تعدد الأشكال تحديد واجهة واحدة وتنفيذ العديد من التطبيقات.

تنقسم تعدد الأشكال في جافا بشكل رئيسي إلى نوعين:

تعدد الأشكال الساكن: تسمح لك جافا، كالعديد من لغات البرمجة الأخرى كائنيّة التوجُّه، بتنفيذ طرق متعددة داخل نفس الفئة تستخدم نفس الاسم ولكن مجموعة مختلفة من المعلمات، وهذا ما يسمى طريقة التحميل الزائد ويمثل شكلاً ثابتًا من أشكال تعدد الأشكال.

يجب أن تختلف مجموعات المعلمات في واحد على الأقل من المعايير الثلاثة التالية:

  • يجب أن يكون لديهم عدد مختلف من المعلمات. على سبيل المثال، يقبل أسلوب واحد 2 و 3 معلمات أخرى.
  • يجب أن تكون أنواع المعلمات مختلفة. على سبيل المثال، طريقة واحدة تقبل سلسلة وأخرى طويلة.
  • يحتاجون إلى توقع المعلمات بترتيب مختلف. علىسبيل المثال، طريقة واحدة تقبل سلسلة وطويلة وأخرى تقبل سلسلة طويلة وسلسلة، لا يوصى بهذا النوع من التحميل الزائد لأنه يجعل من الصعب فهم واجهة برمجة التطبيقات.

في معظم الحالات، توفر كل من هذه الطرق المحملة بشكل زائد وظيفة مختلفة ولكنها متشابهة جدًا، ولكن نظرًا لمجموعات المعلمات المختلفة، يكون لكل أسلوب توقيع مختلف. يسمح هذا للمبرمج بتحديد الطريقة التي يجب استدعاؤها وربطها باستدعاء الطريقة، يُسمى هذا النهج ارتباطًا ثابتًا أو تعدد أشكال ثابت.

تعدد الأشكال الديناميكي: هذا الشكل من تعدد الأشكال لا يسمح للمترجم بتحديد الطريقة المنفذة، حيث يحتاج للقيام بذلك في وقت التشغيل، وضمن التسلسل الهرمي يمكن للفئة الفرعية تجاوز طريقة الفئة الفائقة الخاصة بها، وهذا يتيح لمطور الفئة الفرعية تخصيص سلوك تلك الطريقة أو استبداله بالكامل.

كما أنه يخلق شكلاً من أشكال تعدد الأشكال. تشترك كلتا الطريقتين، التي تنفذها الطبقة الفائقة والطبقة الفرعية، في نفس الاسم والمعلمات ولكنها توفر وظائف مختلفة.

من المهم أن تعرف أن الطريقة الوحيدة الممكنة للوصول إلى كائن هي من خلال متغير مرجعي، يمكن أن يكون المتغير المرجعي من نوع واحد فقط. بمجرد التصريح، لا يمكن تغيير نوع المتغير المرجعي، ويمكن إعادة تعيين المتغير المرجعي إلى كائنات أخرى بشرط ألا يتم إعلانه نهائيًا، سيحدد نوع المتغير المرجعي الطرق التي يمكنه استدعاؤها على الكائن.

أكمل القراءة

يعبر مفهوم تعدد الأشكال في علم الأحياء على تغير واحد أو أكثر في سلسلة الحمض النووي، ويعد النوع الأكثر شيوعًا من تعدد الأشكال هو الاختلاف الحاصل في زوج الجين الواحد، مع العلم يمكن أن تكون الأشكال المتعددة أكبر بكثير من حيث التغيرات القائمة في تسلسلات الأحماض النووية، ويطلق عليها تعدد النيوكليوتيد (SNP)الذي يركز عليه علماء الجينوم البشري، من خلال دراسة ارتباطه بالأمراض، وكيفية الاستجابة للأدوية، بالإضافة إلى دراسة أنواع مختلفة من الأنماط الظاهرية.

تعدد الأشكال

حيث جاء هذا المفهوم من المصطلح الانكليزية ” polymorphism” المركب من كلمة “poly” أي متعدد، وكلمة “morph” التي تعني المراحل أو الأشكال المختلفة في عمر الكائن الحي.

إذًا يمكن القول إن تعدد الأشكال هو تباين وراثي متقطع يخلق أنواعًا مختلفةً من الأفراد ضمن النوع الواحد، فيسبب هذا الاختلاف الجيني وجود شكلين أو أكثر من الأشكال المميزة بين أفراد النوع الواحد. ولعل من أكثر الأمثلة وضوحًا عن هذا المفهوم  وجود جنسين (ذكر وأنثى) في معظم الكائنات الحية، بالإضافة إلى وجود زمر دم مختلفة عند البشر.

كما يمكن ملاحظة مفهوم تعدد الأشكال في الحيوانات مثل حيوان اليغور، الذي يملك أكثر من سمة واحدة من حيث لون بشرته، فهناك يغور لديه بقع داكنة طاغية، وآخر لديه بقع صفراء طاغية، بالتالي يوجد تعدد أشكال بالنسبة للون بشرة هذا الحيوان.

وعادة ما يُحافظ على تعدد الأشكال المستمرة على مدى عدة أجيال، لأنه لا يوجد شكل واحد يمتلك ميزة شاملة أو عيبًا طاغيًا على الآخرين من حيث الانتخاب الطبيعي، كما يوجد بعض الأشكال المتعددة التي لا تملك مظهرًا مرئيًا، بل تتطلب وجود تقنيات كيميائية حيوية للمساعدة في تحديد الاختلافات التي تحدث بين الكروموسومات والبروتينات في الحمض النووي.

كما يوجد مفهوم تعدد الأشكال في علم الحاسوب باعتباره أحد السمات الموجودة في البرمجة غرضية التوجه (OOP)، التي تسمح لإجرائية معينة أن تستخدم أنواعًا مختلفةً من المتغيرات في أوقات مختلة، إذًا يعبر هذا المصطلح عن قدرة اللغة البرمجية على تقديم نفس الواجهة لأنواع مختلفة من البيانات الأساسية. كما يوجد طرق عدة لحل المشاكل في علم الحاسب باستخدام مفهوم تعدد الأشكال، حيث يمكن استخدامه في إعادة تعريف أساليب مشتقة باعتماد مبدأ الوراثة.

تعدد الأشكال

فعلى سبيل المثال قمنا بكتابة تعليمات برمجية تعرف صف شكل هندسي بشكل عام متضمنة دوالًا لحساب كل من المحيط والمساحة، هنا سنقف أمام مشكلة تتجلى في أن البارامترات اللازمة لحساب مساحة الدائرة مثلًا تختلف عن البارامترات اللازمة لحساب مساحة المستطيل، حيث تحتاج الدائرة إلى نصف قطر، بينما يحتاج المستطيل لطول وعرض.

لحل هذه المشكلة نلجأ إلى تعدد الأشكال، حيث يمكن تعريف صفوف مشتقة من صف الشكل خاصةً بكل من الدائرة والمستطيل على حدا، ويكون لكل منها دوال خاصة لحساب المحيط والمساحة، إذًا سوف تحتاج كل دالة بارامترات مختلفة، متمثلة بالطول والعرض بالنسبة للمستطيل، ونصف القطر بالنسبة لدائرة.

فعند استدعاء الدالة الخاصة بالدائرة يجب تمرير بارامتر واحد، في حين نمرر بارامتين عند استدعاء الدوال الخاصة بالمستطيل، ويعرف هذا النوع من تعدد الأشكال الثابت بالتحميل الزائد.

أكمل القراءة

هل لديك إجابة على "ما معنى تعدد الأشكال polymorphism"؟