Presentation is loading. Please wait.

Presentation is loading. Please wait.

© 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 1 שימוש חוזר Reuse מקורות: S. R. Schach: Chapter 8 R. S. Pressman: Chapter ?

Similar presentations


Presentation on theme: "© 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 1 שימוש חוזר Reuse מקורות: S. R. Schach: Chapter 8 R. S. Pressman: Chapter ?"— Presentation transcript:

1 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 1 שימוש חוזר Reuse מקורות: S. R. Schach: Chapter 8 R. S. Pressman: Chapter ?

2 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 2 מה עומד על הפרק? סוגי השימוש החוזרסוגי השימוש החוזר דפוסי תכן (design patterns)דפוסי תכן (design patterns) מרכיבים וספריות (components and libraries)מרכיבים וספריות (components and libraries) מסגרות פיתוח (frameworks)מסגרות פיתוח (frameworks) שיתוף בין מרכיבים (interoperability)שיתוף בין מרכיבים (interoperability) –NET, COM, CORBA –XML

3 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 3 דרישות/החלטות המשפיעות על התכן החומרההחומרה –סוג המחשבים, ארכיטקטורת החומרה, תקשורת מערכת ההפעלהמערכת ההפעלה –אופן הקריאה לשרותי מעה”פ מתוך התוכנה, תהליכים שפת התכנותשפת התכנות –טיפוסים, מבני בקרה, פונקציות בנויות, תמיכה בתהליכים,... סטנדרטיםסטנדרטים –למשל CORBA, COM, TCP/IP שילוב מוצרי מדףשילוב מוצרי מדף –למשל GIS = Geographic Information System שילוב מערכת קיימת (legacy system)שילוב מערכת קיימת (legacy system) –בסיסי נתונים קיימים, חומרה קיימת

4 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 4 סוגי שימוש חוזר "לטרוף" מערכת קיימת (cannibalization)"לטרוף" מערכת קיימת (cannibalization) –לקוד בלבד –מקור לשגיאות רבות –אין תיכנון לשימוש חוזר (accidental reuse) להשתמש בדפוסי תכן מוכנים, ב-UMLלהשתמש בדפוסי תכן מוכנים, ב-UML לתכנן ולממש מרכיב לשימוש חוזרלתכנן ולממש מרכיב לשימוש חוזר –יקר (פי 2 עד 4) ממרכיב חד-פעמי –אולי לא יצליח (בפועל אין שימוש חוזר במרכיב) –יכול לחסוך בגדול להשתמש במרכיב מוכן (COTS)להשתמש במרכיב מוכן (COTS)

5 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 5 דפוסי תכן (design patterns) פתרון עקרוני לבעית-תכן (מונחה עצמים) החוזרת על עצמהפתרון עקרוני לבעית-תכן (מונחה עצמים) החוזרת על עצמה תבנית שיטתית של אופן הצגת הפתרוןתבנית שיטתית של אופן הצגת הפתרון ארגון כללי של עצמים ומחלקות לפתרון הבעיהארגון כללי של עצמים ומחלקות לפתרון הבעיה נדרשת “תפירה” של הדפוס עבור פתרון ספציפי בהקשר נתוןנדרשת “תפירה” של הדפוס עבור פתרון ספציפי בהקשר נתון תכולה של דפוס תכןתכולה של דפוס תכן –תאור הבעיה –תאור הפתרון –תנאי השימוש בפתרון –השלכות הפתרון –הנחיות מימוש –דוגמאות מימוש

6 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 6 סוגי דפוסי תכן ע”פ “כנופיית הארבעה” (The GOF = Gang of Four)ע”פ “כנופיית הארבעה” (The GOF = Gang of Four) –E. Gamma, R. Helm, R. Johnson & J. Vlissides, Design Patterns, Addison-Wesley, 1995. דפוסי יצירה (creational patterns)דפוסי יצירה (creational patterns) –יצירת אובייקטים בזמן ריצה –הקטנת התלות בין הגדרת המחלקות (במפרט) ובין האובייקטים בפועל (בקוד) דפוסי מבנה (structural patterns)דפוסי מבנה (structural patterns) –הגדרת מבנים מורכבים דפוסי התנהגות (behavioral patterns)דפוסי התנהגות (behavioral patterns) –אלגוריתמים –הקצאת התנהגות לאובייקטים –העברת המיקוד מזרימת הבקרה אל אופן התקשורת בין האובייקטים

7 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 7 Composite Pattern (1) דפוס מבנהדפוס מבנה הבעיההבעיה –יצירת מבנה היררכי רקורסיבי דוגמהדוגמה –מבנים גרפיים aPicture aLine aRectangle aText this is a text aLine

8 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 8 Composite Pattern (2) מימוש הדוגמהמימוש הדוגמה > Graphic draw() (virtual) add(component) (virtual) remove(component) (virtual) getchild(int) (virtual) Line draw() Composite draw() add(component) remove(component) getchild(int) 0..* graphics Rectangle draw() Text draw() client uses forall g in graphics g.draw() forall g in graphics g.draw()

9 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 9 Composite Pattern (3) התבנית הכלליתהתבנית הכללית > Component operation() (virtual) add(component) (virtual) remove(component) (virtual) getchild(int) (virtual) 0..* Leaf operation() Composite operation() add(component) remove(component) getchild(int) children client uses

10 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 10 Abstract Factory Pattern (1) דפוס יצירהדפוס יצירה הבעיההבעיה –יצירה ושימוש באובייקטים בסביבה משתנה, ללא תלות במימוש הספציפי שלהם (כלומר, באופן שקוף ליישום) דוגמהדוגמה –GUI בסביבות MSWin / Motif createWindow() createScrollBar() createWindow() createScrollBar()

11 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 11 Abstract Factory Pattern (2) מימוש הדוגמהמימוש הדוגמה > WidgetFactory createScrollBar() (virtual) createWindow() (virtual) > Window > ScrollBar MotifWidgetFactory createScrollBar() createWindow() MotifWindow MotifScrollBar creates MSWindow MSWidgetFactory createScrollBar() createWindow() MSScrollBar creates client

12 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 12 איך משתמש יוצר MSScrollBar ? במטודות של היישום ישנן קריאות רק ליוצר המופשט ולפעולות של המחלקות המופשטות X.createScrollBar() כשהכריזו על X כ- WidgetFactory המופשטבמטודות של היישום ישנן קריאות רק ליוצר המופשט ולפעולות של המחלקות המופשטות X.createScrollBar() כשהכריזו על X כ- WidgetFactory המופשט לשימוש נתון, ניצור אוביקט ממשי מהמחלקה MSWidgetFactoryלשימוש נתון, ניצור אוביקט ממשי מהמחלקה MSWidgetFactory היישום ישלח את ההודעות לאוביקט זה, ומנגנון הפולימורפיזם יבטיח שהפעולה הממשית תתבצע (MSScrollBar נוצר ומוכן לשימוש)היישום ישלח את ההודעות לאוביקט זה, ומנגנון הפולימורפיזם יבטיח שהפעולה הממשית תתבצע (MSScrollBar נוצר ומוכן לשימוש)

13 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 13 Abstract Factory Pattern (3) התבנית הכלליתהתבנית הכללית > AbstractFactory createProductA() (virtual) createProductB() (virtual) client ConcreteFactory1 createProductA() createProductB() ConcreteFactory2 createProductA() createProductB() ProductA2 ProductA1 > AbstractProductA ProductB2 ProductB1 > AbstractProductB creates

14 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 14 עוד על דפוסי תכן ישנם דפוסים לתחומים מיוחדים—הידע שנצברישנם דפוסים לתחומים מיוחדים—הידע שנצבר דרושות התאמות ושילובים בין דפוסיםדרושות התאמות ושילובים בין דפוסים לא רק לדיאגרמת מחלקות !!לא רק לדיאגרמת מחלקות !! ישנם גם "אנטי-דפוסים" שיש להזהר מהםישנם גם "אנטי-דפוסים" שיש להזהר מהם נלמדים בקורס "תיכון תוכנה"נלמדים בקורס "תיכון תוכנה"

15 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 15 ספריות לתשתיותלתשתיות –אוביקטים ב- Smalltalk או Java או C++ –סטטיסטיקה או אנליזה נומרית (SPSS, NAG) לשפה אחת—בגלל הממשק הקבועלשפה אחת—בגלל הממשק הקבוע לפעולות ידועות מראשלפעולות ידועות מראש –חישוב sin, cos –הדפסות –לניהול מבני נתונים (מטריצות דלילות, תורים,..)

16 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 16 מרכיב--Component אבן בניה, קוביית Legoאבן בניה, קוביית Lego לשימוש כללי, לפרויקטים שונים, ולאורך זמןלשימוש כללי, לפרויקטים שונים, ולאורך זמן בדרך כלל, בלי גישה פנימית (black box)בדרך כלל, בלי גישה פנימית (black box) ניתן להתאמה, אך לא דרך מנגנון הירושה שלוניתן להתאמה, אך לא דרך מנגנון הירושה שלו התבוננות עצמית (Introspection): מה מגלה מרכיב על עצמו?התבוננות עצמית (Introspection): מה מגלה מרכיב על עצמו? – שבירה חלקית של חוסר גישה פנימית, כדי לאפשר התאמות וקישורים –מכיל לפחות את רשימת המטודות הציבוריות –מחייב את המרכיב גם במימושים עתידיים

17 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 17 JavaBeans כדוגמה לסביבת מרכיבים JavaBeans כדוגמה לסביבת מרכיבים נוהלי כתיבה מיוחדים, שימוש בשמות מוסכמיםנוהלי כתיבה מיוחדים, שימוש בשמות מוסכמים –getXX לכל שימוש בערך, setXX לכל השמה –isXX לכל בדיקה עם תוצאה מסוג Boolean קיימת מחלקה Introspector המייצר מידע על bean כלשהו הכתוב לפי הנוהליםקיימת מחלקה Introspector המייצר מידע על bean כלשהו הכתוב לפי הנוהלים ניתן לתאר מאורע, להרשם, ולקבל הודעה כל פעם שהמאורע מתרחשתניתן לתאר מאורע, להרשם, ולקבל הודעה כל פעם שהמאורע מתרחשת –add setLotteryWinner Listener חלק "נילווה" לתיכנון והתאמה ראשוניים, חלק לקידוד השימוש, וחלק לשינויים שותפיםחלק "נילווה" לתיכנון והתאמה ראשוניים, חלק לקידוד השימוש, וחלק לשינויים שותפים

18 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 18 API –Application Programming Interface אוסף קריאות המקלות על תיכנון ותיכנותאוסף קריאות המקלות על תיכנון ותיכנות בד"כ מסתירים קריאות למערכת ההפעלה, כולל פעולות אסורות למשתמש רגילבד"כ מסתירים קריאות למערכת ההפעלה, כולל פעולות אסורות למשתמש רגיל ניתן לראות כאוסף חבילות בספריהניתן לראות כאוסף חבילות בספריה מספקים כלי עבודה (toolkit)מספקים כלי עבודה (toolkit) מקל על בניה של מחלקה נחוצה למשתמשמקל על בניה של מחלקה נחוצה למשתמש –GUI library לבניית ממשק נוח לכל אפליקציה

19 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 19 מסגרת לתחום—Domain Framework שלד לתיכנון ולמימוששלד לתיכנון ולמימוש אירגון (ארכיטקטורה) למערכת...עם חוריםאירגון (ארכיטקטורה) למערכת...עם חורים כלים ומימוש אוביקטים לחלקים משותפיםכלים ומימוש אוביקטים לחלקים משותפים תיאור החלקים החסרים—”hotspots”תיאור החלקים החסרים—”hotspots” דוגמאותדוגמאות –ניהול מעליות –כספומט וקשר למרכז מידע –GUI לחלונות –מסגרת למהדר (compiler framework)

20 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 20 שיתוף פעולה בין מרכיבים מחברות תוכנה שונות, בשפות תיכנות שונות, על מערכות הפעלה וחומרה שונותמחברות תוכנה שונות, בשפות תיכנות שונות, על מערכות הפעלה וחומרה שונות חייבים הסכם על תקן, לצורך interoperabilityחייבים הסכם על תקן, לצורך interoperability –CORBA (Common Object Request Broker Architecture) של OMG = כל העולם, חוץ מ.... כוללת תיכנון לתקשורת בין אוביקטים (ORB) כוללת שפה לתיאור של מה מבקשים ומה התשובה –OLE ל- COM ל-NET. של Microsoft מבוסס XML

21 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 21 יותר על CORBA ה ORB מתווך בין קריאה במקור לבין המרכיבה ORB מתווך בין קריאה במקור לבין המרכיב הקריאה יוצרת נציג מקומי המתקשר עם הORBהקריאה יוצרת נציג מקומי המתקשר עם הORB בצד המרכיב נוצרת בקשה בשפת המרכיבבצד המרכיב נוצרת בקשה בשפת המרכיב מאפשר קישור דינמי, בזמן ביצועמאפשר קישור דינמי, בזמן ביצוע המשתמש במקור אינו חייב לדעת איפה המרכיבהמשתמש במקור אינו חייב לדעת איפה המרכיב בגלל ריבוי השפות, דרושה שפה כללית ל- Interface Definitionבגלל ריבוי השפות, דרושה שפה כללית ל- Interface Definition CORBA מגדיר API לכל שפה, כדי לייצור קישורים דרושיםCORBA מגדיר API לכל שפה, כדי לייצור קישורים דרושים

22 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 22 XML פורמט אחיד לתיאור מידע מבני\קבצים\structפורמט אחיד לתיאור מידע מבני\קבצים\struct הכללה של HTML, מאוחסן כקובץ textהכללה של HTML, מאוחסן כקובץ text של W3C לשירותי WWWשל W3C לשירותי WWW בבסיס.NET, ניתן לשלב עם CORBA, JavaBeansבבסיס.NET, ניתן לשלב עם CORBA, JavaBeans כל מרכיב "מיבא" XML ומחזיר תוצאה ב-XMLכל מרכיב "מיבא" XML ומחזיר תוצאה ב-XML ישנם כלים להגדרת מבנה המידע, לפיענוח מידע בקובץ נתון על סמך ההגדרה, לניתוח המידע, ולהצגתה בצורה נוחהישנם כלים להגדרת מבנה המידע, לפיענוח מידע בקובץ נתון על סמך ההגדרה, לניתוח המידע, ולהצגתה בצורה נוחה בשימוש נרחב, גם בין יישומיםבשימוש נרחב, גם בין יישומים

23 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 23 XML (2) למידע מבני (רשומה ב-C++ ל- Java )למידע מבני (רשומה ב-C++ ל- Java ) לממשק בין מרכיבים, במקום stringלממשק בין מרכיבים, במקום string לתיאור שפת תיכנות לצורך תירגוםלתיאור שפת תיכנות לצורך תירגום כליםכלים –DTD או XML Schemas להגדרת פורמט –Xlink כדי לתאר קשרים בין קובצי XML –DOM, SAX : אוסף קריאות סטנדרטיות לעיבוד קובצי XML מתוך שפת תיכנות – שילוב עם HTML מורחבת להצגת מידע, XHTML

24 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 24 דוגמה לקובץ ב-XML - - - Tove Tove Jani Jani Reminder Reminder Don't forget me this weekend! Don't forget me this weekend!

25 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 25 אז מה היה לנו...? סוגי שימוש חוזר סוגי שימוש חוזר דפוסי תכן (design patterns) דפוסי תכן (design patterns) ספריות ומרכיבים פשותים ספריות ומרכיבים פשותים מסגרות לתחום ולחלקי מערכת מסגרות לתחום ולחלקי מערכת שיתוף בין מרכיבים שיתוף בין מרכיבים JavaBean CORBA (.NET) XML

26 © 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 26 וכעת נעבור ל... אימות ובדיקות


Download ppt "© 1999-2001, ד"ר עמיר תומר מבוא להנדסת תוכנה תכן - 1 שימוש חוזר Reuse מקורות: S. R. Schach: Chapter 8 R. S. Pressman: Chapter ?"

Similar presentations


Ads by Google