5.3.2.1. Access Conformance - רמת הגישה של הפונקציה

Access Conformance: כל הגרסאות של הפונקציה צריכות להיות בעלות אותה רמת נגישות (protected/public).

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

נביט בדוגמא הבאה:

class Base

{

public:

      virtual void f(void);

};

class Derived : public Base

{

private:

      void f(void); 

} y, *py = &y;

Base *px = py;

py->f();  // Error! Derived::f is private.

px->f();  // OK! (but breaks encapsulation.)



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

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

אם מקטינים את זכויות הפונקציה, פגענו בתאימות. אם מגדילים את הזכויות (מ-protected ל-public למשל) לא פגענו בתאימות.

מאת: ניצן

Borland style vptr

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