4.2.4. סוגים ותכנות מונחה עצמים

טיפוס ומחלקה אינם תמיד מושג זהה. בשפת LST טיפוס ומחלקה הינם מונחים שקולים.

בשפת C++ לעומת זאת מחלקה היא אלמנט הרבה יותר חזק – מטיפוס בשפת C++ לא ניתן לרשת.

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

למשל, חריגה ב-int לא מתבטאת ב-C (חלוקה ב-0 לעומת זו כן).

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



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

ל-strict inheritance יש חסרון אחד מרכזי, והוא שאי אפשר לעשות באמצעותו הרבה – מכיוון שלא ניתן לשנות את התנהגות האב. לפיכך, נציג מיד סוגי הורשה נוספים.

מאת: ניצן

Borland style vptr

לפי מה שאני מכיר:
"חסרון בגישה זו: גם כאשר איננו משתמשים ב-dynamic binding – אנחנו משלמים במקום"
לא נכון , עבור מחלקה A שאין לה מתודות דינמיות לא יווצר כלל המצביע, ולמשל עבור מחלקה B שיורשת מA פשוט נוסיף בהתחלה את המצביע, ואחרי הבלוק של A את שאר האינפורמציה של B . וככה לא משלמים על מה שלא משתמשים ועקרונות C++ נשמרים.
מה שכן באמת הcasting קצת יותר מסובך....
שיתוף:
| עוד