460 likes | 789 Views
SCE - 2 מרכיבים: עצמים, היבטים דר’ יעקב אקסמן תשס"ו. הנדסת מרכיבי תוכנה. דרישות תוכנה. דגם הייררכי. דגם פיזיקלי. מרכיבים. קוד להרצה = exe. מדידות. מרכיבים סיווג לפי תפקידים. יוצר פלט ?. כן. לא. משדר נתונים ?. פונקציה ספציפית ?. כן. לא. כן. לא. ?. מרוחק ?. כן. לא.
E N D
SCE-2 מרכיבים: עצמים, היבטים דר’ יעקב אקסמן תשס"ו
הנדסת מרכיבי תוכנה דרישות תוכנה דגםהייררכי דגםפיזיקלי מרכיבים קוד להרצה = exe מדידות
מרכיבים סיווג לפי תפקידים יוצר פלט ? כן לא משדר נתונים? פונקציה ספציפית ? כן לא כן לא ? מרוחק? כן לא כן Object Aspect Connector Gluon
מרכיבים עצמים עצמים (Objects) מרכיבים בעלי פונקציונאליות מוגדרת (סמנטיקה). יוצרים פלט.
מרכיבים מחלקות מחלקות (Classes) הפשטה של תכונות משותפות לעצמים.
מחלקות ספרות תרשימים [BRJ1999] Booch, G., Rumbaugh, J. and Jacobson, I. “The Unified Modeling Language User Guide” Addison-Wesley – Reading, MA – 1999.
מחלקות מבנה פנימי שם המחלקה תכונות [סוגים] Attributes [types] פונקציות, שיטות methods
מחלקות דוגמה 1 employee Id:Integer startDate:date Dept: String calculateSalary(month: Integer) fetchPersonalData() setPersonalData()
תרשים מחלקות משתנים • attributes (fields, instance variables) • visibilityname : type[count] = default_value • visibility: + public # protected - private ~ package (default) / derived • underline static attributes • derived attribute: not stored, but can be computed from other attribute values • example:- balance : double = 0.00
מחלקות דוגמה 2 Rectangle -width: int -height: int / area: double +Rectangle( width: int, height: int) +distance( r: Rectangle): double
מחלקות סוגי תכונות Attribute types basic_types Boolean Short Integer Long Real Double Clockticks Counter String structured_types Vector Class_type …
תרשים מחלקות שיטות • operations / methods • visibility name (parameters) : return_type • visibility: + public # protected - private ~ package (default) • underline static methods • parameter types listed as (name: type) • omit return_type on constructors andwhen return type is void • method example:+ distance(p1: Point, p2: Point): double
מחלקות דוגמה 3 Student -name: String -id: int -totalStudents: int # getID( ): int +getName( ): String ~getEmailAddress( ): String +getTotalStudents( ): int
מחלקות יחסים relationships
תרשים מחלקות יחס - תלות A B A יודע על (תלוי ב- )B Bלא יודע עלA
תרשים מחלקות פרוט ירושה • יחסי הכללה (ירושה) • סגנונות של קו, חץ • כאשר הורה הינו: • Class(מחלקה)קו מלא, חץ שחור • abstract class:קו מלא, חץ לבן • Interface(ממשק) • קו מקווקוו, חץ לבן
תרשים מחלקות דוגמת ירושה
תרשים מחלקות קישור • associational (usage) relationships • 1. multiplicity(how many are used) • * 0, 1, or more • 1 1 exactly • 2..4 between 2 and 4, inclusive • 5..* 5 or more • 2. name (what relationship the objects have) • 3. navigability (direction)
תרשים מחלקות הרכבה Car Engine aggregation composition 1 1 Book 1 * Page בעייתיות של הבחנה
תרשים מחלקות הרכבה
תרשים מחלקות הערה <<Stereotype>>
מחלקות מבחינת המתכנן כלל אצבע: שמות עצם
מרכיבים סיווג יוצר פלט ? כן לא משדר נתונים? פונקציה ספציפית ? כן לא כן לא ? מרוחק? כן לא כן Object Aspect Connector Gluon
מרכיבים היבטים היבטים (Aspects) מרכיבים אשר נוגעים לכלל המערכת (systemic). יוצרים פלט.
היבטים ספרות [KM-2005] Gregor Kiczales & Mira Mezini “Aspect-Oriented Programming and Modular Reasoning” ICSE-2005 – St. Louis, MO. [Filman-2005] Filman, R.E., Elrad, T., Clarke, S. & Aksit, M. “Aspect-Oriented Software Development” Addison-Wesley – Boston, MA – 2005. [Kiselev-2002] Ivan Kiselev “Aspect-Oriented Programming with AspectJ” SAMS – Indianapolis, IN – 2002.
היבטים דוגמה Wireless Orange Grapes Wired makeWine( ) getSugar( ) drawLabel( ) Weigh( ) Buy( ) Sell( ) squeeze( ) dryPeel( ) drawLabel( ) Weigh( ) Buy( ) Sell( ) acquirSignal( ) receive( ) drawLabel( ) Weigh( ) Buy( ) Sell( ) isConnected( ) reset( ) drawLabel( ) Weigh( ) Buy( ) Sell( ) פריט ארוז סחורה
היבטים דוגמה FigureElement moveBy(int, int) refresh() Point Line 2 getX()getY()setX(int)setY(int)moveBy(int, int)draw() getP1()getP2()setP1(Point)setP2(Point)moveBy(int, int)draw() כל השיטות האלו מסתיימות בקריאה ל: Display.update();
היבטים דוגמה FigureElement moveBy(int, int) refresh() Point Line 2 getX()getY()setX(int)setY(int)moveBy(int, int)draw() getP1()getP2()setP1(Point)setP2(Point)moveBy(int, int)draw() DisplayUpdating after(): call(void FigureElement+.set*(..)) || call(void FigureElement.moveBy(int, int)){ Display.update();} after(): call(void FigureElement+.set*(..)) || call(void FigureElement.moveBy(int, int)){ Display.update();}
היבטים אנלוגיה FigureElement moveBy(int, int) refresh() Point Line 2 getX()getY()setX(int)setY(int)moveBy(int, int)draw() getP1()getP2()setP1(Point)setP2(Point)moveBy(int, int)draw() DisplayUpdating Crosscutting כמו התמרת Fourier (לרוחב במקום לאורך) after(): call(void FigureElement+.set*(..)) || call(void FigureElement.moveBy(int, int)){ Display.update();}
היבטים מושגים • Join Point • אירוע =נקודות ניתנות לזיהוי • במהלך הריצה של תוכנית • Pointcut • פרדיקט = לקישור בין נקודת חיבור • לפונקציה נקראת • Advice • קוד לביצוע (הפונקציה הנקראת)
היבטים דוגמה Joinpoints2 נקודות חיבור after(): call(void FigureElement+.set*(..))|| call(void FigureElement.moveBy(int, int)) { Display.update();} pointcut advice
היבטים סוגי Advice • Before • לפני הקוד של העצם • After • אחרי • Around • מסביב = חלק מתבצע לפני • חלק לאחר נקודה מוגדרת
היבטים דוגמת קוד: מחלקת A public class A { int a(int x) { System.out.println(“Method 'A.a'"); return b(x); } int b(int x) { System.out.println(“Method 'A.b'"); c("x"); return x; } String c(String x) { System.out.println(“Method 'A.c'"); (new B( )).c(3.14); return x; } שלוש שיטות: a, b, c שרשרת של הפעלות
היבטים דוגמת קוד: מחלקת B public class B { void c (double x( { System.out.println(“Method 'B.c’ “ ); } } גם למחלקה B שיטה בשם c
היבטים דוגמת קוד Main של מחלקה A • public static void main(String args[]) • } • try • } • A etzem = new A( ); • System.out.println("Start of "+ etzem.getClass().getName( )); • etzem.a(5); • System.out.println("End of "+ etzem.getClass().getName(( ); • { • catch(Throwable t) • { • System.out.println("Exception in main:"+ etzem); • etzem.printStackTrace(System.out); • } • { התחלת השרשרת
היבטים דוגמת קוד ללא היבט תוצאת ריצה: Start of intro.A Method ‘A.a’ Method ‘A.b’ Method ‘A.c’ Method ‘B.c’ End of intro.A
היבטים דוגמת קוד: Showcase.java public aspectShowcase { pointcut A_a(): call(int A.a(int)); pointcut A_all(): call(int A.*(int)); pointcut all_c(): call(* *.c(*)); before( ): A_a() { System.out.println("Before: " + thisJoinPoint); } after( ): A_all() || all_c() { System.out.println("After: " + thisJoinPoint); } Object around( ): all_c() { System.out.println("Start around: " + thisJoinPoint); Object o = proceed(); System.out.println("End around: " + thisJoinPoint); return o; } }
היבטים דוגמת קוד עם היבט תוצאת ריצה: Start of intro.A Before: call(int intro.A.a(int)) Method ‘A.a’ Method ‘A.b’ Start around: call (String intro.A.c(String)) Method ‘A.c’ Start around: call (void intro.B.c(String)) Method ‘B.c’ After: call (void intro.B.c(double)) End around: call (void intro.B.c(String)) After: call (String intro.A.c(String)) End around: call (String intro.A.c(String)) After: call (int intro.A.b(int)) After: call (int intro.A.a(int)) End of intro.A
היבטים הערות על Advice דומה ל Wrapper התוצאה רק לאחר הידור: בקוד להרצה.
היבטים ריבוי דגמים שרירותיות של הדגם הראשון: מה זה אורך? מה זה רוחב? מרחב עצמים מופשט
היבטים ריבוי דגמים חלוקה לפי צורה
היבטים ריבוי דגמים חלוקה לפי צבע
היבטים ריבוי דגמים מרחב לפי צבע לפי צורה לפי גודל בחירה של הדגם הראשון אורך = צבע
היבטים ספרות [MO-2005] Mezini, Mira & Ostermann, Klaus “Untangling Crosscutting Models with CAESAR” Chapter 8 in [Filman-2005] “Aspect-Oriented Software Development” pp. 165-199