45
הההה ההה"הJCT ההההה ההההה ה"ה ה' הההה / ה' ההההה הה ההההההה הההההה1 ההההה הההההה ההההה הההההה הההההה ההההההה ההההSoftware Design

תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

Embed Size (px)

DESCRIPTION

תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי. Software Design. פרק 1. הקדמה. מקומו של הקורס. ניתוח מערכות System Analysis תיכון תוכנה Software Design תכנות Programming. מקומו של הקורס. Our course. Jonah’s course. מהו תיכון (טוב)?. - PowerPoint PPT Presentation

Citation preview

Page 1: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

להנדסה תוכנה מערכות תיכוןאישי פרוייקט ופיתוח

Software Design

Page 2: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

1פרק

הקדמה

Page 3: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

הקורס של מקומו

System Analysisניתוח מערכות • Software Design תיכון תוכנה • Programmingתכנות •

Page 4: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

הקורס של מקומו

Our course

Jonah’s course

Page 5: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

?) טוב ) תיכון מהו

אפיון המערכת על בסיס הדרישות•התמודדות יעילה עם דרישות משתנות•ארגון מסגרת ומבנה לקידוד•

Page 6: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Open Close Principle (OCP)

מענה לתת ניתן פיה שעל האסטרטגיהמשתנות לדרישות

"תוכנה צריכה להיות פתוחה להרחבה וסגורה לשינויים"

Bernard Meyer

- ניתן יהיה להוסיף התנהגות חדשה למערכתפתוחה להרחבה :

. בלי לגעת בקוד שכבר כתבתסגורה לשינויים :

('אפילו לא לעשות קומפילציה מחדש וכד)

Page 7: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

( " (1חיזוק"זה טובתיכון

מפרדי חכם יותר להיות

Page 8: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

( " (2חיזוק"תמיד מעודכן להיות עליך

Page 9: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

( " (3חיזוק"ברצינות עצמך את לקחת עליך

Page 10: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

נושאים רשימת• Open Closed Principle

• Principles of Class Design– Liskov Substitution Principle (LSP)

– Dependency Inversion Principle (DIP)

– Interface Segregation Principle (ISP)

• Principles of Package Design– Acyclic Dependency Principle (ADP)

• Case Study with Design Patterns

• Model Driven Development – Real Time Object Oriented Design

– Executable Models (Rhapsody)

• Small Project Development– Extreme Programming, Test-first Programming, Refactoring, 7 Habits

Page 11: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

פרוייקט בנייתRhapsodyבזיקה ל-

Page 12: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

פרוייקט מרכיבי

•Component•Object Model Diagram•Packages

Page 13: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

פרוייקט

Component

Executable

Name

Scope

Page 14: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

פרוייקט Component

Configurations

Current configuration

Page 15: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Initial Instanceאתחול מופעים -

פרוייקט Component

Configurations

Page 16: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Settings

Instrumentation

Environment

פרוייקט Component

Configurations

Page 17: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Unified Modeling Language

UML Rhapsodyבזיקה ל-

כלי תיאור המאפשר לתאר וללוות פיתוח של תוכנה לשלביה(ואף כלי למימוש תוכנית)

Page 18: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Object Model Diagram (OMD)

ייצוג ויזואלי סטטי של אובייקטים/מחלקות ויחסים בניהם

Page 19: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

OMD

ב- Packageייצוג UML

Page 20: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

OMD

UML ב- Classייצוג

Page 21: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

OMDClass

UML ב- Classייצוג חלקי ה-

Name

Attributes

Operation

Page 22: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

OMDClass

קשרים בין אובייקטים Object Relationships

• Association– Directed– Bi-Directional

• Aggregation– Directed– Bi-Directional

• Composition– Directed– Bi-Directional

Page 23: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Telephone

Dialer:Dialer1

OMDClass

קשרים בין אובייקטים Object Relationships

• Dependency

• Inheritance

• Composite

• Multiplicity

Page 24: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

OMDClass קשרים בין מחלקות

Inheritance ירושה -

+deviceId : OMString

+detect():void-isButtonStateON():bool+Button(OMString aDeviceId)

Button

<<Abstract>>

+buttonState : tButtonState

-isButtonStateON():bool+ButtonImplementation(OMString aDeviceId)

ButtonImplementation

Inheritance :source file

Page 25: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

OMDClass קשרים בין מחלקות

Associations - Directional

Association Role Name

Multiplicity

Directed :source files

Page 26: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

OMDClass קשרים בין מחלקות

Associations - Bi-Directional

Button Dialer

itsDialer

1itsButton1

Bi-Directional :source files

Page 27: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Button Dialer

itsDialer

1

OMDClass קשרים בין מחלקות

Aggregation

Directed or Bi-Directional

Button Dialer

itsDialer

1

itsButton

1

Page 28: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Button Dialer

itsDialer

1

OMDClass קשרים בין מחלקות

Composition

Directional

Telephone Dialer

itsTelephone itsDialer

1 1

Bi-Directional

Page 29: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

OMDClass קשרים בין מחלקות

Composite

Telephone

itsDialer:Dialer1

Composite -Directed: source files

Composite : Bi-Directional

Page 30: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Multiplicityריבוי

Page 31: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Containersמיכלים/

•Container מיכל הוא מושג מופשט של / אחסון וניהול ריבוי אלמנטים.

Page 32: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Relations Rhapsodyטבלה המציגה כיצד

Containerמממש

Multiplicity Property Container Type Implementation

0..1 or 1 scalar Pointer

m..n, n or * Unordered OMCollection

n Static Array Array Array of Pointers

m..n, n or * ordered Ordered OMList

Qualifier Qualified OMMap

Page 33: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Container

OMCollection

Page 34: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Container

OMList

Page 35: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Container

OMMap

Page 36: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

לפרק 1נספח

Rhapsodyדוגמאות מימוש לפי

Page 37: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

)Attribute(הגדרת מאפיינים המחלקה דרך

Page 38: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

)Attribute(הגדרת מאפיינים המאפיינים דרך

Page 39: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

)Operations(הגדרת פעולות המחלקה דרך

Page 40: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

)Operations(הגדרת פעולות הפעולה דרך

Page 41: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Button Dialer

itsDialer

1itsButton1

Bi-Directional Association/Aggregation :source files

// file Button.h#ifndef Button_H #define Button_H Dialer;class Button } public : Button(); ~Button(); Dialer* getItsDialer() const; void setItsDialer(Dialer* p_Dialer(); void __setItsDialer(Dialer* p_Dialer); void _setItsDialer(Dialer* p_Dialer); void _clearItsDialer();protected : void cleanUpRelations(); Dialer* itsDialer;{;#endif

// file Button.cpp#include Button.h#include Dialer.hButton::Button() { itsDialer = NULL; //#[ operation Button() setItsDialer(new Dialer); //#]}Button::~Button() { cleanUpRelations();}Dialer* Button::getItsDialer() const { return itsDialer;}void Button::setItsDialer(Dialer* p_Dialer) { if(p_Dialer != NULL) { p_Dialer->_setItsButton(this); } _setItsDialer(p_Dialer);} //etc….

Page 42: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Directed Association/Aggregation :source files

Button Dialer

itsDialer

1

// file Button.h#ifndef Button_H #define Button_H class Dialer;class Button } public : Button(); ~Button(); Dialer* getItsDialer() const; void setItsDialer(Dialer* p_Dialer();protected : void cleanUpRelations(); Dialer* itsDialer;{;#endif

// file Button.cpp#include Button.h#include Dialer.hButton::Button() { itsDialer = NULL;}Button::~Button() { cleanUpRelations();}Dialer* Button::getItsDialer() const { return itsDialer;}void Button::setItsDialer(Dialer* p_Dialer) { itsDialer = p_Dialer;}

void Button::cleanUpRelations() { if(itsDialer != NULL) { itsDialer = NULL; }}

Page 43: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Composite Or Composition (directed): Source Files DialerTelephone

11

itsDialeritsTelephone

Telephone

itsDialer:Dialer1

// Telephone.h #ifndef Telephone_H #define Telephone_H #include "Dialer.h"class Telephone {public : Telephone(); ~Telephone();public : Dialer* getItsDialer() const;protected : Dialer itsDialer;};#endif

// Telephone.cpp #include "Telephone.h"Telephone::Telephone() {}Telephone::~Telephone() {}Dialer* Telephone::getItsDialer() const { return (Dialer*) &itsDialer;}

// Dialer.h #ifndef Dialer_H #define Dialer_Hclass Dialer {public : Dialer(); ~Dialer();};#endif

// Dialer.cpp#include "Dialer.h"// Dialer.cpp Dialer::Dialer() {}Dialer::~Dialer() {}

Page 44: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

Telephone Dialer

itsTelephone itsDialer

1 1Telephone

itsDialer:Dialer1

Composite Or Composition (bi-directional): Source Files

// Telephone.h, //Telephone.cpp Bi-directionalכמו ב-

// Dialer.h #ifndef Dialer_H #define Dialer_Hclass Telephoneclass Dialer {public : Dialer(); ~Dialer(); Telephone * getItsTelephone() const; void setItsTelephone (Telephone * p_Telephone);protected :Telephone * itsTelephone;};#endif

// Dialer.cpp #include "Dialer.h"Dialer::Dialer() {}Dialer::~Dialer() {}void Dialer::setItsTelephone(Telephone * p_Telephone) {void Dialer::_setItsTelephone(Telephone* p_Telephone) { __setItsTelephone(p_Telephone);}

Page 45: תיכון מערכות תוכנה להנדסה ופיתוח פרוייקט אישי

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

+deviceId : OMString

+detect():void-isButtonStateON():bool+Button(OMString aDeviceId)

Button

<<Abstract>>

+buttonState : tButtonState

-isButtonStateON():bool+ButtonImplementation(OMString aDeviceId)

ButtonImplementation

Inheritance : source file

//file Button.h#ifndef Button_H #define Button_H #include "Inheritance.h"class Button {public : Button(const OMString& aDeviceId); Button(); virtual ~Button(); void detect();private : virtual bool isButtonStateON()=0;

public : OMString getDeviceId() const; void setDeviceId(OMString p_deviceId);protected : OMString deviceId; };#endif //file Button.cpp---------------------#include Button.hButton::Button(const OMString& aDeviceId) : deviceId(aDeviceId) {}

//file ButtonImplementation.h#ifndef ButtonImplementation_H #define ButtonImplementation_H

#include "Inheritance.h"#include "Button.h"

class ButtonImplementation : public Button} public :

ButtonImplementation(const OMString& aDeviceId);

// etc ...;{

#endif

//file ButtonImplementation.cpp---------------------

#include ButtonImplementation.hButtonImplementation::ButtonImplementation(con

st OMString& aDeviceId) : Button(aDeviceId) }{//etc...