60
On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

On the Challenges of Composing Multi-View Models

Matthias Schöttle and Jörg Kienzle

Page 2: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

2

Multi-View Modelling

[ Image credit: http://www.accesscontrolsales.com/mighty-cord-rv-cad.htm ]

Page 3: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

2

Multi-View Modelling

[ Image credit: http://www.accesscontrolsales.com/mighty-cord-rv-cad.htm ]

Consistent Views

[ Image credit: http://www.empowernetwork.com/msycks/blog/how-to-get-consistent-in-your/ ]

Page 4: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

2

Multi-View Modelling

[ Image credit: http://www.wired.com/dangerroom/2010/09/revealed-pentagons-craziest-powerpoint-slide-ever/ ]

Complex Systems[ Image credit: http://www.accesscontrolsales.com/mighty-cord-rv-cad.htm ]

Consistent Views

[ Image credit: http://www.empowernetwork.com/msycks/blog/how-to-get-consistent-in-your/ ]

Page 5: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

2

Multi-View Modelling

[ Image credit: http://www.wired.com/dangerroom/2010/09/revealed-pentagons-craziest-powerpoint-slide-ever/ ]

Complex Systems Composition

[ Image credit: http://www.accesscontrolsales.com/mighty-cord-rv-power-cords.htm ]

[ Image credit: http://www.accesscontrolsales.com/mighty-cord-rv-cad.htm ]

Consistent Views

[ Image credit: http://www.empowernetwork.com/msycks/blog/how-to-get-consistent-in-your/ ]

Page 6: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Overview

• Two independent modelling notations (I and D)

• Metamodels and composers exist

• Integration to multi-view modelling notation

• Ensure consistency between views

• Ensure compatibility of composers

• Focus on technical side: Reuse

3

VD

VI

VI VD

Page 7: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Contents

• General strategy for integrating two notations

• Integration of metamodels

• Composition of multi-view models

• Practical application of strategy to RAM

• Challenges faced

• Demo

4

Page 8: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

metamodel Dmetamodel I

Integration Strategy: Metamodels

5

Page 9: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

metamodel Dmetamodel I

Integration Strategy: Metamodels

metamodel I/D

5

Page 10: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

metamodel Dmetamodel I

Integration Strategy: Metamodels

metamodel I/D

5

Page 11: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

metamodel Dmetamodel I

Integration Strategy: Metamodels

metamodel I/D

5

Page 12: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

metamodel Dmetamodel I

Integration Strategy: Metamodels

metamodel I/D

5

Page 13: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

metamodel Dmetamodel I

Integration Strategy: Metamodels

metamodel I/D

5

Page 14: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Integration Strategy: Composing

ComposerI ComposerD

MI,1 MI,2 MD,1 MD,1

6

Page 15: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Integration Strategy: Composing

ComposerI ComposerD

MI,1 MI,2

MI,C

MD,1 MD,1

6

Page 16: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Integration Strategy: Composing

ComposerI ComposerD

MI,1 MI,2

MI,C

MD,1 MD,1

6

Page 17: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Integration Strategy: Composing

ComposerI ComposerD

MI,1 MI,2

MI,C

E1MI,2

E1MI,1

E2MI,1

E1MC

E2MC

MD,1 MD,1

6

Page 18: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Integration Strategy: Composing

ComposerI ComposerD

MI,1 MI,2

MI,C

E1MI,2

E1MI,1

E2MI,1

E1MC

E2MC

MD,1 MD,1

MD,C

6

Page 19: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Integration Strategy: Process

I1 D1M1 I2 D2M2

7

Page 20: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Integration Strategy: Process

Step 1:compose I

I1 D1M1 I2 D2M2

IC MC 7

Page 21: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Integration Strategy: Process

Step 1:compose I

I1 D1M1 I2 D2M2

IC MC 7

Page 22: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Integration Strategy: Process

Step 1:compose I

I1 D1M1 I2 D2M2

IC MC 7

E1MI,2

E1MI,1

E2MI,1

E1MC

E2MC

Page 23: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

IC MC

Integration Strategy: Process

Step 2:copy

I1 D1M1 I2 D2M2

8

Page 24: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

IC MC

Integration Strategy: Process

Step 2:copy

I1 D1M1 I2 D2M2

DC,1

DC,2 8

Page 25: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

IC MC

Integration Strategy: Process

Step 2:copy

I1 D1M1 I2 D2M2

DC,1

DC,2 8

Page 26: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

IC MC

Integration Strategy: Process

I1 D1M1 I2 D2M2

DC,1

DC,2

Step 3:update references

9

Page 27: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

IC MC

Integration Strategy: Process

I1 D1M1 I2 D2M2

DC,1

DC,2

Step 3:update references

9

E1MI,2

E1MI,1

E2MI,1

E1MC

E2MC

Page 28: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

IC MC

Integration Strategy: Process

DC,1

DC,2

Step 3:update references

9

Page 29: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

IC MC

Integration Strategy: Process

DC,1

DC,2

Step 4:compose DC

10

Page 30: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

IC MC

Integration Strategy: Process

Step 4:compose DC

DC 10

Page 31: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Practical Application to Reusable Aspect Models (RAM)

structural viewaspect StockExchange depends on Observer

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)

 StockWindow

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

11

Page 32: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Practical Application to Reusable Aspect Models (RAM)

structural viewaspect StockExchange depends on Observer

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)

 StockWindow

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

message view createWindow target: StockGUIcreateWindow(stock)

window: StockWindowwindow := create(stock)startObserving(stock)

11

Page 33: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Practical Application to Reusable Aspect Models (RAM)

structural viewaspect StockExchange depends on Observer

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)

 StockWindow

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

message view createWindow target: StockGUIcreateWindow(stock)

window: StockWindowwindow := create(stock)startObserving(stock)

11

Page 34: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

RAM: Metamodel

Aspect

AbstractMessageView

Interaction

OperationmessageViews 0..*

specifies1

specificationadvice 0..11

MessageViewAspectMessageView references1

affectedBy 0..*

pointcut

1

0..* properties

lifelines

1..*interaction

11..*

Reference

messagesLifeline

TypedElement

represents1

signature1

- messageSort: MessageSortMessage

ParameterValueMapping StructuralFeature

Parameter

arguments0..*assignTo

0..1

parameter 1

synchCallcreateMessagedeleteMessagereply

<<enum>>MessageSort

MessageViewReference

StructuralViewClassifier

operations 0..*

classes

1..*

structuralView

1

parameters0..*

12

Page 35: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

RAM: Metamodel

Aspect

AbstractMessageView

Interaction

OperationmessageViews 0..*

specifies1

specificationadvice 0..11

MessageViewAspectMessageView references1

affectedBy 0..*

pointcut

1

0..* properties

lifelines

1..*interaction

11..*

Reference

messagesLifeline

TypedElement

represents1

signature1

- messageSort: MessageSortMessage

ParameterValueMapping StructuralFeature

Parameter

arguments0..*assignTo

0..1

parameter 1

synchCallcreateMessagedeleteMessagereply

<<enum>>MessageSort

MessageViewReference

StructuralViewClassifier

operations 0..*

classes

1..*

structuralView

1

parameters0..*

12

Page 36: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect StockExchange depends on Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)

 StockWindow

RAM: Concern Reuse

13

Page 37: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect Observer |Subject

|Observer|modify|update

~ Set<|Observer> getObservers()+ * |modify(..)+ addObserver(|Observer)

 |Subject 1

mySet~ add(|Observer )int size

<<impl>>Set

|Observer

mySubject0..1

0..*+ startObserving(|Subject)~ |update(|Subject)

 |Observer

structural viewaspect StockExchange depends on Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)

 StockWindow

RAM: Concern Reuse

13

Page 38: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect Observer |Subject

|Observer|modify|update

~ Set<|Observer> getObservers()+ * |modify(..)+ addObserver(|Observer)

 |Subject 1

mySet~ add(|Observer )int size

<<impl>>Set

|Observer

mySubject0..1

0..*+ startObserving(|Subject)~ |update(|Subject)

 |Observer

Instantiation Observer: |Subject → Stock; |Observer → StockWindow; |modify → setPrice; |update → updateWindow;

structural viewaspect StockExchange depends on Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)

 StockWindow

RAM: Concern Reuse

13

Page 39: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect Observer |Subject

|Observer|modify|update

~ Set<|Observer> getObservers()+ * |modify(..)+ addObserver(|Observer)

 |Subject 1

mySet~ add(|Observer )int size

<<impl>>Set

|Observer

mySubject0..1

0..*+ startObserving(|Subject)~ |update(|Subject)

 |Observer

Instantiation Observer: |Subject → Stock; |Observer → StockWindow; |modify → setPrice; |update → updateWindow;

structural viewaspect StockExchange depends on Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)

 StockWindow

RAM: Concern Reuse

13

Page 40: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect Observer |Subject

|Observer|modify|update

~ Set<|Observer> getObservers()+ * |modify(..)+ addObserver(|Observer)

 |Subject 1

mySet~ add(|Observer )int size

<<impl>>Set

|Observer

mySubject0..1

0..*+ startObserving(|Subject)~ |update(|Subject)

 |Observer

Instantiation Observer: |Subject → Stock; |Observer → StockWindow; |modify → setPrice; |update → updateWindow;

structural viewaspect StockExchange depends on Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)

 StockWindow

RAM: Concern Reuse

13

Page 41: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect Observer |Subject

|Observer|modify|update

~ Set<|Observer> getObservers()+ * |modify(..)+ addObserver(|Observer)

 |Subject 1

mySet~ add(|Observer )int size

<<impl>>Set

|Observer

mySubject0..1

0..*+ startObserving(|Subject)~ |update(|Subject)

 |Observer

Instantiation Observer: |Subject → Stock; |Observer → StockWindow; |modify → setPrice; |update → updateWindow;

structural viewaspect StockExchange depends on Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)

 StockWindow

RAM: Concern Reuse

13

Page 42: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect Observer |Subject

|Observer|modify|update

~ Set<|Observer> getObservers()+ * |modify(..)+ addObserver(|Observer)

 |Subject 1

mySet~ add(|Observer )int size

<<impl>>Set

|Observer

mySubject0..1

0..*+ startObserving(|Subject)~ |update(|Subject)

 |Observer

Instantiation Observer: |Subject → Stock; |Observer → StockWindow; |modify → setPrice; |update → updateWindow;

structural viewaspect StockExchange depends on Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)

 StockWindow

RAM: Concern Reuse

13

Page 43: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect Observer |Subject

|Observer|modify|update

~ Set<|Observer> getObservers()+ * |modify(..)+ addObserver(|Observer)

 |Subject

~ add(|Observer )int size

<<impl>>Set

|Observer1

mySet

mySubject0..1

0..*+ startObserving(|Subject)~ |update(|Subject)

 |Observer

structural viewaspect StockExchange depends on Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)

 StockWindow

Instantiation Observer: |Subject → Stock; |Observer → StockWindow; |modify → setPrice; |update → updateWindow;

RAM: Weaving

14

mySubject0..10..1mySubject

Page 44: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect Observer |Subject

|Observer|modify|update

~ Set<|Observer> getObservers()+ * |modify(..)+ addObserver(|Observer)

 |Subject

~ add(|Observer )int size

<<impl>>Set

|Observer1

mySet

mySubject0..1

0..*+ startObserving(|Subject)~ |update(|Subject)

 |Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)

 StockWindow

RAM: Weaving

14

mySubject0..10..1mySubject

Page 45: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect Observer |Subject

|Observer|modify|update

~ Set<|Observer> getObservers()+ * |modify(..)+ addObserver(|Observer)

 |Subject

~ add(|Observer )int size

<<impl>>Set

|Observer1

mySet

mySubject0..1

0..*+ startObserving(|Subject)~ |update(|Subject)

 |Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)

 StockWindow

RAM: Weaving

14

~ add(|Observer )int size

<<impl>>Set

|Observer1

mySet

0..*0..1mySubject~ Set<|Observer> getObservers()

+ * |modify(..)+ addObserver(|Observer)

 |Subject

+ startObserving(|Subject)~ |update(|Subject)

 |Observer

Page 46: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect Observer |Subject

|Observer|modify|update

~ Set<|Observer> getObservers()+ * |modify(..)+ addObserver(|Observer)

 |Subject

~ add(|Observer )int size

<<impl>>Set

|Observer1

mySet

mySubject0..1

0..*+ startObserving(|Subject)~ |update(|Subject)

 |Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI + StockWindow create(Stock stock)

~ updateWindow(Stock stock)

 StockWindow

RAM: Weaving

14

~ add(|Observer )int size

<<impl>>Set

|Observer1

mySet

0..*0..1mySubject

+ startObserving(|Subject)~ |update(|Subject)

 |Observer

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)~ Set<StockWindow> getObservers()~ addObserver(StockWindow sw)

- String name- int price

Stock

Page 47: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect Observer |Subject

|Observer|modify|update

~ Set<|Observer> getObservers()+ * |modify(..)+ addObserver(|Observer)

 |Subject

~ add(|Observer )int size

<<impl>>Set

|Observer1

mySet

mySubject0..1

0..*+ startObserving(|Subject)~ |update(|Subject)

 |Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

RAM: Weaving

14

~ add(|Observer )int size

<<impl>>Set

|Observer1

mySet

0..*0..1mySubject

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)~ Set<StockWindow> getObservers()~ addObserver(StockWindow sw)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)~ startObserving(Stock s)

 StockWindow

Page 48: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect Observer |Subject

|Observer|modify|update

~ Set<|Observer> getObservers()+ * |modify(..)+ addObserver(|Observer)

 |Subject

~ add(|Observer )int size

<<impl>>Set

|Observer1

mySet

mySubject0..1

0..*+ startObserving(|Subject)~ |update(|Subject)

 |Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

RAM: Weaving

14

1mySet

0..*0..1mySubject

~ add(StockWindow)int size

<<impl>>Set

StockWindow

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)~ Set<StockWindow> getObservers()~ addObserver(StockWindow sw)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)~ startObserving(Stock s)

 StockWindow

Page 49: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

structural viewaspect Observer |Subject

|Observer|modify|update

~ Set<|Observer> getObservers()+ * |modify(..)+ addObserver(|Observer)

 |Subject

~ add(|Observer )int size

<<impl>>Set

|Observer1

mySet

mySubject0..1

0..*+ startObserving(|Subject)~ |update(|Subject)

 |Observer

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

RAM: Weaving

14

1mySet

0..*0..1mySubject

message view startObservingstartObserving(s) addObserver(target)

target: |Observer s: |Subject mySet: Set

add(target)

message view createWindowcreateWindow(stock)

target: StockGUIwindow := create(stock)startObserving(stock)

window: StockWindow

~ add(StockWindow)int size

<<impl>>Set

StockWindow

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)~ Set<StockWindow> getObservers()~ addObserver(StockWindow sw)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)~ startObserving(Stock s)

 StockWindow

Page 50: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

RAM: Weaving

14

1mySet

0..*0..1mySubject

message view startObservingstartObserving(s) addObserver(target)

target: |Observer s: |Subject mySet: Set

add(target)

message view createWindowcreateWindow(stock)

target: StockGUIwindow := create(stock)startObserving(stock)

window: StockWindow

~ add(StockWindow)int size

<<impl>>Set

StockWindow

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)~ Set<StockWindow> getObservers()~ addObserver(StockWindow sw)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)~ startObserving(Stock s)

 StockWindow

Page 51: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

RAM: Weaving

14

1mySet

0..*0..1mySubject

|Subject

|Observer

Set

startOb..

StockWindow

Stock

Set

startObs..

message view startObservingstartObserving(s) addObserver(target)

target: |Observer s: |Subject mySet: Set

add(target)

message view createWindowcreateWindow(stock)

target: StockGUIwindow := create(stock)startObserving(stock)

window: StockWindow

~ add(StockWindow)int size

<<impl>>Set

StockWindow

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)~ Set<StockWindow> getObservers()~ addObserver(StockWindow sw)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)~ startObserving(Stock s)

 StockWindow

Page 52: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

RAM: Weaving

14

1mySet

0..*0..1mySubject

|Subject

|Observer

Set

startOb..

StockWindow

Stock

Set

startObs..

message view startObservingstartObserving(s) addObserver(target)

target: |Observer s: |Subject mySet: Set

add(target)

message view createWindowcreateWindow(stock)

target: StockGUIwindow := create(stock)startObserving(stock)

window: StockWindow

target: StockWindow s: Stock

~ add(StockWindow)int size

<<impl>>Set

StockWindow

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)~ Set<StockWindow> getObservers()~ addObserver(StockWindow sw)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)~ startObserving(Stock s)

 StockWindow

Page 53: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

RAM: Weaving

14

1mySet

0..*0..1mySubject

message view startObservingstartObserving(s) addObserver(target)

target: |Observer s: |Subject mySet: Set

add(target)

message view createWindowcreateWindow(stock)

target: StockGUIwindow := create(stock)startObserving(stock)

window: StockWindow

target: StockWindow s: Stock

~ add(StockWindow)int size

<<impl>>Set

StockWindow

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)~ Set<StockWindow> getObservers()~ addObserver(StockWindow sw)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)~ startObserving(Stock s)

 StockWindow

Page 54: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

RAM: Weaving

14

1mySet

0..*0..1mySubject

message view startObservingstartObserving(s) addObserver(target)

target: |Observer s: |Subject mySet: Set

add(target)

message view createWindowcreateWindow(stock)

target: StockGUIwindow := create(stock)startObserving(stock)

window: StockWindow

target: StockWindow s: Stock

~ add(StockWindow)int size

<<impl>>Set

StockWindow

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)~ Set<StockWindow> getObservers()~ addObserver(StockWindow sw)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)~ startObserving(Stock s)

 StockWindow

message view createWindowcreateWindow(stock)

target: StockGUIwindow := create(stock)startObserving(stock)

window: StockWindow

stock: Stock

addObserver(window)

mySet: Set

add(window)

Page 55: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

+ StockGUI create()+ createWindow(Stock stock)

 StockGUI

RAM: Weaving

14

1mySet

0..*0..1mySubject

message view startObservingstartObserving(s) addObserver(target)

target: |Observer s: |Subject mySet: Set

add(target)

message view createWindowcreateWindow(stock)

target: StockGUIwindow := create(stock)startObserving(stock)

window: StockWindow

target: StockWindow s: Stock

~ add(StockWindow)int size

<<impl>>Set

StockWindow

+ Stock create(String name, int price)+ int getPrice()+ setPrice(int price)~ Set<StockWindow> getObservers()~ addObserver(StockWindow sw)

- String name- int price

Stock

+ StockWindow create(Stock stock)~ updateWindow(Stock stock)~ startObserving(Stock s)

 StockWindow

message view createWindowcreateWindow(stock)

target: StockGUIwindow := create(stock)startObserving(stock)

window: StockWindow

stock: Stock

addObserver(window)

mySet: Set

add(window)

Page 56: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Challenges

15

• Complexity of integration depending on shared concepts

• MMI might have to be modified

• High dependencies

• Testing very important

Page 57: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

Demo

16

Page 58: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

17

Step 1: compose

Step 2: copy

I1 D1 I2 D2

Ic

I1 D1 I2 D2

Ic Dc

Ic D2,c

D1,c

Ic D2,c

D1,c

Step 3: update references

Step 4: compose

M1 M2 M1 M2

Mc Mc

Mc Mc

copy

copy

Page 59: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

17

Step 1: compose

Step 2: copy

I1 D1 I2 D2

Ic

I1 D1 I2 D2

Ic Dc

Ic D2,c

D1,c

Ic D2,c

D1,c

Step 3: update references

Step 4: compose

M1 M2 M1 M2

Mc Mc

Mc Mc

copy

copy

Aspect

AbstractMessageView

Interaction

OperationmessageViews 0..*

specifies1

specificationadvice 0..11

MessageViewAspectMessageView references1

affectedBy 0..*

pointcut

1

0..* properties

lifelines

1..*interaction

11..*

Reference

messagesLifeline

TypedElement

represents1

signature1

- messageSort: MessageSortMessage

ParameterValueMapping StructuralFeature

Parameter

arguments0..*assignTo

0..1

parameter 1

synchCallcreateMessagedeleteMessagereply

<<enum>>MessageSort

MessageViewReference

StructuralViewClassifier

operations 0..*

classes

1..*

structuralView

1

parameters0..*

Page 60: On the Challenges of Composing Multi-View Models€¦ · On the Challenges of Composing Multi-View Models Matthias Schöttle and Jörg Kienzle

17

Step 1: compose

Step 2: copy

I1 D1 I2 D2

Ic

I1 D1 I2 D2

Ic Dc

Ic D2,c

D1,c

Ic D2,c

D1,c

Step 3: update references

Step 4: compose

M1 M2 M1 M2

Mc Mc

Mc Mc

copy

copy

Aspect

AbstractMessageView

Interaction

OperationmessageViews 0..*

specifies1

specificationadvice 0..11

MessageViewAspectMessageView references1

affectedBy 0..*

pointcut

1

0..* properties

lifelines

1..*interaction

11..*

Reference

messagesLifeline

TypedElement

represents1

signature1

- messageSort: MessageSortMessage

ParameterValueMapping StructuralFeature

Parameter

arguments0..*assignTo

0..1

parameter 1

synchCallcreateMessagedeleteMessagereply

<<enum>>MessageSort

MessageViewReference

StructuralViewClassifier

operations 0..*

classes

1..*

structuralView

1

parameters0..*