3.3.2.3. The 3 Level System

במודל 3 רמות מחלקה הינה גם עצם. קיימת מחלקה class שהיא meta class – משמשת לתיאור ויצירת מחלקות. כל המחלקות הינן עצמים מסוג class.

במודל 3 רמות ניתן לתת פקודה למחלקה class כדי שתיצור מחלקה חדשה (במודל 2 רמות לא ניתן לעשות זאת).



למבנה 3 רמות יש חסרון שלא קיים ב-2 רמות: static functions, static members לא משתלבים במודל זה. אם מחלקה צריכה להכיל פונקציה סטטית, עובדה זו צריכה להופיע בתיאור המחלקה, אולם המחלקה class לא יכולה לתאר אבחנה זו כי היא אחראית לתאר את כל המחלקות (נשים לב שכל מחלקה היא instance של המחלקה class, ולא מחלקה נורשת ממנה!). במחלקה class מופיע מה צריך להיות בכל מחלקה.

במודל 3 רמות:

  • המחלקה Class נורשת מהמחלקה Object. המחלקה Class היא instance של עצמה.
  • המחלקה Object היא instance של המחלקה Class, והיא איננה נורשת מאף מחלקה.
  • כל מחלקה (שאינה נורשת ממחלקה אחרת), למשל MyClass, נורשת מהמחלקה Object והיא instance של המחלקה Class.
  • אובייקטים הינם instance של המחלקות המתאימות להם.

מאת: ניצן

Borland style vptr

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