Menu
Coddy logo textTech

המגבלות של ירושה עמוקה

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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 כדי להפוך את הרובוט לפונקציונלי. כרגע הרובוט בנוי, אבל הוא לא יכול לעשות כלום.

מה צריך לעשות בתוך <strong>Robot.js</strong>:

  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 אונליין