CodeGym /مدونة جافا /Random-AR /تعدد الأشكال في جاوة
John Squirrels
مستوى
San Francisco

تعدد الأشكال في جاوة

نشرت في المجموعة
أهلاً! نختتم اليوم سلسلة دروس حول مبادئ OOP. في هذا الدرس، سنتحدث عن تعدد أشكال جافا. تعدد الأشكال هو القدرة على العمل مع عدة أنواع كما لو كانت من نفس النوع. علاوة على ذلك، فإن سلوك الأشياء سيكون مختلفًا اعتمادًا على نوعها. دعونا نلقي نظرة فاحصة على هذا البيان. لنبدأ بالجزء الأول: "القدرة على العمل مع عدة أنواع كما لو كانت نفس النوع". كيف يمكن أن تكون الأنواع المختلفة هي نفسها؟ يبدو الأمر غريبًا بعض الشيء :/ كيفية استخدام تعدد الأشكال - 1في الواقع، الأمر كله بسيط جدًا. على سبيل المثال، ينشأ هذا الموقف أثناء الاستخدام العادي للميراث. دعونا نرى كيف يعمل ذلك. لنفترض أن لدينا فئة رئيسية بسيطة من Cat مع طريقة run() واحدة :

public class Cat {

   public void run() {
       System.out.println("Run!");
   }
}
الآن سنقوم بإنشاء ثلاث فئات ترث القط : الأسد والنمر والفهد .

public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Lion runs at 80 km/h");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Tiger runs at 60 km/h");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Cheetah runs at up to 120 km/h");
   }
}
لذلك لدينا 3 فصول. دعونا نمثل الموقف حيث يمكننا العمل معهم كما لو كانوا من نفس الفصل. تخيل أن إحدى قططنا مريضة وتحتاج إلى مساعدة من الدكتور دوليتل. دعونا نحاول إنشاء فئة دوليتل التي يمكنها شفاء الأسود والنمور والفهود.

public class Dolittle {

   public void healLion(Lion lion) {

       System.out.println("Lion is healthy!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Tiger is healthy!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Cheetah is healthy!");
   }
}
يبدو أن المشكلة قد تم حلها: الفصل مكتوب وجاهز للانطلاق. ولكن ماذا سنفعل إذا أردنا تمديد برنامجنا؟ لدينا حاليًا 3 أنواع فقط: الأسود والنمور والفهود. ولكن هناك أكثر من 40 نوعا من القطط في العالم. تخيل ماذا سيحدث إذا أضفنا فئات منفصلة للمانول، والجاغوار، وماين كونز، والقطط المنزلية، وكل البقية. كيفية استخدام تعدد الأشكال - 2سيعمل البرنامج نفسه بالطبع، لكن يتعين علينا إضافة أساليب جديدة باستمرار إلى فئة Dolittle لعلاج كل نوع من أنواع القطط. ونتيجة لذلك، سوف تنمو إلى أحجام غير مسبوقة. هذا هو المكان الذي يأتي فيه تعدد الأشكال - "القدرة على العمل مع عدة أنواع كما لو كانت من نفس النوع" -. لسنا بحاجة إلى إنشاء طرق لا حصر لها لفعل الشيء نفسه - شفاء قطة. طريقة واحدة تكفي للجميع:

public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
   }
}
يمكن للتابع HealCat()‎ قبول كائنات Lion و Tiger و Cheetah ، فهي جميعها مثيلات لـ Cat :

public class Main {

   public static void main(String[] args) {

       Dolittle dolittle = new Dolittle();

       Lion simba = new Lion();
       Tiger shereKhan = new Tiger();
       Cheetah chester = new Cheetah();

       dolittle.healCat(simba);
       dolittle.healCat(shereKhan);
       dolittle.healCat(chester);
   }
}
إخراج وحدة التحكم: المريض بصحة جيدة! المريض بصحة جيدة! المريض بصحة جيدة! لذا فإن فئة Dolittle الخاصة بنا تعمل مع أنواع مختلفة كما لو كانت من نفس النوع. الآن دعونا نتناول الجزء الثاني: "علاوة على ذلك، فإن سلوك الكائنات سيكون مختلفًا حسب نوعها". كل شيء بسيط جدا. في الطبيعة، كل قطة تجري بطريقة مختلفة. كحد أدنى، فإنها تعمل بسرعات مختلفة. من بين القطط الثلاثة لدينا، الفهد هو الأسرع، في حين أن النمر والأسد يركضان بشكل أبطأ. بمعنى آخر، سلوكهم مختلف. تعدد الأشكال يفعل أكثر من مجرد السماح لنا باستخدام أنواع مختلفة كنوع واحد. كما يتيح لنا أن نتذكر اختلافاتهم، مع الحفاظ على السلوك الخاص بكل منهم. يوضح المثال التالي هذا. لنفترض أن قطتنا، بعد التعافي الناجح، قررت الاستمتاع بالجري قليلاً. سنضيف هذا إلى صفنا Dolittle :

public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
       cat.run();
   }
}
دعونا نحاول تشغيل نفس الكود لعلاج ثلاثة حيوانات:

public static void main(String[] args) {

   Dolittle dolittle = new Dolittle();

   Lion simba = new Lion();
   Tiger shereKhan = new Tiger();
   Cheetah chester = new Cheetah();

   dolittle.healCat(simba);
   dolittle.healCat(shereKhan);
   dolittle.healCat(chester);
}
وهذا ما تبدو عليه النتائج: المريض يتمتع بصحة جيدة! الأسد يركض بسرعة 80 كم/ساعة. المريض بصحة جيدة! يجري النمر بسرعة 60 كم/ساعة. المريض بصحة جيدة! يجري الفهد بسرعة تصل إلى 120 كم/ساعة. هنا نرى بوضوح أن السلوك المحدد للأشياء محفوظ، على الرغم من أننا مررنا الحيوانات الثلاثة إلى الطريقة بعد "تعميمها" على Cat . بسبب تعدد الأشكال، تتذكر جافا جيدًا أن هذه ليست مجرد قطط ثلاثة. هم الأسد والنمر والفهد، وكل منهم يركض بشكل مختلف. وهذا يوضح الميزة الرئيسية لتعدد الأشكال: المرونة. عندما نحتاج إلى تنفيذ بعض الوظائف المشتركة بين العديد من الأنواع، فإن الأسود والنمور والفهود تصبح ببساطة "قططًا". جميع الحيوانات مختلفة، لكن في بعض المواقف تكون القطة قطة، بغض النظر عن نوعها :) إليك بعض التأكيدات بالفيديو لك.
عندما يكون هذا "التعميم" غير مرغوب فيه ونحتاج بدلاً من ذلك إلى أن يتصرف كل نوع بشكل مختلف، فإن كل نوع يقوم بعمله الخاص. بفضل تعدد الأشكال، يمكنك إنشاء واجهة واحدة (مجموعة من الأساليب) لمجموعة واسعة من الفئات. وهذا يجعل البرامج أقل تعقيدا. حتى لو قمنا بتوسيع البرنامج لدعم 40 نوعًا من القطط، فسيظل لدينا أبسط واجهة: طريقة run() واحدة لجميع القطط الأربعين.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION