Menu
Coddy logo textTech

תחביר ירושה בסיסית (:)

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 19 מתוך 70.

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

ב-C#, משתמשים בסימן הנקודתיים : כדי לציין ירושה:

public class Animal
{
    public string Name { get; set; }
    
    public void Eat()
    {
        Console.WriteLine($"{Name} is eating.");
    }
}

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine($"{Name} says Woof!");
    }
}

המחלקה Dog יורשת את כל מה שיש במחלקה Animal. יש לה גישה למאפיין Name ולמתודה Eat() בלי להצהיר עליהם שוב, והיא גם מוסיפה מתודת Bark() משלה:

Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat();   // פלט: Buddy is eating.
myDog.Bark();  // פלט: Buddy says Woof!

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

challenge icon

אתגר

קל

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

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

  • Vehicle.cs: הגדירו מחלקה בשם Vehicle במרחב השמות Transport. זו תהיה מחלקת הבסיס המשותפת לכל כלי הרכב. היא צריכה לכלול מאפיין Brand (מחרוזת) ומאפיין Year (מספר שלם), וכן מתודה בשם StartEngine() שמדפיסה "{Brand} engine started."
  • Car.cs: הגדירו מחלקה בשם Car במרחב השמות Transport, שיורשת מ-Vehicle. למחלקת המכונית יש מאפיין משלה, NumberOfDoors (מספר שלם), ומתודה בשם Honk() שמדפיסה "{Brand} goes Beep Beep!"
  • Program.cs: בקובץ הראשי שלכם, צרו מופע של Car באמצעות ערכי קלט. הגדירו את המאפיינים שלו (כולל המאפיינים שעברו בירושה), ואז הדגימו שהמכונית יכולה להשתמש גם במתודות שלה וגם במתודות שירשה מ-Vehicle.

תקבלו שלושה ערכי קלט:

  • שם המותג
  • שנה
  • מספר הדלתות

הדפיסו את פרטי המכונית והדגימו את היכולות שלה בפורמט הזה:

Car: {Brand} ({Year})
Doors: {NumberOfDoors}
{StartEngine output}
{Honk output}

לדוגמה, אם ערכי הקלט הם Toyota, 2022 ו-4, הפלט צריך להיות:

Car: Toyota (2022)
Doors: 4
Toyota engine started.
Toyota goes Beep Beep!

שימו לב שה-Car שלכם יכולה לגשת למאפיין Brand ולמתודה StartEngine(), אף על פי שהם מוגדרים במחלקה Vehicle. זהו כוחה של הירושה — המחלקה הנגזרת מקבלת באופן אוטומטי את כל מה שקיים במחלקת הבסיס שלה!

נסו בעצמכם

using System;
using Transport;

class Program
{
    public static void Main(string[] args)
    {
        // קראו את הקלט
        string brand = Console.ReadLine();
        int year = Convert.ToInt32(Console.ReadLine());
        int doors = Convert.ToInt32(Console.ReadLine());
        
        // TODO: צרו מופע של Car
        
        // TODO: הגדירו את המאפיינים של המכונית (Brand, Year, NumberOfDoors)
        
        // TODO: הדפיסו את פרטי המכונית בפורמט הנדרש:
        // מכונית: {Brand} ({Year})
        // דלתות: {NumberOfDoors}
        // לאחר מכן קראו ל־StartEngine() ול־Honk()
    }
}
quiz iconבחנו את עצמכם

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

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

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