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

Slides:



Advertisements
Similar presentations
Object Oriented 33 MCSD DORON AMIR
Advertisements

תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
מבוא למדעי המחשב לתעשייה וניהול
1 Object-Oriented Reengineering © R. Marinescu Lecture 5 Radu Marinescu Principles of Object-Oriented Design.
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
האוניברסיטה העברית בירושלים
Esempio Polimorfismo1 // Definition of abstract base class Shape #ifndef SHAPE_H #define SHAPE_H class Shape { public: virtual double area() const { return.
5/12/2015 All Rights Reserved-Dr. Reuven Gallant Slide I-1 תיכון מערכות תוכנה להנדסה ופיתוח פרויקט אישי Dr. Reuven Gallant Jerusalem College of Technology.
מבוסס על הרצאות של יורם זינגר, האוניברסיטה העברית י"ם
פרויקט ויקיספר מתמטיקה משולבת : עריכת ויקיספר על ידי קבוצת מורים בסביבה מותאמת רוחמה אבן, שי אולשר, גילה אוזרוסו - חגג המחלקה להוראת המדעים, מכון ויצמן.
מתמטיקה בדידה תרגול 3.
אביב תשס " ד פרק שמיני - שקף 1מעגלים אלקטרוניים לינאריים פרק תשיעי : מבוא למעגלים משולבים ותכן מגברי שרת.
Common mistakes Basic Design Principles David Rabinowitz.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 10 Packages.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
שאלות חזרה לבחינה. שאלה דיסקים אופטיים מסוג WORM (write-once-read-many) משמשים חברות לצורך איחסון כמויות גדולות של מידע באופן קבוע ומבלי שניתן לשנותו.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
A. Frank File Organization Indexed-Sequential File Introduction Thanks to Tamar Barnes.
אביב תשס"ה JCTתיכון תוכנה: ד"ר ראובן גלנט1 פרק 8 נקודות חשובות בתרגילים 7-9.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
מצגת פרויקט עקיבה אחרי גוף נע פרויקט סמסטריאלי סטודנטים : וסילי גנקין מראט אקולוב מנחה : אריה נחמני סמסטר אביב תשס " ז.
מסדי נתונים תשס " ג 1 תכנון סכמות – אלגוריתם פירוק לתבניות בצורת BCNF מסדי נתונים.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי Software Design.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 13 Case Study: Weather Station.
Common mistakes Basic Design Principles Amit Shabtay.
מערכות הפעלה ( אביב 2009) חגית עטיה ©1 מערכת קבצים log-structured  ה log הוא העותק היחיד של הנתונים  כאשר משנים בלוק (data, header) פשוט כותבים את הבלוק.
אביב תשס"ה JCTתיכון תוכנה: ד"ר ראובן גלנט1 פרק 9 נקודות חשובות בתרגיל 10 Guarded Operation.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 4 LSP.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 11 Statecharts תכונות מתקדמות.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 12 אינטרקציה בין statecharts של אובייקטים שונים דוגמא : Dishwasher.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
CSE Software Engineering: Analysis and Design, 2003Lecture 7A.1 Software Engineering: Analysis and Design - CSE3308 Object-Oriented Design CSE3308/DMS/2003/17.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכורות שמורות 1 פרק 3 OCP.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 7 ISP דוגמא נוספת.
מעגלים אלקטרוניים לינאריים סמסטר אביב תשס"ב
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
1 ׃1998 Morgan Kaufmann Publishers פקודת ה- jump 4 bits 26 bits 2 bits 00 : כתובת קפיצה במילים : כתובת קפיצה בבתים … …
תוכנה 1 תבנית העיצוב Observer 1 שחר מעוז בית הספר למדעי המחשב אוניברסיטת תל אביב.
Embedded Systems Software Training Center Unit Testing Workshop Copyright © 2012 DSR Corporation.
Advanced Principles I Principles of Object-Oriented Class Design Copyright  by Object Mentor, Inc All Rights Reserved Portions of this material.
Principles of Object-Oriented Design SEI, SJTU WEB APPS and SERVICES.
1 CSC 422 Dr. Spiegel Encapsulation Connascence (born together, dependence) Cohesion.
Design Principles iwongu at gmail dot com.
The benefits of SOLID in software development Ruben Agudo Santos (GS-AIS-HR)
Costs and Filters Dr. Avi Rosenfeld Department of Industrial Engineering Jerusalem College of Technology
1 Design by Principles (Robert Martin) Software Engineering.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מחסנית ותור Stacks and Queues. מחסנית Stack מחסנית - Stack ADT סוג של מערך מוגבל מהיר מאוד ותופס מעט זיכרון שימוש ב LIFO – LIFO (Last In, First Out)
Dependency Inversion By Steve Faurie. Dependency Inversion Described in Agile Principles, Patterns and Practices in C# by Robert C. Martin.
S.Ducasse Stéphane Ducasse 1 Some Principles Stéphane Ducasse ---
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
Int fact (int n) { If (n == 0) return 1; else return n * fact (n – 1); } 5 void main () { Int Sum; : Sum = fact (5); : } Factorial Program Using Recursion.
שיתוף PDT בין חוטים PDT Thread A Process Descriptor File Object 1 File Object 2 File 1 File 2 pthread_create Thread B Process Descriptor ה PDT משותף לכל.
דוח אמצע סמסטר אביב תשס"ב 2002 שם הפרויקט :סביבת בדיקה ל PCIX PCIX environment מנחה : איתי אדר מגישים : שמיל ניסימוב גוילי יואב הטכניון.
 2000 Deitel & Associates, Inc. All rights reserved. Optional Case Study - Chapter 6 Outline 6.1 Introduction 6.2 Implementation: Visibility 6.3 Implementation:
NCCUCS Software Engineering 補充投影片 April 14, 2014.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 5 תרשימי מצבים Statecharts למחלקות תגובתיות Reactive Classes הקדמה ודוגמא.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Object Oriented Programming
Object Oriented Programming
Formal Specifications for Complex Systems (236368) Tutorial #1
Basic Data Structures – Continued (Queues)
Object Oriented Programming
printer-copier-repair.
Structured Programming (Top Down Step Refinement)
Marina Kogan Sadetsky –
מבוא לתכנות בWINDOWS ב#C
Principles of Object-Oriented Design
Principles of Object-Oriented Design
Presentation transcript:

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

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

אביב תשס " ה 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 – אי-ניידות. קשה להעביר מיישום מסויים ליישום אחר בגלל שהוא 'תפור' עבור היישום הראשון.

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

אביב תשס " ה 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

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

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

אביב תשס " ה 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); } };

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

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

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

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

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

אביב תשס " ה 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

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

אביב תשס " ה 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

אביב תשס " ה 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 ( המשך )

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

אביב תשס " ה 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