תכנות מונחה עצמים (OOP) - הורשה - גישה למרכיבי מחלקת הבסיס

סגור באמצעות טופס זה תוכלו לספר ולהמליץ לחבריכם..
שם השולח:
כתובת דוא"ל של השולח:
שם המקבל:
שלח לכתובת דוא"ל:
הוסף הערה:
מאמר הדן בתחביר בסיסי של הורשה בשפת #C ובגישה למרכיבי מחלקת הבסיס.

גישה למרכיבי מחלקת הבסיס
 
מאת: ארז קלר

imgSmallהורדת דוגמאות קוד

מחלקה יורשת יכולה לגשת לכל הרכיבים הציבוריים של מחלקת הבסיס שלה, כמו כל מחלקה אחרת.
החלקים הפרטיים של מחלקת הבסיס חסומים גם בפני המחלקה הנגזרת, כמו בפני כל מחלקה אחרת.
בדוגמה הקודמת המחלקה Derived יכולה הייתה לגשת ולהשתמש במתודות PrintBase ובמאפיין BaseNum הציבוריים אולם היא מנועה מלגשת לתכונה m_BaseNum של מחלקת הבסיס בגלל היותה מוגדרת כפרטית.
כאשר מדובר על הרשאות גישה למתודות ותכונות אין למחלקה הנגזרת אין שום פריבילגיה על מחלקות אחרות.
המחלקה הנגזרת יכולה לגשת למחלקת הבסיס שלה בצורה ישירה או באמצעות השימוש במילה השמורה base .
את המחלקה הנגזרת בדוגמה הקודמת (InheritanceSample01) ניתן היה לכתוב כך:
 1  : class Derived : Base 
 2  : { 
 3  :     private int derivedNum; 
 4  :     public Derived() 
 5  :     { 
 6  :         derivedNum = 1; 
 7  :     } 
 8  :     public Derived(int num1, int num2) 
 9  :     { 
 10 :         base.BaseNum = num1; 
 11 :         derivedNum = num2; 
 12 :     } 
 13 :     public void PrintDerived() 
 14 :     { 
 15 :         base.PrintBase(); 
 16 :         Console.WriteLine(derivedNum); 
 17 :     } 
 18 : } 
בשורה 10 ובשורה 15 מודגם השימוש במילה השמורה base.

ניתן לומר שממשק המחלקה הנגזרת (רכיבי המחלקה הציבוריים הנגישים מחוץ למחלקה) כוללים את כל החלקים הציבוריים של מחלקת הבסיס בצירוף החלקים הציבוריים של המחלקה הנגזרת.
כלל זה מדגיש עובדה חשובה - המתכנת אשר משתמש במחלקה יכול להתעלם מהעובדה שהיא יורשת מחלקה אחרת (שגם היא, בתורה, יכולה לרשת מחלקה וכו'). המחלקה מהווה מעין "קופסא שחורה" אשר מציעה פעילויות למשתמש בה, מבלי שהוא ייאלץ להתעמק במבנה הפנימי שלה.
 
 
רשימת אתחול (Init List)
סדר הבנייה של האובייקט הוא מהבסיס לנגזרת, דהיינו, מחלקת הבסיס נוצרת קודם ורק לאחר מכן נוצרת המחלקה הנגזרת. ולכן, כאשר נוצר אובייקט מהמחלקה הנגזרת, מופעל ה- ctor של המחלקה הנגזרת, אשר מפעיל את ה- ctor של המחלקה הבסיסית.
כברירת מחדל הבנאי של המחלקה הנגזרת מפעיל את בנאי ברירת המחדל של מחלקת הבסיס.
ניתן לראות זאת מהפלט של תוכנית הדוגמה הבאה (InheritanceSample02):
 1  : class Base 
 2  : { 
 3  :     public Base() 
 4  :     { 
 5  :         Console.WriteLine("Base Ctor"); 
 6  :     } 
 7  : } 
 8  : class Derived : Base 
 9  : { 
 10 :     public Derived() 
 11 :     { 
 12 :         Console.WriteLine("Derived Ctor"); 
 13 :     } 
 14 : } 
 15 : class Program 
 16 : { 
 17 :     static void Main(string[] args) 
 18 :     { 
 19 :         Derived d = new Derived(); 
 20 :     } 
 21 : } 


פלט:
פלט תוכנית הדוגמה InheritanceSample02

מהפלט ניתן להבחין בבירור שבנאי מחלקת הבסיס הורץ לפני שהבנאי של המחלקה הנגזרת נכנס לפעולה.

 



כל הזכויות שמורות למחבר ©