Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

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

2 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 2 Dependency Inversion Principle (DIP) עיקרון שינוי(היפוך) תלות מודול בשכבה מסויימת לא יהיה תלוי ישירות בשכבה נמוכה יותר, התלות בניהם תהיה באמצעות הפשטה.

3 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 3 הגדרות לתיכון גרוע The TNTWI-WHDI Criterion -“Why’d you do it that way?” “That’s not the way I would have done it” Rigidity - קשיחות. שינוי במקום מסויים ישפיע על יותר מדי מקומות נוספים. Fragility - שבירות. שינוי במקום מסויים יגרום לליקויים במקומות בלתי צפויים. Immobility – אי-ניידות. קשה להעביר מיישום מסויים ליישום אחר בגלל שהוא 'תפור' עבור היישום הראשון.

4 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 4 דוגמא: copy ייצוג ב Structure Chartשל תוכנית פרוצדואלית בלי DIP outputDevice c copy read Keyboard write Printer c

5 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 5 outputDevice דוגמא: copy מימוש בלי DIP //The Copy Program void copy() { int c; while ((c = readKeyboard()) != EOF) writePrinter(c); } // The “Enhanced” Copy Program enum outputDevice {PRINTER, DISK}; void copy(outputDevice dev) { int c; while ((c = readKeyboard()) != EOF) if (dev == PRINTER) writePrinter(c); else writeDisk(c); } // Copy using stdio.h #include #include Copy.h void copy() { int c; while((c = getchar()) != EOF) putchar(c); } c copy read Keyboard write Printer c

6 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 6 דוגמא: copy ייצוג ב OMDשל תוכנית מונחית עצמים (לפני השימוש ב –DIP )

7 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 7 דוגמא: copy (OMD לאחר השימוש בDIP )

8 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 8 דוגמא: copy (תוכנית לאחר השימוש בDIP ) // The OO Copy Program class IReader { public: virtual int read() = 0; }; class IWriter { public: virtual void write(char) = 0; }; class Copier { public: void copy() { int c while((c=itsIReader->read()) != EOF) itsIWriter->write(c); } };

9 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 9 ארכיטקטורה בשכבות " מבנה טוב של ארכיטקטורת תוכנה הוא : ארכיטקטורה שכבתית כאשר כל שכבה מספקת קבוצה קוהרנטית של שירותים ( על ידי ממשקים מוגדרים היטב )" [Grady Booch, Object Solutions, Addison Wesley, 1996, p. 54.]

10 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 10 ארכיטקטורה שכבתית Package Structure

11 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 11 ארכיטקטורה שכבתית בלי DIP Class Structure

12 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 12 ארכיטקטורה שכבתית עם DIP

13 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 13 Collaboration Diagram OMD לפני השימוש ב-DIP דוגמא : ' כפתור ונורה '

14 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 14 דוגמא : ' כפתור ונורה ' מימוש לפני השימוש ב -DIP //file “Button.h” #ifndef Button_H #define Button_H class Lamp; class Button { public : Button (Lamp& l); void detect(); bool getPhysicalState(); protected: Lamp * itsLamp; }; #endif // file Button.cpp --------------- #include “Button.h” #include “Lamp.h” void Button:: detect() { bool isButtonOn = getPhysicalState(); if (isButtonOn) itsLamp->turnOn(); else itsLamp->turnOff(); }; // file Lamp.h #ifndef Lamp_H #define Lamp_H class Lamp { public: void turnOn(); void turnOff(); }; #endif

15 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 15 דוגמא : ' כפתור ונורה ' OMD עם השימוש ב -DIP

16 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 16 // file Button.cpp #include “Button.h” #include “IButtonServer.h” Button::Button(IButtonServer& ButtonServer): itsIButtonServer ((ButtonServer *) & aButtonServer){ } void Button:detect() { bool isButtonOn = tState() if (isButtonOn) itsIButtonServer->turnOn(); else itsIButtonServer->turnOff(); } דוגמא : ' כפתור ונורה ' מימוש עם השימוש ב -DIP // file: IButtonServer.h #ifndef IButtonServer_H #define IButtonServer_H class IButtonServer { public: virtual void turnOn() = 0; virtual void turnOff() = 0; }; #endif // file Button.h #ifndef IButtonH #define IButtonH class IButtonServer; class Button { public: Button(IButtonServer& aButtonServer); void detect(); virtual bool getState() = 0; protected: IButtonServer * itsIButtonServer; }; #endif

17 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 17 //File Lamp.h #ifndef Lamp_H #define Lamp_H #include “IButtonServer.h” class Lamp : public IButtonServer { public: virtual void turnOn(); virtual void turnOff(); }; #endif // File ButtonImplement.h #ifndef ButtonImplement_H #define ButtonImplement_H #include “Button.h” class ButtonImplement : public Button { public: ButtonImplementation (IButtonServer& aButtonServer) virtual bool getState(); }; #endif // File ButtonImplement.cpp #include “ButtonImplement.h” ButtonImplement::ButtonImplement (IButtonServer& aButtonServer) : Button ((ButtonServer *) &aButtonServer) {} דוגמא : ' כפתור ונורה ' מימוש עם השימוש ב -DIP ( המשך )

18 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 18 תרשים OMD עם object adapter נדרש כאשר יש תוכנת צד שלישי שאינה תומכת בממשק של ה Server

19 אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 19 //File LampAdapter.h #ifndef LampAdapter_H #define LampAdapter_H #include “IButtonServer.h” class Lamp; class LampAdapter : public IButtonServer { public: LampAdapter (Lamp & aLamp); virtual void turnOn(); virtual void turnOff(); Lamp * itsLamp; }; #endif //File LampAdapter.cpp #include “LampAdapter.h” #include “Lamp.h” LampAdapter::LampAdapter (Lamp & aLamp) : itsLamp( & aLamp) {} LampAdapter::turnOn() {itsLamp->on();} LampAdapter::turnOff() {itsLamp->off();} //File Lamp.h #ifndef Lamp_H #define Lamp_H #include “LampAdapter.h” class Lamp { public: Lamp (); virtual void on(); virtual void off(); }; #endif //File Lamp.cpp #include “Lamp.h” Lamp::Lamp () { new LampAdapter( *this); } מימוש עם adapter


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

Similar presentations


Ads by Google