trusted components
play

Trusted Components Reuse, Contracts and Patterns Prof. Dr. Bertrand - PowerPoint PPT Presentation

1 Last update: 19 October 2004 Trusted Components Reuse, Contracts and Patterns Prof. Dr. Bertrand Meyer Dr. Karine Arnout Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering 2 Lecture 17:


  1. 1 Last update: 19 October 2004 Trusted Components Reuse, Contracts and Patterns Prof. Dr. Bertrand Meyer Dr. Karine Arnout Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  2. 2 Lecture 17: Composite, Flyweight Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  3. Agenda for today 3 � Composite pattern / Library � Flyweight pattern / Library Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  4. Composite pattern: Intent 4 “ Way to compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly. ” [GoF, p 163] Architecture of a typical application Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  5. Composite pattern 5 do_something* parts add Transparency remove * i_th has COMPONENT version + + COMPOSITE LEAF do_something+ do_something+ * do_something* COMPONENT Safety version + + i_th LEAF COMPOSITE do_something+ do_something+ parts add remove has Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  6. Flaws of the approach 6 � To make MY_COMPOSITE a composite of parts of type MY_LEAF , one must: � Create a descendant MY_COMPONENT of class COMPONENT � Make MY_COMPOSITE inherit from COMPOSITE � Make MY_LEAF inherit from LEAF � Redefine i_th to return an instance of MY_COMPONENT Genericity “ Natural to represent a composite as a generic class with a parent and a set of children ” [Jézéquel 1999] Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  7. Composite Library 7 do_something* parts add Transparency remove * item has version COMPONENT [ G ] i_th … + + COMPOSITE [ G ] LEAF do_something+ do_something+ do_something* * COMPONENT [ G ] Safety item version + + i_th LEAF COMPOSITE [ G ] do_something+ do_something+ parts add remove has Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  8. Composite Library, safety version (1/5) 8 Mechanism enabling componentization: deferred class Unconstrained genericity COMPONENT [ G ] feature -- Basic operation do_something is -- Do something. deferred end feature -- Status report is_composite : BOOLEAN is -- Is component a composite? do Result := False end end Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  9. Composite Library, safety version (2/5) 9 class COMPOSITE [ G ] inherit COMPONENT [ G ] redefine is_composite end create make , make_from_components feature { NONE } -- Initialization make is -- Initialize component parts . do create parts . make end Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  10. Composite Library, safety version (3/5) 10 make_from_components ( some_components : like parts ) is -- Set parts to some_components . require some_components_not_void: some_components /= Void no_void_component: not some_components . has ( Void ) do parts := some_components ensure parts_set: parts = some_components end feature -- Status report is_composite : BOOLEAN is -- Is component a composite? do Result := True end Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  11. Composite Library, safety version (4/5) 11 feature -- Basic operation do_something is -- Do something. do from parts . start until parts . after loop parts . item . do_something parts . forth end end feature -- Access item : COMPONENT [ G ] is -- Current part of composite do Result := parts . item ensure definition: Result = parts . item component_not_void: Result /= Void end Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  12. Composite Library, safety version (5/5) 12 feature -- Others -- Access: i_th , first , last -- Status report: has , is_empty , off , after , before -- Measurement: count -- Element change: add -- Removal: remove -- Cursor movement: start , forth , finish , back feature { NONE } -- Implementation parts : LINKED_LIST [ like item ] -- Component parts -- (which are themselves components) invariant is_composite: is_composite parts_not_void: parts /= Void no_void_part: not parts . has ( Void ) end Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  13. Composite pattern vs. Composite Library 13 BORROWABLE COMPOSITE COMPOSITE_ BOOK BORROWABLE ENCYCLOPEDIA Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  14. Composite: Componentization outcome 14 Completeness � � All cases of the Composite pattern Usefulness � � Reusable � Easy-to-use Faithfulness � � Similar to a traditional implementation of Composite (with genericity) Type-safety � � Type-safe (unconstrained genericity, assertions) Performance � � Same order as the Composite pattern Extended applicability � � No more cases Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  15. Agenda for today 15 � Composite pattern / Library � Flyweight pattern / Library Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  16. Flyweight pattern: Description 16 � Intent: “ Use sharing to support large numbers of fine-grained objects efficiently .” [GoF, p 195] � Motivation: see next Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  17. Without the Flyweight pattern (1/2) 17 class CLIENT ... feature -- Basic operation draw_lines is -- Draw some lines in color. local line1 , line2 : LINE Creates one LINE object red : INTEGER for each line to draw do ... create line1 . make ( red , 100, 200) line1 . draw create line2 . make ( red , 100, 400) line2 . draw ... end ... end Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  18. Without the Flyweight pattern (2/2) 18 class interface LINE create make feature -- Initialization make ( a_color , x , y : INTEGER ) -- Set color to a_color , x as x_position , and y as y_position . ensure color_set: color = a_color x_set: x_position = x y_set: y_position = y feature -- Access color : INTEGER -- Line color x_position , y_position : INTEGER -- Line position feature -- Basic operation draw -- Draw line at position ( x_position , y_position ) with color . end Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  19. With the Flyweight pattern (1/3) 19 class CLIENT feature -- Basic operation draw_lines is -- Draw some lines in color. local line_factory : LINE_FACTORY Creates only one LINE red_line : LINE object per color red : INTEGER do ... red_line := line_factory . new_line ( red ) red_line . draw (100, 200) red_line . draw (100, 400) ... end ... end Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  20. With the Flyweight pattern (2/3) 20 class interface LINE_FACTORY feature -- Initialization new_line ( a_color : INTEGER ): LINE -- New line with color a_color ensure new_line_not_void: Result /= Void ... end Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  21. With the Flyweight pattern (3/3) 21 class interface LINE create make feature -- Initialization make ( a_color : INTEGER ) is -- Set color to a_color . ensure color_set: color = a_color feature -- Access color : INTEGER -- Line color feature -- Basic operation draw ( x , y : INTEGER ) -- Draw line at position ( x , y ) with color . end Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  22. Shared/unshared and (non-)composite objects 22 The color of the LINE � Two kinds of properties: � Intrinsic characteristics stored in the flyweight � Extrinsic characteristics moved to the client (typically a “flyweight context”) The coordinates of the LINE Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  23. Flyweight context 23 � External characteristics are not stored in the flyweight object → client must handle them � A possibility is to create a FLYWEIGHT_CONTEXT describing a list of flyweights grouped by FLYWEIGHT_ZONE s with the same external characteristic (e.g. characters with the same color in a row of a book page) Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

  24. Shared/unshared and (non-)composite objects 24 � Two kinds of flyweights: � Composites (shared or unshared) � Non-composites (shared) Trusted Components: Reuse, Contracts and Patterns - Lecture 17 Chair of Softw are Engineering

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend