1 / 17

הנדסת תוכנה עם שפת C++

הנדסת תוכנה עם שפת C++. ד"ר רינה צביאל-גירשין הרצאה 5. מבט על על ההרצאה. הורשה מחלקה נגזרת שימוש בנאי מחלקת האב הרשאת גישה – protected. הורשה. הורשה inheritance היא אחד העקרונות של תכנות מונחה עצמים OOP . הורשה מרשה שימוש מחדש reuse של הקוד שנכתב.

xiang
Download Presentation

הנדסת תוכנה עם שפת C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. הנדסת תוכנהעם שפת C++ ד"ר רינה צביאל-גירשין הרצאה 5

  2. מבט על על ההרצאה • הורשה • מחלקה נגזרת • שימוש בנאי מחלקת האב • הרשאת גישה – protected Dr. Rina Zviel-Girshin

  3. הורשה • הורשהinheritance היא אחד העקרונות של תכנות מונחה עצמים OOP. • הורשה מרשה שימוש מחדש reuse של הקוד שנכתב. • המחלקה החדשה שמייצרים נקראת מחלקה נגזרתderived class . • המחלקה הישנה נקראת מחלקת בסיסbase class. • שמות הנוספים • מחלקת בן – מחלקת אב. Dr. Rina Zviel-Girshin

  4. דוגמה • נניח הגדרנו מחלקה עובד Employee. לכל עובד ישנם מאפיינים מסוימים: • תכונות - מס', שם, גיל, משכורת. • בנאים מתאימים, מתודות set get וכן מתודות נוספות כגון: חשב שכר. • נניח שאנחנו מעוניינים להגדיר מחלקה חדשה – מנהל Manager. למנהל יש: • תכונות - מס', שם, גיל, משכורת, רכב ובונוס. • בנאים מתאימים, מתודות set , get וכן מתודות נוספות כגון: חשב שכר, קביעת בונוס, העלאת שכר, שיפור רכב וכו'. • אם מסתכלים על שתי המחלקות מגלים שהרבה תכונות זהות, הרבה מתודות זהות. • לכן בכתיבה נקבל כפילויות בקוד. • כיצד ניתן למנוע זאת? • הורשה Dr. Rina Zviel-Girshin

  5. דוגמה - המשך • למעשה מנהל הוא עובד. • הוא מקרה פרטי של עובד, יש לו את כל התכונות והמתודות של עובד ועוד תוספת (הרחבה). • יש כאן שתי מחלקות שיש ביניהן קשר של ירושה. הקשר שנקרא is-a • Manager is an Employee • מנהל הוא המחלקה הנגזרת ועובד הוא מחלקת בסיס. Dr. Rina Zviel-Girshin

  6. מחלקה נגזרת • מחלקה נגזרת מקבל בהורשה את כל התכונות ומתודות של מחלקת בסיס • (all public data and methods) • תחביר: class DerivedClassName: <visibility modifier> BasicClassName { // declarations }; • דוגמה: class Manager : public Employee { … }; Dr. Rina Zviel-Girshin

  7. Point ColoredPoint 3DColoredPoint דוגמה • מחלקה נגזרת מרחיבה את מחלקת בסיס. • מחלקה נגזרת עצמה יכולה להיות מחלקת בסיס למחלקה אחרת. • דוגמה: ColoredPointis aPoint with color, 3DColoredPointis aColoredPoint in 3D. Dr. Rina Zviel-Girshin

  8. דוגמה #include ”point.h” class ColoredPoint: public Point { char *color; //int x,y are inherited from Point class public: ColoredPoint(int x, int y, char *color); void setColor(char *newcolor); char* getColor(); // int getX() is inherited from Point class // int getY() is inherited from Point class // void setX(int x) is inherited from Point class // void setY(int y) is inherited from Point class }; //constructor ColoredPoint::ColoredPoint(int x,int y,char *color) :Point(x,y) // call base class constructor { this->color=strdup(color); } char* ColoredPoint::getColor() { return this->color;} void ColoredPoint::setColor(char *newcolor) { strcpy(color,newcolor);} Dr. Rina Zviel-Girshin

  9. גישה לתכונות • מחלקת נגזרת יורשת ממחלקת בסיס את כל תכונותיה וכל יכולותיה. • אפילו פרטיים –private . • אבל לאיברים פרטיים אין גישה. • אז איך מאתחלים אותם? • דרך בנאי מחלקת בסיס • דרך מתודות של מחלקת בסיס Dr. Rina Zviel-Girshin

  10. בנאי • בנאי של מחלקה נגזרת זהה לשם המחלקה. • לעדכון איברי מחלקת בסיס שקיבלנו בירושה ניתן להשתמש בבנאי של מחלקת בסיס. • תחביר קריאה לבנאי האב: :BaseClass(argument_list) • דוגמה: :Point(x,y) // a base class constructor Dr. Rina Zviel-Girshin

  11. קריאה למתודות של מחלקת בסיס class ColoredPoint: public Point { char *color; public: … void update(int x, int y, char *color); }; … void ColoredPoint::update(int x, int y, char *color) { Point::setX(x); //call base class setX method Point::setY(y); //call base class setY method this->color=strdup(color); } • במחלקה נגזרת ניתן להשתמש במתודות מחלקת בסיס. • תחביר: BaseClass::method(argument_list); • דוגמה: • נניח שהוספנו מתודה updateלמחלקהColoredPoint. Dr. Rina Zviel-Girshin

  12. מה לא מקבלים בירושה? • מחלקה נגזרת מקבלת בירושה את כל האיברים של מחלקת בסיס חוץ מ- • בנאי constructor • מחסלdestructor • אותם יש להגדיר מחדש • אופרטור = • חברים friends Dr. Rina Zviel-Girshin

  13. בנאי האב • בבניית עצם ממחלקת בן, באופן אוטומאטי מתבצעת קריאה לבנאי ברירת המחדל של מחלקת האב. • קריאה לבנאי האב מתבצעת בשורה ראשונה של הקוד • בצורה מחייבת BaseClass(argument_list) • או בצורה מרומזת - default constructor(constructor with no arguments) • דוגמה: ColoredPoint::ColoredPoint(int x,int y,char *color) :Point(x,y) // call base class constructor { this->color=strdup(color); } • פעולה זו נקראת שרשור בנאים: • בהפעלת בנאי של הבן, קריאה לבנאי של האב כפעולה ראשונה. Dr. Rina Zviel-Girshin

  14. מחסל • שימוש במחסל הוא בסדר הפוך • קודם כל מחסל מחלקת בן • אחר כך מחסל של מחלקת אב. Dr. Rina Zviel-Girshin

  15. protected • קיימת הרשאת גישה מוגנת protected. • תחביר: • protected: type variableName; • protected: type methodName(arg_list); • למחלקה נגזרת ישנה גישה לאיברים מוגנים של מחלקת בסיס. • ז"א מבחינת מחלקה נגזרת/מחלקות נגזרות הם ציבוריים ומבחינת כל חלק אחר בתוכנית הם פרטיים. • Protected members of the base class can be used by other members of the derived class. Dr. Rina Zviel-Girshin

  16. דוגמה class A { protected: int x; }; class B: public A { int y; public: B(int ax, int by) {x=ax; y=by;} }; Dr. Rina Zviel-Girshin

  17. סיכום המלצה: אם אתם לא יודעים באילו הרשאות גישה לבחור - use protected visibility modifier (keep in mind that your class can be extended later). Dr. Rina Zviel-Girshin

More Related