106
Design Patterns and Frameworks, © Prof. Uwe Aßmann 1 2. Simple Patterns for Variability Prof. Dr. U. Aßmann Chair for Software Engineering Faculty of Informatics Dresden University of Technology WS 14/15, 21.10.2014 Lecturer today: Christian Piechnick [email protected] 1) Basic Template-And-Hook Patterns 2) Faceted Objects with Bridges 3) Layered Objects 4) Dimensional Systems 5) Layered Systems

2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

Design Patterns and Frameworks, © Prof. Uwe Aßmann 1

2. Simple Patterns for Variability

Prof. Dr. U. Aßmann

Chair for Software Engineering

Faculty of Informatics

Dresden University of Technology

WS 14/15, 21.10.2014

Lecturer today:

Christian Piechnick

[email protected]

1) Basic Template-And-Hook Patterns

2) Faceted Objects with Bridges

3) Layered Objects

4) Dimensional Systems

5) Layered Systems

Page 2: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

2

Literature (To Be Read)

► V. Caisin. Creational Patterns. Paper in Design Pattern seminar, IDA, 2001.

Available at home page.

► GOF, Chapters on Creational and Structural Patterns

► Another good book:

Head First Design Patterns. Eric Freeman & Elisabeth Freeman,

mit Kathy Sierra & Bert Bates. O'Reilly, 2004, ISBN 978-0-596-00712-6

German Translation

Entwurfsmuster von Kopf bis Fuß. Eric Freeman & Elisabeth Freeman, mit Kathy

Sierra & Bert Bates. O'Reilly, 2005, ISBN 978-3-89721-421-7

Page 3: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

3

Secondary Literature

► D. Karlsson. Metapatterns. Seminar Design Patterns, IDA, Linköpings universitet,

2001.

► W. Pree. Design Patterns for Object-Oriented Software Development.

Addison-Wesley, 1995. Unfortunately out of print.

► W. Zimmer. Relationships Between Design Patterns. Pattern Languages of

Programming (PLOP) 1995.

► Uta Priss. Faceted Information Representation. Electronic Transactions in

Artificial Intelligence (ETAI). 2000(4):21-33.

► R. Prieto-Diaz, P. Freeman. Classifying Software for Reusability. IEEE

Software, Jan 1987. Prieto-Diaz has introduced facet-based classifications in

software engineering. Surf also on citeseer for facets.

► Don Batory, Vivek Singhal, Jeff Thomas, Sankar Dasari, Bart Geraci, and Marty

Sirkin. The GenVoca Model of Software-System Generation. IEEE Software,

11 (5), Sept. 1994, pp 89—94.

Page 4: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

4

Goal

1. Understanding Templates and Hooks

• Template Method vs Template Class

• Dimensional Class Hierarchy

2. Understanding why Bridges implement faceted objects

3. Understanding layered systems

Page 5: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

Design Patterns and Frameworks, © Prof. Uwe Aßmann 5

2.1) Basic Template and Hook Patterns

Page 6: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

6

The Problem

Page 7: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

7

The Problem

Page 8: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

8

The Problem

Page 9: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

9

The Problem

Page 10: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

10

The Problem

Page 11: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

11

The Problem

Variable PartCan be exchanged

Common PartStays fixed

HOOK

TEMPLATE

Page 12: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

12

The Problem

Page 13: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

13

The Problem

► How to produce several products from one code base?

► Design patterns often center around

■ Things that are common to several applications

Commonalities lead to frameworks or product lines

■ Things that are different from application to application

Variabilities to products of a product line

Office Backbone

Word Processor Presentation Tool Spreadsheet Tool

HOOKTEMPLATE

Page 14: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

14

Pree's Template&Hook Conceptual Pattern

► Pree invented a template-and-hook (T&H) concept for the communality/variability

knowledge in design patterns [Pree] [Karlsson]

► Templates contain skeleton code

■ Common for the entire product line

► Hooks are placeholders for the instance-specific code

■ Only for one product

■ Also called slots, hotspots

Fixed part of design pattern

Template: commonality

Flexible part of design pattern

Hook: variability

Context

Page 15: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

15

The Template Method Design Pattern

...

primitiveOperation1();

...

primitiveOperation2();

...

AbstractClass

TemplateMethod()

primitiveOperation1()

primitiveOperation2()

ConcreteClass

primitiveOperation1()

primitiveOperation2()

► Define the skeleton of an algorithm (template

method)

■ The template method is concrete

► Delegate parts to abstract hook methods (slot

methods) that are filled by subclasses

■ Requires inheritance

► Implements template and hook with the same

class, but different methods

Page 16: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

16

Template Method Example: Actors & Genres

► Binding an Actor's hook to be a ShakespeareActor or a TV actor

...

recite();

...

dance();

...

Actor

play()

recite()

dance()

ShakespeareActor

recite()

dance()

TVActor

recite()

dance()

Page 17: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

17

Variability with Template Method

► Allows for varying behavior

■ Separate invariant parts from variant parts of an algorithm

■ TemplateMethod differs slighly from polymorphism:

For a polymorphic method, one needs several subclasses

► Binding the hook (slot) means to

■ Derive a concrete subclass from the abstract superclass, providing the

implementation of the hook method

► Controlled extension by only allowing for binding hook methods, but not overriding

template methods

Binding the

hooks with hook

values (method

implementations)Conrete

template method

Abstract

hook method

Concrete

hook method

Page 18: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

18

Consequences

► The design pattern TemplateMethod realizes the

conceptual pattern T&H on the level of Methods

■ TemplateMethod – HookMethod

► Basis for other design patterns:

■ FactoryMethod

■ TemplateClass

Page 19: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

19

Variability vs Extension

► The T&H concept occurs in two basic variants

■ Binding of hooks or extension of hooks:

a slot, is a hook that can be bound only once (unextensible hook,

only bindable)

■ Hooks can be extensible

■ Extension patterns are treated later

Binding a hook (slot)

with a hook value

Extending a hook with

another hook value

Page 20: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

Design Patterns and Frameworks, © Prof. Uwe Aßmann 20

2.1.1 Template Method and Template Class

Page 21: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

21

What Happens If We Reify the Hook Method?

► Methods can be reified,

represented as objects

► In the TemplateMethod, the hook method can be split out of the class

and put into a separate object

► Reification is done by another basic pattern, the Objectifier [Zimmer]

Page 22: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

22

The Objectifier Pattern

► The pattern talks about basic polymorphism with objects (delegation)

■ Combined with an abstract class and abstract method

■ Clients call objects polymorphically

Objectifier

reifiedMethod()

ConcreteObjectifierA

reifiedMethod()

ConcreteObjectifierB

reifiedMethod()

Client

applicationMethod()

reference

reference.reifiedMethod();

Page 23: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

23

Objectifier Example: Different Students

► When preparing an exam, students may use different learning styles

► Instead of a method learn(),

an objectified method (LearningStyle class) can be used

LearningStyle

learn()

OnDemandLearning

learn()

ExhaustiveLearning

learn()

Student

prepareExam()

learningStyle

learningStyle.learn();

Page 24: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

24

T&H on the Level of Classes

► With the Objectifier, we can build now Template&Hook classes

■ Additional roles for some classes

. The template role

. The hook role

► Resulting patterns:

■ Template Class

■ Generic Template Class

■ Dimensional Class Hierarchies for variability with parallel class hierarchies

. Implementation of facets

. Bridge, Visitor

Page 25: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

25

Template Class

► Is combined from TemplateMethod + Objectifier

■ Explicitly fix a template class in the Objectifier

■ Template method and hook method are found in different classes

HookClass

hookMethod()

ConcreteHookValueA

hookMethod()

ConcreteHookValueB

hookMethod()

TemplateClass

templateMethod()

hookObject

hookObject.hookMethod();

Template Hook

Page 26: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

26

Template Method vs Template Class

...

primitiveOperation1();

...

primitiveOperation2();

...

AbstractClass

TemplateMethod()

primitiveOperation1()

primitiveOperation2()

primitiveOperation1()

primitiveOperation2()

ConcreteClass

HookClass

hookMethod()

ConcreteHookValueA

hookMethod()

TemplateClass

templateMethod()

hookObject

hookObject.hookMethod();

Template Hook

Template

Hook

Page 27: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

27

Template Class

► Similar to TemplateMethod, but

■ Hook objects can be exchanged at run time

■ Exchanging a set of methods at the same time

■ Consistent exchange of several parts of an algorithm (not only one method)

Page 28: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

28

Template Class

► This pattern is basis of

■ Bridge

■ Builder

■ Command

■ Iterator

■ Observer

■ Prototype

■ State

■ Strategy

■ Visitor

Page 29: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

29

Actors and Genres as Template Class

► Consistent exchange of recitation and dance behavior possible

ActorRealization

dance()

recite()

ShakespeareActor

dance()

recite()

TVActor

dance()

recite()

Actor

play()

realization

realization.dance();

realization.recite();

Template Hook

Page 30: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

30

Variability with TemplateClass

► Binding the hook means to

■ Derive concrete subclass from the abstract hook superclass

■ Concrete Class provides the implementation of the hook method

Template

Class

Binding the hooks with

hook values (method

implementations)

Concrete

template method

Abstract

Hook

Class

Abstract

hook (slot) method

Template

Class

Concrete

template method

Concrete

Hook

Class

Concrete

hook (slot) method

Page 31: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

31

The GOF-Pattern Strategy

► Variant of Template Class

► Hands out the roles client and algorithm

Strategy

algorithmInterface()

ConcreteStrategyA

algorithmInterface()

ConcreteStrategyB

algorithmInterface()

Client

contextInterface()

strategy

Client Algorithm

Page 32: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

32

GOF-Strategy is related to Template Class

► GOF Strategy has the same structure as Objectifier

■ Different incentive !

■ It is not for reifying methods, but for varying methods only

► TemplateClass also has a different incentive

■ Hence, TemplateClass hands out other roles for the classes

■ Client class is the template class

■ Strategy class is the hook class

Design Patterns may have the same structure and/or behavior,

but can have a different incentive

Page 33: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

33

Example for Strategy

► Encapsulate formatting algorithms

Exorter

export(Document d)

TextExporter

export(Document d)

TeXExporter

export(Document d)

TextApplication

save()

exporter

Client Algorithm

WordExporter

export(Document d)

Page 34: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

34

Generic Template Class

► TemplateClass can be realized with GenericTemplateClass

■ In languages with generic classes (C++, Java 1.5, C#, Sather, Cecil, Eiffel)

► The subclassing of the hook hierarchy is replaced by static generic expansion

■ Hence, more type safety, less runtime dispatch

HookClass

hookMethod()

ConcreteHookValueA

hookMethod()

ConcreteHookValueB

hookMethod()

TemplateClass

T hookObject

T extends HookClass

templateMethod()

ConcreteTemplateHookClassA

<ConcreteHookValueA>

A hookObject

ConcreteTemplateHookClassB

<ConcreteHookValueB>

B hookObject

bind T

with

bind T with

Page 35: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

35

Generic Text Exporter

Exporter

export(Document d)

TextExporter

export(Document d)

TeXExporter

export(Document d)

TextApplication

T hookObject

T extends Exporter

save()

TextApplicationWithTextExporter

<TextExporter>

TextExporter hookObject

TextApplicationWithTeXExporter

<TeXExporter>

TeXExporter hookObject

bind T

with

bind T with

WordExporter

export(Document d)

TextApplicationWithWordExporter

<WordExporter>

WordExporter hookObjectbind T with

Page 36: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

36

Further Work on Generic Template Parameterization

► See course CBSE

► GenVoca [Batory]

■ Generic template instantiation method for nested generics

■ Parameterization on many levels

■ Layered systems result

■ Realizable with nested C++ templates

■ See later

► Template Metaprogramming (www.boost.org)

■ Using template parameter for other purposes than hook classes

Page 37: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

Design Patterns and Frameworks, © Prof. Uwe Aßmann 37

2.1.2 Dimensional Class Hierarchies and Bridge

Page 38: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

38

HookClass

hookMethod()

hookMethod() hookMethod()

TemplateClass

templateMethod()

hookObject

//Implementation A

hookObject.hookMethod();

Template Hook

Variability Pattern Dimensional Class Hierarchies

MoreConcrete

TemplateClassA

templateMethod()

MoreConcrete

TemplateClassB

templateMethod()

ConcreteHookValueA ConcreteHookValueB

//Implementation B

hookObject.hookMethod();

Page 39: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

39

Dimensional Class Hierarchies

► Vary also the template class in a class hierarchy

■ The sub-template classes can change the template algorithm

■ Template method still calls the hook methods

■ Important: sub-template classes must fulfil the contract of the superclass

. Implementation can be changed,

. Interface and visible behavior must be the same

► Upper and lower layer (dimension)

■ Template method (upper layer) calls hook methods (lower layer)

► Both hierarchies can be varied independently

■ Factoring (orthogonalization)

■ Reuse is increased

► Basis for other patterns (Bridge, Visitor, …)

► Basis for implementation of facets

Page 40: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

40

Bridge Pattern

► The Bridge pattern is a variant of Dimensional Class Hierarchies (different incentive)

► The left hierarchy is called abstraction hierarchy,

the right implementation

■ Also handle vs body

► Separation of two hierarchies

Page 41: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

41

Implementation

operationImpl()

operationImpl() operationImpl()

Abstraction

operation()

imp

//Implementation A

impl.operationImpl();

Abstraction Implementation

Bridge

MoreConcrete

AbstractionA

operation()

MoreConcrete

AbstractionB

operation()

ImplementationA ImplementationB

//Implementation B

impl.operationImpl();

► Different incentive (Abstraction/Implementation)

Page 42: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

42

GeneratorImpl

generateData(data)

generateData(data) generateData(data)

DataGenerator

generate()

impl

data = parseTestData();

imp.generateData(data);

Abstraction

Implementation

Example: DataGenerator as Bridge

TestDataGenerator

generate()

ReportGenerator

generate()

ExhaustiveGenerator RandomGenerator

data = readFromForm();

imp.generateData(data);

Data data

Page 43: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

43

Bridge

► Both hierarchies can be varied independently

■ Factoring (orthogonalization)

■ Reuse is increased

► An abstraction can have several Bridges

■ Bridges can be replicated

■ Basis for implementation of facets

Page 44: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

44

GeneratorImpl

generateData(data)

generateData(data) generateData(data)

DataGenerator

generate()

impl

data = parseTestData();

imp.generateData(data);

Abstraction

Implementation

Example: DataGenerator as Bridge

TestDataGenerator

generate()

ReportGenerator

generate()

ExhaustiveGenerator RandomGenerator

data = data.cleanData();

imp.generateData(data);

Data data

Data

Data cleanData()

TestData cleanData() ReportData cleanData()

dataImplementation

StringData GraphData

Page 45: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

45

Basic Variability Patterns - Overview

TemplateMethod TemplateClass

Strategy

Generic

TemplateClass

Dimensional

ClassHierarchies

BridgeT&H Metapatterns

Objectifier

Page 46: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

46

Relations of Basic Patterns

► Pree book vs Gamma book

■ Pree and the GOF worked together for some time,

but then they published two different books

■ Pree's focus was on templates and hooks (framework patterns)

■ GOF on arbitrary patterns in arbitrary context

► One can take any GOF pattern and make it a framework pattern by introducing the

template-and-hook constraint

■ Or if you take away the template-hook constraint from a framework pattern,

you get an unconstrained general pattern

Page 47: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

47

Basic Variability Patterns - Overview

TemplateMethod TemplateClass

Strategy

Generic

TemplateClass

Dimensional

ClassHierarchies

BridgeT&H Metapatterns

Objectifier

Page 48: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

48

Relations

TemplateMethod TemplateClass

Strategy

DimensionalClass

Hierarchies

BridgeObjectifier

unconstraining

Different

incentives

unconstrainingconstraining

Unco

nstr

ain

ed

Pa

tte

rns

Te

mp

late

/Hoo

k P

att

ern

s

T&H Metapatterns

Page 49: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

Design Patterns and Frameworks, © Prof. Uwe Aßmann 49

2.1.3 Parallel Class Hierarchies (Bridges with Constraints)

Page 50: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

50

When the Dimensions cannot be Independently Varied

► Dimensions of Dimensional Class Hierarchies sometimes not independent

■ If one is varied, another must also be varied

► Dimensions have equal size and structure, i.e., are isomorphic

► Typically Example: Container classes and their elements

■ UML diagrams and their node and edge types

■ Figures and their figure elements

■ Record lists and their record types

Page 51: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

51

Parallel Hierarchies with Parallelism Constraint

► Both hierarchies, must be varied consistently

BoxElement

draw()

draw() draw()

Diagram

draw()

elements

ClassDiagram

draw()

StateChart

draw()

ClassBox StateBox

*

Page 52: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

Design Patterns and Frameworks, © Prof. Uwe Aßmann 52

2.1.4 Visitor

Page 53: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

53

Visitor

► Variant of DimensionalClassHierarchies

■ Template class hierarchy models a polymorphic data structure

■ In most cases a tree

► Hook hierarchy models a polymorphic algorithm

■ Encapsulate an operation on a collection (tree) as an object

■ Hook is an objectifier pattern (reified method)

► Separate tree inheritance hierarchy from command hierarchy

■ Simple extensibility of both hierarchies

■ Factoring (orthogonalization): simpler inheritance structures, otherwise

multiplication of classes

Page 54: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

54

Structure for Visitor

accept(Visitor v)

ConcreteElementA ConcreteElementB

Client ObjectStructure Element

accept(Visitor v)

operationA()

accept(Visitor v)

operationB()

visitConcreteElementA(ConcreteElementA e)

visitConcreteElementB(ConcreteElementB e)

elements

ConcreteVisitorA ConcreteVisitorB

Visitor

visitConcreteElementA(ConcreteElementA e)

visitConcreteElementB(ConcreteElementB e)

visitConcreteElementA(ConcreteElementA e)

visitConcreteElementB(ConcreteElementB e)

v.visitConcreteElementA(this) v.visitConcreteElementB(this)

Page 55: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

55

Structure for Visitor

accept(Visitor v)

ConcreteElementA ConcreteElementB

Client ObjectStructure Element

accept(Visitor v)

operationA()

accept(Visitor v)

operationB()

visitConcreteElementA(ConcreteElementA e)

visitConcreteElementB(ConcreteElementB e)

elements

ConcreteVisitorA ConcreteVisitorB

Visitor

visitConcreteElementA(ConcreteElementA e)

visitConcreteElementB(ConcreteElementB e)

visitConcreteElementA(ConcreteElementA e)

visitConcreteElementB(ConcreteElementB e)

v.visitConcreteElementA(this) v.visitConcreteElementB(this)

First Dispatch

Second Dispatch

Monomorphic methods

on ObjectStructure

Page 56: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

56

Sequence Diagram Visitor

► First dispatch on data, then on visitor

aConcreteClient aConcreteElementA aConcreteVisitor

accept(visitor)

visitConcreteElementA(element)

First Dispatch

Second Dispatch

Page 57: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

57

Visitor

► Implementation of a dimensional structure

■ First dispatch on dimension 1 (data structure)

■ Second dispatch on dimension 2 (algorithm)

■ Dimensions are not independent (no facets)

. Chosen implementation of the algorithm depends on the chosen

implementation of the data

► Abbreviation for multimethods

■ Dispatch/polymorphism on two arguments, not only the first (double dispatch)

■ First on data object (method accept), second on operation object (method visit)

Page 58: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

58

Remember: DimensionalClassHierarchies

HookClass

hookMethod()

hookMethod() hookMethod()

TemplateClass

templateMethod()

hook

//Implementation A

Template Hook

MoreConcrete

TemplateA

templateMethod()

MoreConcrete

TemplateB

templateMethod()

ConcreteHookClassA ConcreteHookClassB

//Implementation B

Page 59: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

59

Remember: DimensionalClassHierarchies

Visitor

hookMethodA(Element e)

hookMethodB(Element e)

hookMethodA(Element e)

hookMethodB(Element e)

hookMethodA(Element e)

hookMethodB(Element e)

Element

templateMethod(Visitor v)

hook

v.hookMethodA(this);

Template Hook

MoreConcrete

ElementA

templateMethod(Visitor v)

MoreConcrete

ElementB

templateMethod(Visitor v)

ConcreteVisitorA ConcreteVisitorB

v.hookMethodB(this);

Explicit reference

is replaced by

argument

Page 60: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

60

Visitor As Multimethod

Visitor

hookMethodA(Element e)

hookMethodB(Element e)

hookMethodA(Element e)

hookMethodB(Element e)

hookMethodA(Element e)

hookMethodB(Element e)

Element

templateMethod(Visitor v)

hook

v.hookMethodA(this);

Template Hook

MoreConcrete

ElementA

templateMethod(Visitor v)

MoreConcrete

ElementB

templateMethod(Visitor v)

ConcreteVisitorA ConcreteVisitorB

v.hookMethodB(this);

method(Element a, Visitor v)

Page 61: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

61

Example: Compiler Abstract Syntax Trees (ASTs)

► The operations are distributed over the classes.

► In case of extensions, all classes must be extender

Node

typeCheck()

generateCode()

prettyPrint()

VariableRefNode

typeCheck()

generateCode()

prettyPrint()

AssignmentNode

typeCheck()

generateCode()

prettyPrint()

Page 62: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

62

Abstract Syntax Trees with Visitors

accept(NodeVisitor v)

VariableRefNode

accept(NodeVisitor v)

AssignmentNode

accept(NodeVisitor v)

Program Node

NodeNodeVisitor

visitVariableRefNode(VariableRefNode v)

visitAssignmentNode(AssignmentNode v)

TypeCheckingVisitor

visitVariableRefNode(VariableRefNode v)

visitAssignmentNode(AssignmentNode v)

CodeGenerationVisitor

visitVariableRefNode(VariableRefNode v)

visitAssignmentNode(AssignmentNode v)

v.visitVariableRefNode(this) v.visitAssignmentNode(this)

Page 63: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

Design Patterns and Frameworks, © Prof. Uwe Aßmann 63

2) Dimensional Class Hierarchies (Bridges) as an Implementation of Facet Classifications

... in the following, we use the patterns Bridge and

DimensionalClassHierarchies interchangeably

Page 64: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

6464

Facet Classifications

► A facet is an orthogonal dimension of a model

■ Every facet has its separate model

■ All facet classes are abstract

► Facets factorize inheritance hierarchies

■ Hence, facets simplify inheritance hierarchies

► Concrete classes in the (combined) model inherit from every dimension (every facet)

■ All classes in facets are independent (i.e., don't know of each other)

■ A concrete class offers the union of all features

Page 65: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

65

Dijkstra on Aspects

"Let me try to explain to you, what to my taste is characteristic for all intelligent

thinking. It is, that one is willing to study in depth an aspect of one's subject matter in

isolation for the sake of its own consistency, all the time knowing that one is occupying

oneself only with one of the aspects. We know that a program must be correct and we

can study it from that viewpoint only; we also know that it should be efficient and we

can study its efficiency on another day, so to speak. In another mood we may ask

ourselves whether, and if so: why, the program is desirable. But nothing is gained --on

the contrary!-- by tackling these various aspects simultaneously.”

E. W. Dijkstra, On the Role of Scientific Thought, EWD 447 Selected Writings on Computing: A Personal Perspective, pages 60–66, 1982.

Page 66: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

66

Separation of Concerns (SoC)

It is what I sometimes have called "the separation of concerns", which, even if not

perfectly possible, is yet the only available technique for effective ordering of one's

thoughts, that I know of. This is what I mean by "focussing one's attention upon some

aspect": it does not mean ignoring the other aspects, it is just doing justice to the fact

that from this aspect's point of view, the other is irrelevant. It is being one- and

multiple-track minded simultaneously.

Page 67: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

68

Facets in Living Beings

► The following model of Living Beings has 3 facets

■ Domain (where does an animal live?); Age; Group of Animal

► Final, concrete classes inherit from all facets.

► Facets Factorize Models: A full model would multiply all classes (3n)

Facet 1: Habitat

Everywhere

Air Land

Don‘t know

Sea

Facet 2: Age

Born

Young Middle

Don‘t know

Old

Facet 3: Group

Group

Mammal Insect

Don‘t know

Reptile

Animal

Page 68: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

69

GeneratorImpl

generateData(data)

generateData(data) generateData(data)

DataGenerator

generate()

impl

data = parseTestData();

imp.generateData(data);

Abstraction

Implementation

Remember: DataGenerator as Bridge

TestDataGenerator

generate()

ReportGenerator

generate()

ExhaustiveGenerator RandomGenerator

data = data.cleanData();

imp.generateData(data);

Data data

Data

Data cleanData()

TestData cleanData() ReportData cleanData()

dataImplementation

StringData GraphData

Page 69: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

70

Facets of the Data Generator

DataGenerator

Facet 1: TypeOfData Facet 2: Completeness

Type of Data

TestData ReportData

Completeness

Exhaustive Random

ExhaustiveTestDataGenerator

RandomTestDataGenerator

ExhaustiveReportDataGenerator

RandomReportDataGenerator

Nothing Nothing

Page 70: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

71

Facets Can Be Implemented by Multi-Bridges

► One central facet (abstraction)

► Others are delegatees in bridges (habitate, age, group, etc.)

► Advantage

+ All facets can be varied independently

+ Simple models

► Restriction: facets model only one logical object

■ With several physical objects

Page 71: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

72

Multi-Bridge with Core Facet

► Animal as core facet, all others are hook classes

► Bottom (e.g., “Don’t know”) dispappears (transferred to multiplicity)

■ Multiplicity 1 = no bottom construct

■ Multiplicity 0 … 1 = bottom available

Facet 1: Habitat

Everywhere

Air Land Sea

Facet 2: Age

Born

Young Middle Old

Facet 3: Group

Group

Mammal Insect Reptile

Animal

Page 72: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

73

Multiple Bridge Without Core

► Select a primary facet, relate others by bridges (n-Bridge)

► Problem: primary facet knows the others

Facet 1: Habitat

Everywhere

Air Land Sea

Facet 2: Age

Born

Young Middle Old

Facet 3: Group

Group

Mammal Insect Reptile

Animal

Page 73: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

74

How Can I Recognize Facets in Modelling?

► If a class has several different partitions

► A model is not a facet model, if some class exists,

whose heirs do not partition the class (non-partitioned inheritance)

TypeOfEater

Type of eater

Quality of eater Sort of eater

Gourmet Gourmand Vegetarian Meat Eater

Gourmet

Gourmand

Vegetarian Meat Eater

Page 74: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

75

Resolve with DimensionalClassHierarchies (Bridge)

Simple Bridge

Double Bridge with Core

QualityOfEater

Gourmet Gourmand

SortOfEater

Vegetarian Meat Eater

QualityOfEater

Gourmet Gourmand

SortOfEater

Vegetarian Meat Eater

Eater

Page 75: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

76

Modeling of Facet with Bridges

► Advantages:

+ Dynamic variations possible

+ Fewer classes

► Disadvantages:

No type check on product classes

No control over which combinations are created (illegal ones or undefined ones)

Object schizophrenia

Memory consumption with allocations

Speed

--> not for embedded systems!

Page 76: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

77

Example: Classification of Research Papers after Shaw

► How to classify a research paper?

► When is it bad, when is it good?

► Mary Shaw proposed a facet-based classification with the facets

■ Research question

■ Result

■ Evaluation

Page 77: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

78

Classification of Research Papers

► 5+7+5 facet classes→175 product classes (types of research papers)

Question Result Validation

Development method Procedure or technique Analysis

Analysis method Qualitative or decriptive model Experience

Design or evaluation Analytic model Example

Generalization Emperical model Evaluation

Feasability study Tool or notation Persuasion

Specification

Report

Mary Shaw, Writing good software engineering research papers: minitutorial, In Proceedings of the 25th International

Conference on Software Engineering, 2003, Pages 726-736, IEEE Computer Society Washington, DC, USA

Page 78: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

79

Classification of Research Papers

Page 79: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

80

Classification of Research Papers

Page 80: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

81

When to Use Facet-based Models

► When the model consists of independent dimensions

► When the model is very complicated

► Realizations:

■ Use multiple inheritance,

when type checking is necessary (e.g., in frameworks)

■ Use Bridge,

when language does not support multiple inheritance,

or dimensions change dynamically

Page 81: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

82

Several Facet Groups are Possible

<<facet>>

CPU

CPU1 CPU2

<<facet>>

Memory

MEM1 MEM2

<<facet>>

Network

UDP/IP TCP/IP

<<facet>>

NetworkAccessLayer

Ethernet

<<facet>>

InternetLayer

IP

<<facet>>

HostToHostLayer

UDP TCP

Computer

Page 82: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

Design Patterns and Frameworks, © Prof. Uwe Aßmann 83

2.3) Layered Objects

Page 83: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

84

Be Aware

► If you meet a Bridge, you may have a facet classification

► Only question: are the dimensions independent?

► Sometimes, dependencies exist (e.g., one dimension calls another)

■ This requires an interface (contract) between the dimensions

Page 84: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

85

Layered Objects with Chain-Bridge

Chain Bridge with Core

QualityOfEater

Gourmet Gourmand

SortOfEater

Vegetarian Meat Eater

TypeOfEater

Page 85: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

86

Chain-Bridge for Layered Object Implementation

► Select a primary facet, relate others by chain-Bridges

► Here without core

Facet 1: Habitat

Everywhere

Air Land Sea

Facet 2: Age

Born

Young Middle Old

Facet 3: Group

Group

Mammal Insect Reptile

Animal

Page 86: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

87

Layered Objects

► Upper layers depend on information of lower layers

Facet 1: Habitat

Everywhere

Air Land Sea

Facet 2: Age

Born

Young Middle Old

Facet 3: Group

Group

Mammal Insect Reptile

depends on depends on

Page 87: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

88

GeneratorImpl

generateData(data)

generateData(data) generateData(data)

DataGenerator

generate()

impl

Abstraction

Implementation

DataGenerator as 2-Chain-Bridge

TestDataGenerator

generate()

ReportGenerator

generate()

ExhaustiveGenerator RandomGenerator

Data data

Data

Data cleanData()

TestData cleanData() ReportData cleanData()

data

Implementation

StringData GraphData

impl.gnerateData(data)

Control

Flow

data = data.cleanData();

Page 88: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

89

Compare to Facets

► Dimensions do not depend on information of others

Facet 1: Habitat

Everywhere

Air Land Sea

Facet 2: Age

Born

Young Middle Old

Facet 3: Group

Group

Mammal Insect Reptile

no dependencydepends on

depends on

Page 89: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

90

GeneratorImpl

generateData(data)

generateData(data) generateData(data)

DataGenerator

generate()

impl

Abstraction

Implementation

DataGenerator as 2-Chain-Bridge

TestDataGenerator

generate()

ReportGenerator

generate()

ExhaustiveGenerator RandomGenerator

Data data

Data

Data cleanData()

TestData cleanData() ReportData cleanData()

dataImplementation

StringData GraphData

Control Flow

data = parseTestData();

imp.generateData(data);

data = data.cleanData();

imp.generateData(data);

Page 90: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

91

Layered Object Spaces

► A layered object space is similar to a facet space

► Layers exchange information in a directed way

■ Upper layers call lower layers,

which deliver information to upper layers

■ Abstract topmost classes in a layer provide abstract methods

that can be called from other layers

■ The dependencies are directed and acyclic (form a DAG)

► All classes in a layer can be exchanged (must conform to the interface)

► Layered object spaces are much broader applicable than facet spaces

Page 91: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

Design Patterns and Frameworks, © Prof. Uwe Aßmann 92

2.4) Facet-Bridge Frameworks and Dimensional Systems

Page 92: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

93

Multiple Bridges for Facet-Based Systems

► So far, we looked at implementations of faceted or layered objects, i.e., models of

complex objects

► Facet classifications and layered objects can be generalized to facet-based or

dimensional frameworks and systems

Page 93: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

94

Core Facet: Abstraction (e.g., Group)

Facet-Bridge Dimensional Systems

► Bridge patterns can be divided upon different dimensions

► Here: a triple Bridge with core and 3 dimensions, all independent

Facet of

Implementation

(e.g., Age)

Other facet

(e.g., Domain)

Other facet

(e.g., Nurture)

Page 94: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

95

Facet-Bridge Frameworks for Facet-Based Systems

► If one or several layers are fixed, and the rest is variable, facet frameworks result

First facet layer

(first concretization)

Second facet layer

(second concretization)

Third facet layer

(third concretization)

Core Layer

Abstraction

Framework

Reuse

0

Reuse

0&1

Reuse

0-2

Reuse

0-3

Page 95: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

96

Facet-Bridge Frameworks for Facet-Based Systems

► Products can be instantiated on every level

► Every dimension provides additional reuse

Old

LandM

am

mal

Me

ate

ate

r

OldLandMammalVegetarian

Core Facet: Abstraction (e.g., Group)

Facet of

Implementation

(e.g., Age)

Other facet

(e.g., Domain)

Other facet

(e.g., Nurture)

Old

LandM

am

mal

Ve

ge

taria

n

Page 96: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

97

Facet-Bridge Frameworks for Business Software

► SAP, Peoplesoft, Intentia, IFS

Bill

Fo

rCo

mp

an

yO

fIn

du

str

y

in S

we

dis

h

Core Facet: Business Objects

Domain

(public sector,

company, private)

Production facet

(Industry, Service,

Administration))

Language

(English, Swedish)

Bill

Fo

rCo

mp

an

yO

fIn

du

str

y

in E

ng

lish

Page 97: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

98

Facet-Bridge Frameworks for Component Composition

► COMPOST is a framework for constructing component systems

(a framework for frameworks)

Runtim

eV

alu

eC

om

ponentM

odelCore Facet: Components

Structure of

components and

applications

Fragment or

runtime model

Language

(Java, XHTML,

runtime values)

Ja

va

Fra

gm

en

tCo

mp

on

en

tMo

de

l

Page 98: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

99

Facet-based Design and Frameworks

► Best practice: whenever you have a huge class hierarchy

(that is not completely based on partitioning)

■ Find out the facets

■ Factor the inheritance hierarchy into the facets

■ Choose a core facet

■ And implement the facets with a facet framework with Bridges.

■ For an n-dimensional facet problem you need at least n-1 Bridges

► If the “facets” are not independent, introduce layers

■ And implement them with Chain-Bridges

Page 99: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

Design Patterns and Frameworks, © Prof. Uwe Aßmann 100

2.5) Layered Frameworks and Systems with Chain Bridges

Page 100: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

101

Layered Frameworks for Layered Systems

► Whenever a system is a layered architecture (stack architecture),

a layered (object) framework can be used

■ Chain-Bridge can implement them, if the layers are independent of each other

(layered chain-bridge framework)

■ The layering is an abstraction layering

(more detailed things appear as lower layer)

► Modelling criterion: every class must contribute to every layer of a layered system

■ Classes crosscut the layers

■ In general, layered system do not meet this criterion

► Different products can be configured easily by varying the dimensions

Page 101: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

102

Network Stacks as Layered Bridge System

► ISO/OSI has 7 layers (leads to a 7-Bridge)

► Every layer knows the next underlying

► All partial objects call partial objects in lower layers

Facet of transport (e.g., TCP, IPX)

Paket protocol(e.g., UDP)

Basic protocol(e.g., Ethernet, token ring)

Core Facet

(Database

application)

Page 102: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

103

Databases and Layered Bridge Frameworks

► An object-oriented database should be a layered bridge framework

Facet of transport (e.g., TCP, IPX)

Paket protocol(e.g., UDP)

Basic protocol(e.g., Ethernet, token ring)

Core Facet

(Database

application)

Da

tab

ase

Ap

plic

atio

n A

Da

tab

ase

Ap

plic

atio

n B

Page 103: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

104

The Role of Layered Frameworks

► Layered frameworks are a very important structuring method for large systems

■ Parameterization

■ Variation

■ Extension

► On every layer, reuse is possible

■ Enourmous variability

► Every layer corresponds to an aspect of the application

■ All layers form stacked aspects

► A large system must be reducible or layered

■ Hence, layered frameworks provide a wonderful, very general methods for product

lines of very large products

■ And additionally, for extensible systems

Page 104: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

105

The Role of Layered Frameworks

► Currently, there are three competing implementation technologies

■ Aspect-oriented weaving

■ View-based weaving (hyperslice programming)

(see Component-Based Software Engineering, summer semester)

■ Hand programming

. Chain-Bridges

. Role Object Pattern (see later)

► Layered frameworks are one of the most important

software engineering concepts

Page 105: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

106

The End

Page 106: 2. Simple Patterns for Variability - TU Dresdenst.inf.tu-dresden.de/files/teaching/ws14/dpf/02-simple-variability v2.pdf · 2. Simple Patterns for Variability Prof. Dr. U. Aßmann

107

Figures

Slide 6 http://furniture-blog.de/wp-content/uploads/2013/12/Schraube-im-Holz.jpg

Slide 7 https://farm4.staticflickr.com/3804/10033443254_8671330728_k.jpg

Slide 8 http://www.duden.de/_media_/full/S/Schraubenkopf-201020591820.jpg

Slide 9 https://www.flickr.com/photos/eastgermanpics/4381203299