Presentation is loading. Please wait.

Presentation is loading. Please wait.

אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 4 LSP.

Similar presentations


Presentation on theme: "אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 4 LSP."— Presentation transcript:

1 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 4 LSP

2 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 2 Liskov Substitution Principle (LSP) עקרון ההחלפה של ליסקוב קליינט המשתמש ב-pointer או ב-reference למחלקת בסיס, לא צריך לדעת לאיזה תת- מחלקה האובייקט שייך ההתנהגות של הבנים צריכה להיות דומה לשל האבא

3 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 3 דוגמא ל-LSP מלבן וריבוע

4 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 4 מלבן וריבוע - UML

5 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 5 מלבן וריבוע – קוד (1) class Rectangle { public: virtual void setWidth(double aWidth) {width= aWidth;} virtual void setHeight(double aHeight){height=aHeight;} double getHeight() const {return height;} double getWidth() const {return width;} private: double height; double width; };

6 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 6 מרובע וריבוע – קוד (2) class Square : Rectangle { public: void setWidth(double aWidth) { Rectangle::setWidth(aWidth); Rectangle::SetHeight(aWidth); } void setHeight(double aHeight) { Rectangle::setWidth(aHeight); Rectangle::SetHeight(aHeight); } };

7 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 7 הבעיה: מה מצפה הקליינט שיקרה בקריאה לפונקציה הבאה עם אובייקט Square? void g(Rectangle& r) { r.setWidth(5); r.setHeight(4); assert(r.GetWidth()*r.GetHeight() ==20); }

8 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 8 פתרון הבעיה על-פי LSP

9 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 9 דוגמא ל-LSP Set

10 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 10 Bounded and Unbounded Set

11 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 11 Bounded and Unbounded Set template class Set { public: virtual void add(const T&)=0; virtual void delete_(const T&)=0; virtual bool isMember(const T&) const=0; }; template void printSet(const Set & s) { for (iterator i(s); i; i++) cout << (*i) << endl; }

12 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 12 Bounded, Unbounded, Persistent Set

13 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 13 Persistent Set template void PersistentSet::add(const T& t) { // throw bad_cast PersistentObject& p = dynamic_cast (t); itsThirdPartyPersistentSet->add(p); }

14 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 14 Bounded, Unbounded, Persistent Set Liskov Compliant

15 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 15 Bounded, Unbounded, Persistent Set Liskov Compliant

16 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 16 שינויים מותרים ואסורים ב- State Chart של מחלקה יורשת (בעקבות LSP) מותר להוסיף מצבים ומעברים. מותר לשנות את הפעילות במעברים. אסור לשנות או לבטל יציאה ממצב, אך מותר לשנות את היעד. מותר להוסיף 'מצבי-אח' ו'מצבי-בנים', אך לא לשנות או להוסיף 'מצבי-אב'.

17 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 17 דוגמא ל-State-Chart


Download ppt "אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 4 LSP."

Similar presentations


Ads by Google