Menu
CoddyTech

حدود الوراثة العميقة

جزء من قسم البرمجة كائنية التوجه في رحلة JavaScript على Coddy. الدرس 48 من 56.

مع أن الوراثة مفيدة، فإن إنشاء تسلسلات هرمية عميقة جدًا من الوراثة (أب → ابن → حفيد → ابن الحفيد) قد يؤدي إلى مشكلات. كلما طال التسلسل، أصبح فهم الشيفرة وصيانتها وتعديلها أصعب.

لنرَ ما يحدث مع سلسلة وراثة عميقة:

// الفئة الأساسية
class Vehicle {
  constructor(type) {
    this.type = type;
    this.isRunning = false;
  }
  
  start() {
    this.isRunning = true;
    console.log(`${this.type} started`);
  }
}

// المستوى الأول من الوراثة
class Car extends Vehicle {
  constructor(make, model) {
    super("Car");
    this.make = make;
    this.model = model;
    this.wheels = 4;
  }
  
  honk() {
    console.log("Beep beep!");
  }
}

// المستوى الثاني من الوراثة
class SportsCar extends Car {
  constructor(make, model, topSpeed) {
    super(make, model);
    this.topSpeed = topSpeed;
  }
  
  race() {
    this.start();
    console.log(`Racing at ${this.topSpeed} mph!`);
  }
}

في هذا المثال، يقع SportsCar على عمق مستويين في التسلسل الوراثي. قد يؤدي هذا إلى عدة مشكلات:

  1. قد تؤدي التغييرات على Vehicle إلى تعطيل SportsCar بشكل غير متوقع
  1. كلما ازداد تسلسل الوراثة، أصبح من الأصعب تتبّع مصدر الأساليب والخصائص
  1. تُجبر على الدخول في علاقات «هو-نوع من» قد لا تكون مرنة بما يكفي
challenge icon

التحدي

أكمل ملف Robot.js لجعل الروبوت يعمل. الروبوت مُنشأ حاليًا، لكنه لا يستطيع فعل أي شيء.

ما يجب فعله في Robot.js:

  1. أنشئ مكوّني المتحدث والمحرّك داخل مُنشئ Robot
  2. استخدم المكوّنين في الأساليب:
    1. في greet(): استدعِ this.speaker.speak("Hello!");
    2. في walkForward(): استدعِ this.mover.move("forward");

لماذا نفعل ذلك: هذا هو التركيب — يُبنى الروبوت بدمج مكوّنات أصغر. فالروبوت لديه متحدث (للتحدث) ولديه محرّك (للحركة)، بدلًا من أن يرث هاتين القدرتين.

جرّب بنفسك

import { Robot } from './Robot.js';

const myRobot = new Robot('Robo');

myRobot.greet();     // يجب أن يُخرج: Saying: "Hello!"
myRobot.walkForward(); // يجب أن يُخرج: Moving forward
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم JavaScript عبر الإنترنت