→ חזרה לעמוד הקודם
// סיכום וחומר לימוד

הורשה

מבני נתונים · 899271הורשה

מהי הורשה?

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

למה משתמשים בהורשה?

  1. שימוש חוזר בקוד: מגדירים פעם אחת את המשותף לכמה מחלקות. לדוגמה, שם, גיל ופעולת הליכה יכולים להיות מוגדרים במחלקה Person, במקום להגדיר אותם שוב במחלקות תלמיד, מורה ורופא.
  2. מידול קשר מסוג IS-A: משתמשים בהורשה כשהמחלקה הנגזרת היא סוג של מחלקת הבסיס. לדוגמה, תלמיד הוא סוג של אדם (Student IS-A Person) ומכונית היא סוג של רכב (Car IS-A Vehicle). אפשר להתייחס לעצמים מהמחלקות הנגזרות דרך טיפוס הבסיס המשותף, וזה הבסיס לפולימורפיזם.

ב־C# מחלקה יכולה לרשת ישירות ממחלקת בסיס אחת בלבד.

הרשאות גישה בהורשה

הרשאהבמחלקה המגדירהבמחלקה נגזרתבקוד שאינו חלק מההיררכיה
publicכןכןכן
privateכןלא ישירותלא
protectedכןכןלא

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

פעולות בונות בהורשה

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

קריאה לפעולה הבונה של מחלקת הבסיס בעזרת base

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

בדוגמה, Dog יורשת מ־Animal. בעזרת base(species), הפעולה הבונה של Dog מעבירה את הערך של species לפעולה הבונה של Animal. הפעולה הבונה של Animal שומרת אותו ב־Species, ואחר כך הפעולה הבונה של Dog שומרת את השם ב־Name.

public class Animal
{
    protected string Species;

    public Animal(string species)
    {
        this.Species = species;
    }
}

public class Dog : Animal
{
    private string Name;

    public Dog(string name, string species) : base(species)
    {
        this.Name = name;
    }
}
הורדת הקובץ המקוריPDF · הורשה