310 likes | 691 Views
SCE - 6b תבניות תיכון (המשך) (Design Patterns) דר’ יעקב אקסמן. הנדסת מרכיבי תוכנה. דרישות תוכנה. דגם הייררכי. דגם פיזיקלי. מרכיבים. קוד להרצה = exe. מדידות. תבניות תיכון ספרות. [GoF- 1995] E. Gamma, R. Helm, R. Johnson & J. Vlissides
E N D
SCE-6b תבניות תיכון (המשך) (Design Patterns) דר’ יעקב אקסמן
הנדסת מרכיבי תוכנה דרישות תוכנה דגםהייררכי דגםפיזיקלי מרכיבים קוד להרצה = exe מדידות
תבניות תיכון ספרות [GoF- 1995] E. Gamma, R. Helm, R. Johnson & J. Vlissides “Design Patterns – Elements of Reusable Object- Oriented Software” Addison-Wesley – Boston, MA - 1995.
תבניות תיכון דוגמאות • תבניות GoF – מבנה (Structural) • Composite • Flyweight
תבניות תיכון דוגמה ראשונה • תרכובת (Composite) • מטרה: • טיפול אחיד לעצמים בודדים ותרכובות • מעין "רקורסיה" • לקוח (client) יטפל באותה צורה, מפני ש: • גם עצמים וגם תרכובות שלהם (composites) • יורשים מאותה מחלקה מופשטת
תבניות תיכון מבנה רקורסיבי Composite aComposite aComposite aLeaf aLeaf aLeaf aLeaf aLeaf aLeaf
תבניות תיכון דוגמת Composite <<Abstract>> Graphic 0..* 0..* + draw () + add (g : Graphic) + remove (g : Graphic) + getChild (int) Picture draw (g : Graphic) Rectangle Line Text add (g : Graphic) remove (g : Graphic) getChild () draw(){ for all g in graphics g.draw() }
תבניות תיכון תרשים מחלקות Composite <<Abstract>> Component Client uses children + operation () 0..* 0..* + add () + remove () + getChildren () Composite Leaf + operation () + operation () + add () + remove () + getChildren () operation(){ for all g in graphics g.operation() }
תבניות תיכון בעיות Composite • אפשרי – לקרא לשיטה שמתאימה לעצם פשוט • ע"י תרכובת (composite). • למשל: • Composite comps1; • comps1.repaint; • בעייתי – לקרא לשיטה שמתאימה לתרכובת (composite) ע"י עצם פשוט. • למשל: • LeafObject Lobj1; • Lobj1.addComponent;
תבניות תיכון פתרון בעיית Composite • פתרון אפשרי – בדיקה לפני קריאת השיטה: • If (component.isComposite( ) ) • {… component.addComponent(someCompThatCouldBeComposite); • … • }
תבניות תיכון דוגמה שניה • "נוצות" (Flyweight) • מטרה: • תמיכה במספרים גדולים מאד • של עצמים קטנטנים • "נוצה" (flyweight), הוא עצם משותף • (shared object) בשימוש בהקשרים שונים • שלא ניתן להבדיל מעצם רגיל.
תבניות תיכון דוגמת Flyweight • לצייר 1000 עיגולים • בשישה צבעים
תבניות תיכון דוגמת Flyweight בעייה: for(int i=0; i < NUMBER_OF_CIRCLES; ++i) { Circle circle = new Circle(getRandomColor( ) ); circle.draw(g, getRandomX( ), getRandomY( ), getRandomR( ) );//1000 objects created. }
תבניות תיכון דוגמת Flyweight פתרון: class CircleFactory { private static final HashMap circleByColor = new HashMap(); public static Circle getCircle(Color color) { Circle circle = (Circle)circleByColor.get(color); if(circle == null) { circle = new Circle(color); circleByColor.put(color, circle); System.out.println("Creating " + color + " circle"); } return circle; } }
תבניות תיכון דוגמת Flyweight פתרון: for(int i=0; i < NUMBER_OF_CIRCLES; ++i) { Circle circle = CircleFactory.getCircle(getRandomColor( ) ); circle.draw(g, getRandomX( ), getRandomY( ),getRandomR( )); //Since we have 6 different colors, // we have only 6 objects created. }
תבניות תיכון דוגמת Flyweight
תבניות תיכון דוגמת Flyweight
תבניות תיכון סיווג אחר של GoF
תבניות תיכון רשימת - GoF Creational Patterns
תבניות תיכון רשימת - GoF Structural Patterns
תבניות תיכון רשימת - GoF Behavioral Patterns
תבניות תיכון רשימת - GoF Behavioral Patterns "הסתגלות"
תבניות תיכון תכנוות • גרעיניות – • תבניות קטנות יותר, • תבניות עשויות מתבניות • יעודיות – תבניות J2EE