42
1 Stefan Resmerita, WS2015 State Diagram: is this example ok?

State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

1 Stefan Resmerita, WS2015

State Diagram: is this example ok?

Page 2: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

2 Stefan Resmerita, WS2015

The Decorator

Construction

Principle

Page 3: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

3 Stefan Resmerita, WS2015

Motivation: Changes of a Class With Many

Subclasses (I)

Changes of M3() and M7() of class A necessary

Change source text of A, if available?

Change by inheritance?

Page 4: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

4 Stefan Resmerita, WS2015

Motivation: Changes of a Class With Many

Subclasses (II)

For one class (e.g., A1m) the adaptation is meaningful

For all subclasses of A this is too complicated

Page 5: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

5 Stefan Resmerita, WS2015

Motivation: Changes of a Class With Many

Subclasses (III)

In programming languages that support multiple inheritance, so-called mixin classes can be defined.

Nevertheless a subclass must be formed for each class whose behavior is to be adapted.

Page 6: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

6 Stefan Resmerita, WS2015

Adapting a class by composition rather than by

inheritance

All A’s methods are overwritten in the class WrapperOfA, as the method call is delegated in each case to an object referenced by the instance variable wrappedA - with exception of those which are changed.

Since WrapperOfA is a subclass of A, any time an object of static type A is demanded, an instance of the class WrapperOfA can be used. Since the instance variable wrappedA has the static type A, it can refer to each object of a subclass of A.

“decorated” A

Page 7: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

7 Stefan Resmerita, WS2015

Decorator: Adaptation by composition with as

many objects as desired

The names of the template and hook methods are the same

Setting of the decorated object with SetH()

An instance of the decorator (filter) T as well as an instance of a

subclass of H can be used by clients just like any H-object.

However, the behavior of the H-object is modified accordingly.

H + decorator(s) can be used as a single object (see Composite).

Page 8: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

8 Stefan Resmerita, WS2015

Design suggestion when using several

Decorator classes

Page 9: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

9 Stefan Resmerita, WS2015

Exemples of Compositions

Page 10: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

10 Stefan Resmerita, WS2015

Example: Smoothing Flight Patterns

Page 11: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

11 Stefan Resmerita, WS2015

Page 12: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

12 Stefan Resmerita, WS2015

Use of the Decorator Class Smoother

FlightPattern triangle= new FlightPattern();

triangle.SetStartPos(...);

triangle.AddSeg(new Smoother(new Line(...)));

triangle.AddSeg(new Smoother(new Line(...)));

triangle.AddSeg(new Line(...));

Page 13: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

13 Stefan Resmerita, WS2015

Basic conditions for the application of the

Decorator construction principle (I)

The signature of H, which is the root class of the

subtrees, should not be extended by the subclasses of

H. The reason for this is that additional methods in the

subclasses cannot be considered into the Decorator.

In order to guarantee fulfillment of this demand, it is

necessary to transfer the common aspects of all

subclasses of H into the root class. This requirement is

not satisfied by many class libraries. In such cases, the

application of the Decorator construction principle is not

possible to full extent (see Decorator Smoother).

Page 14: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

14 Stefan Resmerita, WS2015

Basic conditions for the application of the

Decorator construction principle (II)

In our example, some specific methods for the mentioned objects must be explicitly

called – for example, SetDirection() in Circle - since they cannot be passed on by a

Smoother instance:

Circle circle= new Circle (...);

circle.SetDirection (cRight);

Smoother smoother= new Smoother (circle);

If the mentioned demand would be fulfilled, a Smoother instance could be treated like

each specific FlightSegment object:

Smoother smoother= new Smoother (new Circle (...));

smoother.SetDirection (cRight);

A possibility of eliminating the flight-segment-specific methods is to let all characteristics

be indicated only over the constructor of the respective class:

Smoother smoother= new Smoother (new Circle (…, cRight));

Page 15: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

15 Stefan Resmerita, WS2015

Application of the Decorator principle to the

design of more “lightweight” root classes

The Decorator construction principle can be used to

make classes close of the root of the class tree more

lightweight. Functionality that is not needed in all classes

is implemented in Decorator classes. Only the objects

which need this special functionality receive it by

composition with the appropriate Decorator instance.

The Decorator construction principle can be fruitfully

used both with the (first) design of a class hierarchy and

with the extensions of class hierarchies.

Page 16: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

16 Stefan Resmerita, WS2015

Example: Clipping Mechanism in GUI libraries

Clipping mechanism: cutting a GUI element to its fixed

size

Since the Clipping mechanism is not needed for all GUI

elements, it is meaningful to plan the Clipping

mechanism by a decorator class Clipper rather than in

the root of the subtree (see the Decorator example in

Gamma et al., 1995).

Page 17: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

17 Stefan Resmerita, WS2015

Summary Decorator

+ Simple adaptation by object composition

+ New decorator elements can be defined, without having

to change existing subclasses of the Hook class

+ „More lightweight “classes can be realized elegantly

- The Hook class should fulfill the mentioned basic

condition (factoring in behavior from all subclasses)

- Additional indirection in method calls

- Complex interactions between involved objects

Page 18: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

18 Stefan Resmerita, WS2015

The Chain of

Responsibility

Construction

Principle

Page 19: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

19 Stefan Resmerita, WS2015

Chain Of Responsibility (COR)

public void M(){

... // try to satisfy the request

if (requestSatisfied == true)

return;

else

nextTH.M();

}

:Client :TH

:TH

M() M()

Page 20: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

20 Stefan Resmerita, WS2015

COR by Gamma et al.

Different implementation of request servicing (the hook part) are provided by subclassing

The subclasses must also care for the template part!

TH

M()

nextTH

1

TH1

M()

TH2

M()

Page 21: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

21 Stefan Resmerita, WS2015

COR With a Separate Hook

public final void TM(){

requestSatisfied = HM();

if (requestSatisfied == true)

return;

else

nextTH.TM();

}

TH

TM()

HM():bool

nextTH

1

TH1

HM()

TH2

HM()

t

h

Page 22: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

22 Stefan Resmerita, WS2015

Application: Factory Floor Automation

Grid layout

Processing machines

Mobile robots navigate between machines

Robot2

Machine1

Machine2

Machine3

Machine4 Robot1

Page 23: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

23 Stefan Resmerita, WS2015

Examples of robots

Transportation robots

Cleaning robots

Painting robots

Teams of robots!

Page 24: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

24 Stefan Resmerita, WS2015

Example: COR and Composite

Team111

TranspRobot1 TranspRobot2

Team11

Team112

Team1

Team12

PaintRobot1 PaintRobot2

CleanRobot2 TranspRobot4

CleanRobot1

Page 25: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

25 Stefan Resmerita, WS2015

Summary of the

Characteristics of OO

Construction

Principles

Page 26: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

26 Stefan Resmerita, WS2015

Characteristics of Template and Hook Methods

Construction Principles

Hook Method Hook Object Composite Decorator COR

Featu

res o

f T

() a

nd H

()

Pla

cin

g

Nam

ing

In

herita

nce

T() and H()

in the same

class

T() and H() in separate classes

T() = H()

T() and H()

have different names

T() and H()

have the same name

n.a.

T inherits from H

T() = H()

Page 27: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

27 Stefan Resmerita, WS2015

Adaptability

Construction Principles

Hook Method Hook Object Composite Decorator COR

Num

ber

of

involv

ed o

bje

cts

Adap

tabili

ty

1

1(T) + 1(H)

or

1(T) + N(H)

N objects which are used in the same

way as a single object

By inheritance

and

instantiation of

the

corresponding

subclass

By object composition

(at runtime, if necessary )

Page 28: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

28 Stefan Resmerita, WS2015

Construction

Principles and

Design Patterns

Page 29: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

29 Stefan Resmerita, WS2015

14 out of the 23 Design Patterns from Gamma

et al. Refer to OO Product Families

aa

Konstruktionsprinzipien für OO Produktfamilien

Entwurfsmuster für OO Produktfamilien

basiert auf

Factory Method

Template MethodBridge

State

Strategy

Observer

Command

Builder Abstract Factory

Prototype

Interpreter

Hook-Method Hook-Object

Composite

Chain-Of-Responsibility

Decorator

Page 30: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

30 Stefan Resmerita, WS2015

Template and Hook Methods in the Factory

Method Design Pattern

Page 31: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

31 Stefan Resmerita, WS2015

Factory Method Example

Transportation

getNewVehicle():Vehicle

getPrice(j:Job):float

checkAvailable(j:Job):bool

TranspRequest(j:Job):bool

Vehicle

Move()

SetJob(j:Job)

StartJob(j:Job)

*

RoadTransportation

getNewVehicle():Vehicle

getPrice(j:Job):float

Truck

Move()

Page 32: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

32 Stefan Resmerita, WS2015

Semantics of the Hook method/class is the

basis for the naming in Design Patterns

The name and the functionality of the Hook method and/or the Hook class express which aspect is kept flexible in a design pattern.

In the Factory Method the object production is kept flexible.

The same applies to the design patterns Abstract Factory, State, Strategy, Builder, Observer, Command, Prototype and Interpreter.

This kind of the naming is meaningful and therefore it is recommended in the development of new design patterns. We postulate the following rule: Hook semantics determines the name of the design pattern. This enables a systematical designation of DPs.

Page 33: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

33 Stefan Resmerita, WS2015

Flexible Object Production Based on Meta-

Information (e.g. in Java and C#)

+ No subclassing necessary

- Static type checking is bypassed

Page 34: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

34 Stefan Resmerita, WS2015

Factory Method (Hook Method)

Abstract Factory (Hook Object)

The Hook method FactoryMethod () is simply shifted in a

separate class or interface

Page 35: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

35 Stefan Resmerita, WS2015

Abstract Factory Example

RobotFactory

CreateTranspRobot()

CreatePaintRobot()

CreateCleanRobot()

IRobotFactory

CreateTranspRobot()

CreatePaintRobot()

CreateCleanRobot()

RoboSoftFactory

CreateTranspRobot()

CreatePaintRobot()

CreateCleanRobot()

SimulatorEngine

processUserCommand()

1 refRobotFactory

// if user command is „TransportItem“

refRobotFactory.CreateTranspRobot()

return new IRobotTransport();

return new RobSoftTransport();

Page 36: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

36 Stefan Resmerita, WS2015

The Strategy Design Pattern: Structure

Used when

A family of algorithms is needed

A behavior is selected from a given set of behaviors at

runtime

Page 37: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

37 Stefan Resmerita, WS2015

The Strategy Design Pattern: Example

LocationCalculator

getNextLocation(crLoc):

Point

*

ShortestLength

genPath(j:Job):Path

ShortestTime

genPath(j:Job):Path

Robot

target: Point

currLocation: Point

initialize()

takeJob(j:Job):bool

setOpMode(om:OPMODE)

execute()

nextLocCalc

if (om.equals(OPMODE.NORMAL))

nextLocCalc = new ShortestLength();

else if (om.equals(OPMODE.EMERGENCY))

nextLocCalc = new ShortestTime();

nextLocCalc.getNextLocation(currLocation);

Page 38: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

38 Stefan Resmerita, WS2015

The State Design Pattern: Structure

Use:

To implement state transition logic of the type

event[condition]/action without large conditional

statements

When the same event may occur in different states with

different conditions or actions

Page 39: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

39 Stefan Resmerita, WS2015

The State Design Pattern: Example

RobotState

powerOff(r:Robot)

startJob(r:Robot)

Error

powerOff(r:Robot)

startJob(r:Robot)

Robot

processEvent(event:String)

startMoving()

stopMoving()

logErrorMessage()

saveJobStatus()

state

Executing

powerOff(r:Robot)

startJob(r:Robot)

Traveling

powerOff(r:Robot)

startJob(r:Robot)

Ready

powerOff(r:Robot)

startJob(r:Robot)

Idle

powerOff(r:Robot)

startJob(r:Robot)

Page 40: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

40 Stefan Resmerita, WS2015

The Flyweight Design Pattern: Structure

Use:

To avoid employing a large number of objects with similar state

When objects with intrinsic state can be re-used by different clients

Page 41: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

41 Stefan Resmerita, WS2015

The Flyweight Design Pattern: Example(I)

Robot2

Machine1

Machine2

Machine3

Machine4 Robot1

Intersection of type B Intersection of type A

Page 42: State Diagram: is this example ok? · Mobile robots navigate between machines Robot2 Machine1 Machine2 Machine3 Robot1 Machine4. 23 Stefan Resmerita, WS2015 Examples of robots

42 Stefan Resmerita, WS2015

The Flyweight Design Pattern: Example(II)

New intersection types can be easily added!

FactoryFloor

segments:Grid

activePaths:Path[]

Intersection

resolveConflict(newPath,activePaths)

Intersection_A

resolveConflict(...)

Intersection_B

resolveConflict(...)

PathFinder

genPath(j:Job):Path

IntersectionStore

getIntersection(coordinates)