SlideShare a Scribd company logo
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Teaching material for the book
Model-Driven Software Engineering in Practice
by Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Morgan & Claypool, USA, 2012.
Copyright © 2012 Brambilla, Cabot, Wimmer.
www.mdse-book.com
MODEL-TO-MODEL
TRANSFORMATIONS
Chapter 8
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Content
§ Introduction
§ Out-place Transformations: ATL
§ In-place Transformations: Graph Transformations
§ Mastering Model Transformations
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
www.mdse-book.com
INTRODUCTION
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Motivation
Transformations are everywhere!
§  Before MDE
§  Program compilation, refactoring, migration, optimization, ...
§  With MDE
§  Transformations are key technologies!
§  Every systematic manipulation of a
model is a model transformation!
§  Dimensions
§  Horizontal vs. vertical
§  Endogenous vs. exogenous
§  Model-to-text vs. text-to-model vs. model-to-model
[Excerpt of MDA Guide
from the OMG]
PIM
PSM
PIM
PSM
MLA MLB
Code Code
PLA PLB
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Meta-
Metamodel
Metamodel
Model
M3
M2
M1
Definitions
§  A model-to-model (M2M) transformation is the automatic creation of
target models from source models.
§  1-to-1 transformations
§  1-to-N, N-to-1, N-to-M transformations
§  target model* = T(source model*)
Focus of model transformations,
but not limited to M1
(remember: everything is a model!)
Metamodeling Stack
A B C
X Y Z
MT
source model
target model
Example
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Architecture
Model-to-Model Transformation Pattern
MOF
MMa MMb
Ma Mba2b.mt
MMTLsource metamodel
source model target model
target metamodel
conformsTo
Execution Engine
conformsTo conformsTo
conformsTo
conformsTo
conformsTo
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Two Transformation Strategies
Out-place vs. in-place transformations
Transformation
Specification
ModelA
MetamodelA
ModelB
MetamodelB
Transformation
Specification
ModelA
MetamodelA
Legend:
Transformation
Execution
Dependency
«conformsTo» «conformsTo» «conformsTo»
Out-place Transformations build
a new model from scratch
In-place Transformations change
some parts in the model
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Two Transformation Strategies
Out-place vs. in-place transformations
For each green element,
create a blue element.
For each green element,
create a blue element.
Delete all elemens except
blue ones.
Out-place Transformation In-place Transformation
Example #1
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Two Transformation Strategies
Out-place vs. in-place transformations
Out-place Transformation In-place Transformation
Example #2
For each green element,
create a blue element.
For each green element,
create a green element.
For each red element,
create a red element.
For each green element,
create a blue element.
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Architecture
Illustrative Example
G 2 P
Rule
R 2 B
Rule
Ma Mb
MMa
Green
Class
Red
Class
MMb
Blue
Class
Pink
Class
Meta-metamodel
Class
Class
ATL
Rule
Class
MMa2MMb.atl
conformsTo
conformsTo
conformsTo
conformsTo
conformsTo
conformsTo
conformsTo
execution
Out-place Transformations
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Architecture
Concrete Example
Java M
conformsTo
A 2 V
Rule
C 2 C
Rule
UML2Java.atl
execution
UML M
conformsTo
c1:Class
a1:Attribute
Trace Model
c1 -> c01 : C2C
a1 -> v01 : A2V
MMa
Class
Attribute
* attributes
Java MM
Class
Variable
* variables
v01:Variable
c01:Class
UML MM
Out-place Transformations
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Architecture
Illustrative Example
R 2 G
Rule
Ma
MMa
Green
Class
Red
Class
Meta-metamodel
Class
Class
GT
Rule
Class
MMa.gt
conformsTo
conformsTo
conformsTo
conformsTo
In-place Transformations
Ma’ Ma’’
conformsTo
MMa
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Architecture
Concrete Example
Pub2Pri
Rule
Pub2PriRef.gt
UML M
conformsTo
c1:Class
a1:Attribute
Trace Model
a1 -> Pub2Pri
MMa Class
Attribute
*
attributes
UML
MM
In-place Transformations
visibility
visibility = public
UML M’
c1:Class
a1:Attribute
visibility = private
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
www.mdse-book.com
OUT-PLACE
TRANSFORMATIONS:
ATLAS TRANSFORMATION LANGUAGE
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
ATL overview
§  Source models and target models are distinct
§  Source models are read-only
§  Target models are write-only
§  The language is a declarative-imperative hybrid
§  Declarative part
§  Matched rules with automatic traceability support
§  Side-effect free query language: OCL
§  Imperative part
§  Called/Lazy rules
§  Action blocks
§  Global variables via Helpers
§  Recommended programming style: declarative
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
ATL overview (continued)
§ A declarative rule specifies
§ A source pattern to be matched in the source models
§ A target pattern to be created in the target models for each match
during rule application
§ An optional action block (i.e., a sequence of imperative statements)
§ An imperative rule is basically a procedure
§ It is called by its name
§ It may take arguments
§ It contains
§  A declarative target pattern
§  An optional action block
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
ATL overview (continued)
§ Applying a rule means
1.  Creating the specified target elements
2.  Initializing the properties of the newly created elements
§ There are two types of rules concerning their application
§ Matched rules are applied once for each match by the execution
engine
§  A given set of elements may only be matched by one matched rule
§ Called/Lazy rules are applied as many times as they are called from
other rules
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Matched rules: Overview
§ A Matched rule is composed of
§ A source pattern
§ A target pattern
§ An optional action block
Matched Rule
Source Pattern Target Pattern
Source Model Target Model
queries generates
accesses
1 1
Action Block
0..1
accesses
accesses
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
rule Rule1{
from
v1 : SourceMM!Type1(cond1)
to
v2 : TargetMM!Type1 (
prop <- v1.prop
)
}
Matched rules: source pattern
§  The source pattern is composed of
§  A set of labeled source pattern elements
§  A source pattern element refers to a type contained in the source metamodels
§  A guard (Boolean OCL expression) used to filter matches
§  A match corresponds to a set of elements coming from the source
models that
§  Fulfill the types specified by the source pattern elements
§  Satisfy the guard
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Matched rules: target pattern
§  The target pattern is composed of
§  A set of labeled target pattern elements
§  Each target pattern element
§  refers to a type in the target metamodels
§  contains a set of bindings
§  A binding initializes a property of a target element using an OCL expression
§  For each match, the target pattern is applied
§  Elements are created in the target models
§  Target elements are initialized by executing the bindings
rule Rule1{
from
v1 : SourceMM!Type1(cond1)
to
v2 : TargetMM!Type1 (
prop <- v1.prop
)
}
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #1 – Publication 2 Book
Journal
name: String
Book
name: String
id: Integer
Source Metamodel Target Metamodel
j2:Journal
name = ACM Comp. Sur.
j3:Journal
name = IEEE Software.
j1:Journal
name = IEEE Computer
b2:Book
name = ACM Comp. Sur.
id = 2
b3:Book
name = IEEE Software.
id = 3
b1:Book
name = IEEE Computer
id = 1
Journal
Collection
Book
Collection
jc1:Journal
Collection
bc1:Book
Collection
Concepts
1)  Matched Rule
2)  Helper
Source Model Target Model
journals books
1..* 1..*
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #1
Configuration of Source/Target Metamodels
§ Header
module Publication2Book;
create OUT : Book from IN : Publication;
§ For code completion
§  --@path MM_name =Path_to_metamodel_definition
§  Activate code completion: CTRL + space
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #1
Matched Rules
§  Example Publication 2 Book
module Publication2Book;
create OUT : Book from IN : Publication;
rule Collection2Collection {
from
jc : Publication!JournalCollection
to
bc : Book!BookCollection(
books <- jc.journals
)
}
rule Journal2Book {
from
j : Publication!Journal
to
b : Book!Book (
name <- j.name
)
}
Source Pattern
Target Pattern
Matched Rule
Header
Binding
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #1
Helpers 1/2
§ Syntax
helper context Type def : Name(Par1 : Type, …) : Type = EXP;
§ Global Variable
helper def: id : Integer = 0;
§ Global Operation
helper context Integer def : inc() : Integer = self + 1;
§ Calling a Helper
§  thisModule.HelperName(…) – for global variables/operations without context
§  value.HelperName(…) – for global variables/operations with context
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #1
Helpers 2/2
§  Example Publication 2 Book
module Publication2Book;
create OUT : Book from IN : Publication;
helper def : id : Integer = 0;
helper context Integer def : inc() : Integer = self + 1;
rule Journal2Book {
from
j : Publication!Journal
to
b : Book!Book (
name <- j.name
)
do {
thisModule.id <- thisModule.id.inc();
b.id <- thisModule.id;
}
}
Action
Block
Global Variable
Global Operation
Module Instance for accessing global variables
Global Operation call
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2 – Person 2 Customer
Person
name: String
age : Integer
gender : {male,
female}
Customer
name: String
gender: {male,
female}PSystem
CSystem
*
*
c2:Customer
name = javi
c1:Customer
name = hugo
p2:Person
name = javi
age= 45
gender = female
p3:Person
name = bill
age = 12
gender = male
p1:Person
name = hugo
age = 21
gender = male
s1:PSystem
s1:CSystem
Constraint: Customer must be
older than 18 years
Concepts:
1) Guards
2) Trace Model
3) Called/Lazy Rule Source Metamodel Target Metamodel
Source Model Target Model
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Describing more complex correspondences and bindings
§ Declarative Statements
§  If/Else, OCL Operations, Global Operations, …
§  Application: Guard Condition and Feature Binding
§ Example: IF/ELSE
if condition then
exp1
else
exp2
endif
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Guards Conditions in Source Patterns
§  Example Person2Customer
rule Person2Customer {
from
p : Person!Person (p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person -> select(p | p.age > 18)
)
}
Guard Condition
Compute Subset for
Feature Binding
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Implicit Trace Model – Phase 1: Module Initialization Phase
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person
)
}
rule Person2Customer {
from
p : Person!Person(p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
p1:Person
name = hugo
age = 21
p3:Person
name = bill
age = 12
s1:PSystem
:TransientLinkSet
Trace Model is a set (cf. TransientLinkSet) of links
(cf. TransientLink) that relate source elements with
their corresponding target elements
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Implicit Trace Model – Phase 2: Matching Phase
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person
)
}
rule Person2Customer {
from
p : Person!Person(p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
p1:Person
name = hugo
age = 21
p3:Person
name = bill
age = 12
s1:PSystem
:TransientLinkSet
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Implicit Trace Model – Phase 2: Matching Phase
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person
)
}
rule Person2Customer {
from
p : Person!Person(p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
p1:Person
name = hugo
age = 21
p3:Person
name = bill
age = 12
s1:PSystem
TL1:TransientLink
:TransientLinkSet
rule = PSystem2CSystem
ps
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Implicit Trace Model – Phase 2: Matching Phase
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person
)
}
rule Person2Customer {
from
p : Person!Person(p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
p1:Person
name = hugo
age = 21
p3:Person
name = bill
age = 12
s1:PSystem
TL1:TransientLink
:TransientLinkSet
rule = PSystem2CSystem
ps
s1:CSystem
cs
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Implicit Trace Model – Phase 2: Matching Phase
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person
)
}
rule Person2Customer {
from
p : Person!Person(p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
p1:Person
name = hugo
age = 21
p3:Person
name = bill
age = 12
s1:PSystem
TL1:TransientLink
:TransientLinkSet
rule = PSystem2CSystem
ps
s1:CSystem
cs
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Implicit Trace Model – Phase 2: Matching Phase
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person
)
}
rule Person2Customer {
from
p : Person!Person(p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
p1:Person
name = hugo
age = 21
p3:Person
name = bill
age = 12
s1:PSystem
TL1:TransientLink
:TransientLinkSet
rule = PSystem2CSystem
ps
s1:CSystem
cs
TL2:TransientLink
rule = Person2Customer
p
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Implicit Trace Model – Phase 2: Matching Phase
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person
)
}
rule Person2Customer {
from
p : Person!Person(p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
p1:Person
name = hugo
age = 21
p3:Person
name = bill
age = 12
s1:PSystem
TL1:TransientLink
:TransientLinkSet
rule = PSystem2CSystem
ps
s1:CSystem
cs
TL2:TransientLink
rule = Person2Customer
p
c1:Customer
c
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Implicit Trace Model – Phase 2: Matching Phase
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person
)
}
rule Person2Customer {
from
p : Person!Person(p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
p1:Person
name = hugo
age = 21
p3:Person
name = bill
age = 12
s1:PSystem
TL1:TransientLink
:TransientLinkSet
rule = PSystem2CSystem
ps
s1:CSystem
cs
TL2:TransientLink
rule = Person2Customer
c1:Customer
p
c
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Implicit Trace Model – Phase 3: Target Initialization Phase
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person
)
}
rule Person2Customer {
from
p : Person!Person(p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
p1:Person
name = hugo
age = 21
p3:Person
name = bill
age = 12
s1:PSystem
TL1:TransientLink
:TransientLinkSet
rule = PSystem2CSystem
ps
s1:CSystem
cs
TL2:TransientLink
rule = Person2Customer
c1:Customer
p
c
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Implicit Trace Model – Phase 3: Target Initialization Phase
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person
)
}
rule Person2Customer {
from
p : Person!Person(p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
p1:Person
name = hugo
age = 21
p3:Person
name = bill
age = 12
s1:PSystem
TL1:TransientLink
:TransientLinkSet
rule = PSystem2CSystem
ps
s1:CSystem
cs
TL2:TransientLink
rule = Person2Customer
c1:Customer
p
c
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Implicit Trace Model – Phase 3: Target Initialization Phase
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person
)
}
rule Person2Customer {
from
p : Person!Person(p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
p1:Person
name = hugo
age = 21
p3:Person
name = bill
age = 12
s1:PSystem
TL1:TransientLink
:TransientLinkSet
rule = PSystem2CSystem
ps
s1:CSystem
cs
TL2:TransientLink
rule = Person2Customer
c1:Customer
name = hugo
p
c
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Implicit Trace Model – Phase 3: Target Initialization Phase
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person
)
}
rule Person2Customer {
from
p : Person!Person(p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
p1:Person
name = hugo
age = 21
p3:Person
name = bill
age = 12
s1:PSystem
TL1:TransientLink
:TransientLinkSet
rule = PSystem2CSystem
ps
s1:CSystem
cs
TL2:TransientLink
rule = Person2Customer
c1:Customer
name = hugo
p
c
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Implicit Trace Model – Phase 3: Target Initialization Phase
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
customer <- ps.person
)
}
rule Person2Customer {
from
p : Person!Person(p.age > 18)
to
c : Customer!Customer (
name <- p.name
)
}
p1:Person
name = hugo
age = 21
p3:Person
name = bill
age = 12
s1:PSystem
TL1:TransientLink
:TransientLinkSet
rule = PSystem2CSystem
ps
s1:CSystem
cs
TL2:TransientLink
rule = Person2Customer
c1:Customer
name = hugo
p
c
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Transformation Execution Phases
1.  Module Initialization Phase
§  Module variables (attribute helpers) and trace model are initialized
§  If an entry point called rule is defined, it is executed in this step
2.  Matching Phase
§  Using the source patterns (from) of matched rules, elements are selected in
the source model (each match has to be unique)
§  Via the target patterns (to) corresponding elements are created in the target
model (for each match there are as much target elements created as target
patterns are used)
§  Traceability information is stored
3.  Target Initialization Phase
§  The elements in the target model are initialized based on the bindings (<-)
§  The resolveTemp function is evaluated, based on the traceability information
§  Imperative code (do) is executed, including possible calls to called rules
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Alternative Solution with Called Rule and Action Block (1/3)
Imperative Statements in Action Blocks (do)
IF/[ELSE]
if( aPerson.gender = #male )
thisModule.men->including(aPerson);
else
thisModule.women->including(aPerson);
FOR
for( p in Person!Person.allInstances() ) {
if(p.gender = #male)
thisModule.men->including(p);
else
thisModule.women->including(p);
}
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Alternative Solution with Called Rule and Action Block (2/3)
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem ()
do{
for( p in Person!Person.allInstances() ) {
if(p.age > 18)
cs.customer <- thisModule.NewCustomer(p.name,
p.gender);
}
}
}
Matched Rule
Called Rule Call
Action Block
Explicit Query on
Source Model
Binding
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Alternative Solution with Called Rule and Action Block (3/3)
rule NewCustomer (name: String, gender: Person::Gender){
to
c : Customer!Customer (
c.name <- name
)
do {
c.gender <- gender;
c;
}
}
Target Pattern
Action Block
Called Rule
Result of Called Rules is the last statement
executed in the Action Block
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Alternative Solution with Lazy Rule and Action Block (1/2)
rule PSystem2CSystem {
from
ps : Person!PSystem
to
cs : Customer!CSystem (
)
do{
for( p in Person!Person.allInstances() ) {
if(p.age > 18)
cs.customer <- thisModule.NewCustomer(p);
}
}
}
Matched Rule
Lazy Rule Call
Action Block
Explicit Query on
Source Model
Binding
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #2
Alternative Solution with Lazy Rule and Action Block (2/2)
lazy rule NewCustomer{
from
p : Person!Person
to
c : Customer!Customer (
name <- p.name,
gender <- p.gender
)
}
Lazy Rule
Source Pattern
Target Pattern
Result of Lazy Rules is the first specified
target pattern element
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #3
Resolve Temp – Explicitly Querying Trace Models (1/4)
Element
name: String
Set
Element
name: String
Container
1
id : Int
info : String
rule Set2Container {
from
b : source!Set
to
d : target!Description(
text <- b.info
),
c : target!Container(
id <- b.id,
description <- d
)
}
id: Int
Description
text: String
1
1
rule Element2Element{
from
eS : source!Element
to
eT : target!Element (
name <- eS.name,
container <- thisModule.resolveTemp(
eS.set, ‘c’)
)
}
Source Metamodel Target Metamodel
Transformation
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #3
Resolve Temp – Explicitly Querying Trace Models (2/4)
e1:Element
name = Element1
b1:Set
TL1:TransientLink
:TransientLinkSet
rule = Set2Container
b
d1:Description
d
TL2:TransientLink
rule = Element2Element
eS
eT
c1:Container
rule Set2Container {
from
b : source!Set
to
d : target!Description(
text <- b.info
)
c : target!Container(
id <- b.id,
description <- d
)
}
rule Element2Element{
from
eS : source!Element
to
eT : target!Element (
name <- eS.name,
container <-thisModule.resolveTemp(
eS.set, ‘c’)
)
}
id = 1
info = „In …“
text = „In …“
id = 1
e1:Element
name = Element1
c
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #3
Resolve Temp – Explicitly Querying Trace Models (3/4)
e1:Element
name = Element1
b1:Set
TL1:TransientLink
:TransientLinkSet
rule = Set2Container
d1:Description
TL2:TransientLink
rule = Element2Element
c1:Container
id = 1
info = „In …“
text = „In …“
id = 1
e1:Element
name = Element1
rule Set2Container {
from
b : source!Set
to
d : target!Description(
text <- b.info
)
c : target!Container(
id <- b.id,
description <- d
)
}
rule Element2Element{
from
eS : source!Element
to
eT : target!Element (
name <- eS.name,
container <-thisModule.resolveTemp(
eS.set, ‘c’)
)
}
b
d
eS
eTc
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Example #3
Resolve Temp – Explicitly Querying Trace Models (4/4)
e1:Element
name = Element1
b1:Set
TL1:TransientLink
:TransientLinkSet
rule = Set2Container
d1:Description
TL2:TransientLink
rule = Element2Element
c1:Container
id = 1
info = „In …“
text = „In …“
id = 1
e1:Element
name = Element1
rule Set2Container {
from
b : source!Set
to
d : target!Description(
text <- b.info
)
c : target!Container(
id <- b.id,
description <- d
)
}
rule Element2Element{
from
eS : source!Element
to
eT : target!Element (
name <- eS.name,
container <-thisModule.resolveTemp(
eS.set, ‘c’)
)
}
b
d
eS
eTc
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
ATL Data Types
OCL Operations for each Type
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Rule inheritance
§  Rule inheritance allows for reusing transformation rules
§  A child rule may match a subset of what its parent rule matches
§  All the bindings and filters of the parent still make sense for the child
§  A child rule may specialize target elements of its parent rule
§  Initialization of existing elements may be specialized
§  A child rule may extend target elements of its parent rule
§  New elements may be created
§  A parent rule may be declared as abstract
§  Then the rule is not executed, but only reused by its children
§  Syntax
abstract rule R1 {
...
}
rule R2 extends R1 {
...
}
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Rule inheritance
Example #1
Person
name: String
Entity
name: String
Customer
id: String
Client
id: String
abstract rule Person2Entity {
from
p : source!Person
to
e : target!Entity(
name <- p.name
)
}
rule Customer2Client extends Person2Entity{
from
p : source!Customer
to
e : target!Client (
id <- p.id
)
}
Source MM Target MM
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Rule inheritance
Example #2
Person
name: String
Entity
name: String
Customer
id: String
Client
id: String
rule Person2Entity {
from
p : source!Person
to
e : target!Entity(
name <- p.name
)
}
rule Customer2Client extends Person2Entity{
from
p : source!Customer
to
e : target!Client (
id <- p.id
)
}
Source MM Target MM
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Debugging Hints
§ Quick and Dirty: Make use of .debug()
§ Proceed in tiny increments
§ Immediately test changes
§ Read Exception Trace
§ Look top-down the stack trace for „ERROR“ to find meaningful
message:
§ Check line number:
§ do-blocks can be used for temporary debug output
Line number
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
ATL in Use
§  ATL tools and documentation are available at http://
www.eclipse.org/atl
§  Execution engine
§  Virtual machine
§  ATL to byte code compiler
§  Integrated Development Environment (IDE) for
§  Editor with syntax highlighting and outline
§  Execution support with launch configurations
§  Source-level debugger
§  Documentation
§  Starter’s guide
§  User manual
§  User guide
§  Basic examples
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Summary
§  ATL is specialized in out-place model transformations
§  Simple problems are generally solved easily
§  ATL supports advanced features
§  Complex OCL navigation, called rules, refining mode, rule inheritance, etc
§  Many complex problems can be handled declaratively
§  ATL has declarative and imperative features
§  Any out-place transformation problem can be handled
§  Further information
§  Documentation:
http://wiki.eclipse.org/ATL/User_Guide_-_The_ATL_Language
§  Examples: http://www.eclipse.org/m2m/atl/basicExamples_Patterns
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Alternatives to ATL
§  QVT: Query-View-Transformation standard of the OMG
§  Declarative QVT Relational language
§  Imperative QVT Operational language
§  Low-level QVT Core language (VM level)
§  TGG: Triple Graph Grammars
§  Correspondence graphs between metamodels
§  Transform models in both directions, integrate and synchronize models
§  JTL: Janus Transformation Language
§  Strong focus on model synchronization by change propagating
§  ETL: Epsilon Transformation Language
§  Designated language in the Epsilon framework for out-place transformations
§  RubyTL: Ruby Transformation Language
§  Extension of the Ruby programming language
§  Core concepts for out-place model transformations (extendable)
§  Many more languages such as VIATRA, Tefkat, Kermeta, or SiTra, …
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
www.mdse-book.com
IN-PLACE
TRANSFORMATIONS:
GRAPH TRANSFORMATIONS
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Why graph transformations?
§ Models are graphs
§ Class diagram, Petri net, State machine, …
§ Type Graph:
§ Generalization of graph elements
§ Graph transformations
§ Generalization of the graphs’ evolutions
§  Graph transformations are applicable for models!
Type Graph	

Graph	

Metamodel	

Model	

represents
represents
conformsTo conformsTo
Graph
Transformations
Model
Transformations
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
Basics: Directed graph
§  A directed graph G consists of two disjoint sets
§  Vertices V (Vertex)
§  Edges E (Edge)
§  Each edge has a source vertex s and a target vertex t
§  Summarized: G = (V, E, s: E → V, t: E → V)
§  Example graph
§  V = {1, 2, 3}
§  E = {a, b, c}
§  s(a) = 2
§  t(a) = 1
§  s(b) = 3
§  t(b) = 2
§  …
1	

 2	

 3	

a b
c
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan & Claypool 2012.
TypeGraph	

Typed attributed graph (1/3)
§  To represent models further information is needed
§  Typing: Each vertex and each edge has a type
§  Attribution: Each vertex/edge has an arbitrary number of name/value pairs
§  Notation for directed, typed and attributed graphs
§  Graph is represented as an object diagram
§  Type graph is represented as a class diagram
§  Example
1 : ShippingCompany	

name = „LKW Maier“	

Graph	

1 : Truck	

load = 0	

2 : Truck	

load = 10	

1 : Store	

name = „CompStore“	

containers = 0	

ShippingCompany	

name : String	

Truck	

load: Integer	

Store	

name : String
containers : Integer	

*
Container	

weight : Integer	

0..1
1 : Container	

weight = 10	

0..1
in	

inFrontOf	

on	

on	

inFrontOf	

trucks	

trucks	

trucks	

0..1
Example taken from: C. Ermel, M. Rudolf, and G. Taentzer, The AGG approach: Language and environment, Handbook of Graph
Grammars and Computing by Graph Transformation, Application, Languages and Tools, volume 2, World Scientific, 1999.
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Typed attributed graph (2/3)
§  Object diagram
§  Instance of class diagram
§  Basic concepts
§  Object : Instance of class
§  Value: Instance of attribute
§  Link: Instance of reference
1 : Truck	

load = 0	

1 : Store	

name = „CompStore“
	

inFrontOf	

ObjectID : Class name
Attribute name = Value
Reference name
Truck	

load: Integer	

Store	

name : String
…	

0..1
inFrontOf	

«instanceOf»
«instanceOf»
«instanceOf» «instanceOf»
«instanceOf»
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Typed attributed graph (3/3)
§  Question: How does the type graph look in pure graph shape (object
diagram)?
TypeGraph	

ShippingCompany	

name : String	

Truck	

load: Integer	

Store	

name : String
containers : Integer	

*
Container	

weight : Integer	

0..1
0..
1in	

inFrontOf	

on	

trucks	

0..1
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Typed attributed graph (3/3)
§  Question: How does the type graph look in pure graph shape (object
diagram)?
TypeGraph	

ShippingCompany	

name : String	

Truck	

load: Integer	

Store	

name : String
containers : Integer	

*
Container	

weight : Integer	

0..1
0..
1in	

inFrontOf	

on	

trucks	

1 : Class	

name = „ShippingCompany“	

1 : Attribute	

name = „name“	

type = „String“	

1 : Reference	

lower = 0	

upper = -1	

name = „trucks“	

2 : Class	

name = „Truck“	

type	

attributes	

references	

 …
0..1
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Until now…
§  …we considered models as static entities
§  A modeler creates a model using an editor – Done!
§  But what is about dynamic model modifications?
§  They are needed for
§  Simulation
§  Execution
§  Animation
§  Transformation
§  Extension
§  Improvement
§  …
§  How can graphs be modified?
§  Imperative: Java Program + Model API
§  Declarative: Graph transformations by means of graph transformation rules
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Example
§  Operation: Loading of Container onto a Truck
§  How can this behaviour be described in a generic way?
1 : ShippingCompany	

name = „LKW Maier“	

1 : Truck	

load = 0	

1 : Store	

name = „CompStore“	

containers = 1	

1 : Container	

weight = 10	

1 : ShippingCompany	

name = „LKW Maier“	

1 : Truck	

load = 10	

1 : Store	

name = „CompStore“	

containers = 0	

1 : Container	

weight = 10	

before after
loading()	

inFrontOf	

inFrontOf	

in	

on	

trucks	

 trucks
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Graph transformation rule
§  A graph transformation rule p: L → R is a structure preserving, partial
mapping between two graphs
§  L and R are two directed, typed and attributed graphs themselves
§  Structure preserving, because vertices, edges and values may be preserved
§  Partial, because vertices and edges may be added/deleted
§  Example: Loading of Container onto a Truck
1 : Container	

2 : Truck	

3 : Store	

in
4:inFrontOf
1 : Container	

2 : Truck	

3 : Store	

4:inFrontOf
on
L	

 R	

Pre-condition Post-condition
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Graph transformation rule
§ Structure preserving
§ All vertices and edges which are contained in the set L ∩ R
§ Example
1 : Container	

2 : Truck	

3 : Store	

in
4:inFrontOf
1 : Container	

2 : Truck	

3 : Store	

4:inFrontOf
on
L	

 R
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Graph transformation rule
§ Adding
§ All vertices and edges which are contained in the set R  L
§ Example
1 : Container	

2 : Truck	

3 : Store	

in
4:inFrontOf
1 : Container	

2 : Truck	

3 : Store	

4:inFrontOf
on
L	

 R
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Graph transformation rule
§ Deleting
§ All vertices and edges which are contained in the set L  R
§ Example
1 : Container	

2 : Truck	

3 : Store	

in
4:inFrontOf
1 : Container	

2 : Truck	

3 : Store	

4:inFrontOf
on
L	

 R
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Graph transformation rule
§  Calculating – Make use of attributes
§  Constants
§  Variables
§  Expressions (OCL  Co)
§  Example
1 : Container	

weight = x	

2 : Truck	

load = 0	

3 : Store	

containers = y	

in
4:inFrontOf
1 : Container	

weight = x	

2 : Truck	

load = x	

3 : Store	

containers = y-1	

4:inFrontOf
on
L	

 R	

constraints assignments
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Graph transformation
§  A graph transformation t: G → H is the result of the execution of a
graph transformation rule p: L → R in the context of G
§  t = (p,m) where m: L → G is an injective graph morphism (match)
L	

 R	

G	

p
m
H
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Graph transformation
Operational specification
§  Prepare the transformation
§  Select rule p: L - R
§  Select match m: L - G
§  Generate new graph H by
§  Deletion of L  R
§  Addition of R  L
L	

 R	

G	

p
m
H
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Graph transformation example (1/2)
p
m
1 : Container	

weight = x	

2 : Truck	

load = 0	

3 : Store	

containers = y	

in
4:inFrontOf
1 : Container	

weight = x	

2 : Truck	

load = x	

3 : Store	

containers = y-1	

4:inFrontOf
on
L R
1 : ShippingCompany	

name = „LKW Maier“	

1 : Truck	

load = 0	

2 : Truck	

load = 100	

1 : Store	

name = „CompStore“	

containers = 1	

1 : Container	

weight = 10	

1 : ShippingCompany	

name = „LKW Maier“	

1 : Truck	

load = 10	

2 : Truck	

load = 100	

1 : Store	

name = „CompStore“	

containers = 0	

1 : Container	

weight = 10	

graphtransformationrulegraphtransformation
G H
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Graph transformation example (2/2)
p
m
a : Container	

weight = x	

c : Truck	

load = 0	

b : Store	

containers = y	

in
4:inFrontOf
a : Container	

weight = x	

c : Truck	

load = x	

b : Store	

containers = y-1	

4:inFrontOf
on
L R
1 : ShippingCompany	

name = „LKW Maier“	

1 : Truck	

load = 0	

2 : Truck	

load = 100	

1 : Store	

name = „CompStore“	

containers = 1	

1 : Container	

weight = 10	

1 : ShippingCompany	

name = „LKW Maier“	

1 : Truck	

load = 10	

2 : Truck	

load = 100	

1 : Store	

name = „CompStore“	

containers = 0	

1 : Container	

weight = 10	

graphtransformation
G H
graphtransformationrule
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Graph transformations in ATL
§  Graph transformation
§  ATL (Refining Mode)
rule Loading {
from
a : Container (a.in = b)
b : Store
c : Truck (c.inFrontOf = b AND c.load = 0)
to
_a : Container(weight - a.weight, on - _c)
_b : Store(containers - b.containers - 1)
_c : Truck(load - a.weight, inFrontOf - _b)
}
a : Container	

weight = x	

c : Truck	

load = 0	

b : Store	

containers = y	

in
4:inFrontOf
a : Container	

weight = x	

c : Truck	

load = x	

b : Store	

containers = y-1	

4:inFrontOf
on
L R
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Negative Application Condition (NAC)
§  Left side of a rule specifies what must be existing to execute the
rule
§  Application Condition
§  Often needed to describe what must not be existing
§  Negative Application Condition (NAC)
§  NAC is a graph which describes a forbidden sub graph structure
§  Absence of specific vertices and edges must be granted
§  Graph transformation rule is executed when NAC is not fulfilled
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Negative Application Condition (NAC)
§  Example: A truck should only be loaded if there is no container on the truck
1 : Container	

weight = x	

2 : Truck	

load = 0	

3 : Store	

containers = y	

in
4:inFrontOf
1 : Container	

weight = x	

2 : Truck	

load = x	

3 : Store	

containers = y-1	

4:inFrontOf
on
L	

 R	

: Container	

2 : Truck	

on
NAC	

Advanced Pre-condition Post-condition
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Negative Application Condition (NAC)
§ Multiple NACs for one rule possible
§ But: LHS and RHS must only be specified once
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Multi-Object
§  The number of matching objects is not always known in advance
§  Maximal set of objects which fulfill a certain condition
§  Selection of all objects x from a set y which fulfill condition z
§  In OCL: y - select(x | z(x))
§  Notation: Multi-Object from UML 1.4
§  A multi-object symbol maps to a collection of instances in which each instance
conforms to a given type and conditions
§  Example: select(x | x.oclIsTypeOf(Type))
id : Type
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Execution order of graph transformation rules
§  A graph transformation system consists of a set of different graph
transformation rules
§  In which order are they being executed?
§  Multiple procedures
§  nondeterministic
§  deterministic
§  Priorities
§  Programs (aka „programmable graph transformations“)
§  Example – Specialized UML activity diagrams
§  [failure]
§  [success]
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Graph transformation Tools
§  VIATRA
§  PROGRES
§  GrGen.NET
§  VMTS
§  MOMENT2
§  EMT
§  Fujaba
§  AGG
§  MoTif
§  GROOVE
§  MoTMoT
§  ATL Refining Mode
§  eMotions
§  …
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Summary
§  Model transformations are graph transformations
§  Type Graph = Metamodel
§  Graph = Model
§  Programmable graph transformations allow for the development
of complex graph evolution scenarios
§  Exogenous, out-place transformations can also be specified as
graph transformations
§  However more complex as with ATL
§  Graph transformations are becoming more and more relevant in
practice
§  Found their way into Eclipse!
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
www.mdse-book.com
MASTERING MODEL
TRANSFORMATIONS
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
HOTs
§  Transformations can be regarded as models themselves
§  They are instances of a transformation metamodel!
§  This uniformity allows reusing tools and methods defined for models
§  Thus, a transformation model can itself be created or manipulated
by transformations, by so-called Higher Order Transformations
(HOTs)
§  Transformations that take as input a model transformation and/or
generate a model transformation as output
§  Examples
§  Refactoring support for transformations to improve their internal structure
§  Adding a logging aspect to transformations
§  …
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Bi-directional Transformations
§  Bi-directional model transformation languages
§  do not impose a transformation direction when specifying a
transformation
§  allow for different execution modes such as transformation,
integration, and synchronization
§  Transformation mode is further divided into forward and
backward transformation (source - target - source)
§  Integration mode assumes to have source and target models
given and checks if expected elements (that would be produced
in the transformation mode) exist
§  Synchronization mode updates the models in case the
integration mode has reported unsatisfied correspondences
§  Languages allowing for bi-directional transformations:
§  JTL, TGG, QVT Relational, …
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Lazy  Incremental Transformations
§  Standard execution strategy for out-place transformations
1)  Read the complete input model
2)  Produce the output model from scratch by applying all matching
transformation rules.
§  Such executions are often referred as batch transformations.
§  Two scenarios may benefit from alternative execution strategies
1)  An output model already exists from a previous transformation run
for a given input model à incremental transformations
2)  Only a part of the output model is needed by a consumer à lazy
transformations
§  Experimental implementations for lazy and incremental
transformations are available for ATL
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Transformation Chains
§  Transformations may be complex processes
§  Divide and Conquer
§  Use different transformation steps to avoid having one monolithic transformation!
§  Transformation chains are the technique of choice for modeling the
orchestration of different model transformations
§  Transformation chains are defined with orchestration languages
§  Simplest form: sequential steps of transformations executions
§  More complex forms: conditional branches, loops, and further control constructs
§  Even HOTs may produce dynamically transformations used by the chain
§  Smaller transformations focusing on certain aspects allow for higher
reusability
Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Model-Driven Software Engineering In Practice. Morgan  Claypool 2012.
Teaching material for the book
Model-Driven Software Engineering in Practice
by Marco Brambilla, Jordi Cabot, Manuel Wimmer.
Morgan  Claypool, USA, 2012.
Copyright © 2012 Brambilla, Cabot, Wimmer.
www.mdse-book.com
MODEL-DRIVEN SOFTWARE
ENGINEERING IN PRACTICE
Marco Brambilla,
Jordi Cabot,
Manuel Wimmer.
Morgan  Claypool, USA, 2012.
www.mdse-book.com
www.morganclaypool.com

More Related Content

What's hot

Model driven architecture
Model driven architectureModel driven architecture
Model driven architecture
Biruk Mamo
 
An introduction to the MDA
An introduction to the MDAAn introduction to the MDA
An introduction to the MDALai Ha
 
MDA
MDAMDA
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven ArchitectureMajong DevJfu
 
Object model
Object modelObject model
Object model
James Wong
 
A Review of Deep Contextualized Word Representations (Peters+, 2018)
A Review of Deep Contextualized Word Representations (Peters+, 2018)A Review of Deep Contextualized Word Representations (Peters+, 2018)
A Review of Deep Contextualized Word Representations (Peters+, 2018)
Shuntaro Yada
 
Code Refactoring
Code RefactoringCode Refactoring
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformationMajong DevJfu
 
Iterative model
Iterative modelIterative model
Iterative model
Vaibhav Dash
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
kim.mens
 
Component based software development
Component based software developmentComponent based software development
Component based software development
Emmanuel Fuchs
 
SysML v2 and MBSE: The next ten years
SysML v2 and MBSE: The next ten yearsSysML v2 and MBSE: The next ten years
SysML v2 and MBSE: The next ten years
Ed Seidewitz
 
Java script
Java scriptJava script
Java script
Sukrit Gupta
 
Elixir Programming Language 101
Elixir Programming Language 101Elixir Programming Language 101
Elixir Programming Language 101
Around25
 
Uml - An Overview
Uml - An OverviewUml - An Overview
Uml - An Overview
Raj Thilak S
 
Design Pattern in Software Engineering
Design Pattern in Software EngineeringDesign Pattern in Software Engineering
Design Pattern in Software Engineering
Manish Kumar
 
DDD eXchange
DDD eXchangeDDD eXchange
DDD eXchange
Skills Matter
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
Anuja Arosha
 
Refactoring
RefactoringRefactoring
Refactoring
Artem Tabalin
 
Introduction to design patterns
Introduction to design patternsIntroduction to design patterns
Introduction to design patterns
Amit Kabra
 

What's hot (20)

Model driven architecture
Model driven architectureModel driven architecture
Model driven architecture
 
An introduction to the MDA
An introduction to the MDAAn introduction to the MDA
An introduction to the MDA
 
MDA
MDAMDA
MDA
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
Object model
Object modelObject model
Object model
 
A Review of Deep Contextualized Word Representations (Peters+, 2018)
A Review of Deep Contextualized Word Representations (Peters+, 2018)A Review of Deep Contextualized Word Representations (Peters+, 2018)
A Review of Deep Contextualized Word Representations (Peters+, 2018)
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
Iterative model
Iterative modelIterative model
Iterative model
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
Component based software development
Component based software developmentComponent based software development
Component based software development
 
SysML v2 and MBSE: The next ten years
SysML v2 and MBSE: The next ten yearsSysML v2 and MBSE: The next ten years
SysML v2 and MBSE: The next ten years
 
Java script
Java scriptJava script
Java script
 
Elixir Programming Language 101
Elixir Programming Language 101Elixir Programming Language 101
Elixir Programming Language 101
 
Uml - An Overview
Uml - An OverviewUml - An Overview
Uml - An Overview
 
Design Pattern in Software Engineering
Design Pattern in Software EngineeringDesign Pattern in Software Engineering
Design Pattern in Software Engineering
 
DDD eXchange
DDD eXchangeDDD eXchange
DDD eXchange
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Refactoring
RefactoringRefactoring
Refactoring
 
Introduction to design patterns
Introduction to design patternsIntroduction to design patterns
Introduction to design patterns
 

Similar to Model-Driven Software Engineering in Practice - Chapter 8 - Model-to-model transformations

Model-Driven Software Engineering in Practice - Chapter 10 - Managing models
Model-Driven Software Engineering in Practice - Chapter 10 - Managing modelsModel-Driven Software Engineering in Practice - Chapter 10 - Managing models
Model-Driven Software Engineering in Practice - Chapter 10 - Managing models
Jordi Cabot
 
Model-Driven Software Engineering in Practice - Chapter 4 - Model-Driven Arch...
Model-Driven Software Engineering in Practice - Chapter 4 - Model-Driven Arch...Model-Driven Software Engineering in Practice - Chapter 4 - Model-Driven Arch...
Model-Driven Software Engineering in Practice - Chapter 4 - Model-Driven Arch...
Jordi Cabot
 
Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...
Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...
Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...Serge Stinckwich
 
Magento code testability: Problems and Solutions
Magento code testability: Problems and SolutionsMagento code testability: Problems and Solutions
Magento code testability: Problems and SolutionsAnton Kril
 
Solid OO & Clean Coding is essential to successful Agile development
Solid OO & Clean Coding is essential to successful Agile developmentSolid OO & Clean Coding is essential to successful Agile development
Solid OO & Clean Coding is essential to successful Agile development
Simon Gould
 
Model-To-Text Transformation Language chapter 9 – J Cabot model driven engine...
Model-To-Text Transformation Language chapter 9 – J Cabot model driven engine...Model-To-Text Transformation Language chapter 9 – J Cabot model driven engine...
Model-To-Text Transformation Language chapter 9 – J Cabot model driven engine...
majid lotfinia
 
Testing Neural Program Analyzers (ASE-LBR 2019)
Testing Neural Program Analyzers (ASE-LBR 2019)Testing Neural Program Analyzers (ASE-LBR 2019)
Testing Neural Program Analyzers (ASE-LBR 2019)
Rafiqul Rabin
 
Global Mutable State Analysis in Spring MVC Applications
Global Mutable State Analysis in Spring MVC ApplicationsGlobal Mutable State Analysis in Spring MVC Applications
Global Mutable State Analysis in Spring MVC Applicationsjsinglet
 
Lightweight Model-Driven Engineering
Lightweight Model-Driven EngineeringLightweight Model-Driven Engineering
Lightweight Model-Driven Engineering
Jordi Cabot
 
Our research lines on Model-Driven Engineering and Software Engineering
Our research lines on Model-Driven Engineering and Software EngineeringOur research lines on Model-Driven Engineering and Software Engineering
Our research lines on Model-Driven Engineering and Software Engineering
Jordi Cabot
 
Rapid Development with Schemaless Data Models
Rapid Development with Schemaless Data ModelsRapid Development with Schemaless Data Models
Rapid Development with Schemaless Data ModelsMongoDB
 
King Tut Architecture
King Tut ArchitectureKing Tut Architecture
King Tut Architecture
Gary Pedretti
 
Design for testability as a way to good coding (SOLID and IoC)
Design for testability as a way to good coding (SOLID and IoC)Design for testability as a way to good coding (SOLID and IoC)
Design for testability as a way to good coding (SOLID and IoC)
Simone Chiaretta
 
Object Oriented Programming
Object Oriented ProgrammingObject Oriented Programming
Object Oriented Programming
Muhammad Jahanzaib
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
Lionel Briand
 
Software Engineering
Software EngineeringSoftware Engineering
Software Engineering
amitymbaassignment
 
What's Missing in Language Workbenches
What's Missing in Language WorkbenchesWhat's Missing in Language Workbenches
What's Missing in Language Workbenches
Markus Voelter
 
Spiral Model and other model
Spiral Model and other modelSpiral Model and other model
Spiral Model and other model
Islamia Univeristy Bahawalpur Bahawalnagar
 
Big Ball of Mud: Software Maintenance Nightmares
Big Ball of Mud: Software Maintenance NightmaresBig Ball of Mud: Software Maintenance Nightmares
Big Ball of Mud: Software Maintenance Nightmares
Gonzalo Rodríguez
 

Similar to Model-Driven Software Engineering in Practice - Chapter 8 - Model-to-model transformations (20)

Model-Driven Software Engineering in Practice - Chapter 10 - Managing models
Model-Driven Software Engineering in Practice - Chapter 10 - Managing modelsModel-Driven Software Engineering in Practice - Chapter 10 - Managing models
Model-Driven Software Engineering in Practice - Chapter 10 - Managing models
 
Model-Driven Software Engineering in Practice - Chapter 4 - Model-Driven Arch...
Model-Driven Software Engineering in Practice - Chapter 4 - Model-Driven Arch...Model-Driven Software Engineering in Practice - Chapter 4 - Model-Driven Arch...
Model-Driven Software Engineering in Practice - Chapter 4 - Model-Driven Arch...
 
Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...
Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...
Dealing with Run-Time Variability in Service Robotics: Towards a DSL for Non-...
 
Magento code testability: Problems and Solutions
Magento code testability: Problems and SolutionsMagento code testability: Problems and Solutions
Magento code testability: Problems and Solutions
 
Solid OO & Clean Coding is essential to successful Agile development
Solid OO & Clean Coding is essential to successful Agile developmentSolid OO & Clean Coding is essential to successful Agile development
Solid OO & Clean Coding is essential to successful Agile development
 
Model-To-Text Transformation Language chapter 9 – J Cabot model driven engine...
Model-To-Text Transformation Language chapter 9 – J Cabot model driven engine...Model-To-Text Transformation Language chapter 9 – J Cabot model driven engine...
Model-To-Text Transformation Language chapter 9 – J Cabot model driven engine...
 
Testing Neural Program Analyzers (ASE-LBR 2019)
Testing Neural Program Analyzers (ASE-LBR 2019)Testing Neural Program Analyzers (ASE-LBR 2019)
Testing Neural Program Analyzers (ASE-LBR 2019)
 
Global Mutable State Analysis in Spring MVC Applications
Global Mutable State Analysis in Spring MVC ApplicationsGlobal Mutable State Analysis in Spring MVC Applications
Global Mutable State Analysis in Spring MVC Applications
 
Lightweight Model-Driven Engineering
Lightweight Model-Driven EngineeringLightweight Model-Driven Engineering
Lightweight Model-Driven Engineering
 
PhD-viva_ver0.4
PhD-viva_ver0.4PhD-viva_ver0.4
PhD-viva_ver0.4
 
Our research lines on Model-Driven Engineering and Software Engineering
Our research lines on Model-Driven Engineering and Software EngineeringOur research lines on Model-Driven Engineering and Software Engineering
Our research lines on Model-Driven Engineering and Software Engineering
 
Rapid Development with Schemaless Data Models
Rapid Development with Schemaless Data ModelsRapid Development with Schemaless Data Models
Rapid Development with Schemaless Data Models
 
King Tut Architecture
King Tut ArchitectureKing Tut Architecture
King Tut Architecture
 
Design for testability as a way to good coding (SOLID and IoC)
Design for testability as a way to good coding (SOLID and IoC)Design for testability as a way to good coding (SOLID and IoC)
Design for testability as a way to good coding (SOLID and IoC)
 
Object Oriented Programming
Object Oriented ProgrammingObject Oriented Programming
Object Oriented Programming
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Software Engineering
Software EngineeringSoftware Engineering
Software Engineering
 
What's Missing in Language Workbenches
What's Missing in Language WorkbenchesWhat's Missing in Language Workbenches
What's Missing in Language Workbenches
 
Spiral Model and other model
Spiral Model and other modelSpiral Model and other model
Spiral Model and other model
 
Big Ball of Mud: Software Maintenance Nightmares
Big Ball of Mud: Software Maintenance NightmaresBig Ball of Mud: Software Maintenance Nightmares
Big Ball of Mud: Software Maintenance Nightmares
 

More from Jordi Cabot

AI and Software consultants: friends or foes?
AI and Software consultants: friends or foes?AI and Software consultants: friends or foes?
AI and Software consultants: friends or foes?
Jordi Cabot
 
Model-driven engineering for Industrial IoT architectures
Model-driven engineering for Industrial IoT architecturesModel-driven engineering for Industrial IoT architectures
Model-driven engineering for Industrial IoT architectures
Jordi Cabot
 
Smart modeling of smart software
Smart modeling of smart softwareSmart modeling of smart software
Smart modeling of smart software
Jordi Cabot
 
Modeling should be an independent scientific discipline
Modeling should be an independent scientific disciplineModeling should be an independent scientific discipline
Modeling should be an independent scientific discipline
Jordi Cabot
 
¿Quién va a desarrollar las Apps del futuro? (aviso: no serán los programador...
¿Quién va a desarrollar las Apps del futuro? (aviso: no serán los programador...¿Quién va a desarrollar las Apps del futuro? (aviso: no serán los programador...
¿Quién va a desarrollar las Apps del futuro? (aviso: no serán los programador...
Jordi Cabot
 
How to sustain a tool building community-driven effort
How to sustain a tool building community-driven effortHow to sustain a tool building community-driven effort
How to sustain a tool building community-driven effort
Jordi Cabot
 
All Researchers Should Become Entrepreneurs
All Researchers Should Become EntrepreneursAll Researchers Should Become Entrepreneurs
All Researchers Should Become Entrepreneurs
Jordi Cabot
 
The Software Challenges of Building Smart Chatbots - ICSE'21
The Software Challenges of Building Smart Chatbots - ICSE'21The Software Challenges of Building Smart Chatbots - ICSE'21
The Software Challenges of Building Smart Chatbots - ICSE'21
Jordi Cabot
 
Low-code vs Model-Driven Engineering
Low-code vs Model-Driven EngineeringLow-code vs Model-Driven Engineering
Low-code vs Model-Driven Engineering
Jordi Cabot
 
Lessons learned from building a commercial bot development platform
Lessons learned from building a commercial bot development platformLessons learned from building a commercial bot development platform
Lessons learned from building a commercial bot development platform
Jordi Cabot
 
Future Trends on Software and Systems Modeling
Future Trends on Software and Systems ModelingFuture Trends on Software and Systems Modeling
Future Trends on Software and Systems Modeling
Jordi Cabot
 
Ingeniería del Software dirigida por modelos -Versión para incrédulos
Ingeniería del Software dirigida por modelos -Versión para incrédulosIngeniería del Software dirigida por modelos -Versión para incrédulos
Ingeniería del Software dirigida por modelos -Versión para incrédulos
Jordi Cabot
 
Chatbot Tutorial - Create your first bot with Xatkit
Chatbot Tutorial - Create your first bot with Xatkit Chatbot Tutorial - Create your first bot with Xatkit
Chatbot Tutorial - Create your first bot with Xatkit
Jordi Cabot
 
Création facile de chatbots - Créez votre chatbot en 20 minutes avec une plat...
Création facile de chatbots - Créez votre chatbot en 20 minutes avec une plat...Création facile de chatbots - Créez votre chatbot en 20 minutes avec une plat...
Création facile de chatbots - Créez votre chatbot en 20 minutes avec une plat...
Jordi Cabot
 
An LSTM-Based Neural Network Architecture for Model Transformations
An LSTM-Based Neural Network Architecture for Model TransformationsAn LSTM-Based Neural Network Architecture for Model Transformations
An LSTM-Based Neural Network Architecture for Model Transformations
Jordi Cabot
 
WAPIml: Towards a Modeling Infrastructure for Web APIs
WAPIml: Towards a Modeling Infrastructure for Web APIsWAPIml: Towards a Modeling Infrastructure for Web APIs
WAPIml: Towards a Modeling Infrastructure for Web APIs
Jordi Cabot
 
Is there a future for Model Transformation Languages?
Is there a future for Model Transformation Languages?Is there a future for Model Transformation Languages?
Is there a future for Model Transformation Languages?
Jordi Cabot
 
Software Modeling and Artificial Intelligence: friends or foes?
Software Modeling and Artificial Intelligence: friends or foes?Software Modeling and Artificial Intelligence: friends or foes?
Software Modeling and Artificial Intelligence: friends or foes?
Jordi Cabot
 
Temporal EMF: A temporal metamodeling platform
Temporal EMF: A temporal metamodeling platformTemporal EMF: A temporal metamodeling platform
Temporal EMF: A temporal metamodeling platform
Jordi Cabot
 
UMLtoNoSQL : From UML domain models to NoSQL Databases
UMLtoNoSQL : From UML domain models to NoSQL DatabasesUMLtoNoSQL : From UML domain models to NoSQL Databases
UMLtoNoSQL : From UML domain models to NoSQL Databases
Jordi Cabot
 

More from Jordi Cabot (20)

AI and Software consultants: friends or foes?
AI and Software consultants: friends or foes?AI and Software consultants: friends or foes?
AI and Software consultants: friends or foes?
 
Model-driven engineering for Industrial IoT architectures
Model-driven engineering for Industrial IoT architecturesModel-driven engineering for Industrial IoT architectures
Model-driven engineering for Industrial IoT architectures
 
Smart modeling of smart software
Smart modeling of smart softwareSmart modeling of smart software
Smart modeling of smart software
 
Modeling should be an independent scientific discipline
Modeling should be an independent scientific disciplineModeling should be an independent scientific discipline
Modeling should be an independent scientific discipline
 
¿Quién va a desarrollar las Apps del futuro? (aviso: no serán los programador...
¿Quién va a desarrollar las Apps del futuro? (aviso: no serán los programador...¿Quién va a desarrollar las Apps del futuro? (aviso: no serán los programador...
¿Quién va a desarrollar las Apps del futuro? (aviso: no serán los programador...
 
How to sustain a tool building community-driven effort
How to sustain a tool building community-driven effortHow to sustain a tool building community-driven effort
How to sustain a tool building community-driven effort
 
All Researchers Should Become Entrepreneurs
All Researchers Should Become EntrepreneursAll Researchers Should Become Entrepreneurs
All Researchers Should Become Entrepreneurs
 
The Software Challenges of Building Smart Chatbots - ICSE'21
The Software Challenges of Building Smart Chatbots - ICSE'21The Software Challenges of Building Smart Chatbots - ICSE'21
The Software Challenges of Building Smart Chatbots - ICSE'21
 
Low-code vs Model-Driven Engineering
Low-code vs Model-Driven EngineeringLow-code vs Model-Driven Engineering
Low-code vs Model-Driven Engineering
 
Lessons learned from building a commercial bot development platform
Lessons learned from building a commercial bot development platformLessons learned from building a commercial bot development platform
Lessons learned from building a commercial bot development platform
 
Future Trends on Software and Systems Modeling
Future Trends on Software and Systems ModelingFuture Trends on Software and Systems Modeling
Future Trends on Software and Systems Modeling
 
Ingeniería del Software dirigida por modelos -Versión para incrédulos
Ingeniería del Software dirigida por modelos -Versión para incrédulosIngeniería del Software dirigida por modelos -Versión para incrédulos
Ingeniería del Software dirigida por modelos -Versión para incrédulos
 
Chatbot Tutorial - Create your first bot with Xatkit
Chatbot Tutorial - Create your first bot with Xatkit Chatbot Tutorial - Create your first bot with Xatkit
Chatbot Tutorial - Create your first bot with Xatkit
 
Création facile de chatbots - Créez votre chatbot en 20 minutes avec une plat...
Création facile de chatbots - Créez votre chatbot en 20 minutes avec une plat...Création facile de chatbots - Créez votre chatbot en 20 minutes avec une plat...
Création facile de chatbots - Créez votre chatbot en 20 minutes avec une plat...
 
An LSTM-Based Neural Network Architecture for Model Transformations
An LSTM-Based Neural Network Architecture for Model TransformationsAn LSTM-Based Neural Network Architecture for Model Transformations
An LSTM-Based Neural Network Architecture for Model Transformations
 
WAPIml: Towards a Modeling Infrastructure for Web APIs
WAPIml: Towards a Modeling Infrastructure for Web APIsWAPIml: Towards a Modeling Infrastructure for Web APIs
WAPIml: Towards a Modeling Infrastructure for Web APIs
 
Is there a future for Model Transformation Languages?
Is there a future for Model Transformation Languages?Is there a future for Model Transformation Languages?
Is there a future for Model Transformation Languages?
 
Software Modeling and Artificial Intelligence: friends or foes?
Software Modeling and Artificial Intelligence: friends or foes?Software Modeling and Artificial Intelligence: friends or foes?
Software Modeling and Artificial Intelligence: friends or foes?
 
Temporal EMF: A temporal metamodeling platform
Temporal EMF: A temporal metamodeling platformTemporal EMF: A temporal metamodeling platform
Temporal EMF: A temporal metamodeling platform
 
UMLtoNoSQL : From UML domain models to NoSQL Databases
UMLtoNoSQL : From UML domain models to NoSQL DatabasesUMLtoNoSQL : From UML domain models to NoSQL Databases
UMLtoNoSQL : From UML domain models to NoSQL Databases
 

Recently uploaded

First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
Tendenci - The Open Source AMS (Association Management Software)
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
WSO2
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
Srikant77
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 

Recently uploaded (20)

First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024Globus Connect Server Deep Dive - GlobusWorld 2024
Globus Connect Server Deep Dive - GlobusWorld 2024
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
RISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent EnterpriseRISE with SAP and Journey to the Intelligent Enterprise
RISE with SAP and Journey to the Intelligent Enterprise
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 

Model-Driven Software Engineering in Practice - Chapter 8 - Model-to-model transformations

  • 1. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Teaching material for the book Model-Driven Software Engineering in Practice by Marco Brambilla, Jordi Cabot, Manuel Wimmer. Morgan & Claypool, USA, 2012. Copyright © 2012 Brambilla, Cabot, Wimmer. www.mdse-book.com MODEL-TO-MODEL TRANSFORMATIONS Chapter 8
  • 2. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Content § Introduction § Out-place Transformations: ATL § In-place Transformations: Graph Transformations § Mastering Model Transformations
  • 3. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. www.mdse-book.com INTRODUCTION
  • 4. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Motivation Transformations are everywhere! §  Before MDE §  Program compilation, refactoring, migration, optimization, ... §  With MDE §  Transformations are key technologies! §  Every systematic manipulation of a model is a model transformation! §  Dimensions §  Horizontal vs. vertical §  Endogenous vs. exogenous §  Model-to-text vs. text-to-model vs. model-to-model [Excerpt of MDA Guide from the OMG] PIM PSM PIM PSM MLA MLB Code Code PLA PLB
  • 5. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Meta- Metamodel Metamodel Model M3 M2 M1 Definitions §  A model-to-model (M2M) transformation is the automatic creation of target models from source models. §  1-to-1 transformations §  1-to-N, N-to-1, N-to-M transformations §  target model* = T(source model*) Focus of model transformations, but not limited to M1 (remember: everything is a model!) Metamodeling Stack A B C X Y Z MT source model target model Example
  • 6. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Architecture Model-to-Model Transformation Pattern MOF MMa MMb Ma Mba2b.mt MMTLsource metamodel source model target model target metamodel conformsTo Execution Engine conformsTo conformsTo conformsTo conformsTo conformsTo
  • 7. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Two Transformation Strategies Out-place vs. in-place transformations Transformation Specification ModelA MetamodelA ModelB MetamodelB Transformation Specification ModelA MetamodelA Legend: Transformation Execution Dependency «conformsTo» «conformsTo» «conformsTo» Out-place Transformations build a new model from scratch In-place Transformations change some parts in the model
  • 8. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Two Transformation Strategies Out-place vs. in-place transformations For each green element, create a blue element. For each green element, create a blue element. Delete all elemens except blue ones. Out-place Transformation In-place Transformation Example #1
  • 9. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Two Transformation Strategies Out-place vs. in-place transformations Out-place Transformation In-place Transformation Example #2 For each green element, create a blue element. For each green element, create a green element. For each red element, create a red element. For each green element, create a blue element.
  • 10. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Architecture Illustrative Example G 2 P Rule R 2 B Rule Ma Mb MMa Green Class Red Class MMb Blue Class Pink Class Meta-metamodel Class Class ATL Rule Class MMa2MMb.atl conformsTo conformsTo conformsTo conformsTo conformsTo conformsTo conformsTo execution Out-place Transformations
  • 11. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Architecture Concrete Example Java M conformsTo A 2 V Rule C 2 C Rule UML2Java.atl execution UML M conformsTo c1:Class a1:Attribute Trace Model c1 -> c01 : C2C a1 -> v01 : A2V MMa Class Attribute * attributes Java MM Class Variable * variables v01:Variable c01:Class UML MM Out-place Transformations
  • 12. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Architecture Illustrative Example R 2 G Rule Ma MMa Green Class Red Class Meta-metamodel Class Class GT Rule Class MMa.gt conformsTo conformsTo conformsTo conformsTo In-place Transformations Ma’ Ma’’ conformsTo MMa
  • 13. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Architecture Concrete Example Pub2Pri Rule Pub2PriRef.gt UML M conformsTo c1:Class a1:Attribute Trace Model a1 -> Pub2Pri MMa Class Attribute * attributes UML MM In-place Transformations visibility visibility = public UML M’ c1:Class a1:Attribute visibility = private
  • 14. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. www.mdse-book.com OUT-PLACE TRANSFORMATIONS: ATLAS TRANSFORMATION LANGUAGE
  • 15. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. ATL overview §  Source models and target models are distinct §  Source models are read-only §  Target models are write-only §  The language is a declarative-imperative hybrid §  Declarative part §  Matched rules with automatic traceability support §  Side-effect free query language: OCL §  Imperative part §  Called/Lazy rules §  Action blocks §  Global variables via Helpers §  Recommended programming style: declarative
  • 16. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. ATL overview (continued) § A declarative rule specifies § A source pattern to be matched in the source models § A target pattern to be created in the target models for each match during rule application § An optional action block (i.e., a sequence of imperative statements) § An imperative rule is basically a procedure § It is called by its name § It may take arguments § It contains §  A declarative target pattern §  An optional action block
  • 17. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. ATL overview (continued) § Applying a rule means 1.  Creating the specified target elements 2.  Initializing the properties of the newly created elements § There are two types of rules concerning their application § Matched rules are applied once for each match by the execution engine §  A given set of elements may only be matched by one matched rule § Called/Lazy rules are applied as many times as they are called from other rules
  • 18. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Matched rules: Overview § A Matched rule is composed of § A source pattern § A target pattern § An optional action block Matched Rule Source Pattern Target Pattern Source Model Target Model queries generates accesses 1 1 Action Block 0..1 accesses accesses
  • 19. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. rule Rule1{ from v1 : SourceMM!Type1(cond1) to v2 : TargetMM!Type1 ( prop <- v1.prop ) } Matched rules: source pattern §  The source pattern is composed of §  A set of labeled source pattern elements §  A source pattern element refers to a type contained in the source metamodels §  A guard (Boolean OCL expression) used to filter matches §  A match corresponds to a set of elements coming from the source models that §  Fulfill the types specified by the source pattern elements §  Satisfy the guard
  • 20. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Matched rules: target pattern §  The target pattern is composed of §  A set of labeled target pattern elements §  Each target pattern element §  refers to a type in the target metamodels §  contains a set of bindings §  A binding initializes a property of a target element using an OCL expression §  For each match, the target pattern is applied §  Elements are created in the target models §  Target elements are initialized by executing the bindings rule Rule1{ from v1 : SourceMM!Type1(cond1) to v2 : TargetMM!Type1 ( prop <- v1.prop ) }
  • 21. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #1 – Publication 2 Book Journal name: String Book name: String id: Integer Source Metamodel Target Metamodel j2:Journal name = ACM Comp. Sur. j3:Journal name = IEEE Software. j1:Journal name = IEEE Computer b2:Book name = ACM Comp. Sur. id = 2 b3:Book name = IEEE Software. id = 3 b1:Book name = IEEE Computer id = 1 Journal Collection Book Collection jc1:Journal Collection bc1:Book Collection Concepts 1)  Matched Rule 2)  Helper Source Model Target Model journals books 1..* 1..*
  • 22. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #1 Configuration of Source/Target Metamodels § Header module Publication2Book; create OUT : Book from IN : Publication; § For code completion §  --@path MM_name =Path_to_metamodel_definition §  Activate code completion: CTRL + space
  • 23. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #1 Matched Rules §  Example Publication 2 Book module Publication2Book; create OUT : Book from IN : Publication; rule Collection2Collection { from jc : Publication!JournalCollection to bc : Book!BookCollection( books <- jc.journals ) } rule Journal2Book { from j : Publication!Journal to b : Book!Book ( name <- j.name ) } Source Pattern Target Pattern Matched Rule Header Binding
  • 24. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #1 Helpers 1/2 § Syntax helper context Type def : Name(Par1 : Type, …) : Type = EXP; § Global Variable helper def: id : Integer = 0; § Global Operation helper context Integer def : inc() : Integer = self + 1; § Calling a Helper §  thisModule.HelperName(…) – for global variables/operations without context §  value.HelperName(…) – for global variables/operations with context
  • 25. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #1 Helpers 2/2 §  Example Publication 2 Book module Publication2Book; create OUT : Book from IN : Publication; helper def : id : Integer = 0; helper context Integer def : inc() : Integer = self + 1; rule Journal2Book { from j : Publication!Journal to b : Book!Book ( name <- j.name ) do { thisModule.id <- thisModule.id.inc(); b.id <- thisModule.id; } } Action Block Global Variable Global Operation Module Instance for accessing global variables Global Operation call
  • 26. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 – Person 2 Customer Person name: String age : Integer gender : {male, female} Customer name: String gender: {male, female}PSystem CSystem * * c2:Customer name = javi c1:Customer name = hugo p2:Person name = javi age= 45 gender = female p3:Person name = bill age = 12 gender = male p1:Person name = hugo age = 21 gender = male s1:PSystem s1:CSystem Constraint: Customer must be older than 18 years Concepts: 1) Guards 2) Trace Model 3) Called/Lazy Rule Source Metamodel Target Metamodel Source Model Target Model
  • 27. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Describing more complex correspondences and bindings § Declarative Statements §  If/Else, OCL Operations, Global Operations, … §  Application: Guard Condition and Feature Binding § Example: IF/ELSE if condition then exp1 else exp2 endif
  • 28. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Guards Conditions in Source Patterns §  Example Person2Customer rule Person2Customer { from p : Person!Person (p.age > 18) to c : Customer!Customer ( name <- p.name ) } rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person -> select(p | p.age > 18) ) } Guard Condition Compute Subset for Feature Binding
  • 29. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Implicit Trace Model – Phase 1: Module Initialization Phase rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person ) } rule Person2Customer { from p : Person!Person(p.age > 18) to c : Customer!Customer ( name <- p.name ) } p1:Person name = hugo age = 21 p3:Person name = bill age = 12 s1:PSystem :TransientLinkSet Trace Model is a set (cf. TransientLinkSet) of links (cf. TransientLink) that relate source elements with their corresponding target elements
  • 30. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Implicit Trace Model – Phase 2: Matching Phase rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person ) } rule Person2Customer { from p : Person!Person(p.age > 18) to c : Customer!Customer ( name <- p.name ) } p1:Person name = hugo age = 21 p3:Person name = bill age = 12 s1:PSystem :TransientLinkSet
  • 31. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Implicit Trace Model – Phase 2: Matching Phase rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person ) } rule Person2Customer { from p : Person!Person(p.age > 18) to c : Customer!Customer ( name <- p.name ) } p1:Person name = hugo age = 21 p3:Person name = bill age = 12 s1:PSystem TL1:TransientLink :TransientLinkSet rule = PSystem2CSystem ps
  • 32. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Implicit Trace Model – Phase 2: Matching Phase rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person ) } rule Person2Customer { from p : Person!Person(p.age > 18) to c : Customer!Customer ( name <- p.name ) } p1:Person name = hugo age = 21 p3:Person name = bill age = 12 s1:PSystem TL1:TransientLink :TransientLinkSet rule = PSystem2CSystem ps s1:CSystem cs
  • 33. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Implicit Trace Model – Phase 2: Matching Phase rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person ) } rule Person2Customer { from p : Person!Person(p.age > 18) to c : Customer!Customer ( name <- p.name ) } p1:Person name = hugo age = 21 p3:Person name = bill age = 12 s1:PSystem TL1:TransientLink :TransientLinkSet rule = PSystem2CSystem ps s1:CSystem cs
  • 34. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Implicit Trace Model – Phase 2: Matching Phase rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person ) } rule Person2Customer { from p : Person!Person(p.age > 18) to c : Customer!Customer ( name <- p.name ) } p1:Person name = hugo age = 21 p3:Person name = bill age = 12 s1:PSystem TL1:TransientLink :TransientLinkSet rule = PSystem2CSystem ps s1:CSystem cs TL2:TransientLink rule = Person2Customer p
  • 35. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Implicit Trace Model – Phase 2: Matching Phase rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person ) } rule Person2Customer { from p : Person!Person(p.age > 18) to c : Customer!Customer ( name <- p.name ) } p1:Person name = hugo age = 21 p3:Person name = bill age = 12 s1:PSystem TL1:TransientLink :TransientLinkSet rule = PSystem2CSystem ps s1:CSystem cs TL2:TransientLink rule = Person2Customer p c1:Customer c
  • 36. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Implicit Trace Model – Phase 2: Matching Phase rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person ) } rule Person2Customer { from p : Person!Person(p.age > 18) to c : Customer!Customer ( name <- p.name ) } p1:Person name = hugo age = 21 p3:Person name = bill age = 12 s1:PSystem TL1:TransientLink :TransientLinkSet rule = PSystem2CSystem ps s1:CSystem cs TL2:TransientLink rule = Person2Customer c1:Customer p c
  • 37. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Implicit Trace Model – Phase 3: Target Initialization Phase rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person ) } rule Person2Customer { from p : Person!Person(p.age > 18) to c : Customer!Customer ( name <- p.name ) } p1:Person name = hugo age = 21 p3:Person name = bill age = 12 s1:PSystem TL1:TransientLink :TransientLinkSet rule = PSystem2CSystem ps s1:CSystem cs TL2:TransientLink rule = Person2Customer c1:Customer p c
  • 38. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Implicit Trace Model – Phase 3: Target Initialization Phase rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person ) } rule Person2Customer { from p : Person!Person(p.age > 18) to c : Customer!Customer ( name <- p.name ) } p1:Person name = hugo age = 21 p3:Person name = bill age = 12 s1:PSystem TL1:TransientLink :TransientLinkSet rule = PSystem2CSystem ps s1:CSystem cs TL2:TransientLink rule = Person2Customer c1:Customer p c
  • 39. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Implicit Trace Model – Phase 3: Target Initialization Phase rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person ) } rule Person2Customer { from p : Person!Person(p.age > 18) to c : Customer!Customer ( name <- p.name ) } p1:Person name = hugo age = 21 p3:Person name = bill age = 12 s1:PSystem TL1:TransientLink :TransientLinkSet rule = PSystem2CSystem ps s1:CSystem cs TL2:TransientLink rule = Person2Customer c1:Customer name = hugo p c
  • 40. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Implicit Trace Model – Phase 3: Target Initialization Phase rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person ) } rule Person2Customer { from p : Person!Person(p.age > 18) to c : Customer!Customer ( name <- p.name ) } p1:Person name = hugo age = 21 p3:Person name = bill age = 12 s1:PSystem TL1:TransientLink :TransientLinkSet rule = PSystem2CSystem ps s1:CSystem cs TL2:TransientLink rule = Person2Customer c1:Customer name = hugo p c
  • 41. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Implicit Trace Model – Phase 3: Target Initialization Phase rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( customer <- ps.person ) } rule Person2Customer { from p : Person!Person(p.age > 18) to c : Customer!Customer ( name <- p.name ) } p1:Person name = hugo age = 21 p3:Person name = bill age = 12 s1:PSystem TL1:TransientLink :TransientLinkSet rule = PSystem2CSystem ps s1:CSystem cs TL2:TransientLink rule = Person2Customer c1:Customer name = hugo p c
  • 42. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Transformation Execution Phases 1.  Module Initialization Phase §  Module variables (attribute helpers) and trace model are initialized §  If an entry point called rule is defined, it is executed in this step 2.  Matching Phase §  Using the source patterns (from) of matched rules, elements are selected in the source model (each match has to be unique) §  Via the target patterns (to) corresponding elements are created in the target model (for each match there are as much target elements created as target patterns are used) §  Traceability information is stored 3.  Target Initialization Phase §  The elements in the target model are initialized based on the bindings (<-) §  The resolveTemp function is evaluated, based on the traceability information §  Imperative code (do) is executed, including possible calls to called rules
  • 43. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Alternative Solution with Called Rule and Action Block (1/3) Imperative Statements in Action Blocks (do) IF/[ELSE] if( aPerson.gender = #male ) thisModule.men->including(aPerson); else thisModule.women->including(aPerson); FOR for( p in Person!Person.allInstances() ) { if(p.gender = #male) thisModule.men->including(p); else thisModule.women->including(p); }
  • 44. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Alternative Solution with Called Rule and Action Block (2/3) rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem () do{ for( p in Person!Person.allInstances() ) { if(p.age > 18) cs.customer <- thisModule.NewCustomer(p.name, p.gender); } } } Matched Rule Called Rule Call Action Block Explicit Query on Source Model Binding
  • 45. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Alternative Solution with Called Rule and Action Block (3/3) rule NewCustomer (name: String, gender: Person::Gender){ to c : Customer!Customer ( c.name <- name ) do { c.gender <- gender; c; } } Target Pattern Action Block Called Rule Result of Called Rules is the last statement executed in the Action Block
  • 46. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Alternative Solution with Lazy Rule and Action Block (1/2) rule PSystem2CSystem { from ps : Person!PSystem to cs : Customer!CSystem ( ) do{ for( p in Person!Person.allInstances() ) { if(p.age > 18) cs.customer <- thisModule.NewCustomer(p); } } } Matched Rule Lazy Rule Call Action Block Explicit Query on Source Model Binding
  • 47. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #2 Alternative Solution with Lazy Rule and Action Block (2/2) lazy rule NewCustomer{ from p : Person!Person to c : Customer!Customer ( name <- p.name, gender <- p.gender ) } Lazy Rule Source Pattern Target Pattern Result of Lazy Rules is the first specified target pattern element
  • 48. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #3 Resolve Temp – Explicitly Querying Trace Models (1/4) Element name: String Set Element name: String Container 1 id : Int info : String rule Set2Container { from b : source!Set to d : target!Description( text <- b.info ), c : target!Container( id <- b.id, description <- d ) } id: Int Description text: String 1 1 rule Element2Element{ from eS : source!Element to eT : target!Element ( name <- eS.name, container <- thisModule.resolveTemp( eS.set, ‘c’) ) } Source Metamodel Target Metamodel Transformation
  • 49. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #3 Resolve Temp – Explicitly Querying Trace Models (2/4) e1:Element name = Element1 b1:Set TL1:TransientLink :TransientLinkSet rule = Set2Container b d1:Description d TL2:TransientLink rule = Element2Element eS eT c1:Container rule Set2Container { from b : source!Set to d : target!Description( text <- b.info ) c : target!Container( id <- b.id, description <- d ) } rule Element2Element{ from eS : source!Element to eT : target!Element ( name <- eS.name, container <-thisModule.resolveTemp( eS.set, ‘c’) ) } id = 1 info = „In …“ text = „In …“ id = 1 e1:Element name = Element1 c
  • 50. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #3 Resolve Temp – Explicitly Querying Trace Models (3/4) e1:Element name = Element1 b1:Set TL1:TransientLink :TransientLinkSet rule = Set2Container d1:Description TL2:TransientLink rule = Element2Element c1:Container id = 1 info = „In …“ text = „In …“ id = 1 e1:Element name = Element1 rule Set2Container { from b : source!Set to d : target!Description( text <- b.info ) c : target!Container( id <- b.id, description <- d ) } rule Element2Element{ from eS : source!Element to eT : target!Element ( name <- eS.name, container <-thisModule.resolveTemp( eS.set, ‘c’) ) } b d eS eTc
  • 51. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Example #3 Resolve Temp – Explicitly Querying Trace Models (4/4) e1:Element name = Element1 b1:Set TL1:TransientLink :TransientLinkSet rule = Set2Container d1:Description TL2:TransientLink rule = Element2Element c1:Container id = 1 info = „In …“ text = „In …“ id = 1 e1:Element name = Element1 rule Set2Container { from b : source!Set to d : target!Description( text <- b.info ) c : target!Container( id <- b.id, description <- d ) } rule Element2Element{ from eS : source!Element to eT : target!Element ( name <- eS.name, container <-thisModule.resolveTemp( eS.set, ‘c’) ) } b d eS eTc
  • 52. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. ATL Data Types OCL Operations for each Type
  • 53. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Rule inheritance §  Rule inheritance allows for reusing transformation rules §  A child rule may match a subset of what its parent rule matches §  All the bindings and filters of the parent still make sense for the child §  A child rule may specialize target elements of its parent rule §  Initialization of existing elements may be specialized §  A child rule may extend target elements of its parent rule §  New elements may be created §  A parent rule may be declared as abstract §  Then the rule is not executed, but only reused by its children §  Syntax abstract rule R1 { ... } rule R2 extends R1 { ... }
  • 54. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Rule inheritance Example #1 Person name: String Entity name: String Customer id: String Client id: String abstract rule Person2Entity { from p : source!Person to e : target!Entity( name <- p.name ) } rule Customer2Client extends Person2Entity{ from p : source!Customer to e : target!Client ( id <- p.id ) } Source MM Target MM
  • 55. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Rule inheritance Example #2 Person name: String Entity name: String Customer id: String Client id: String rule Person2Entity { from p : source!Person to e : target!Entity( name <- p.name ) } rule Customer2Client extends Person2Entity{ from p : source!Customer to e : target!Client ( id <- p.id ) } Source MM Target MM
  • 56. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Debugging Hints § Quick and Dirty: Make use of .debug() § Proceed in tiny increments § Immediately test changes § Read Exception Trace § Look top-down the stack trace for „ERROR“ to find meaningful message: § Check line number: § do-blocks can be used for temporary debug output Line number
  • 57. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. ATL in Use §  ATL tools and documentation are available at http:// www.eclipse.org/atl §  Execution engine §  Virtual machine §  ATL to byte code compiler §  Integrated Development Environment (IDE) for §  Editor with syntax highlighting and outline §  Execution support with launch configurations §  Source-level debugger §  Documentation §  Starter’s guide §  User manual §  User guide §  Basic examples
  • 58. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Summary §  ATL is specialized in out-place model transformations §  Simple problems are generally solved easily §  ATL supports advanced features §  Complex OCL navigation, called rules, refining mode, rule inheritance, etc §  Many complex problems can be handled declaratively §  ATL has declarative and imperative features §  Any out-place transformation problem can be handled §  Further information §  Documentation: http://wiki.eclipse.org/ATL/User_Guide_-_The_ATL_Language §  Examples: http://www.eclipse.org/m2m/atl/basicExamples_Patterns
  • 59. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Alternatives to ATL §  QVT: Query-View-Transformation standard of the OMG §  Declarative QVT Relational language §  Imperative QVT Operational language §  Low-level QVT Core language (VM level) §  TGG: Triple Graph Grammars §  Correspondence graphs between metamodels §  Transform models in both directions, integrate and synchronize models §  JTL: Janus Transformation Language §  Strong focus on model synchronization by change propagating §  ETL: Epsilon Transformation Language §  Designated language in the Epsilon framework for out-place transformations §  RubyTL: Ruby Transformation Language §  Extension of the Ruby programming language §  Core concepts for out-place model transformations (extendable) §  Many more languages such as VIATRA, Tefkat, Kermeta, or SiTra, …
  • 60. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. www.mdse-book.com IN-PLACE TRANSFORMATIONS: GRAPH TRANSFORMATIONS
  • 61. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Why graph transformations? § Models are graphs § Class diagram, Petri net, State machine, … § Type Graph: § Generalization of graph elements § Graph transformations § Generalization of the graphs’ evolutions §  Graph transformations are applicable for models! Type Graph Graph Metamodel Model represents represents conformsTo conformsTo Graph Transformations Model Transformations
  • 62. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. Basics: Directed graph §  A directed graph G consists of two disjoint sets §  Vertices V (Vertex) §  Edges E (Edge) §  Each edge has a source vertex s and a target vertex t §  Summarized: G = (V, E, s: E → V, t: E → V) §  Example graph §  V = {1, 2, 3} §  E = {a, b, c} §  s(a) = 2 §  t(a) = 1 §  s(b) = 3 §  t(b) = 2 §  … 1 2 3 a b c
  • 63. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan & Claypool 2012. TypeGraph Typed attributed graph (1/3) §  To represent models further information is needed §  Typing: Each vertex and each edge has a type §  Attribution: Each vertex/edge has an arbitrary number of name/value pairs §  Notation for directed, typed and attributed graphs §  Graph is represented as an object diagram §  Type graph is represented as a class diagram §  Example 1 : ShippingCompany name = „LKW Maier“ Graph 1 : Truck load = 0 2 : Truck load = 10 1 : Store name = „CompStore“ containers = 0 ShippingCompany name : String Truck load: Integer Store name : String containers : Integer * Container weight : Integer 0..1 1 : Container weight = 10 0..1 in inFrontOf on on inFrontOf trucks trucks trucks 0..1 Example taken from: C. Ermel, M. Rudolf, and G. Taentzer, The AGG approach: Language and environment, Handbook of Graph Grammars and Computing by Graph Transformation, Application, Languages and Tools, volume 2, World Scientific, 1999.
  • 64. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Typed attributed graph (2/3) §  Object diagram §  Instance of class diagram §  Basic concepts §  Object : Instance of class §  Value: Instance of attribute §  Link: Instance of reference 1 : Truck load = 0 1 : Store name = „CompStore“ inFrontOf ObjectID : Class name Attribute name = Value Reference name Truck load: Integer Store name : String … 0..1 inFrontOf «instanceOf» «instanceOf» «instanceOf» «instanceOf» «instanceOf»
  • 65. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Typed attributed graph (3/3) §  Question: How does the type graph look in pure graph shape (object diagram)? TypeGraph ShippingCompany name : String Truck load: Integer Store name : String containers : Integer * Container weight : Integer 0..1 0.. 1in inFrontOf on trucks 0..1
  • 66. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Typed attributed graph (3/3) §  Question: How does the type graph look in pure graph shape (object diagram)? TypeGraph ShippingCompany name : String Truck load: Integer Store name : String containers : Integer * Container weight : Integer 0..1 0.. 1in inFrontOf on trucks 1 : Class name = „ShippingCompany“ 1 : Attribute name = „name“ type = „String“ 1 : Reference lower = 0 upper = -1 name = „trucks“ 2 : Class name = „Truck“ type attributes references … 0..1
  • 67. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Until now… §  …we considered models as static entities §  A modeler creates a model using an editor – Done! §  But what is about dynamic model modifications? §  They are needed for §  Simulation §  Execution §  Animation §  Transformation §  Extension §  Improvement §  … §  How can graphs be modified? §  Imperative: Java Program + Model API §  Declarative: Graph transformations by means of graph transformation rules
  • 68. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Example §  Operation: Loading of Container onto a Truck §  How can this behaviour be described in a generic way? 1 : ShippingCompany name = „LKW Maier“ 1 : Truck load = 0 1 : Store name = „CompStore“ containers = 1 1 : Container weight = 10 1 : ShippingCompany name = „LKW Maier“ 1 : Truck load = 10 1 : Store name = „CompStore“ containers = 0 1 : Container weight = 10 before after loading() inFrontOf inFrontOf in on trucks trucks
  • 69. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Graph transformation rule §  A graph transformation rule p: L → R is a structure preserving, partial mapping between two graphs §  L and R are two directed, typed and attributed graphs themselves §  Structure preserving, because vertices, edges and values may be preserved §  Partial, because vertices and edges may be added/deleted §  Example: Loading of Container onto a Truck 1 : Container 2 : Truck 3 : Store in 4:inFrontOf 1 : Container 2 : Truck 3 : Store 4:inFrontOf on L R Pre-condition Post-condition
  • 70. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Graph transformation rule § Structure preserving § All vertices and edges which are contained in the set L ∩ R § Example 1 : Container 2 : Truck 3 : Store in 4:inFrontOf 1 : Container 2 : Truck 3 : Store 4:inFrontOf on L R
  • 71. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Graph transformation rule § Adding § All vertices and edges which are contained in the set R L § Example 1 : Container 2 : Truck 3 : Store in 4:inFrontOf 1 : Container 2 : Truck 3 : Store 4:inFrontOf on L R
  • 72. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Graph transformation rule § Deleting § All vertices and edges which are contained in the set L R § Example 1 : Container 2 : Truck 3 : Store in 4:inFrontOf 1 : Container 2 : Truck 3 : Store 4:inFrontOf on L R
  • 73. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Graph transformation rule §  Calculating – Make use of attributes §  Constants §  Variables §  Expressions (OCL Co) §  Example 1 : Container weight = x 2 : Truck load = 0 3 : Store containers = y in 4:inFrontOf 1 : Container weight = x 2 : Truck load = x 3 : Store containers = y-1 4:inFrontOf on L R constraints assignments
  • 74. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Graph transformation §  A graph transformation t: G → H is the result of the execution of a graph transformation rule p: L → R in the context of G §  t = (p,m) where m: L → G is an injective graph morphism (match) L R G p m H
  • 75. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Graph transformation Operational specification §  Prepare the transformation §  Select rule p: L - R §  Select match m: L - G §  Generate new graph H by §  Deletion of L R §  Addition of R L L R G p m H
  • 76. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Graph transformation example (1/2) p m 1 : Container weight = x 2 : Truck load = 0 3 : Store containers = y in 4:inFrontOf 1 : Container weight = x 2 : Truck load = x 3 : Store containers = y-1 4:inFrontOf on L R 1 : ShippingCompany name = „LKW Maier“ 1 : Truck load = 0 2 : Truck load = 100 1 : Store name = „CompStore“ containers = 1 1 : Container weight = 10 1 : ShippingCompany name = „LKW Maier“ 1 : Truck load = 10 2 : Truck load = 100 1 : Store name = „CompStore“ containers = 0 1 : Container weight = 10 graphtransformationrulegraphtransformation G H
  • 77. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Graph transformation example (2/2) p m a : Container weight = x c : Truck load = 0 b : Store containers = y in 4:inFrontOf a : Container weight = x c : Truck load = x b : Store containers = y-1 4:inFrontOf on L R 1 : ShippingCompany name = „LKW Maier“ 1 : Truck load = 0 2 : Truck load = 100 1 : Store name = „CompStore“ containers = 1 1 : Container weight = 10 1 : ShippingCompany name = „LKW Maier“ 1 : Truck load = 10 2 : Truck load = 100 1 : Store name = „CompStore“ containers = 0 1 : Container weight = 10 graphtransformation G H graphtransformationrule
  • 78. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Graph transformations in ATL §  Graph transformation §  ATL (Refining Mode) rule Loading { from a : Container (a.in = b) b : Store c : Truck (c.inFrontOf = b AND c.load = 0) to _a : Container(weight - a.weight, on - _c) _b : Store(containers - b.containers - 1) _c : Truck(load - a.weight, inFrontOf - _b) } a : Container weight = x c : Truck load = 0 b : Store containers = y in 4:inFrontOf a : Container weight = x c : Truck load = x b : Store containers = y-1 4:inFrontOf on L R
  • 79. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Negative Application Condition (NAC) §  Left side of a rule specifies what must be existing to execute the rule §  Application Condition §  Often needed to describe what must not be existing §  Negative Application Condition (NAC) §  NAC is a graph which describes a forbidden sub graph structure §  Absence of specific vertices and edges must be granted §  Graph transformation rule is executed when NAC is not fulfilled
  • 80. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Negative Application Condition (NAC) §  Example: A truck should only be loaded if there is no container on the truck 1 : Container weight = x 2 : Truck load = 0 3 : Store containers = y in 4:inFrontOf 1 : Container weight = x 2 : Truck load = x 3 : Store containers = y-1 4:inFrontOf on L R : Container 2 : Truck on NAC Advanced Pre-condition Post-condition
  • 81. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Negative Application Condition (NAC) § Multiple NACs for one rule possible § But: LHS and RHS must only be specified once
  • 82. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Multi-Object §  The number of matching objects is not always known in advance §  Maximal set of objects which fulfill a certain condition §  Selection of all objects x from a set y which fulfill condition z §  In OCL: y - select(x | z(x)) §  Notation: Multi-Object from UML 1.4 §  A multi-object symbol maps to a collection of instances in which each instance conforms to a given type and conditions §  Example: select(x | x.oclIsTypeOf(Type)) id : Type
  • 83. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Execution order of graph transformation rules §  A graph transformation system consists of a set of different graph transformation rules §  In which order are they being executed? §  Multiple procedures §  nondeterministic §  deterministic §  Priorities §  Programs (aka „programmable graph transformations“) §  Example – Specialized UML activity diagrams §  [failure] §  [success]
  • 84. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Graph transformation Tools §  VIATRA §  PROGRES §  GrGen.NET §  VMTS §  MOMENT2 §  EMT §  Fujaba §  AGG §  MoTif §  GROOVE §  MoTMoT §  ATL Refining Mode §  eMotions §  …
  • 85. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Summary §  Model transformations are graph transformations §  Type Graph = Metamodel §  Graph = Model §  Programmable graph transformations allow for the development of complex graph evolution scenarios §  Exogenous, out-place transformations can also be specified as graph transformations §  However more complex as with ATL §  Graph transformations are becoming more and more relevant in practice §  Found their way into Eclipse!
  • 86. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. www.mdse-book.com MASTERING MODEL TRANSFORMATIONS
  • 87. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. HOTs §  Transformations can be regarded as models themselves §  They are instances of a transformation metamodel! §  This uniformity allows reusing tools and methods defined for models §  Thus, a transformation model can itself be created or manipulated by transformations, by so-called Higher Order Transformations (HOTs) §  Transformations that take as input a model transformation and/or generate a model transformation as output §  Examples §  Refactoring support for transformations to improve their internal structure §  Adding a logging aspect to transformations §  …
  • 88. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Bi-directional Transformations §  Bi-directional model transformation languages §  do not impose a transformation direction when specifying a transformation §  allow for different execution modes such as transformation, integration, and synchronization §  Transformation mode is further divided into forward and backward transformation (source - target - source) §  Integration mode assumes to have source and target models given and checks if expected elements (that would be produced in the transformation mode) exist §  Synchronization mode updates the models in case the integration mode has reported unsatisfied correspondences §  Languages allowing for bi-directional transformations: §  JTL, TGG, QVT Relational, …
  • 89. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Lazy Incremental Transformations §  Standard execution strategy for out-place transformations 1)  Read the complete input model 2)  Produce the output model from scratch by applying all matching transformation rules. §  Such executions are often referred as batch transformations. §  Two scenarios may benefit from alternative execution strategies 1)  An output model already exists from a previous transformation run for a given input model à incremental transformations 2)  Only a part of the output model is needed by a consumer à lazy transformations §  Experimental implementations for lazy and incremental transformations are available for ATL
  • 90. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Transformation Chains §  Transformations may be complex processes §  Divide and Conquer §  Use different transformation steps to avoid having one monolithic transformation! §  Transformation chains are the technique of choice for modeling the orchestration of different model transformations §  Transformation chains are defined with orchestration languages §  Simplest form: sequential steps of transformations executions §  More complex forms: conditional branches, loops, and further control constructs §  Even HOTs may produce dynamically transformations used by the chain §  Smaller transformations focusing on certain aspects allow for higher reusability
  • 91. Marco Brambilla, Jordi Cabot, Manuel Wimmer. Model-Driven Software Engineering In Practice. Morgan Claypool 2012. Teaching material for the book Model-Driven Software Engineering in Practice by Marco Brambilla, Jordi Cabot, Manuel Wimmer. Morgan Claypool, USA, 2012. Copyright © 2012 Brambilla, Cabot, Wimmer. www.mdse-book.com MODEL-DRIVEN SOFTWARE ENGINEERING IN PRACTICE Marco Brambilla, Jordi Cabot, Manuel Wimmer. Morgan Claypool, USA, 2012. www.mdse-book.com www.morganclaypool.com