CodeGym /مدونة جافا /Random-AR /العلاقات بين الطبقات. الوراثة والتكوين والتجمع
John Squirrels
مستوى
San Francisco

العلاقات بين الطبقات. الوراثة والتكوين والتجمع

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

الوراثة في جافا ومزاياها

كما تتذكر بالتأكيد، فإن الوراثة هي آلية تتيح لك وصف فئة جديدة بناءً على فئة موجودة (الفئة الأصلية). ومن خلال القيام بذلك، تستعير الفئة الجديدة خصائص ووظائف الفئة الأصلية. لنتذكر مثالاً على الميراث ورد في الدروس السابقة:
public class Car {

   private String model;
   private int maxSpeed;
   private int yearOfManufacture;

   public Car(String model, int maxSpeed, int yearOfManufacture) {
       this.model = model;
       this.maxSpeed = maxSpeed;
       this.yearOfManufacture = yearOfManufacture;
   }


public void gas() {
       // Gas
   }

   	public void brake() {
       // Brake
   }
}


public class Truck extends Car {

   public Truck(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}



public class Sedan extends Car {
   public Sedan(String model, int maxSpeed, int yearOfManufacture) {
       super(model, maxSpeed, yearOfManufacture);
   }
}
لدينا برنامج معين يتضمن العمل مع أنواع مختلفة من السيارات. حتى لو لم تكن من عشاق السيارات، فمن المحتمل أنك تعلم أن هناك عددًا كبيرًا من أنواع السيارات في العالم. :) وبناء على ذلك، سنقوم بفصل الخصائص المشتركة للسيارات إلى فئة رئيسية مشتركة تسمى Car. إذن ما هو القاسم المشترك بين جميع السيارات بغض النظر عن نوعها؟ كل سيارة لها سنة الصنع واسم الموديل والسرعة القصوى. نضع هذه الخصائص في الحقول modelو maxSpeedو و yearOfManufacture. أما بالنسبة للسلوك، فيمكن لأي سيارة أن تتسارع وتبطئ. :) نحدد هذا السلوك في gas()الأساليب brake(). ما هي الفوائد التي يقدمها لنا هذا؟ بادئ ذي بدء، فهو يقلل من كمية التعليمات البرمجية. بالطبع، يمكننا الاستغناء عن الفصل الأصلي. ولكن بما أن كل سيارة يجب أن تكون قادرة على التسارع والإبطاء، فسيتعين علينا إنشاء gas()طرق brake()في فئات Truckو Sedanو F1Carو SportsCarو وفي كل فئة سيارات أخرى. تخيل مقدار الكود الإضافي الذي يتعين علينا كتابته. ولا تنس الحقول و و : إذا تخلصنا من الفئة الأصلية، فسيتعين علينا إنشاؤها في كل فئة سيارة model! عندما يكون لدينا بضع عشرات من فئات السيارات، يصبح مقدار الكود المكرر خطيرًا حقًا. يتيح لنا نقل الحقول والأساليب الشائعة (وتسمى أيضًا "الحالات" و"السلوكيات") إلى الفصل الأصلي توفير الكثير من الوقت والمساحة. إذا كان لدى بعض الأنواع خصائص أو أساليب فريدة لا تمتلكها أنواع السيارات الأخرى، فلا مشكلة كبيرة. يمكنك دائمًا إنشائها في فئة فرعية، منفصلة عن أي شخص آخر. maxSpeedyearOfManufactureالعلاقات بين الطبقات.  الوراثة والتركيب والتجمع - 2
public class F1Car extends Car {

   public void pitStop() {

       // Only race cars make pit stops
   }

   public static void main(String[] args) {

       F1Car formula1Car = new F1Car();
       formula1Car.gas();
       formula1Car.pitStop();
       formula1Car.brake();
   }
}
دعونا نلقي نظرة على سيارات سباق الفورمولا 1 كمثال. على عكس "أقاربهم"، لديهم سلوك فريد من نوعه - فهم يتوقفون من وقت لآخر. هذا لا يزعجنا. لقد وصفنا بالفعل السلوك الشائع في Carالفئة الأصل، ويمكن إضافة السلوك المحدد للفئات التابعة إلى تلك الفئات. العلاقات بين الطبقات.  3- الوراثة والتركيب والجمعوينطبق الشيء نفسه على الحقول: إذا كان الفصل الفرعي له خصائص فريدة، فإننا نعلن بهدوء عن هذه الحقول داخل الفصل الفرعي ونتوقف عن القلق. :) القدرة على إعادة استخدام الكود هي الميزة الرئيسية للميراث. بالنسبة للمبرمجين، من المهم جدًا عدم كتابة تعليمات برمجية إضافية. سوف تصادف هذا مرارا وتكرارا في عملك. يرجى تذكر شيء آخر مهم: لا تحتوي Java على وراثة متعددة . كل فئة ترث فئة واحدة فقط. سنتحدث أكثر عن أسباب ذلك في الدروس القادمة. في الوقت الراهن، فقط تذكر ذلك. بالمناسبة، هذا يجعل Java مختلفة عن بعض لغات OOP الأخرى. على سبيل المثال، يدعم C++ الوراثة المتعددة. كل شيء أكثر أو أقل وضوحا مع الميراث. هيا لنذهب.

التكوين والتجميع

يمكن ربط الفئات والكائنات معًا. يصف الميراث علاقة "is-a". الأسد حيوان. يتم التعبير عن هذه العلاقة بسهولة باستخدام الميراث، حيث Animalالطبقة الأم والطفل Lion. ومع ذلك، لا يتم وصف جميع العلاقات بهذه الطريقة. على سبيل المثال، من المؤكد أن لوحة المفاتيح مرتبطة بالكمبيوتر، ولكنها ليست كمبيوتر . ترتبط الأيدي بطريقة أو بأخرى بالشخص، لكنها ليست شخصا. في هذه الحالات، لدينا نوع آخر من العلاقة: ليس "is-a"، ولكن "has-a". اليد ليست شخصًا، ولكنها جزء من الشخص. لوحة المفاتيح ليست جهاز كمبيوتر، ولكنها جزء من جهاز كمبيوتر. يمكن وصف العلاقة " لديها" في التعليمات البرمجية باستخدام التركيب والتجميع . الفرق يكمن في "صرامة" العلاقة. دعونا نعطي مثالا بسيطا: لدينا فصل دراسي. كل سيارة لديها محرك. بالإضافة إلى ذلك، كل سيارة لديها الركاب. ما هو الفرق الأساسي بين و الحقول؟ حقيقة أن الراكب يجلس في السيارة لا يعني أن الركاب ليسوا في السيارة. يمكن للسيارة أن تتسع لعدة ركاب. علاوة على ذلك، إذا خرج جميع الركاب من السيارة، فستظل تعمل بسلاسة. العلاقة بين الفصل والمصفوفة أقل صرامة. ويسمى التجميع . ويقدم مثالا جيدا آخر للتجميع. لنفترض أن لدينا فئة وفئة . يمكن للطالب الانضمام إلى العديد من المنظمات الطلابية: نادي الفيزياء، ونادي معجبي حرب النجوم، و/أو نادي الكوميديا ​​الطلابي. التكوين هو نوع أكثر صرامة من العلاقة. عند استخدام التركيب، يكون الكائن جزءًا من كائن ما ولا يمكن أن ينتمي إلى كائن آخر من نفس النوع. أبسط مثال هو محرك السيارة. المحرك جزء من السيارة ولا يمكن أن يكون جزءًا من سيارة أخرى. كما ترون، العلاقة بينهما أكثر صرامة من العلاقة بين و . CarEngine enginePassenger[] passengersABCCarPassenger[] passengersStudentStudentGroupCarPassengersالعلاقات بين الطبقات.  4- الوراثة والتركيب والجمع
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION