Menu
Coddy logo textTech

ירושה בסיסית

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 36 מתוך 110.

ירושה מאפשרת למחלקה לרכוש את המאפיינים והמתודות של מחלקה אחרת. במקום לכתוב מחדש את אותו קוד, יוצרים מחלקה חדשה שנבנית על בסיס מחלקה קיימת. המחלקה המקורית נקראת מחלקת־האב (או מחלקת־על), והמחלקה החדשה היא מחלקת־הבת (או תת־מחלקה).

ב-Dart, משתמשים במילת המפתח extends כדי לרשת ממחלקת אב:

class Animal {
  String name;
  
  Animal(this.name);
  
  void eat() {
    print('$name is eating');
  }
}

class Dog extends Animal {
  Dog(String name) : super(name);
  
  void bark() {
    print('$name says woof!');
  }
}

void main() {
  var dog = Dog('Buddy');
  dog.eat();   // עבר בירושה מ-Animal
  dog.bark();  // מוגדר ב-Dog
}

למחלקה Dog יש גישה אוטומטית למאפיין name ולמתודה eat() מתוך Animal, בנוסף למתודה משלה bark(). כך נוצר קשר מסוג "הוא-סוג-של" — כלב הוא בעל חיים.

מחלקת הבת יכולה להוסיף מאפיינים ומתודות חדשים, אך היא יורשת את כל מה שציבורי ממחלקת האב. שים לב שחברים פרטיים (אלה שמתחילים ב־_) אינם נגישים ישירות במחלקות יורשות מספריות שונות, אף שהם עדיין קיימים באובייקט שעבר בירושה.

challenge icon

אתגר

קל

בואו נבנה מערכת כלי רכב שמדגימה כיצד ירושה מאפשרת למחלקות צאצא לעשות שימוש חוזר בפונקציונליות של מחלקת האב ולהרחיב אותה. תיצרו מחלקת אב לכלי רכב כלליים ומחלקת צאצא לסוג מסוים של כלי רכב.

תארגנו את הקוד שלכם בשני קבצים:

  • vehicle.dart: הגדירו כאן את המחלקות שלכם:
    • מחלקת Vehicle (מחלקת האב) עם מאפיין String brand, בנאי שמקבל את המותג, ומתודה start() שמדפיסה [brand] engine starting...
    • מחלקת Motorcycle שיורשת מ־Vehicle. צריך להיות לה מאפיין נוסף int cc (נפח המנוע), בנאי שמקבל גם את המותג וגם את cc (ומעביר את המותג למחלקת האב באמצעות super), ומתודה משלה wheelie() שמדפיסה [brand] is doing a wheelie!
  • main.dart: ייבאו את קובץ כלי הרכב שלכם והדגימו ירושה בפעולה:
    • צרו Vehicle עם המותג 'Toyota'
    • קראו למתודה start() שלו
    • צרו Motorcycle עם המותג 'Harley' ועם cc בערך 1200
    • קראו למתודה start() של האופנוע (שעוברת בירושה מ־Vehicle)
    • קראו למתודה wheelie() של האופנוע (שמוגדרת ב־Motorcycle)
    • הדפיסו Motorcycle engine: [cc]cc כדי להציג את המאפיין הייחודי של מחלקת הצאצא

שימו לב איך מחלקת Motorcycle מקבלת אוטומטית גישה למאפיין brand ולמתודה start() מתוך Vehicle, ובמקביל יש לה מאפיין ייחודי משלה cc ומתודה משלה wheelie(). זהו כוחה של הירושה — בנייה על גבי קוד קיים.

הפלט הצפוי:

Toyota engine starting...
Harley engine starting...
Harley is doing a wheelie!
Motorcycle engine: 1200cc

נסו בעצמכם

import 'vehicle.dart';

void main() {
  // TODO: צרו Vehicle עם המותג 'Toyota'
  
  // TODO: קראו למתודה start() של כלי הרכב
  
  // TODO: צרו Motorcycle עם המותג 'Harley' ו-cc 1200
  
  // TODO: קראו למתודה start() של האופנוע (עברה בירושה מ-Vehicle)
  
  // TODO: קראו למתודה wheelie() של האופנוע
  
  // TODO: הדפיסו 'Motorcycle engine: [cc]cc' באמצעות המאפיין cc של האופנוע
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Dart אונליין