110
Software Development Alvaro Cuno Universidade Federal do Rio de Janeiro Laboratorio de Computação Gráfica, PESC/COPPE February, 2008

Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Embed Size (px)

Citation preview

Page 1: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Software Development

Alvaro Cuno Universidade Federal do Rio de Janeiro Laboratorio de Computação Gráfica, PESC/COPPE February, 2008

Page 2: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 2

Introduction

● Build applications is not write code only

● Today applications require increasingly sophisticated architectures and code

● We'll see that one of the biggest challenges is knowing what to write

Page 3: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 3

Introduction (cont.)

● Build applications is not write code only

● Today applications require increasingly sophisticated architectures and code

● We'll see that one of the biggest challenges is knowing what to write

● Learn useful concepts for planning and building applications ● flexible, efficient, reusable, and easily maintained

● Introduce design patterns as solutions to common programming scenarios

Page 4: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 4

Introduction (cont.)

● C++ is not difficult for programmers● A good language reference, books, tutorials, etc.● IDEs, debuggers, Libraries(STL, CGAL, BOOST, etc.), etc.● Multiplataform: Linux, Windows, Mac OS, etc

● The challenge is not the C++ language

● The real challenge is how to structure your application: it is deciding when and what classes to write

Page 5: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 5

Building Applications

Several methodologies -> several phases, but, in general:

1) Analysis

2) Design

3) Implementation

4) Testing

No linear

Thoroughness at each phase helps minimize the risk that you'll have to make major architectural changes later on, which could severely impact schedules and project success

Page 6: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 6

Analysis

● What the application is supposed to do?

ideas(often vague)

specific functional

requirements

small projects

large projects

t i m

e

Page 7: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 7

Analysis (cont.)

● What the application is supposed to do?

● Poor analysis = frustration● Developer: constantly guessing and refector● Managers: project no closed● Client: application no working● Customers: limited featured sets and bugs

ideas(often vague)

specific functional

requirements

small projects

large projects

t i m

e

Page 8: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 8

Analysis (cont.)

● What the application is supposed to do?

● Poor analysis = frustration● Developer: constantly guessing and refector● Managers: project no closed● Client: application no working● Customers: limited featured sets and bugs

ideas(often vague)

specific functional

requirements

small projects

large projects

t i m

e

The goal of analysis is to provide a CLEAR SPECIFICATION that

outlines the needs of the user. Unlike later phases, the analysis phase should be as non-technical as possible

Page 9: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 9

Analysis (cont.)

● The outcome of the analysis phase is generally a document

● There are several approaches to define functional requirements

Page 10: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 10

Analysis (cont.)

● The outcome of the analysis phase is generally a document

● There are several approaches to define functional requirements

(1) ................. (2) ................. (3) ................. (4) ................. (5) .................

Simple list of everything that the application should be able to do

Use Cases

Use cases present the application requirements by showing various ways in which users might interact with the application

BriefCasualFormal

Page 11: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 11

Analysis (cont.)

Page 12: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 12

Analysis (cont.)

Page 13: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 13

Analysis (cont.)

Page 14: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 14

Design Phase

● How?

● The outcome of the design phase is a document that it will help you break up the application development into individual tasks

specific functional

requirements

subsystems and classes that you will use and the

relationships between them.

Page 15: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 15

Design Phase (cont.)

● Tasks● Classes determination● Responsabilities of each class● The class collaborators● The relationships each class has with those collaborators● Formalizing Public APIs (the public methods of the classes)

Page 16: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 16

Design Phase (cont.)

● Classes determination● Deciding what constitutes a class is as much an art as it is a

science● It's often a good idea to look at your use cases to find

classes. Classes are nouns● From that use case we can easily identify these relevant

nouns which are natural candidates for classes: "address form,” "address data,” "mapping service,” "map data,” and "map”

Page 17: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 17

Design Phase (cont.)

● Responsabilities of each class, ● A responsibility is essentially what a class (or an instance of

the class) should be able to do or facilitate● A responsibility is usually something that can be written out

in plain language in a few words, ex:● Create user input form, Validate user input● Handle requests and responses to and from server-side service● Draw vector map from data model

● As you work on determining the responsibilities for the classes in your application, you will most likely drop classes, add classes, and change existing classes.

Page 18: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 18

Design Phase (cont.)

● The class collaborators● To fulfill their responsabilities classes must rely on other classes to

assist them. These collaborators generally lend a hand either by providing data or by enabling the class to offload functionality

● Locating collaborators is useful for us in terms of determining relationships between existing classes or to create new classes

● The relationships each class has with those collaborators

● Association(uses), aggregation(has a), inheritance(is a)

● Formalizing Public APIs (the public methods of the classes)

Page 19: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 19

Implementation

● Write the code you have planned out

classes ...

C++ code

Page 20: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 20

Implementation (cont.)

● Coding conventions● Classes, variables, functions● Consistent and conscious coding conventions are a boon to

application development● By applying conventions consistently you can expect to

write code that is easily read by you and anyone else during team development

● int year; Map city; Map cityMap; private Map _cityMap:● void getMapDataForAddress(AddressData address);

● Comments: doxigen

Page 21: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 21

Implementation (cont.)

● Coding conventions example

Page 22: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 22

Implementation (cont.)

● Encapsulation● Classes should be black boxes● You only can put things in and take things out● Example

● student.grade = 14; // outside of the valid range

Page 23: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 23

Implementation (cont.)

● Composition and inheritance

● Advantages and Disadvantages

Page 24: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 24

Implementation (cont.)

● Coupling● tight coupling ● loose coupling

● Loose coupling creates flexible and adaptable systems.

● If objects are tightly coupled, the system is rigid. One change in one object can cascade and break the entire system.

Page 25: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 25

Testing

● Run test cases to determine that the application behaves as expected and to try to catch any bugs

● New bugs will be introduced during bug fixing and old fixed bugs will re-emerge

● Who?● quality assurance (QA) group● developers

● How?● no automated tests● automated tests

Page 26: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 26

Architectural Patterns

Page 27: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 27

Introduction

● Software patterns that offer well-established solutions to architectural problems in software engineering

● Express a structural organization schema for a software system, which consists of subsystems, their responsibilities and interrelations

● In comparison to design patterns, architectural patterns are larger in scale

Page 28: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 28

Three-tier architecture

● Each tier is developed and maintained as a independent module

● Conceptually the three-tier architecture is linear contrary to the MVC which is triangular

Page 29: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 29

Model View Controller

MVC is often seen in web applications

● View: HTML page

● Controller: code that gathers dynamic data and generates the content within the HTML

● Model: current content, usually stored in a DB

Page 30: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 30

Pipeline

Process 1 Process 2 Process n

● A simple pipeline● the output of each element is the input of the next

Page 31: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 31

More patterns

● Implicit invocation

● Blackboard system

● Peer-to-peer

● Service-oriented architecture

● Naked objects

Page 32: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 32

Design Patterns

Page 33: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 33

Introduction

● As you build more and more applications, you'll start to find that there are patterns that emerge time and time again

● There are certain ways to accomplish tasks and solve common problems that occur frequently

● Don't reinvent the wheel each time

● Learning the design patterns helps you more quickly identify intelligent and effective ways to structure each new application

Page 34: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 34

Introduction (cont.)

● These patterns and what we have to say about the patterns is not intended to be held as gospel

● It is intended to serve as a guide and an inspiration for your own application development

● These patterns are not rules. Read everything with an open and alert, yet critical, mind.

Page 35: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 35

Advantages

● DP help you build a common vocabulary to effectively communicate with other developers

● The Car example

Page 36: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 36

Design patterns

1) Creational patterns

2) Behavioral patterns

3) Structural patterns

Page 37: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 37

Creational patterns

● Creational patterns show how to make the design more flexible, not necessarily smaller

● Creational class patterns defer some part of object creation to subclasses

● Creational object patterns defer it to another object

Page 38: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 38

Example: Building a Maze

● Components of the maze

Page 39: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 39

Example: Building a Maze

Page 40: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 40

Example: Building a Maze

Page 41: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 41

Example: Building a Maze

Page 42: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 42

Example: Building a Maze

● Additional requirements:● Room with a bomb set in it. ● If the bomb goes off, it will damage the walls (at least)● Enchanted room● Magic door

Page 43: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 43

Example: Building a Maze

● Problems with the naive implementation● Inflexibility● Doesn't promote reuse● It's difficult to change the classes that define the

components of the maze● Simple maze -> Enchanted maze● Room -> Enchanted room

Page 44: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 44

FACTORY METHOD

● Allows you to trigger the creation of objects in an abstract class, but to defer the specific type to the subclass

● Link up two or more separate but related class hierarchies

Page 45: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 45

Factory Method: Applicability

● A class can't anticipate the class of objects it must create

● A class wants its subclasses to specify the objects it creates

● Classes delegate responsibility to one of several helper subclasses, and you want to localize the knowledge of which helper subclass is the delegate

Page 46: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 46

Factory Pattern: Structure

Page 47: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 47

Factory Method: Consequences

● Factory methods eliminate the need to bind application-specific classes into your code.

● The code only deals with the Product interface; therefore it can work with any user-defined ConcreteProduct classes

● A potential disadvantage of factory methods is that clients might have to subclass the Creator class just to create a particular ConcreteProduct object

Page 48: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 48

Factory Method: Building a Maze

Page 49: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 49

Factory Method: Building a Maze

BombedWall

RoomWithABomb EnchantedRoom

DoorNeedingSpell

BombedMazeGame EnchantedMazeGame

Page 50: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 50

Factory Method: Source Code

Page 51: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 51

Factory Method: Source Code

Page 52: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 52

Factory Method: Source Code

Page 53: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 53

Factory Method: Source Code

Page 54: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 54

Factory Method: Source Code

Page 55: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 55

Factory Method: Source Code

Page 56: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 56

ABSTRACT FACTORY

● Provide an interface for creating families of related or dependent objects without specifying their concrete classes

Page 57: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 57

Abstract Factory: Applicability

● A system should be independent of how its products are created, composed and represented

● A system should be configured with one of multiple families of products

● A family of related product objects is designed to be used together, and you need to enforce this constraint

● You want to provide a class library of products, and you want to reveal just their interfaces, not their implementations

Page 58: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 58

Abstract Factory: Structure

Page 59: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 59

Abstract Factory: Consequences

● It isolates concrete classes

● It makes exchanging product families easy

● It promotes consistency among products

● Supporting new kinds of products is difficult

Page 60: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 60

Abstract Factory: Source Code

Page 61: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 61

Abstract Factory: Source Code

Page 62: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 62

Abstract Factory: Source Code

Page 63: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 63

Abstract Factory: Source Code

Page 64: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 64

BUILDER

● Separate the construction of a complex object from its representation so that the same construction process can create different representations

Page 65: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 65

Builder: Applicability

● The algorithm for creating a complex object should be independent of the parts that make up the object and how they are assembled

● The construction process must allow different representations for the object that's constructed

Page 66: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 66

Builder: Structure

Page 67: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 67

Builder: Consequences

● It lets you vary a product's internal representation: Define a new kind of builder

● It isolates code for construction and representation: Clients needn't know anything about the classes that define the product's internal structure

● It gives you finer control over the construction process: Only when the product is finished does the director retrieve it from the builder

Page 68: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 68

Builder: Source Code

Page 69: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 69

Builder: Source Code

Page 70: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 70

Builder: Source Code

Page 71: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 71

Builder: Source Code

Page 72: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 72

Structural patterns

● Structural patterns are concerned with how classes and objects are composed to form larger structures

● Structural class patterns use inheritance to compose classes● Structural object patterns describe ways to assemble objects

to realize new functionality at run-time

● Examples: Adapter, Bridge, Composite, Decorator, Facade

Page 73: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 73

ADAPTER

● Convert the interface of a class into another interface clients expect

● Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces

Page 74: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 74

Adapter: Motivation

● Drawing editor example

Page 75: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 75

Adapter: Applicability

● You want to use an existing class, and its interface does not match the one you need

● You want to create a reusable class that cooperates with classes that don't necessarily have compatible interfaces

● (object adapter only) you need to use several existing subclasses, but it's impractical to adapt their interface by subclassing every one. An object adapter can adapt the interface of its parent class

Page 76: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 76

Class adapter Object adapter Multiple inheritance Object composition

Adapter: Structure

Participants

Page 77: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 77

Adapter: Consequences

● Class adapters● won't work when we want

to adapt a class and all its subclasses

● lets Adapter override some of Adaptee's behavior

● introduces only one object(no additional pointer indirection is needed)

● Object adapters● lets a single Adapter work

with the Adaptee itself and all of its subclasses

● makes it harder to override Adaptee behavior

Page 78: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 78

Adapter: Sample code

Page 79: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 79

Adapter: Sample codeClass Adapter:

Page 80: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 80

Adapter: Sample code

Page 81: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 81

DECORATOR

● Attach additional responsibilities to an object dynamically

● Decorators provide a flexible alternative to subclassing for extending functionality

Page 82: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 82

Decorator: Motivation

Page 83: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 83

Decorator: Applicability

● To add responsibilities to individual objects dynamically and transparently, that is, without affecting other objects

● For responsibilities that can be withdrawn

● When extension by subclassing is impractical

Page 84: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 84

Decorator: Structure

Page 85: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 85

Decorator: Consequences

● More flexibility than static inheritance

● Avoids feature-laden classes high up in the hierarchy

● A decorator and its component aren't identical

● Lots of little objects

Page 86: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 86

Decorator: Implementation

● Interface conformance

● Omitting the abstract Decorator class

● Keeping Component classes lightweight

● Changing the skin of an object versus changing its guts

Page 87: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 87

Decorator: Sample Code

Page 88: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 88

Decorator: Sample Code

Page 89: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 89

Behavioral Patterns

● Identify common communication patterns between objects

● Behavioral class patterns use inheritance to distribute algorithms and flow of control

● Behavioral object patterns use object composition rather than inheritance to describe how a group of objects cooperate to perform a task that no single object can carry out alone

● Examples: Template Method, Interpreter, Mediator, Chain of responsability, Observer, etc.

Page 90: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 90

TEMPLATE METHOD

● Define the skeleton of an algorithm in an operation, deferring some steps to subclasses.

● Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.

Page 91: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 91

Template Method: Motivation

● A framework provides Application and Document classes

Page 92: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 92

Template Method: Motivation

● The abstract Application class defines the algorithm for opening and reading a document in its OpenDocument operation:

OpenDocument == The Template Method

Page 93: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 93

Template Method: Applicability

● To implement the invariant parts of an algorithm once and leave it up to subclasses to implement the behavior that can vary

● When common behavior among subclasses should be factored and localized in a common class to avoid code duplication

● To control subclasses extensions

Page 94: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 94

Template Method: Structure

Participants

● AbstractClass: ● Defines abstract primitive

operations● Implements a template

method defining the skeleton of an algorithm

● ConcreteClass● Implements the primitive

operations

Page 95: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 95

Template Method: Consequences

● Template methods are the means for factoring out common behavior in library classes

● Template methods call the following kinds of operations: concrete operations, concrete AbstractClass operations, primitive operations, factory methods, hook operations

Page 96: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 96

Template Method: Implementation

● Using C++ access control● Primitive operations == protected members● Primitive operations ~= declared pure virtual● Template Method == nonvirtual member function

● Minimizing primitive operations

● Naming conventions: "Do-", "DoCreateDocument", "DoRead"

Page 97: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 97

Template Method: Sample Code

Page 98: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 98

MEDIATOR

● Define an object that encapsulates how a set of objects interact

● Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently

Page 99: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 99

Mediator Pattern: Motivation

● Implementation of dialog boxes in a GUI

Page 100: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 100

Mediator Pattern: Applicability

● A set of objects communicate in well-defined but complex ways

● Reusing an object is difficult because it refers to and communicates with many other objects

● A behavior that's distributed between several classes should be customizable without a lot of subclassing

Page 101: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 101

Mediator Pattern: Structure

Participants

● Mediator: Defines an interface

● Concrete Mediator● Implements cooperative behaviors ● knows and maintains its colleagues

● Colleague Classes: each colleague communicates with its mediator and not with another colleague

Page 102: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 102

Mediator Pattern: Consequences

● This pattern has the following benefits and drawbacks:● It limits subclassing● It decouples colleagues● It simplifies object protocols● It abstracts how objects cooperate● It centralizes control

Page 103: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 103

Mediator Pattern: Implementation

● Omitting the abstract Mediator class

● Colleague-Mediator communication

Page 104: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 104

Mediator Pattern: Sample Code

Page 105: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 105

Mediator Pattern: Sample Code

Page 106: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 106

Mediator Pattern: Sample Code

Page 107: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 107

Mediator Pattern: Sample Code

Page 108: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 108

Mediator Pattern: Sample Code

Page 109: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 109

Mediator Pattern: Sample Code

Page 110: Software Development - Federal University of Rio de Janeiroorion.lcg.ufrj.br/C++/curso/ppts/cap17.pdf · Software Development Alvaro Cuno ... More patterns Implicit invocation Blackboard

Fev 2008 110

Bibliography● Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.

Design Patterns: Elements of Reusable Object-Oriented Software. November 2004

● Anonymous. Design_Patterns. Wikipedia, the free encyclopedia. http://en.wikipedia.org/wiki/Design_Patterns [Accessed Jan 2008].

● Andrei Alexandrescu. Modern C++ Design: Generic Programming and Design Patterns Applied. February 2006

● Joey Lott, Danny Patterson. Advanced ActionScript 3 with Design Patterns. Adobe Press. November 2006.

● Olsen Russ. Design Patterns in Ruby. Addison-Wesley. December 2007.