Download presentation
Presentation is loading. Please wait.
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.