The Composite Design Pattern

Similar documents
Introduction to Software Engineering (2+1 SWS) Winter Term 2009 / 2010 Dr. Michael Eichberg Vertretungsprofessur Software Engineering Department of

Design Pattern: Composite

Object-Oriented Oriented Programming

Tecniche di Progettazione: Design Patterns

Design Patterns. Vasileios Theodorou

The Composite Pattern

Think of drawing/diagramming editors. ECE450 Software Engineering II. The problem. The Composite pattern

Produced by. Design Patterns. MSc in Computer Science. Eamonn de Leastar

COSC 3351 Software Design. Design Patterns Structural Patterns (I)

Last Lecture. Lecture 17: Design Patterns (part 2) Kenneth M. Anderson Object-Oriented Analysis and Design CSCI 4448/ Spring Semester, 2005

CISC 322 Software Architecture

Tecniche di Progettazione: Design Patterns

Design Patterns IV Structural Design Patterns, 1

Introduction and History

Tecniche di Progettazione: Design Patterns

Design Patterns IV. Alexei Khorev. 1 Structural Patterns. Structural Patterns. 2 Adapter Design Patterns IV. Alexei Khorev. Structural Patterns

Considerations. New components can easily be added to a design.

Design Patterns. Decorator. Oliver Haase

Design Patterns. Comp2110 Software Design. Department of Computer Science Australian National University. Second Semester

Last Lecture. Lecture 26: Design Patterns (part 2) State. Goals of Lecture. Design Patterns

SDC Design patterns GoF

Design Patterns. Comp2110 Software Design. Department of Computer Science Australian National University. Second Semester

Design Patterns. Definition of a Design Pattern

Software Eningeering. Lecture 9 Design Patterns 2

Design Patterns Lecture 2

2.1 Design Patterns and Architecture (continued)

Details of Class Definition

2.1 Design Patterns and Architecture (continued)

Topics in Object-Oriented Design Patterns

Design Patterns (Composite)

Outline. Composite Pattern. Model-View-Controller Pattern Callback Pattern

Design Patterns in C++

Composite Pattern. IV.4 Structural Pattern

CS 2340 Objects and Design

EMBEDDED SYSTEMS PROGRAMMING Design Patterns

THOMAS LATOZA SWE 621 FALL 2018 DESIGN PATTERNS

Design Patterns (Facade, Composite)

Design Pattern What is a Design Pattern? Design Pattern Elements. Almas Ansari Page 1

EMBEDDED SYSTEMS PROGRAMMING Design Patterns

Design Patterns. Manuel Mastrofini. Systems Engineering and Web Services. University of Rome Tor Vergata June 2011

Motivating Problem (2) Design for tree structures with whole-part hierarchies. The Composite Design Pattern

Trusted Components. Reuse, Contracts and Patterns. Prof. Dr. Bertrand Meyer Dr. Karine Arnout

Object Design II: Design Patterns

Laboratorio di Sistemi Software Design Patterns 2

» Access elements of a container sequentially without exposing the underlying representation

Design patterns. Valentina Presutti courtesy of Paolo Ciancarini

Design Patterns. An introduction

The Observer Design Pattern

Slide 1. Design Patterns. Prof. Mirco Tribastone, Ph.D

Design of Software Systems (Ontwerp van SoftwareSystemen) Design Patterns Reference. Roel Wuyts

Enforcing Singularity

What is a Pattern? Lecture 40: Design Patterns. Elements of Design Patterns. What are design patterns?

administrivia today UML start design patterns Tuesday, September 28, 2010

Event Dispatch. Dispatching events to windows and widgets.

6.3 Patterns. Definition: Design Patterns

CSCD01 Engineering Large Software Systems. Design Patterns. Joe Bettridge. Winter With thanks to Anya Tafliovich

Transformation Hierarchies. CS 4620 Lecture 5

Design Patterns. Paul Jackson. School of Informatics University of Edinburgh

CSCI 253. Overview. The Elements of a Design Pattern. George Blankenship 1. Object Oriented Design: Iterator Pattern George Blankenship

Design patterns. OOD Lecture 6

Adapter pattern. Acknowledgement: Freeman & Freeman

Design Patterns Reid Holmes

Design Pattern and Software Architecture: IV. Design Pattern

Design Patterns Reid Holmes

Design Patterns (Composite, Iterator)

Introduction to Software Engineering (2+1 SWS) Winter Term 2009 / 2010 Dr. Michael Eichberg Vertretungsprofessur Software Engineering Department of

Software Engineering Design & Construction

Creational Design Patterns


Design for change. You should avoid

Software Engineering Prof. Rushikesh K.Joshi IIT Bombay Lecture-15 Design Patterns

Introduction to Object Oriented / Functional Programming 9. Object-Oriented Software Development COMP4001 CSE UNSW Sydney Lecturer: John Potter

Introduction to Software Engineering (2+1 SWS) Winter Term 2009 / 2010 Dr. Michael Eichberg Vertretungsprofessur Software Engineering Department of

The GoF Design Patterns Reference

Software Quality Management

Modellistica Medica. Maria Grazia Pia, INFN Genova. Scuola di Specializzazione in Fisica Sanitaria Genova Anno Accademico

Information systems modelling UML and service description languages

Produced by. Design Patterns. MSc in Communications Software. Eamonn de Leastar

Ingegneria del Software Corso di Laurea in Informatica per il Management. Design Patterns part 1

Design Patterns. Software Engineering Andreas Zeller, Saarland University

Object-Oriented Design

CS 349 / SE 382 Design Patterns. Professor Michael Terry January 21, 2009

CSE 431S Type Checking. Washington University Spring 2013

Alternator. An Object Behavioral Design Pattern. John Liebenau

Event Dispatch. Interactor Tree Lightweight vs. Heavyweight Positional Dispatch Focus Dispatch. 2.4 Event Dispatch 1

COSC 3351 Software Design. Design Patterns Structural Patterns (II) Edgar Gabriel. Spring Decorator

Event Dispatch. Interactor Tree Lightweight vs. Heavyweight Positional Dispatch Focus Dispatch. Event Architecture. A pipeline: Event Capture

Introduction to Design Patterns

Pattern Examples Behavioural

Design Pattern. CMPSC 487 Lecture 10 Topics: Design Patterns: Elements of Reusable Object-Oriented Software (Gamma, et al.)

LOG6306 : Études empiriques sur les patrons logiciels

The Null Object Pattern

Introduction to Design Patterns

BFH/HTA Biel/DUE/Course 355/ Software Engineering 2

Composite Pattern - Shapes Example - Java Sourcecode

OODP Session 4. Web Page: Visiting Hours: Tuesday 17:00 to 19:00

Keywords: Abstract Factory, Singleton, Factory Method, Prototype, Builder, Composite, Flyweight, Decorator.

CSCD01 Engineering Large Software Systems. Design Patterns. Joe Bettridge. Winter With thanks to Anya Tafliovich

Idioms and Design Patterns. Martin Skogevall IDE, Mälardalen University

Scene Graphs. COMP 575/770 Fall 2010

Transcription:

Dr. Michael Eichberg Software Technology Group Department of Computer Science Technische Universität Darmstadt Introduction to Software Engineering The Composite Design Pattern For details see Gamma et al. in Design Patterns

Motivation 2 Imagine a drawing editor where complex diagrams are build out of simple components and where the user wants to treat classes uniformly most of the time whether they represent primitives or components Example Picture contains elements Elements can be grouped Groups can contain other groups Suitcase 9,99

Intent 3 Compose objects into tree structures to represent partwhole hierarchies The composite design pattern lets clients treat individual objects and compositions of objects uniformly

Example 4 Drawing Suitcase 9,99 Object-Diagram :Group :Group tag:rectangle price:text handle:line case:rectangle name:text Corresponding Object Diagram

Example 5 Suitcase 9,99 Object-Diagram :Group :Group tag:rectangle price:text handle:line case:rectangle name:text Element draw() Rectangle Line Text Group draw() draw() draw() draw() add(element) remove(element) getchild(int)

Applicability 6 Use composite when... you want to represent part-whole hierarchies of objects you want clients to be able to ignore the difference between individual and composed objects (Clients will treat all objects in the composite structure uniformly.)

Structure 7 Component {abstract} Client operation() add(component) remove(component) getchild(int) children Leaf operation() «method» { forall g in children g.operation() } Composite operation() add(component) remove(component) getchild(int)

Component Declares the interface for objects in the composition Implements the default behavior as appropriate (Often) declares an interface for accessing and managing child components Leaf Represents leaf objects in the composition; defines the primitive behavior Composite Stores children / composite behavior Client Accesses objects in the composition via Component interface The Composite Design Pattern Participants 8

Collaborations 9 Clients interact with objects through the Component interface Leaf recipients react directly Composites forward requests to their children, possibly adding before/after operations Excursion: A pattern is a collaboration Object diagram for the context. Which roles are involved? Sequence diagram for interactions (Interaction diagram for context & interaction.) What is the order of method calls?

Consequences 10 Primitive objects can be recursively composed Clients can treat composites and primitives uniformly (Clients do not have to write tag-and-case statementstyle functions.) New components can easily be added Design may become overly general (You can t always rely on the type system to enforce certain constraints; e.g. that a composite has only certain components.)

Implementation 11 Explicit parent references May facilitate traversal and management of a composite structure; often defined in the component class. Need to be maintained. Sharing components E.g. to reduce storage requirements it is often useful to share components. ( Flyweight Pattern) Size of the component interface To make clients unaware of the specific Leaf or Composite classes the Component class should define as many operations for Composite and Leaf as possible. (May require a little creativity.) (next page)

Structure 12 Component {abstract} Leaf Client Issue - General Design Principle: A class should only define methods meaningful to its subclasses. operation() add(component) remove(component) getchild(int) Composite children Sometimes some creativity is needed! operation() «method» { forall g in children g.operation() } operation() add(component) remove(component) getchild(int)

The Composite Design Pattern - Implementation The GoF Design Patterns - Composite Pattern Placing child management operations - who declares them? at the root (Component) is convenient, but less safe because clients may try to do meaningless things in Composite is safe 13 operation() Component {abstract} Composite declaration children Component {abstract} operation() add(component) remove(component) getchild(int) Composite children Trade-off between safety and transparency. operation() add(component) remove(component) getchild(int) operation() add(component) remove(component) getchild(int)

Example - Component Class 14 Computer equipment contains: drives, graphic cards in the PCIe slots, memory, and more. Such a part-whole structure can be modeled naturally with the Composite pattern.

Example - Component Class 15 public abstract class Equipment { private String name; public String name() { return name; } public abstract int price(); // more methods, e.g., for power consumption etc. } // Child management public abstract void add(equipment eq); public abstract void remove(equipment eq); public Iterator<Equipment> iterator(){ return NULL_ITERATOR; };

Example - Leaf Class 16 public class HardDisk extends Equipment { public int price() { return 50; } }...

Example - Composite Class 17 public class CompositeEquipment extends Equipment {... public int price() { int total = 0; for (int i=0; i < equipment.length; i++) total += equipment[i].price(); return total; } public void add(equipment eq) {...}; public void remove(equipment eq) {...}; } public Iterator<Equipment> iterator() {...};

Example - Demo Usage 18 public class Chassis extends CompositeEquipment{ } public class Bus extends CompositeEquipment{ } public class Card extends Equipment{ } public class Mainboard extends CompositeEquipment{ } }Further Definitions Chassis chassis = new Chassis(); Mainboard mainboard = new Mainboard( Hypermulticore ); Bus bus = new Bus("PCIe Bus"); DEMOCODE chassis.add(new HardDisk("Personal 2Tb Drive")); chassis.add(new HardDisk( 512GB PCIe - SSD )); chasses.add(mainboard); mainboard.add(bus); bus.add(new Card("Graphics Card")); bus.add(new HardDisk("YetAnotherDisk")); // checks required...? System.out.println("Total price: " + chassis.price() );

Known Uses 19 View class of Model/View/Controller Application frameworks & toolkits ET++, 1988 Graphics, 1988 Glyphs, 1990 InterViews, 1992 Java (AWT, Swing, Files)

Related Patterns 20 Iterator Traverse composite Visitor To localize operations that are otherwise distributed across Composite and Leaf classes Chain of Responsibility Use components hierarchy for task solving Flyweight For sharing components Will be discussed later (as part of more advanced lectures.)

Summary 21 The Composite Design Pattern facilitates to compose objects into tree structures to represent partwhole hierarchies. Apply the composite pattern if clients can treat individual objects and compositions of objects uniformly.