SlideShare a Scribd company logo
1 of 114
Download to read offline
MULTI-LEVEL MODELLING
WITH METADEPTH
MoDELS’2016, Saint Malo (France)
Tutorial
Juan de Lara, Esther Guerra
miso research group
http://miso.es @miso_uam
WHAT IS THE TUTORIAL ABOUT?
2
Model-Driven Engineering
• Models are core assets of development
• Automatically processable, refined into
code, etc.
• Mainstream modelling approach is two-
level (meta-models/models)
Multi-level modelling
• More than two meta-levels at a time
• Meta-levels can influence other levels
beyond the immediate one
• Simplifies modelling in some scenarios
ProductType@2
VAT@1: double
price: double
Book: ProductType
VAT=18.0
price=10.0
mobyDick: Book
two-level
multi-level
WHAT WILL BE COVERED
3
Concepts
• Basic concepts of potency-based multi-level modelling
• Use of model management languages in a multi-level setting
When to use multi-level modelling
• Examples: realistic, beyond toy examples
• “Smells” signalling scenarios where a multi-level solution has benefits
• Results of analysis over more than 400 meta-models
Use in practice
• Support by the metaDepth meta-modelling tool (http://metaDepth.org)
• Integrated with the Epsilon model management languages
MATERIAL
Download the last version of metaDepth (0.2c) at
• http://metaDepth.org
• Java 8 is needed
• PlantUML is optional (http://plantuml.com/)
All files used in this tutorial are available at
• http://metaDepth.org/tutorial
Downloading this material is not needed to follow the tutorial
…but you will get a better understanding of the tool
…and you’ll be able to play with our running example
4
AGENDA
5
Multi-level modelling: the basics
motivation
clabjects, potency
orthogonal classification, linguistic extensions
meta-modelling features
examples
MetaDepth
Multi-level model management
Advanced techniques
When and where to use multi-level modelling
Summary and conclusion
MOTIVATION
Sometimes, one needs to explicitly model meta-modelling
facilities, like:
• Instantiation (modelling both types and objects)
• Declaration and instantiation of attributes and references
• Inheritance
For example:
• Product types and instances [e-commerce applications]
• Task types and instances [process modelling languages]
• Component types and instances [architectural languages]
• Player types and instances [gaming applications]
• …
6
EXAMPLE
7
Model product types (books, CDs) and their instances, to be
added on demand. Product types have a VAT, while
instances have a price.
Explicit modelling of types and instances
• Types can be added dynamically
• Features of types are fixed and known a priori
Common modelling pattern, also known as: Type object
[Martin et. al 97], item descriptor [Coad 1992], metaobject
[Kiczales and Rivieres 1991]
SOLUTION 1: STATIC TYPES
8
ProductType
Book
vat: double {readonly}
price: double
vat : double =4.0
GoF: Book
price = 35
product
types
Features of
product types
product
instances
Does not meet the
requirements (product types
are not dynamic)
Emulates values at the
meta-level via redefinition
Uses a native meta-
modelling facility
(instantiation)
SOLUTION 2: EXPLICIT
DYNAMIC TYPES
9
Requires adding an extra
class (more if dynamic
features are needed)
Requires emulating the
instantiation relation
Explicit modelling of
instantiation yields flexibility
ProductType
vat: double
Product
price: double
type1
Book: ProductType
vat = 4.0
:type
GoF: Product
price = 35
product
types
product
instances
SOLUTION 3: PROMOTION
TRANSFORMATION
10
Needs a model transformation
Hides information: “every
ProductType is a Product”
hardcoded in the transformation
Disconnection between type and
instance facets of ProductTypes
Flexibility of the transformation
Book
(3) type facet
GoF: Book
price = 35
(4)
Product
price: double
ProductType
vat: double
(2) instance facet
(1)
Book:ProductType
vat=4.0
Similar to the concept of powertype
SOLUTION 4: MULTI-LEVEL
11
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 35
@2
@1
@0
Instantiation semantics is fixed
Elements with instance and type
facets at the same time
Simplicity (less objects)
Multi-level modelling
the basics
12
CLABJECT =
CLASS + OBJECT
Elements have a combined type and instance facet
Book
• Instance of ProductType
• Can provide a value for vat
• Type for GoF
• Can declare new features
• (We’ll see how, using the OCA)
ProductType has type facet only
GoF has instance facet only
13
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 35
@2
@1
@0
C. Atkinson and T. Kühne. 2001. The essence of multilevel metamodeling. UML’01 (LNCS), Vol.
2185. Springer, 19–33.
POTENCY
Used to characterize instances beyond the
next meta-level
Models, Clabjects and their features have a
potency
• Natural number (or zero)
• Decreased at each lower meta-level
• Indicates at how many meta-levels the
element can be instantiated
We use the “@potency” notation
By default elements take the potency of their
containers
14
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 35
@2
@1
@0
C. Atkinson and T. Kühne. 2001. The essence of multilevel metamodeling. UML’01 (LNCS), Vol.
2185. Springer, 19–33.
POTENCY
Strict meta-modelling approach (*)
Instantiation is mediated
15
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 35
@2
@1
@0 myCD:
ProductType
price = 25
(*) modulo “linguistic extensions”
POTENCY
Strict meta-modelling approach (*)
Instantiation is mediated… also for fields
16
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 35
@2
@1
@0
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
price: double
vat=4.0
price = 35
@2
@1
@0
shortcut for
(*) modulo “linguistic extensions”
POTENCY
Strict meta-modelling approach (*)
Instantiation is mediated… also for fields
17
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 35
@2
@1
@0
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
price: double = 35
vat=4.0
@2
@1
@0
price can be given a
value at level 1, acting
as default value for
Book instances
(*) modulo “linguistic extensions”
POTENCY
Strict meta-modelling approach (*)
Instantiation is mediated… also for fields
18
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 35
@2
@1
@0
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double=35
vat=4.0
@2
@1
@0
price can be given a
value at level 2, acting
as default value for
instances of instances
of ProductType
(*) modulo “linguistic extensions”
LEVEL
Refers to the potency of the model
A model with level L can hold elements with potency  L
19
ProductType
Book:
ProductType
GoF: Book
price: double
price = 35
@2
@1
@0
TaxKind@1
value: double
tax@1
0..1
SuperReduced:
TaxKind
value = 6.0
Reduced:
TaxKind
value = 10.0
:tax
General:
TaxKind
value = 21.0
ORTHOGONAL
CLASSIFICATION (OCA)
20
Linguisticmeta-model
(meta-modellingfacilitites)
…
Meta-meta-model
(meta-modelling facilitites)
Meta-model
Model
MM
M
MM
M
M’
«instance of» (onto)
«instance of» (onto)
«instanceof»
(ling)
«instanceof»
(ling)
«instanceof»
(ling)
«instance of»
«instance of»
• Dual typing (ontological, linguistic)
• Make meta-modelling facilities
available at every meta-level
• Types and meta-modelling
facilities only at the meta-model
level
Multi-level Two-Level
C. Atkinson, T. Kühne. 2002. Rearchitecting the UML infrastructure. ACM Trans. Model. Comput.
Simul. 12, 4 (2002), 290–321.
21
ORTHOGONAL
CLASSIFICATION (OCA)
Clabject
*supers
InstanceType
potency: int
vat@1: double
price: double
ProductType
vat = 4.0
Book:
ProductType
@1
price = 35
GoF: Book
@0
type
*
*
@2
ont
instanceOf
Linguistic meta-model
(very simplified)
*
Feature
«ling.instanceOf»
ont
instanceOf
Model
*
0..1
22
LINGUISTIC VIEW
Clabject
*supers
InstanceType
potency: int
type
*
*
Linguistic meta-model
(very simplified)
*
Feature
«ling.instanceOf»
Model
*
L2: Model
vat: Feature
potency=2
ProductType: Clabject
potency=2
potency=1
price: Feature
potency=2
L1: Model
potency=1
:type
Book: Clabject
potency=1
price1: Feature
potency=1
vat: Feature
potency=0
:type
:type
L0: Model
potency=0
GoF: Clabject
potency=0
price0: Feature
potency=0
:type
:type
:type :type
0..1
LINGUISTIC
EXTENSIONS
Elements with no ontological type
• Ontological typing is optional
• Linguistic typing is mandatory
New clabjects or features
Not everything can be anticipated
at the top-most level
23
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
price = 35
numPages = 250
@2
@1
@0
vat=4.0
numPages : int
J. de Lara, E. Guerra. 2010. Deep meta-modelling with metaDepth. In TOOLS’10 (LNCS),
Vol. 6141. Springer, 1–20.
24
LINGUISTIC
EXTENSIONS
Elements with no ontological type
• Ontological typing is optional
• Linguistic typing is mandatory
New clabjects or features
Not everything can be anticipated
at the top-most level
Author
Book:
ProductType
GoF: Book
vat@1: double
price: double
price = 35
numPages = 395
@2
@1
@0
vat=4.0
numPages : int
ProductType
name: String
books
*
eg: Author
name=“Gamma”
:books
eg: Author
name=“Johnson”
:books
25
META-MODELLING FEATURES:
REFERENCES AND CARDINALITIES
Reference cardinality: only applies to next meta-level
TaskKind PerformerKindperfBy
*name@1: String
duration:doublenext
*
Coding: TaskKind
name=“programming”
tests: next
1..*
Testing: TaskKind
name=“testing”
Programmer:
PerformerKind
name: String
progs: perfBy
1..*
tester: perfBy
1
UICoding:
Coding
duration = 20
layoutUITest: Testing
duration = 2
funcUITest: Testing
duration = 4
: Programmer
name=“Juan”
: Programmer
name=“Jesus”
: Programmer
name=“Esther”
@2
@1
@0:progs
:progs
:tests
:tests
:tester
:tester
META-MODELLING FEATURES:
INHERITANCE
Can be used at any meta-level
Inheritance of type and instance facets
Abstract clabjects
26
…
TaskKind PerformerKindperfBy
*name@1: String
duration:doublenext
*
Coding: TaskKind tests: next
1..*
Testing: TaskKind
name=“testing”
SoftwareEngineer:
PerformerKind
name: String
actor: perfBy
@2
@1
@0
SETask: TaskKind
*
Programmer:
PerformerKind
Tester:
PerformerKind
skills: String[*]
name=“se-task”
Examples
27
DOMAIN SPECIFIC PROCESS
MODELLING
28
TaskKind Resource
Kind
Performer
Kind
Artefact
Kind
GatewayKind
Seq Join Fork
ins outs*
src
tar perfBy
*
*
*
*
name@1: String
initial:Boolean=false
final:Boolean=false
timeStamp:Date
duration:double
DSPM@2
DOMAIN SPECIFIC PROCESS
MODELLING
29
DSPM@2
Attend :TaskKind
name=“attend classes”
Study :TaskKind
name=“study”
Preparation:TaskKind
name=“preparation”
P2P:Seq
Exam :TaskKind
name=“do exam”
S2E:Seq
Subject
name: String
level: int
subs
1
on
1
src
tar
src tar
TaskKind Resource
Kind
Performer
Kind
Artefact
Kind
GatewayKind
Seq Join Fork
ins outs*
src
tar perfBy
*
*
*
*
name@1: String
initial:Boolean=false
final:Boolean=false
timeStamp:Date
duration:double
Edu-PML@1
J. de Lara, E. Guerra, J. Sánchez Cuadrado. Model-driven engineering with domain-specific
meta-modelling languages. Software and System Modeling 14(1): 429-459 (2015)
30
DSPM@2
Attend :TaskKind
name=“attend classes”
Study :TaskKind
name=“study”
Preparation:TaskKind
name=“preparation”
P2P:Seq
Exam :TaskKind
name=“do exam”
S2E:Seq
Subject
name: String
level: int
subs
1
on
1
src
tar
src tar
TaskKind Resource
Kind
Performer
Kind
Artefact
Kind
GatewayKind
Seq Join Fork
ins outs*
src
tar perfBy
*
*
*
*
name@1: String
initial:Boolean=false
final:Boolean=false
timeStamp:Date
duration:double
Maths: Subject
name: “Maths”
level: 1
: Attend : Study : Exam:P2P :S2E
initial=true
timeStamp=1/07/12
duration=2
timeStamp=08/07/12
duration=2
final=true
timeStamp=10/07/12
duration=1
Edu-PML@1
Proc@0
DOMAIN SPECIFIC PROCESS
MODELLING
31
TaskKind Resource
Kind
Performer
Kind
Artefact
Kind
GatewayKind
Seq Join Fork
ins outs*
src
tar perfBy
*
*
*
*
name@1: String
initial:Boolean=false
final:Boolean=false
timeStamp:Date
duration:double
DSPM@2
DOMAIN SPECIFIC PROCESS
MODELLING
32
DSPM@2
TaskKind Resource
Kind
Performer
Kind
Artefact
Kind
GatewayKind
Seq Join Fork
ins outs*
src
tar perfBy
*
*
*
*
name@1: String
initial:Boolean=false
final:Boolean=false
timeStamp:Date
duration:double
Soft-PML@1
Coding: TaskKind tests: next
1..*
Testing: TaskKind
name=“testing”
SoftwareEngineer:
PerformerKind
actor: perfBy
@1SETask: TaskKind
*
Programmer:
PerformerKind
Tester:
PerformerKind
skills: String[*]
name=“se-task”
ADVANTAGES
The top level can be customized for the process domain
• Family of DSLs for process modelling
Transformations can be defined over the top level and reused
across the whole family
• Code generators
• Model-to-model transformations
• In-place transformations
• Queries
33
COMPONENT-BASED
META-MODELLING
34
Component
InputPort
OutputPort
*
Channel
from
to
packet:
Message
data: String
producer:
Component
max: int
consumer:
Component
pout:
OutputPort
cin:
InputPort
p: producer
max=10
c1: consumer
:pout
:cin
: mChannel
:packet
data = “MODELS”
*
accepts *
1..* 1
Component types model
Producer-consumer model
Message
1
mChannel: Channel
transports
*
0..1 0..1
0..10
1from to1..2
c2: consumer:cin
Port
@2
@1
@0
EXERCISE/RUNNING EXAMPLE:
ARCADE/ADVENTURE GAMES
35
Sabre Wulf Pacman
Atic atac Gauntlet
Commando
EXERCISE/RUNNING EXAMPLE:
A META-MODEL FOR ARCADE GAMES
Create a language to describe adventure games (like Pacman, Sabre
Wulf, Gauntlet, Atic-atac, etc)
Games based on connected tiles, able to hold treasures and playing
characters
• “heroes” (like Pacman)
• “evils” (like Ghosts)
Heros will have an initial number of lives, while at run-time, they will
hold an actual number of lives and a score
The language should permit creating types of tiles, heroes, evils and
treasures (with custom properties)
The language should permit describing the initial game configuration
Later on, we will define the generic rule games…
36
37
TileKind
Element
Kind
Character
Kind
EvilKind HeroKind
Treasure
Kind
initLives@1: int = 3
lives: int = 3
score: int = 0
next
*
elements
*
ArcadeGame@2
A POSSIBLE SOLUTION
38
Cell:
TileKind
nextCell: next
*
coin: elements
0..1
Pacman@1
MODELLING THE PACMAN GAME
Castle:
TileKind
Coin: TreasureKind
value: int = 10
Pacman: HeroKind
Ghost: EvilKind
pacman: elements
0..1
ghosts: elements
*
39
RuntimePacman@0
MODELLING AN INITIAL
CONFIGURATION FOR PACMAN
c0: Cell
c1: Cell
c2: Cell
c3: Castlec4: Cell
:nextCell:nextCell :nextCell
:nextCell
:nextCell
:nextCell
:nextCell
:nextCell
:nextCell
:nextCell
co1: Coin
co2: Coin
co3: Coin
value=20co4: Coin
co0: Coin
g: Ghost
p: Pacman
AGENDA
40
Multi-level modelling: the basics
MetaDepth
hands-on examples
Multi-level model management
Advanced techniques
When and where to use multi-level modelling
Summary and conclusion
Textual multi-level modelling tool
• Started in 2009
• Deep characterization based on clabjects/potency
• Orthogonal Classification Architecture
• http://metaDepth.org
Integrated with the Epsilon Languages for model management
• Constraints in EOL/EVL
• Derived attributes in EOL
• In-place transformations in EOL
• Model-to-Model transformations in ETL
• Code generation in EGL
41
Juan de Lara, Esther Guerra: Deep Meta-modelling with MetaDepth. TOOLS (48) 2010: 1-20
METADEPTH
42
Model Ecommerce@2 {
Node ProductType {
vat@1 : double=10;
price : double=7.5;
}
}
Ecommerce BookStore{
ProductType Book { vat = 4.0; }
}
BookStore WHSmith {
Book GoF { price = 35; }
}
ProductType
Book:
ProductType
GoF: Book
vat@1: double=10
price: double=7.5
vat=4.0
price = 35
@2
@1
@0
Models are normally created in external text editors, and stored in files with
.mdepth extension.
SAMPLE SESSION
> load “ProductSimple”
:: loading ../metadepth.samples/src/tutorial/ProductSimple.mdepth (6
clabjects created in 0.22 s).
> dump
:: dumping all
… (shows the models in memory)
> compile PlantUML
Executing...
:: compiling all models to PlantUML format,
generated file ./Ecommerce.txt
43
(generated png
by PlantUML)
The load command can also be included in .mdepth
files
COMMANDS & TIPS
Use set to show all environment variables
You’ll need to set DIR to your working folder
> set DIR "../metadepth.samples/src/tutorial"
:: setting environment variable DIR
Use context to enter in the context of a specific model
> context WHSmith
:: entering context WHSmith
You can use verify to check all (current model’s) constraints
> verify
:: Constraints in WHSmith evaluated, (0) violations
44
COMMANDS & TIPS
You can add new elements to a model using the # command
> #
:: entering metadepth execution mode
> Book another { price = 45; }
> #
> dump
:: dumping WHSmith
ext BookStore WHSmith{
ext Book GoF
{
price=35.0;
}
ext Book another
{
price=45.0;
}
}
45
COMMANDS&TIPS
The # command permits also using any embedded language
Currently EOL, ETL and EGL are embedded
> # EOL
:: entering eol execution mode
> new Book;
> ProductType.allInstances().println();
> #
Set {another, MD_3825653c837c4d12b1f21e09c83f2fa9, GoF}
(more about “transitive typing” later)
46
COMMANDS & TIPS
Retyping shell commands is
time consuming
You can save your commands in
a “.mdc” file
Command files can be executed
with the run command
run “Product”
Files are sought in folder of DIR
variable
47
load "ProductSimple“
dump
context WHSmith
Verify
#
Book JavaBible { price = 89; }
#
# EOL
var t := new Book;
t.price := JavaBible.price;
ProductType.all.println();
#
dump
compile PlantUML
Product.mdc
LINGUISTIC META-MODEL
48
USING LINGUISTIC
TYPES
It is possible to use either ontological or linguistic types
> # EOL
:: entering eol execution mode
> Node.all.println();
> #
Sequence {GoF, another}
The linguistic meta-model is transparently available through
reflection
> # EOL
:: entering eol execution mode
> GoF.type.println();
> #
Book
The “^” notation can be used if needed to disambiguate (GoF.^type)
49
LINGUISTIC
EXTENSIONS
50
Ecommerce BookStore{
ProductType Book {
vat = 4.0;
pages : int;
authors : Author[*] {ordered, unique};
}
Node Author {
name : String;
}
}
BookStore WHSmith {
Book GoF {
price = 35;
pages = 395;
authors = [Gamma, Helm, Johnson, Vlissides];
}
Author Gamma { name = "Eric Gamma"; }
Author Helm { name = "Richard Helm"; }
Author Johnson { name = "Ralph Johnson"; }
Author Vlissides { name = "John Vlissides"; }
}
Model Ecommerce@2 {
Node ProductType@2 {
vat@1 : double = 7.5;
price@2 : double = 10;
}
}
CAPABILITIES
Derived fields
• Expressions using the Epsilon Object Language
Constraints and features in models
• Avoids creating an artificial class just to set a global constraint
Nested models, model import
• Models are first-class citizens, unlike in EMF
Customizable textual syntax
Model extension
A-posteriori typing
Concepts (genericity mechanism)
51
DERIVED FIELDS
Model Store@2 {
Node ProductType{
vat@1 : double = 7.5;
price : double = 10;
/finalPrice@2: double = $self.vat*self.price/100 +self.price$;
}
}
52
Computation expressions for derived fields using the Epsilon
Object Language (EOL)
Derived fields with primitive type, or references
RUNNING EXAMPLE (1)
53
Model ArcadeGame@2 {
Node TileKind {
next : TileKind[*];
elements : ElementKind[*];
}
abstract Node ElementKind{}
abstract Node CharacterKind : ElementKind { }
Node HeroKind : CharacterKind {
initLives@1 : int = 3;
lives : int = 3;
score : int = 0;
}
Node EvilKind : CharacterKind {}
Node TreasureKind : ElementKind {}
}
RUNNING EXAMPLE (2)
54
ArcadeGame PacMan {
TileKind Cell {
nextCell : Cell[*] {next};
coin : Coin[0..1] {elements};
pacman : Pacman[0..1] {elements};
ghosts : Ghost[*] {elements};
}
TileKind Castle : Cell {}
TreasureKind Coin {
value : int=10;
}
HeroKind Pacman {
initLives = 3;
}
EvilKind Ghost {}
}
RUNNING EXAMPLE (3)
55
PacMan RuntimePacman {
Cell c0 { nextCell = [c1, c4]; coin = co0; pacman = p; }
Cell c1 { nextCell = [c2, c0]; coin = co1; }
Cell c2 { nextCell = [c3, c1]; coin = co2; }
Castle c3{ nextCell = [c4, c2]; coin = co3; ghosts = g; }
Cell c4 { nextCell = [c0, c3]; coin = co4;}
Pacman p {}
Ghost g {}
Coin co0 {}
Coin co1 {}
Coin co2 {}
Coin co3 { value = 20; }
Coin co4 {}
}
AGENDA
56
Multi-level modelling: the basics
MetaDepth
Multi-level model management
constraints
transformations
code generation
Advanced techniques
When and where to use multi-level modelling
Summary and conclusion
MULTI-LEVEL MODEL
MANAGEMENT
For a multi-level modelling framework to be useful, we need:
• Constraint languages
• Transformation languages supporting
• Code generation
• Model-to-model transformation
• In-place model transformation
These need to be adapted to a ML setting
In practice, metaDepth has been integrated with the Epsilon
languages
57
DEEP CONSTRAINT
LANGUAGE
Level at which the constraint is defined vs level at which we want to
evaluate it
• Constraints have “potency”
58
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 35
@2
@1
@0
posPrice@2:
self.price>0
defined
evaluated
DEEP CONSTRAINT
LANGUAGE
Level at which the constraint is defined vs level at which we want to
evaluate it
• Constraints have “potency”
59
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 0
@2
@1
@0
posPrice@2:
self.price>0
defined
evaluated
60
TRANSITIVE TYPING
We might not know type names at intermediate levels
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 35
@2
@1
@0
lotsOfProducts@2:
ProductType.allInstances()->
size()>10
defined
CD:
ProductType
vat=10.0
Disintegration:
CD
price = 20
evaluated
TYPE.allInstances() returns all
direct and indirect instances of
TYPE at the current level
LEVEL NAVIGATION
Make (upwards) meta-level navigation implicit
• At level 0:
> GoF.vat.println();
> 4.0
Fields with instance facet in clabjects can be
accessed in instance clabjects.
61
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 35
@2
@1
@0
LINGUISTIC META-
MODEL
Transparent access to the linguistic meta-model in constraint
expressions
62
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 35
@2
@1
@0
lotsOfProducts@2:
self.type.allInstances()->
size()>10
defined
evaluated
Clabject
*supers
InstanceType
potency: int
type
*
*
Linguistic meta-model
(simplified)
*
Feature
«ling.instanceOf»
^ prefix can be used to
prevent name collisions:
self.^type…
LINGUISTIC META-
MODEL
Transparent access to the linguistic meta-model in constraint
expressions
63
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 35
@2
@1
@0
lotsOfProducts@2:
self.type.allInstances()->
size()>10
defined
evaluated Clabject
*supers
InstanceType
potency: int
type
*
*
Linguistic meta-model
(simplified)
*
Feature
«ling.instanceOf»
lotsOfProducts2@2:
ProductType.allInstances()->
size()>10
What is the difference?
METADEPTH
MetaDepth uses the Epsilon Object Language (EOL) to
express constraints
• Also for operations and expressions for derived fields
EOL is a variant of OCL
• Permits side effects (assignments, object creation)
• Has imperative constructs (e.g., loops)
The basis of other Epsilon languages
• ETL for model-to-model transformation
• EGL for code generation
64
EXERCISE
Add constraints to the running example to ensure that:
• There are no isolated tiles at level 0
• Treasures, Heroes and Evils are connected to one tile at level 0
• There is at least one hero at level 0
• There are no less evils than heroes at level 0
• There can be no Pacman in the castle
Add a derived attribute to calculate the number of (direct)
reachable tiles at level 0.
65
66
Model ArcadeGame@2 {
Node TileKind {
next : TileKind[*];
elements : ElementKind[*];
/numReachable : int = $self.next.size()$;
noIsolated : $self.numReachable>0 or
TileKind.all.exists( t | t.next.includes(self))$
}
abstract Node ElementKind{
connected : $TileKind.all.one( t | t.elements.includes(self))$
}
abstract Node CharacterKind : ElementKind { }
Node HeroKind : CharacterKind {
initLives@1 : int = 3;
lives : int = 3;
score : int = 0;
}
Node EvilKind : CharacterKind {}
Node TreasureKind : ElementKind {}
someHero@2 : $HeroKind.all.size()>=1$
moreEvils@2 : $EvilKind.all.size() >= HeroKind.all.size()$
}
SOLUTION (1)
67
ArcadeGame PacMan {
TileKind Cell {
nextCell : Cell[*] {next};
coin : Coin[0..1] {elements};
pacman : Pacman[0..1] {elements};
ghosts : Ghost[*] {elements};
}
TileKind Castle : Cell {
noPacmans : $not self.pacman.isDefined()$
}
TreasureKind Coin {
value : int=10;
}
HeroKind Pacman {
initLives = 3;
}
EvilKind Ghost {
}
}
Conflicts and consistency of (ML) constraints
can be analyzed:
Towards automating the analysis of integrity
constraints in multi-level models. MULTI
2014@MODELS. Esther Guerra, Juan de Lara.
SOLUTION (2)
MULTI-LEVEL MODEL
MANAGEMENT
68
DSMM
model
DSML
model
Model
operation
DSMM
model
DSML
model
Model
operation
DSMM
model
DSML
model
Model
operation
DSMM
model
DSML
model
Model
operation
operation’
NodeClabject
defined on applicable to redefines
Legend
Deep operations Refinement Generic
IN-PLACE MODEL
TRANSFORMATION
69
Infrastructure for a family of DSLs
• Operations can be attached to meta-classes
• Operations with potency
Design similar to an object oriented framework
• Common operations
• Operations expected to be overriden at next meta-level
For the running example:
• A game engine for the DSL (autonomous play)
• Core of the engine will be common (basic movement rules, game over
and winning condition)
• Some operations can be overriden at level 1 (ie., particular to Pacman)
RUNNING EXAMPLE
70
@metamodel(name=ArcadeGame,file=Arcade.mdepth)
@potency(value=2)
operation main() {
'Simulating the arcade game'.println();
var maxStep : Integer := 30;-- to limit infinite behaviours
var numStep : Integer := 0;
var hero : HeroKind := HeroKind.all.first();
hero.~initCell := hero.getCurrentTile();
for (e in EvilKind.all) {
e.~initCell := e.getCurrentTile();
}
while (numStep<maxStep) {
('----------------------------------------------------').println();
('Time : '+numStep).println();
hero.move();
if (hero.isWin()) {
(' ******* Our hero '+hero+' has won! *******').println();
(' ******* score '+p.score).println();
(' ******* lives '+p.lives).println();
return;
}
if (checkDamaged(hero)) return;// game over
for (e in EvilKind.all) {
e.move();
}
if (checkDamaged(hero)) return;// game over
numStep := numStep+1;
}
}
71
operation checkDamaged(hero : HeroKind) : Boolean { // returns true if game over
if (hero.isDamaged()) {
(' Our hero '+hero+' has been damaged').println();
hero.die();
if (hero.hasDied()) {
' ******* Game over! *******'.println();
(' ******* score '+hero.score).println();
return true;
} else {
hero.restart();
for (e in EvilKind.all) {
e.restart();
}
}
}
return false;
}
operation ElementKind getCurrentTile() : TileKind {
return TileKind.all.select( t | t.elements.includes(self) ).first();
}
operation HeroKind move() {
var currentTile : TileKind := self.getCurrentTile();
var toTile : TileKind := currentTile.next.random();
(' Moving hero from '+currentTile+' to '+toTile).println();
currentTile.removeHero(self);
toTile.addHero(self);
}
…
Operation in
global context
Operations for
instances of
ElementKind and
HeroKind at level 0
72
operation TileKind removeHero(h : HeroKind) {
(' Removing hero '+h+' from '+self).println();
}
operation TileKind addHero(h : HeroKind) {
(' Adding hero '+h+' to '+self).println();
}
operation TileKind removeEvil(g : EvilKind) {
(' Removing evil '+g+' from '+self).println();
}
operation TileKind addEvil(g : EvilKind) {
(' Adding evil '+g+' to '+self).println();
}
Cannot provide “true” code for adding objects, since we do not know
the name of the reference
These operations should be overriden at the next meta-level
“Hot spots”:
typically to be
overriden at the
next meta-level
J. de Lara, E. Guerra, J. Sánchez Cuadrado. Model-driven engineering with domain-specific meta-modelling
languages. SoSyM 14(1): 429-459 (2015)
73
// --------------------------------------------------------
// Specific to Pacman....
// --------------------------------------------------------
operation Cell removeHero(h : HeroKind) {
self.eatCoin(h);
(' Removing pacman '+h+' from cell '+self).println();
self.pacman:=null;
}
operation Cell eatCoin(h : HeroKind) {
if (self.coin.isDefined()) {
h.score := h.score + self.coin.value;
delete self.coin;
self.coin := null;
(' Pacman score = '+h.score).println();
}
}
operation Cell addHero(h : HeroKind) {
(' Adding pacman '+h+' to cell '+self).println();
self.pacman:= h;
self.eatCoin(h);
}
operation Cell removeEvil(g : EvilKind) {
(' Removing ghost '+g+' from cell '+self).println();
self.ghosts.remove(g);
}
operation Cell addEvil(g : EvilKind) {
(' Adding ghost '+g+' to cell '+self).println();
self.ghosts.add(g);
}
MODEL-TO-MODEL
TRANSFORMATION
Many scenarios:
• Deep transformations (eg. defined at @2, applied at @0)
• Co-transformations (eg. defined at @2, applied at @1 and @0)
• Refining transformations (overriding rules at @1)
• Reflective & linguistic transformations (generic, using linguistic
types)
• Multi-level target (eg creating models at @1 and @0)
For the running example:
• A (deep) transformation into Petri nets
• Reusable for any concrete adventure game
74
J. de Lara, E. Guerra, J. Sánchez Cuadrado. Model-driven engineering with domain-specific meta-modelling
languages. SoSyM 14(1): 429-459 (2015)
MODEL-TO-MODEL
TRANSFORMATION
75
@metamodel(name=ArcadeGame,file=Arcade.mdepth,domain=source)
@metamodel(name=PetriNet,file=PetriNet.mdepth,domain=target)
rule CharacterToToken
transform h : SLevel0!CharacterKind
to p : Target!Token {
p.^name := h.^type+'_'+h.^name;
}
rule TileToPlace
transform t : SLevel0!TileKind
to p : Target!Place {
p.name := t.type.name+'_'+t.^name;
p.^name := t.type.name+'_'+t.^name;
p.tokens ::= t.elements;// implicit call to equivalents()
for ( n in t.next) {
var tr := new Target!Transition;
tr.name := t.^name+' to '+n.^name;
tr.^name := t.^name+'_to_'+n.^name;
p.outTr := tr;
n.equivalents().first().inTr := tr;
}
}
CODE GENERATION
76
<!doctype html>
<html>
<head>
…
<script type="text/javascript">
// create an array with nodes
var nodes = new vis.DataSet([
[% var counter : Integer := 0;
// Generic
for(t in Level0!Node.all) {
counter := counter+1;
%]
[%if (counter > 1) {%], [%}%]
{id: [%=counter%],
label: '[%=t.type%] [%=counter%]'}
[% t.~identif := counter; %]
[%}%]
]);
…
</html>
Visualization of the game
• vis.js (http://visjs.org)
Code generator
• Deep (reusable for the DSL)
• Generic (linguistic types)
GENERATED CODE
77
<script type="text/javascript">
// create an array with nodes
var nodes = new vis.DataSet([
{id: 1, label: 'Coin 1'}
, {id: 2, label: 'Coin 2'}
, {id: 3, label: 'Coin 3'}
, {id: 4, label: 'Coin 4'}
, {id: 5, label: 'Coin 5'}
, {id: 6, label: 'Pacman 6'}
, {id: 7, label: 'Ghost 7'}
, {id: 8, label: 'Castle 8'}
, {id: 9, label: 'Cell 9'}
, {id: 10, label: 'Cell 10'}
, {id: 11, label: 'Cell 11'}
, {id: 12, label: 'Cell 12'}
]);
AGENDA
78
Multi-level modelling: the basics
MetaDepth
Multi-level model management
Advanced techniques
splitting models
leap potency
deep references
When and where to use multi-level modelling
Summary and conclusion
SPLITTING MODELS
Having all elements in one model does not scale
• Models created to “annotate” other ones
Facility for model import
• Makes accesible the model elements of other models
Level mismatches
• Importing and imported models do not need to have the same
level
• Often reconciled through deep references
79
EXAMPLE: DEFINING A
CONCRETE SYNTAX
80
Model Graphics@2 {
abstract Node Figure {
x: int;
y: int;
rotation : double = 0;
scale : double = 1;
refsTo : Node;
}
Node Rectangle : Figure {
width@1 : int;
height@1 : int;
}
}
EXAMPLE: DEFINING A
CONCRETE SYNTAX
81
Graphics PeopDiag
imports People{
Rectangle PersonRep {
width = 6;
height = 6;
refsToPerson : Person {refsTo};
}
}
Model People{
Node Person {
name : String;
age : int;
}
}
EXAMPLE: DEFINING A
CONCRETE SYNTAX
82
PeopDiag somePeopleDiag
imports somePeople
{
PersonRep p1r {
x = 10; y = 10;
refsToPerson = p1;
}
}
People somePeople{
Person p1 {
name = “Alan”;
age =42;
}
}
EXAMPLE: COMPONENT-BASED
COLLABORATIVE WEB APPLICATIONS
83
•Component types
•Component instances
•Interconnections
Component
view
•Pages
•Style
•Layout
Presentation
view
•Users
•Roles
User
view
•Data format (schemas)
•Data values
Data view
Model of Collaborative
Web Application
instance of
Language Definition
code
generator
Language Usage
Final Application
Juan de Lara, Esther Guerra, Ruth Cobos, Jaime Moreno-Llorena: Extending Deep Meta-
Modelling for Practical Model-Driven Engineering. Comput. J. 57(1): 36-58 (2014)
SPLITTING MODELS
AND DEEP REFERENCES
84
ComponentView @2
ComponentType
ident: String
name:String
JavaScript
Component
@1
AppletComponent
codeBase: String
params:String[*]
@1
StyleContent
1
Presentation
StyleTree
11
Page
*
content
PresentationView
StyleHead
bgcolor: String
color: String
fontSize: Integer
@1
... ...
«imports»
comps
*
@1
@0
mapTable:
TableVisualizer
TableVisualizer:
JavaScriptComponent
p1: Page
@0
Not what we want: we want pages to hold
instances of instances of ComponenType
SPLITTING MODELS
AND DEEP REFERENCES
85
ComponentView @2
ComponentType
ident: String
name:String
JavaScript
Component
@1
AppletComponent
codeBase: String
params:String[*]
@1
StyleContent
1
Presentation
StyleTree
11
Page
*
content
PresentationView
StyleHead
bgcolor: String
color: String
fontSize: Integer
@1
... ...
«imports»
Not allowed: instances of comps should
point to direct instances (with potency 1)
of ComponentType
comps
*
@1
@0
mapTable:
TableVisualizer
TableVisualizer:
JavaScriptComponent
p1: Page
@0
SPLITTING MODELS
AND DEEP REFERENCES
86
ComponentView @2
ComponentType
ident: String
name:String
JavaScript
Component
@1
AppletComponent
codeBase: String
params:String[*]
@1
StyleContent
1
Presentation
StyleTree
11
Page
*
content
PresentationView
StyleHead
bgcolor: String
color: String
fontSize: Integer
@1
... ...
«imports»
comps@0
*
p1: Page
@0
Deep reference: reference
to a clabject with certain
potency
@1
@0
mapTable:
TableVisualizer
TableVisualizer:
JavaScriptComponent
LEAP POTENCY
Identity instantiation:
elements instantiated
at intermediate levels
with no extra
information
87
@2
Component view
Component
Type
@1
@0
cal:CalendarEngine
InParam
OutParam
Connector
*
*
*
*
CalendarEngine:
JavaScriptComponent
TableVisualizer:
JavaScriptComponent
CallEvents:OutParam
DTable:InParam
tab:TableVisualizer
ev:CallEvents c:Connector dt:DTable
Connector:
Connector
*
*
LEAP POTENCY
“Syntactic sugar” to avoid identity instantiation
88
@2
Component view
Component
Type
@0
@1
@0
cal:CalendarEngine
InParam
OutParam
Connector
*
*
@(2)*
* @0
CalendarEngine:
JavaScriptComponent
TableVisualizer:
JavaScriptComponent
CallEvents:OutParam
DTable:InParam
tab:TableVisualizer
ev:CallEvents c:Connector dt:DTable
LEAP POTENCY
AS MODEL SPLITTING
89
@2Component view
Component
Type
@0
@1
@0
cal:CalendarEngine
InParam
OutParam*
*
*
*
@0
CalendarEngine:
JavaScriptComponent
TableVisualizer:
JavaScriptComponent
CallEvents:OutParam
DTable:InParam
tab:TableVisualizer
ev:CallEvents
dt:DTable
Connector view
Connector
@1
c:Connector
@0
RUNNING EXAMPLE
Assume we do not need to define types of tiles
• All tiles are the same: same behaviour and connectivity
We have a “potency mismatch”
• We only want tile instances, not types (ie., potency 1)
• We still want to define character types (ie., potency 2)
90
SOLUTION 1: LEAP POTENCY
91
Model ArcadeSimple@2 { // we are not interested in defining types of tiles
Node Tile@(2) { // leap potency (otherwise identity instantiation)
next : Tile[*];
elements : ElementKind@0[*]; // deep reference
}
abstract Node ElementKind{
}
abstract Node CharacterKind : ElementKind {
}
Node HeroKind : CharacterKind {
initLives@1 : int = 3;
lives : int = 3;
score : int = 0;
}
Node EvilKind : CharacterKind {}
Node TreasureKind : ElementKind {}
}
SOLUTION 1: LEAP POTENCY
92
ArcadeSimple PacMan {
TreasureKind Coin {
value : int=10;
}
HeroKind Pacman {
initLives = 5;
}
EvilKind Ghost {
}
}
PacMan RuntimePacman {
Tile c0 { next = [c1, c4]; elements = [co0, p]; }
Tile c1 { next = [c2, c0]; elements = [co1]; }
Tile c2 { next = [c3, c1]; elements = [co2]; }
Tile c3 { next = [c4, c2]; elements = [co3, g]; }
Tile c4 { next = [c0, c3]; elements = [co4];}
Pacman p {}
Ghost g {}
Coin co0 {}
Coin co1 {}
Coin co2 {}
Coin co3 { value = 20; }
Coin co4 {}
}
SOLUTION 2:
MODEL SPLIT
93
Make explicit the two concerns of the DSL:
• Board layout
• Character definition
Model ArcadeCharacters@2 {
abstract Node ElementKind{}
abstract Node CharacterKind : ElementKind {}
Node HeroKind : CharacterKind {
initLives@1 : int = 3;
lives : int = 3;
score : int = 0;
}
Node EvilKind : CharacterKind {}
Node TreasureKind : ElementKind {}
}
ArcadeCharacters PacmanCharacters {
TreasureKind Coin { value : int=10;}
HeroKind Pacman { initLives = 5; }
EvilKind Ghost {}
}
PacmanCharacters PacmanRuntime {
Pacman p {}
Ghost g {}
Coin co0 {}
…
}
SOLUTION 2:
MODEL SPLIT
94
Make explicit the two concerns of the DSL:
• Board layout
• Character definition
Model ArcadeBoard imports ArcadeCharacters {
// Not interested in defining types of tiles
Node Tile {
next : Tile[*];
elements : ElementKind@0[*];
}
}
ArcadeBoard PacmanBoard imports PacmanRuntime {
Tile c0 { next = [c1, c4]; elements = [co0, p]; }
Tile c1 { next = [c2, c0]; elements = [co1]; }
Tile c2 { next = [c3, c1]; elements = [co2]; }
Tile c3 { next = [c4, c2]; elements = [co3, g]; }
Tile c4 { next = [c0, c3]; elements = [co4];}
}
AGENDA
95
Multi-level modelling: the basics
MetaDepth
Multi-level model management
Advanced techniques
When and where to use multi-level modelling
Multi-level patterns
How frequent are these ML “smells”?
Summary and conclusion
MULTI-LEVEL
PATTERNS
96
Patterns signalling that a multi-level solution could be
beneficial
Emulate a meta-modelling facility within a meta-model:
• Type-object: typing and instantiation
• Dynamic features: feature definition and instantiation
• Dynamic auxiliary domain concepts: class definition and
instantiation
• Relation configurator: Reference cardinality and its semantics
• Element classification: Inheritance
In multi-level these facilities are native at every meta-level
J. de Lara, E. Guerra, J. Sánchez Cuadrado: When and How to Use Multilevel Modelling.
ACM Trans. Softw. Eng. Methodol. 24(2): 12:1-12:46 (2014)
TYPE-OBJECT
97
ProductType
Book:
ProductType
GoF: Book
vat@1: double
price: double
vat=4.0
price = 35
@2
@1
@0
ProductType
vat: double
Product
price: double
type1
Book: ProductType
vat = 4.0
:type
GoF: Product
price = 35
Dynamic addition of new types, and instantiation of these
ProductType
Book
vat: double {readonly}
price: double
vat : double =4.0
GoF: Book
price = 35
Explicit modelling
Static types Multi-level
DYNAMIC FEATURES
98
Dynamic addition of new features to a type,
and corresponding slots to their instances
RELATION CONFIGURATOR
99
Configuration of a reference type
dynamically created
Instantiation of the reference type
according to that configuration.
DYNAMIC AUXILIARY
DOMAIN CONCEPTS
100
Dynamic addition of new entities related to a type, as well as
the instantiation of those entities
ELEMENT CLASSIFICATION
101
Organization of dynamically created
elements along subtyping and inheritance
hierarchies.
PRACTICAL APPLICABILITY
How often do these patterns occur?
Analysis of meta-model repositories:
• ATL meta-model zoo (305 meta-models) [8.5% occur.]
• OMG specifications (116 specs) [35%~38% occur.]
• ReMoDD (15 meta-models) [20% occur.]
• Articles in journals/conferences
84 meta-models with 459 occurrences (avg 5.5)
• Most common pattern is the type-object
• Most used solution is explicit types (~70%)
102
WHERE?
103
19
17
13
4
4
3
3
3
2 3
Enterprise/Process Modelling
Software Architecture
Systems/Software Modelling
Manufacturing
Reverse Engineering
Data modelling
Requirements
Bibliographic
Traceability
Metrics
#META-MODELS
153
85
48
46
19
14
10 9 8
4
#PATTERN
OCCURRENCES
WHERE?
Software architecture,
components and
services
• Component types and
instances, port types and
instances
• Mostly explicit types
solution
104
Example: CloudML
WHERE?
Business process/enterprise modelling
• Base meta-model customized for different enterprises or project
types (OrganizationType/Organization, ProjectType/Project, etc)
• Process modelling languages (TaskType/Task)
• Powertypes, explicit modelling for implementation
• Many occurrences per meta-model
105
BUSINESS PROCESS/ENTERPRISE
106
E=Explicit, S=Static, ST=Stereotypes, EN=Enumerated Types, PT=Powertypes
EXPLICIT TYPES TO MULTI-LEVEL
107
• CloudML (6 T-O, 1 DF)
• 14 classes
• Multi-level solution
• 6 classes
STATIC TYPES TO MULTI-LEVEL
108
KDMElement
name: String
KDM
Relationship
from
to
/outbound
/inbound
*{union}
{union}*
KDMModel
/owned
element
{union}*
CodeModel
AbstractCode
Element
AbstractCode
Relationship
/owned
relation{union}*
coderelation
{subsets
ownedRelation}
*
ParameterTo
CodeItem
from{redefines
from}
to{redefines
to}
KDMElement
name: String
KDM
Relationship
from
to
outbound
inbound
*
*
KDMModel @2
CodeModel : KDMModel @1
AbstractCode
Element:
KDMElement
CodeItem:
KDMElement
AbstractCode
Relationship:
KDMRelationship
ParameterTo:
KDMRelationship
from: from
to: to
*
{subsets ownedElement}
codeElement
• KDM (OMG) • Simpler base meta-model
AGENDA
109
Multi-level modelling: the basics
MetaDepth
Multi-level model management
Advanced techniques
When and where to use multi-level modelling
Summary, conclusions and outlook
SUMMARY
Multi-level modelling
• Generalizes two-level modelling overcoming some of its limitations
• Useful when the type-object pattern arises
• Leads to simpler models
MetaDepth
• A tool for Multi-level modelling
• Integrated with the Epsilon languages for model management
110
The limits of my language mean the limits of my world.
Ludwig Wittgenstein
OUTLOOK
Use it in real MDE scenarios
• Let us know if you use metaDepth
Improve tooling
• Eclipse plugin
Refactoring of multi-level models
• flattenings and un-flattenings
A-posteriori typing
111
MORE…
112
Other related tools
• melanee (http://www.melanee.org/)
• DPF Workbench
• …
MULTI series of workshops (at MODELS)
• MULTI 2014 (Valencia)
• MULTI 2015 (Ottawa)
• MULTI 2016 (Saint Malo)
MLM wiki
• http://homepages.ecs.vuw.ac.nz/Groups/MultiLevelModeling/
MAIN METADEPTH REFERENCES
1. Original publication about the tool:
J. de Lara and E. Guerra. “Deep meta-modelling with MetaDepth“. 2010. Proc. TOOLS
2010. LNCS 6141, Springer, pp.: 1-20.
2. Integration with ML management languages. Concrete syntax:
J. de Lara, E. Guerra, J. Sánchez-Cuadrado. “Model-driven engineering with domain-
specific meta-modelling languages“. 2015. SoSyM (Springer), Vol 14(1). pp.:429-459. Best
papers of ECMFA'12.
3. Leap potency, deep reference, deep code generation, application in practice:
J. de Lara, E. Guerra, R. Cobos, J. Moreno Llorena. “Extending deep meta-modelling for
practical model-driven engineering”. 2014. The Computer Journal, Vol 57(1). pp.:36-58
4. Analysis of ML constraints:
E. Guerra, J. de Lara. ”Towards automating the analysis of integrity constraints in multi-
level models”. 2014. MULTI'2014, (Valencia) (CEUR). pp.:1-10.
5. ML patterns. Applicability study for MLM:
J. de Lara, E. Guerra, J. Sánchez Cuadrado. “When and How to Use Multi-Level
Modelling”. 2014. ACM TOSEM, Vol 24(2). pp.:1-46.
113
THANKS!
Juan.deLara@uam.es , Esther.Guerra@uam.es
114
http://www.miso.es@miso_uam

More Related Content

What's hot

Smoki hobbit
Smoki hobbitSmoki hobbit
Smoki hobbitAd Hoc
 
Thuat toan Prim
Thuat toan PrimThuat toan Prim
Thuat toan PrimANHMATTROI
 
Bai giang-ctdl
Bai giang-ctdlBai giang-ctdl
Bai giang-ctdlPhong Vân
 
2 лектира бр 3 снежана работен лист рл
2   лектира бр 3 снежана работен лист рл2   лектира бр 3 снежана работен лист рл
2 лектира бр 3 снежана работен лист рлBiljana CM
 
Pvh 11-2014-btvl-a1
Pvh 11-2014-btvl-a1Pvh 11-2014-btvl-a1
Pvh 11-2014-btvl-a1phanhung20
 
Obrnuta pitagorina teorema
Obrnuta pitagorina teoremaObrnuta pitagorina teorema
Obrnuta pitagorina teoremaBakir Sadović
 
Hemija r1 atomska_struktura_materije_energetski_nivoi_podnivoi_i_atomske_orbi...
Hemija r1 atomska_struktura_materije_energetski_nivoi_podnivoi_i_atomske_orbi...Hemija r1 atomska_struktura_materije_energetski_nivoi_podnivoi_i_atomske_orbi...
Hemija r1 atomska_struktura_materije_energetski_nivoi_podnivoi_i_atomske_orbi...NašaŠkola.Net
 
Resavanje jednacine sa apsolutnim vrednostima
Resavanje jednacine sa apsolutnim vrednostimaResavanje jednacine sa apsolutnim vrednostima
Resavanje jednacine sa apsolutnim vrednostimaSilvana Cupic
 
2 Д форми и својства
2 Д форми и својства2 Д форми и својства
2 Д форми и својстваMaja Kitanoska
 
Funkcije i formule, Microsoft Excel 2010
Funkcije i formule, Microsoft Excel 2010Funkcije i formule, Microsoft Excel 2010
Funkcije i formule, Microsoft Excel 2010mkovacic
 
zavisne i izrične rečenice
zavisne i izrične rečenicezavisne i izrične rečenice
zavisne i izrične rečeniceMarko Mitrovic
 

What's hot (20)

Smoki hobbit
Smoki hobbitSmoki hobbit
Smoki hobbit
 
Thuat toan Prim
Thuat toan PrimThuat toan Prim
Thuat toan Prim
 
Chuong 11 12
Chuong 11 12Chuong 11 12
Chuong 11 12
 
Bai giang-ctdl
Bai giang-ctdlBai giang-ctdl
Bai giang-ctdl
 
Linearna funkcija i_njen_grafik
Linearna funkcija i_njen_grafikLinearna funkcija i_njen_grafik
Linearna funkcija i_njen_grafik
 
Btppt
BtpptBtppt
Btppt
 
2 лектира бр 3 снежана работен лист рл
2   лектира бр 3 снежана работен лист рл2   лектира бр 3 снежана работен лист рл
2 лектира бр 3 снежана работен лист рл
 
Semejstvo
SemejstvoSemejstvo
Semejstvo
 
Uglovi
UgloviUglovi
Uglovi
 
Pvh 11-2014-btvl-a1
Pvh 11-2014-btvl-a1Pvh 11-2014-btvl-a1
Pvh 11-2014-btvl-a1
 
Pogreške u mjerenju
Pogreške u mjerenjuPogreške u mjerenju
Pogreške u mjerenju
 
Obrnuta pitagorina teorema
Obrnuta pitagorina teoremaObrnuta pitagorina teorema
Obrnuta pitagorina teorema
 
Hemija r1 atomska_struktura_materije_energetski_nivoi_podnivoi_i_atomske_orbi...
Hemija r1 atomska_struktura_materije_energetski_nivoi_podnivoi_i_atomske_orbi...Hemija r1 atomska_struktura_materije_energetski_nivoi_podnivoi_i_atomske_orbi...
Hemija r1 atomska_struktura_materije_energetski_nivoi_podnivoi_i_atomske_orbi...
 
Resavanje jednacine sa apsolutnim vrednostima
Resavanje jednacine sa apsolutnim vrednostimaResavanje jednacine sa apsolutnim vrednostima
Resavanje jednacine sa apsolutnim vrednostima
 
2 Д форми и својства
2 Д форми и својства2 Д форми и својства
2 Д форми и својства
 
Funkcije i formule, Microsoft Excel 2010
Funkcije i formule, Microsoft Excel 2010Funkcije i formule, Microsoft Excel 2010
Funkcije i formule, Microsoft Excel 2010
 
Presek skupova
Presek skupovaPresek skupova
Presek skupova
 
3 dien moi
3 dien moi3 dien moi
3 dien moi
 
идно време
идно времеидно време
идно време
 
zavisne i izrične rečenice
zavisne i izrične rečenicezavisne i izrične rečenice
zavisne i izrične rečenice
 

Viewers also liked

Approaching Collaborative Modeling as an Uncertainty Reduction Process
Approaching Collaborative Modeling as an Uncertainty Reduction ProcessApproaching Collaborative Modeling as an Uncertainty Reduction Process
Approaching Collaborative Modeling as an Uncertainty Reduction ProcessRomina Eramo
 
MODELSWARD 2017 Panel
MODELSWARD 2017 PanelMODELSWARD 2017 Panel
MODELSWARD 2017 Panelmiso_uam
 
Software project list
Software project listSoftware project list
Software project listDeepak Dalal
 
Skolastarf i beinni
Skolastarf i beinniSkolastarf i beinni
Skolastarf i beinniingileif2507
 
Ashoka governance
Ashoka governanceAshoka governance
Ashoka governanceronnyjecob
 
Online presentation character development education
Online presentation character development educationOnline presentation character development education
Online presentation character development educationIwobe Kingsley S.
 
Performance #6 threading
Performance #6  threadingPerformance #6  threading
Performance #6 threadingVitali Pekelis
 
Internship B Project
Internship B ProjectInternship B Project
Internship B ProjectLesly Alvarez
 
Domain-Specific Languages
Domain-Specific LanguagesDomain-Specific Languages
Domain-Specific LanguagesJavier Canovas
 
Proofs by contraposition
Proofs by contrapositionProofs by contraposition
Proofs by contrapositionAbdur Rehman
 
Thiết bị phản ứng Hợp hạch lạnh A. Parkhomov: Báo cáo kết quả thử nghiệm vận ...
Thiết bị phản ứng Hợp hạch lạnh A. Parkhomov: Báo cáo kết quả thử nghiệm vận ...Thiết bị phản ứng Hợp hạch lạnh A. Parkhomov: Báo cáo kết quả thử nghiệm vận ...
Thiết bị phản ứng Hợp hạch lạnh A. Parkhomov: Báo cáo kết quả thử nghiệm vận ...Nhóm Năng lượng Mới Việt Nam
 

Viewers also liked (20)

Approaching Collaborative Modeling as an Uncertainty Reduction Process
Approaching Collaborative Modeling as an Uncertainty Reduction ProcessApproaching Collaborative Modeling as an Uncertainty Reduction Process
Approaching Collaborative Modeling as an Uncertainty Reduction Process
 
MODELSWARD 2017 Panel
MODELSWARD 2017 PanelMODELSWARD 2017 Panel
MODELSWARD 2017 Panel
 
Contribuciones
ContribucionesContribuciones
Contribuciones
 
Demanda+
Demanda+Demanda+
Demanda+
 
Software project list
Software project listSoftware project list
Software project list
 
Skolastarf i beinni
Skolastarf i beinniSkolastarf i beinni
Skolastarf i beinni
 
Ub0203
Ub0203Ub0203
Ub0203
 
Jamie-testimonials
Jamie-testimonialsJamie-testimonials
Jamie-testimonials
 
Ashoka governance
Ashoka governanceAshoka governance
Ashoka governance
 
Acharya balkrishna nepal
Acharya balkrishna nepalAcharya balkrishna nepal
Acharya balkrishna nepal
 
Online presentation character development education
Online presentation character development educationOnline presentation character development education
Online presentation character development education
 
Equipment
EquipmentEquipment
Equipment
 
Performance #6 threading
Performance #6  threadingPerformance #6  threading
Performance #6 threading
 
Internship B Project
Internship B ProjectInternship B Project
Internship B Project
 
Peer editing checklist for presentation
Peer editing checklist   for presentationPeer editing checklist   for presentation
Peer editing checklist for presentation
 
Domain-Specific Languages
Domain-Specific LanguagesDomain-Specific Languages
Domain-Specific Languages
 
Араг яс
Араг ясАраг яс
Араг яс
 
Proofs by contraposition
Proofs by contrapositionProofs by contraposition
Proofs by contraposition
 
Bọt lượng tử (Quantum Foam)
Bọt lượng tử (Quantum Foam)Bọt lượng tử (Quantum Foam)
Bọt lượng tử (Quantum Foam)
 
Thiết bị phản ứng Hợp hạch lạnh A. Parkhomov: Báo cáo kết quả thử nghiệm vận ...
Thiết bị phản ứng Hợp hạch lạnh A. Parkhomov: Báo cáo kết quả thử nghiệm vận ...Thiết bị phản ứng Hợp hạch lạnh A. Parkhomov: Báo cáo kết quả thử nghiệm vận ...
Thiết bị phản ứng Hợp hạch lạnh A. Parkhomov: Báo cáo kết quả thử nghiệm vận ...
 

Similar to MetaDepth

MDE-experiments
MDE-experimentsMDE-experiments
MDE-experimentsmiso_uam
 
OODP Unit 1 OOPs classes and objects
OODP Unit 1 OOPs classes and objectsOODP Unit 1 OOPs classes and objects
OODP Unit 1 OOPs classes and objectsShanmuganathan C
 
Model Execution: Past, Present and Future
Model Execution: Past, Present and FutureModel Execution: Past, Present and Future
Model Execution: Past, Present and FutureBenoit Combemale
 
Visual basic intoduction
Visual basic intoductionVisual basic intoduction
Visual basic intoductionSpy Seat
 
About Functional Programming
About Functional ProgrammingAbout Functional Programming
About Functional ProgrammingAapo Kyrölä
 
Extending High-Utility Pattern Mining with Facets and Advanced Utility Functi...
Extending High-Utility Pattern Mining with Facets and Advanced Utility Functi...Extending High-Utility Pattern Mining with Facets and Advanced Utility Functi...
Extending High-Utility Pattern Mining with Facets and Advanced Utility Functi...Francesco Cauteruccio
 
GPT and other Text Transformers: Black Swans and Stochastic Parrots
GPT and other Text Transformers:  Black Swans and Stochastic ParrotsGPT and other Text Transformers:  Black Swans and Stochastic Parrots
GPT and other Text Transformers: Black Swans and Stochastic ParrotsKonstantin Savenkov
 
Feature Importance Analysis with XGBoost in Tax audit
Feature Importance Analysis with XGBoost in Tax auditFeature Importance Analysis with XGBoost in Tax audit
Feature Importance Analysis with XGBoost in Tax auditMichael BENESTY
 
Math with .NET for you and Azure
Math with .NET for you and AzureMath with .NET for you and Azure
Math with .NET for you and AzureMarco Parenzan
 
Mastering Python lesson 4_functions_parameters_arguments
Mastering Python lesson 4_functions_parameters_argumentsMastering Python lesson 4_functions_parameters_arguments
Mastering Python lesson 4_functions_parameters_argumentsRuth Marvin
 
Design Pattern lecture 2
Design Pattern lecture 2Design Pattern lecture 2
Design Pattern lecture 2Julie Iskander
 
Model-driven Development of Model Transformations
Model-driven Development of Model TransformationsModel-driven Development of Model Transformations
Model-driven Development of Model TransformationsPieter Van Gorp
 
Sofwear deasign and need of design pattern
Sofwear deasign and need of design patternSofwear deasign and need of design pattern
Sofwear deasign and need of design patternchetankane
 

Similar to MetaDepth (20)

Multi21
Multi21Multi21
Multi21
 
MDE-experiments
MDE-experimentsMDE-experiments
MDE-experiments
 
TypeScript Overview
TypeScript OverviewTypeScript Overview
TypeScript Overview
 
OODP Unit 1 OOPs classes and objects
OODP Unit 1 OOPs classes and objectsOODP Unit 1 OOPs classes and objects
OODP Unit 1 OOPs classes and objects
 
Model Execution: Past, Present and Future
Model Execution: Past, Present and FutureModel Execution: Past, Present and Future
Model Execution: Past, Present and Future
 
Ml5
Ml5Ml5
Ml5
 
Visual basic intoduction
Visual basic intoductionVisual basic intoduction
Visual basic intoduction
 
About Functional Programming
About Functional ProgrammingAbout Functional Programming
About Functional Programming
 
Extending High-Utility Pattern Mining with Facets and Advanced Utility Functi...
Extending High-Utility Pattern Mining with Facets and Advanced Utility Functi...Extending High-Utility Pattern Mining with Facets and Advanced Utility Functi...
Extending High-Utility Pattern Mining with Facets and Advanced Utility Functi...
 
MLMPLs
MLMPLsMLMPLs
MLMPLs
 
GPT and other Text Transformers: Black Swans and Stochastic Parrots
GPT and other Text Transformers:  Black Swans and Stochastic ParrotsGPT and other Text Transformers:  Black Swans and Stochastic Parrots
GPT and other Text Transformers: Black Swans and Stochastic Parrots
 
Feature Importance Analysis with XGBoost in Tax audit
Feature Importance Analysis with XGBoost in Tax auditFeature Importance Analysis with XGBoost in Tax audit
Feature Importance Analysis with XGBoost in Tax audit
 
Math with .NET for you and Azure
Math with .NET for you and AzureMath with .NET for you and Azure
Math with .NET for you and Azure
 
Introduction to Design Patterns
Introduction to Design PatternsIntroduction to Design Patterns
Introduction to Design Patterns
 
Mastering Python lesson 4_functions_parameters_arguments
Mastering Python lesson 4_functions_parameters_argumentsMastering Python lesson 4_functions_parameters_arguments
Mastering Python lesson 4_functions_parameters_arguments
 
Design Pattern lecture 2
Design Pattern lecture 2Design Pattern lecture 2
Design Pattern lecture 2
 
Model-driven Development of Model Transformations
Model-driven Development of Model TransformationsModel-driven Development of Model Transformations
Model-driven Development of Model Transformations
 
OO analysis_Lecture12.ppt
OO analysis_Lecture12.pptOO analysis_Lecture12.ppt
OO analysis_Lecture12.ppt
 
Sofwear deasign and need of design pattern
Sofwear deasign and need of design patternSofwear deasign and need of design pattern
Sofwear deasign and need of design pattern
 
I x scripting
I x scriptingI x scripting
I x scripting
 

More from miso_uam

Model-driven engineering for AR
Model-driven engineering for ARModel-driven engineering for AR
Model-driven engineering for ARmiso_uam
 
Capone.pdf
Capone.pdfCapone.pdf
Capone.pdfmiso_uam
 
MLE_keynote.pdf
MLE_keynote.pdfMLE_keynote.pdf
MLE_keynote.pdfmiso_uam
 
Scientific writing
Scientific writingScientific writing
Scientific writingmiso_uam
 
Facets_UCM
Facets_UCMFacets_UCM
Facets_UCMmiso_uam
 
Máster en Métodos Formales en Ingeniería Informática
Máster en Métodos Formales en Ingeniería InformáticaMáster en Métodos Formales en Ingeniería Informática
Máster en Métodos Formales en Ingeniería Informáticamiso_uam
 
Analysing-MMPLs
Analysing-MMPLsAnalysing-MMPLs
Analysing-MMPLsmiso_uam
 
Miso-McGill
Miso-McGillMiso-McGill
Miso-McGillmiso_uam
 
Model Transformation Reuse
Model Transformation ReuseModel Transformation Reuse
Model Transformation Reusemiso_uam
 
keynote modelsward 2017
keynote modelsward 2017keynote modelsward 2017
keynote modelsward 2017miso_uam
 

More from miso_uam (20)

Model-driven engineering for AR
Model-driven engineering for ARModel-driven engineering for AR
Model-driven engineering for AR
 
Capone.pdf
Capone.pdfCapone.pdf
Capone.pdf
 
MLE_keynote.pdf
MLE_keynote.pdfMLE_keynote.pdf
MLE_keynote.pdf
 
Scientific writing
Scientific writingScientific writing
Scientific writing
 
Facets_UCM
Facets_UCMFacets_UCM
Facets_UCM
 
SLE_MIP08
SLE_MIP08SLE_MIP08
SLE_MIP08
 
mtATL
mtATLmtATL
mtATL
 
Máster en Métodos Formales en Ingeniería Informática
Máster en Métodos Formales en Ingeniería InformáticaMáster en Métodos Formales en Ingeniería Informática
Máster en Métodos Formales en Ingeniería Informática
 
Analysing-MMPLs
Analysing-MMPLsAnalysing-MMPLs
Analysing-MMPLs
 
Facets
FacetsFacets
Facets
 
kite
kitekite
kite
 
MTPLs
MTPLsMTPLs
MTPLs
 
Miso-McGill
Miso-McGillMiso-McGill
Miso-McGill
 
Model Transformation Reuse
Model Transformation ReuseModel Transformation Reuse
Model Transformation Reuse
 
Miso
MisoMiso
Miso
 
DSLcomet
DSLcometDSLcomet
DSLcomet
 
SICOMORO
SICOMOROSICOMORO
SICOMORO
 
ReusingMT
ReusingMTReusingMT
ReusingMT
 
keynote modelsward 2017
keynote modelsward 2017keynote modelsward 2017
keynote modelsward 2017
 
DSL-maps
DSL-mapsDSL-maps
DSL-maps
 

Recently uploaded

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfVishalKumarJha10
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...kalichargn70th171
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024Mind IT Systems
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxalwaysnagaraju26
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456KiaraTiradoMicha
 

Recently uploaded (20)

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
 

MetaDepth

  • 1. MULTI-LEVEL MODELLING WITH METADEPTH MoDELS’2016, Saint Malo (France) Tutorial Juan de Lara, Esther Guerra miso research group http://miso.es @miso_uam
  • 2. WHAT IS THE TUTORIAL ABOUT? 2 Model-Driven Engineering • Models are core assets of development • Automatically processable, refined into code, etc. • Mainstream modelling approach is two- level (meta-models/models) Multi-level modelling • More than two meta-levels at a time • Meta-levels can influence other levels beyond the immediate one • Simplifies modelling in some scenarios ProductType@2 VAT@1: double price: double Book: ProductType VAT=18.0 price=10.0 mobyDick: Book two-level multi-level
  • 3. WHAT WILL BE COVERED 3 Concepts • Basic concepts of potency-based multi-level modelling • Use of model management languages in a multi-level setting When to use multi-level modelling • Examples: realistic, beyond toy examples • “Smells” signalling scenarios where a multi-level solution has benefits • Results of analysis over more than 400 meta-models Use in practice • Support by the metaDepth meta-modelling tool (http://metaDepth.org) • Integrated with the Epsilon model management languages
  • 4. MATERIAL Download the last version of metaDepth (0.2c) at • http://metaDepth.org • Java 8 is needed • PlantUML is optional (http://plantuml.com/) All files used in this tutorial are available at • http://metaDepth.org/tutorial Downloading this material is not needed to follow the tutorial …but you will get a better understanding of the tool …and you’ll be able to play with our running example 4
  • 5. AGENDA 5 Multi-level modelling: the basics motivation clabjects, potency orthogonal classification, linguistic extensions meta-modelling features examples MetaDepth Multi-level model management Advanced techniques When and where to use multi-level modelling Summary and conclusion
  • 6. MOTIVATION Sometimes, one needs to explicitly model meta-modelling facilities, like: • Instantiation (modelling both types and objects) • Declaration and instantiation of attributes and references • Inheritance For example: • Product types and instances [e-commerce applications] • Task types and instances [process modelling languages] • Component types and instances [architectural languages] • Player types and instances [gaming applications] • … 6
  • 7. EXAMPLE 7 Model product types (books, CDs) and their instances, to be added on demand. Product types have a VAT, while instances have a price. Explicit modelling of types and instances • Types can be added dynamically • Features of types are fixed and known a priori Common modelling pattern, also known as: Type object [Martin et. al 97], item descriptor [Coad 1992], metaobject [Kiczales and Rivieres 1991]
  • 8. SOLUTION 1: STATIC TYPES 8 ProductType Book vat: double {readonly} price: double vat : double =4.0 GoF: Book price = 35 product types Features of product types product instances Does not meet the requirements (product types are not dynamic) Emulates values at the meta-level via redefinition Uses a native meta- modelling facility (instantiation)
  • 9. SOLUTION 2: EXPLICIT DYNAMIC TYPES 9 Requires adding an extra class (more if dynamic features are needed) Requires emulating the instantiation relation Explicit modelling of instantiation yields flexibility ProductType vat: double Product price: double type1 Book: ProductType vat = 4.0 :type GoF: Product price = 35 product types product instances
  • 10. SOLUTION 3: PROMOTION TRANSFORMATION 10 Needs a model transformation Hides information: “every ProductType is a Product” hardcoded in the transformation Disconnection between type and instance facets of ProductTypes Flexibility of the transformation Book (3) type facet GoF: Book price = 35 (4) Product price: double ProductType vat: double (2) instance facet (1) Book:ProductType vat=4.0 Similar to the concept of powertype
  • 11. SOLUTION 4: MULTI-LEVEL 11 ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 35 @2 @1 @0 Instantiation semantics is fixed Elements with instance and type facets at the same time Simplicity (less objects)
  • 13. CLABJECT = CLASS + OBJECT Elements have a combined type and instance facet Book • Instance of ProductType • Can provide a value for vat • Type for GoF • Can declare new features • (We’ll see how, using the OCA) ProductType has type facet only GoF has instance facet only 13 ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 35 @2 @1 @0 C. Atkinson and T. Kühne. 2001. The essence of multilevel metamodeling. UML’01 (LNCS), Vol. 2185. Springer, 19–33.
  • 14. POTENCY Used to characterize instances beyond the next meta-level Models, Clabjects and their features have a potency • Natural number (or zero) • Decreased at each lower meta-level • Indicates at how many meta-levels the element can be instantiated We use the “@potency” notation By default elements take the potency of their containers 14 ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 35 @2 @1 @0 C. Atkinson and T. Kühne. 2001. The essence of multilevel metamodeling. UML’01 (LNCS), Vol. 2185. Springer, 19–33.
  • 15. POTENCY Strict meta-modelling approach (*) Instantiation is mediated 15 ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 35 @2 @1 @0 myCD: ProductType price = 25 (*) modulo “linguistic extensions”
  • 16. POTENCY Strict meta-modelling approach (*) Instantiation is mediated… also for fields 16 ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 35 @2 @1 @0 ProductType Book: ProductType GoF: Book vat@1: double price: double price: double vat=4.0 price = 35 @2 @1 @0 shortcut for (*) modulo “linguistic extensions”
  • 17. POTENCY Strict meta-modelling approach (*) Instantiation is mediated… also for fields 17 ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 35 @2 @1 @0 ProductType Book: ProductType GoF: Book vat@1: double price: double price: double = 35 vat=4.0 @2 @1 @0 price can be given a value at level 1, acting as default value for Book instances (*) modulo “linguistic extensions”
  • 18. POTENCY Strict meta-modelling approach (*) Instantiation is mediated… also for fields 18 ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 35 @2 @1 @0 ProductType Book: ProductType GoF: Book vat@1: double price: double=35 vat=4.0 @2 @1 @0 price can be given a value at level 2, acting as default value for instances of instances of ProductType (*) modulo “linguistic extensions”
  • 19. LEVEL Refers to the potency of the model A model with level L can hold elements with potency  L 19 ProductType Book: ProductType GoF: Book price: double price = 35 @2 @1 @0 TaxKind@1 value: double tax@1 0..1 SuperReduced: TaxKind value = 6.0 Reduced: TaxKind value = 10.0 :tax General: TaxKind value = 21.0
  • 20. ORTHOGONAL CLASSIFICATION (OCA) 20 Linguisticmeta-model (meta-modellingfacilitites) … Meta-meta-model (meta-modelling facilitites) Meta-model Model MM M MM M M’ «instance of» (onto) «instance of» (onto) «instanceof» (ling) «instanceof» (ling) «instanceof» (ling) «instance of» «instance of» • Dual typing (ontological, linguistic) • Make meta-modelling facilities available at every meta-level • Types and meta-modelling facilities only at the meta-model level Multi-level Two-Level C. Atkinson, T. Kühne. 2002. Rearchitecting the UML infrastructure. ACM Trans. Model. Comput. Simul. 12, 4 (2002), 290–321.
  • 21. 21 ORTHOGONAL CLASSIFICATION (OCA) Clabject *supers InstanceType potency: int vat@1: double price: double ProductType vat = 4.0 Book: ProductType @1 price = 35 GoF: Book @0 type * * @2 ont instanceOf Linguistic meta-model (very simplified) * Feature «ling.instanceOf» ont instanceOf Model * 0..1
  • 22. 22 LINGUISTIC VIEW Clabject *supers InstanceType potency: int type * * Linguistic meta-model (very simplified) * Feature «ling.instanceOf» Model * L2: Model vat: Feature potency=2 ProductType: Clabject potency=2 potency=1 price: Feature potency=2 L1: Model potency=1 :type Book: Clabject potency=1 price1: Feature potency=1 vat: Feature potency=0 :type :type L0: Model potency=0 GoF: Clabject potency=0 price0: Feature potency=0 :type :type :type :type 0..1
  • 23. LINGUISTIC EXTENSIONS Elements with no ontological type • Ontological typing is optional • Linguistic typing is mandatory New clabjects or features Not everything can be anticipated at the top-most level 23 ProductType Book: ProductType GoF: Book vat@1: double price: double price = 35 numPages = 250 @2 @1 @0 vat=4.0 numPages : int J. de Lara, E. Guerra. 2010. Deep meta-modelling with metaDepth. In TOOLS’10 (LNCS), Vol. 6141. Springer, 1–20.
  • 24. 24 LINGUISTIC EXTENSIONS Elements with no ontological type • Ontological typing is optional • Linguistic typing is mandatory New clabjects or features Not everything can be anticipated at the top-most level Author Book: ProductType GoF: Book vat@1: double price: double price = 35 numPages = 395 @2 @1 @0 vat=4.0 numPages : int ProductType name: String books * eg: Author name=“Gamma” :books eg: Author name=“Johnson” :books
  • 25. 25 META-MODELLING FEATURES: REFERENCES AND CARDINALITIES Reference cardinality: only applies to next meta-level TaskKind PerformerKindperfBy *name@1: String duration:doublenext * Coding: TaskKind name=“programming” tests: next 1..* Testing: TaskKind name=“testing” Programmer: PerformerKind name: String progs: perfBy 1..* tester: perfBy 1 UICoding: Coding duration = 20 layoutUITest: Testing duration = 2 funcUITest: Testing duration = 4 : Programmer name=“Juan” : Programmer name=“Jesus” : Programmer name=“Esther” @2 @1 @0:progs :progs :tests :tests :tester :tester
  • 26. META-MODELLING FEATURES: INHERITANCE Can be used at any meta-level Inheritance of type and instance facets Abstract clabjects 26 … TaskKind PerformerKindperfBy *name@1: String duration:doublenext * Coding: TaskKind tests: next 1..* Testing: TaskKind name=“testing” SoftwareEngineer: PerformerKind name: String actor: perfBy @2 @1 @0 SETask: TaskKind * Programmer: PerformerKind Tester: PerformerKind skills: String[*] name=“se-task”
  • 28. DOMAIN SPECIFIC PROCESS MODELLING 28 TaskKind Resource Kind Performer Kind Artefact Kind GatewayKind Seq Join Fork ins outs* src tar perfBy * * * * name@1: String initial:Boolean=false final:Boolean=false timeStamp:Date duration:double DSPM@2
  • 29. DOMAIN SPECIFIC PROCESS MODELLING 29 DSPM@2 Attend :TaskKind name=“attend classes” Study :TaskKind name=“study” Preparation:TaskKind name=“preparation” P2P:Seq Exam :TaskKind name=“do exam” S2E:Seq Subject name: String level: int subs 1 on 1 src tar src tar TaskKind Resource Kind Performer Kind Artefact Kind GatewayKind Seq Join Fork ins outs* src tar perfBy * * * * name@1: String initial:Boolean=false final:Boolean=false timeStamp:Date duration:double Edu-PML@1 J. de Lara, E. Guerra, J. Sánchez Cuadrado. Model-driven engineering with domain-specific meta-modelling languages. Software and System Modeling 14(1): 429-459 (2015)
  • 30. 30 DSPM@2 Attend :TaskKind name=“attend classes” Study :TaskKind name=“study” Preparation:TaskKind name=“preparation” P2P:Seq Exam :TaskKind name=“do exam” S2E:Seq Subject name: String level: int subs 1 on 1 src tar src tar TaskKind Resource Kind Performer Kind Artefact Kind GatewayKind Seq Join Fork ins outs* src tar perfBy * * * * name@1: String initial:Boolean=false final:Boolean=false timeStamp:Date duration:double Maths: Subject name: “Maths” level: 1 : Attend : Study : Exam:P2P :S2E initial=true timeStamp=1/07/12 duration=2 timeStamp=08/07/12 duration=2 final=true timeStamp=10/07/12 duration=1 Edu-PML@1 Proc@0
  • 31. DOMAIN SPECIFIC PROCESS MODELLING 31 TaskKind Resource Kind Performer Kind Artefact Kind GatewayKind Seq Join Fork ins outs* src tar perfBy * * * * name@1: String initial:Boolean=false final:Boolean=false timeStamp:Date duration:double DSPM@2
  • 32. DOMAIN SPECIFIC PROCESS MODELLING 32 DSPM@2 TaskKind Resource Kind Performer Kind Artefact Kind GatewayKind Seq Join Fork ins outs* src tar perfBy * * * * name@1: String initial:Boolean=false final:Boolean=false timeStamp:Date duration:double Soft-PML@1 Coding: TaskKind tests: next 1..* Testing: TaskKind name=“testing” SoftwareEngineer: PerformerKind actor: perfBy @1SETask: TaskKind * Programmer: PerformerKind Tester: PerformerKind skills: String[*] name=“se-task”
  • 33. ADVANTAGES The top level can be customized for the process domain • Family of DSLs for process modelling Transformations can be defined over the top level and reused across the whole family • Code generators • Model-to-model transformations • In-place transformations • Queries 33
  • 34. COMPONENT-BASED META-MODELLING 34 Component InputPort OutputPort * Channel from to packet: Message data: String producer: Component max: int consumer: Component pout: OutputPort cin: InputPort p: producer max=10 c1: consumer :pout :cin : mChannel :packet data = “MODELS” * accepts * 1..* 1 Component types model Producer-consumer model Message 1 mChannel: Channel transports * 0..1 0..1 0..10 1from to1..2 c2: consumer:cin Port @2 @1 @0
  • 35. EXERCISE/RUNNING EXAMPLE: ARCADE/ADVENTURE GAMES 35 Sabre Wulf Pacman Atic atac Gauntlet Commando
  • 36. EXERCISE/RUNNING EXAMPLE: A META-MODEL FOR ARCADE GAMES Create a language to describe adventure games (like Pacman, Sabre Wulf, Gauntlet, Atic-atac, etc) Games based on connected tiles, able to hold treasures and playing characters • “heroes” (like Pacman) • “evils” (like Ghosts) Heros will have an initial number of lives, while at run-time, they will hold an actual number of lives and a score The language should permit creating types of tiles, heroes, evils and treasures (with custom properties) The language should permit describing the initial game configuration Later on, we will define the generic rule games… 36
  • 37. 37 TileKind Element Kind Character Kind EvilKind HeroKind Treasure Kind initLives@1: int = 3 lives: int = 3 score: int = 0 next * elements * ArcadeGame@2 A POSSIBLE SOLUTION
  • 38. 38 Cell: TileKind nextCell: next * coin: elements 0..1 Pacman@1 MODELLING THE PACMAN GAME Castle: TileKind Coin: TreasureKind value: int = 10 Pacman: HeroKind Ghost: EvilKind pacman: elements 0..1 ghosts: elements *
  • 39. 39 RuntimePacman@0 MODELLING AN INITIAL CONFIGURATION FOR PACMAN c0: Cell c1: Cell c2: Cell c3: Castlec4: Cell :nextCell:nextCell :nextCell :nextCell :nextCell :nextCell :nextCell :nextCell :nextCell :nextCell co1: Coin co2: Coin co3: Coin value=20co4: Coin co0: Coin g: Ghost p: Pacman
  • 40. AGENDA 40 Multi-level modelling: the basics MetaDepth hands-on examples Multi-level model management Advanced techniques When and where to use multi-level modelling Summary and conclusion
  • 41. Textual multi-level modelling tool • Started in 2009 • Deep characterization based on clabjects/potency • Orthogonal Classification Architecture • http://metaDepth.org Integrated with the Epsilon Languages for model management • Constraints in EOL/EVL • Derived attributes in EOL • In-place transformations in EOL • Model-to-Model transformations in ETL • Code generation in EGL 41 Juan de Lara, Esther Guerra: Deep Meta-modelling with MetaDepth. TOOLS (48) 2010: 1-20
  • 42. METADEPTH 42 Model Ecommerce@2 { Node ProductType { vat@1 : double=10; price : double=7.5; } } Ecommerce BookStore{ ProductType Book { vat = 4.0; } } BookStore WHSmith { Book GoF { price = 35; } } ProductType Book: ProductType GoF: Book vat@1: double=10 price: double=7.5 vat=4.0 price = 35 @2 @1 @0 Models are normally created in external text editors, and stored in files with .mdepth extension.
  • 43. SAMPLE SESSION > load “ProductSimple” :: loading ../metadepth.samples/src/tutorial/ProductSimple.mdepth (6 clabjects created in 0.22 s). > dump :: dumping all … (shows the models in memory) > compile PlantUML Executing... :: compiling all models to PlantUML format, generated file ./Ecommerce.txt 43 (generated png by PlantUML) The load command can also be included in .mdepth files
  • 44. COMMANDS & TIPS Use set to show all environment variables You’ll need to set DIR to your working folder > set DIR "../metadepth.samples/src/tutorial" :: setting environment variable DIR Use context to enter in the context of a specific model > context WHSmith :: entering context WHSmith You can use verify to check all (current model’s) constraints > verify :: Constraints in WHSmith evaluated, (0) violations 44
  • 45. COMMANDS & TIPS You can add new elements to a model using the # command > # :: entering metadepth execution mode > Book another { price = 45; } > # > dump :: dumping WHSmith ext BookStore WHSmith{ ext Book GoF { price=35.0; } ext Book another { price=45.0; } } 45
  • 46. COMMANDS&TIPS The # command permits also using any embedded language Currently EOL, ETL and EGL are embedded > # EOL :: entering eol execution mode > new Book; > ProductType.allInstances().println(); > # Set {another, MD_3825653c837c4d12b1f21e09c83f2fa9, GoF} (more about “transitive typing” later) 46
  • 47. COMMANDS & TIPS Retyping shell commands is time consuming You can save your commands in a “.mdc” file Command files can be executed with the run command run “Product” Files are sought in folder of DIR variable 47 load "ProductSimple“ dump context WHSmith Verify # Book JavaBible { price = 89; } # # EOL var t := new Book; t.price := JavaBible.price; ProductType.all.println(); # dump compile PlantUML Product.mdc
  • 49. USING LINGUISTIC TYPES It is possible to use either ontological or linguistic types > # EOL :: entering eol execution mode > Node.all.println(); > # Sequence {GoF, another} The linguistic meta-model is transparently available through reflection > # EOL :: entering eol execution mode > GoF.type.println(); > # Book The “^” notation can be used if needed to disambiguate (GoF.^type) 49
  • 50. LINGUISTIC EXTENSIONS 50 Ecommerce BookStore{ ProductType Book { vat = 4.0; pages : int; authors : Author[*] {ordered, unique}; } Node Author { name : String; } } BookStore WHSmith { Book GoF { price = 35; pages = 395; authors = [Gamma, Helm, Johnson, Vlissides]; } Author Gamma { name = "Eric Gamma"; } Author Helm { name = "Richard Helm"; } Author Johnson { name = "Ralph Johnson"; } Author Vlissides { name = "John Vlissides"; } } Model Ecommerce@2 { Node ProductType@2 { vat@1 : double = 7.5; price@2 : double = 10; } }
  • 51. CAPABILITIES Derived fields • Expressions using the Epsilon Object Language Constraints and features in models • Avoids creating an artificial class just to set a global constraint Nested models, model import • Models are first-class citizens, unlike in EMF Customizable textual syntax Model extension A-posteriori typing Concepts (genericity mechanism) 51
  • 52. DERIVED FIELDS Model Store@2 { Node ProductType{ vat@1 : double = 7.5; price : double = 10; /finalPrice@2: double = $self.vat*self.price/100 +self.price$; } } 52 Computation expressions for derived fields using the Epsilon Object Language (EOL) Derived fields with primitive type, or references
  • 53. RUNNING EXAMPLE (1) 53 Model ArcadeGame@2 { Node TileKind { next : TileKind[*]; elements : ElementKind[*]; } abstract Node ElementKind{} abstract Node CharacterKind : ElementKind { } Node HeroKind : CharacterKind { initLives@1 : int = 3; lives : int = 3; score : int = 0; } Node EvilKind : CharacterKind {} Node TreasureKind : ElementKind {} }
  • 54. RUNNING EXAMPLE (2) 54 ArcadeGame PacMan { TileKind Cell { nextCell : Cell[*] {next}; coin : Coin[0..1] {elements}; pacman : Pacman[0..1] {elements}; ghosts : Ghost[*] {elements}; } TileKind Castle : Cell {} TreasureKind Coin { value : int=10; } HeroKind Pacman { initLives = 3; } EvilKind Ghost {} }
  • 55. RUNNING EXAMPLE (3) 55 PacMan RuntimePacman { Cell c0 { nextCell = [c1, c4]; coin = co0; pacman = p; } Cell c1 { nextCell = [c2, c0]; coin = co1; } Cell c2 { nextCell = [c3, c1]; coin = co2; } Castle c3{ nextCell = [c4, c2]; coin = co3; ghosts = g; } Cell c4 { nextCell = [c0, c3]; coin = co4;} Pacman p {} Ghost g {} Coin co0 {} Coin co1 {} Coin co2 {} Coin co3 { value = 20; } Coin co4 {} }
  • 56. AGENDA 56 Multi-level modelling: the basics MetaDepth Multi-level model management constraints transformations code generation Advanced techniques When and where to use multi-level modelling Summary and conclusion
  • 57. MULTI-LEVEL MODEL MANAGEMENT For a multi-level modelling framework to be useful, we need: • Constraint languages • Transformation languages supporting • Code generation • Model-to-model transformation • In-place model transformation These need to be adapted to a ML setting In practice, metaDepth has been integrated with the Epsilon languages 57
  • 58. DEEP CONSTRAINT LANGUAGE Level at which the constraint is defined vs level at which we want to evaluate it • Constraints have “potency” 58 ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 35 @2 @1 @0 posPrice@2: self.price>0 defined evaluated
  • 59. DEEP CONSTRAINT LANGUAGE Level at which the constraint is defined vs level at which we want to evaluate it • Constraints have “potency” 59 ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 0 @2 @1 @0 posPrice@2: self.price>0 defined evaluated
  • 60. 60 TRANSITIVE TYPING We might not know type names at intermediate levels ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 35 @2 @1 @0 lotsOfProducts@2: ProductType.allInstances()-> size()>10 defined CD: ProductType vat=10.0 Disintegration: CD price = 20 evaluated TYPE.allInstances() returns all direct and indirect instances of TYPE at the current level
  • 61. LEVEL NAVIGATION Make (upwards) meta-level navigation implicit • At level 0: > GoF.vat.println(); > 4.0 Fields with instance facet in clabjects can be accessed in instance clabjects. 61 ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 35 @2 @1 @0
  • 62. LINGUISTIC META- MODEL Transparent access to the linguistic meta-model in constraint expressions 62 ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 35 @2 @1 @0 lotsOfProducts@2: self.type.allInstances()-> size()>10 defined evaluated Clabject *supers InstanceType potency: int type * * Linguistic meta-model (simplified) * Feature «ling.instanceOf» ^ prefix can be used to prevent name collisions: self.^type…
  • 63. LINGUISTIC META- MODEL Transparent access to the linguistic meta-model in constraint expressions 63 ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 35 @2 @1 @0 lotsOfProducts@2: self.type.allInstances()-> size()>10 defined evaluated Clabject *supers InstanceType potency: int type * * Linguistic meta-model (simplified) * Feature «ling.instanceOf» lotsOfProducts2@2: ProductType.allInstances()-> size()>10 What is the difference?
  • 64. METADEPTH MetaDepth uses the Epsilon Object Language (EOL) to express constraints • Also for operations and expressions for derived fields EOL is a variant of OCL • Permits side effects (assignments, object creation) • Has imperative constructs (e.g., loops) The basis of other Epsilon languages • ETL for model-to-model transformation • EGL for code generation 64
  • 65. EXERCISE Add constraints to the running example to ensure that: • There are no isolated tiles at level 0 • Treasures, Heroes and Evils are connected to one tile at level 0 • There is at least one hero at level 0 • There are no less evils than heroes at level 0 • There can be no Pacman in the castle Add a derived attribute to calculate the number of (direct) reachable tiles at level 0. 65
  • 66. 66 Model ArcadeGame@2 { Node TileKind { next : TileKind[*]; elements : ElementKind[*]; /numReachable : int = $self.next.size()$; noIsolated : $self.numReachable>0 or TileKind.all.exists( t | t.next.includes(self))$ } abstract Node ElementKind{ connected : $TileKind.all.one( t | t.elements.includes(self))$ } abstract Node CharacterKind : ElementKind { } Node HeroKind : CharacterKind { initLives@1 : int = 3; lives : int = 3; score : int = 0; } Node EvilKind : CharacterKind {} Node TreasureKind : ElementKind {} someHero@2 : $HeroKind.all.size()>=1$ moreEvils@2 : $EvilKind.all.size() >= HeroKind.all.size()$ } SOLUTION (1)
  • 67. 67 ArcadeGame PacMan { TileKind Cell { nextCell : Cell[*] {next}; coin : Coin[0..1] {elements}; pacman : Pacman[0..1] {elements}; ghosts : Ghost[*] {elements}; } TileKind Castle : Cell { noPacmans : $not self.pacman.isDefined()$ } TreasureKind Coin { value : int=10; } HeroKind Pacman { initLives = 3; } EvilKind Ghost { } } Conflicts and consistency of (ML) constraints can be analyzed: Towards automating the analysis of integrity constraints in multi-level models. MULTI 2014@MODELS. Esther Guerra, Juan de Lara. SOLUTION (2)
  • 69. IN-PLACE MODEL TRANSFORMATION 69 Infrastructure for a family of DSLs • Operations can be attached to meta-classes • Operations with potency Design similar to an object oriented framework • Common operations • Operations expected to be overriden at next meta-level For the running example: • A game engine for the DSL (autonomous play) • Core of the engine will be common (basic movement rules, game over and winning condition) • Some operations can be overriden at level 1 (ie., particular to Pacman)
  • 70. RUNNING EXAMPLE 70 @metamodel(name=ArcadeGame,file=Arcade.mdepth) @potency(value=2) operation main() { 'Simulating the arcade game'.println(); var maxStep : Integer := 30;-- to limit infinite behaviours var numStep : Integer := 0; var hero : HeroKind := HeroKind.all.first(); hero.~initCell := hero.getCurrentTile(); for (e in EvilKind.all) { e.~initCell := e.getCurrentTile(); } while (numStep<maxStep) { ('----------------------------------------------------').println(); ('Time : '+numStep).println(); hero.move(); if (hero.isWin()) { (' ******* Our hero '+hero+' has won! *******').println(); (' ******* score '+p.score).println(); (' ******* lives '+p.lives).println(); return; } if (checkDamaged(hero)) return;// game over for (e in EvilKind.all) { e.move(); } if (checkDamaged(hero)) return;// game over numStep := numStep+1; } }
  • 71. 71 operation checkDamaged(hero : HeroKind) : Boolean { // returns true if game over if (hero.isDamaged()) { (' Our hero '+hero+' has been damaged').println(); hero.die(); if (hero.hasDied()) { ' ******* Game over! *******'.println(); (' ******* score '+hero.score).println(); return true; } else { hero.restart(); for (e in EvilKind.all) { e.restart(); } } } return false; } operation ElementKind getCurrentTile() : TileKind { return TileKind.all.select( t | t.elements.includes(self) ).first(); } operation HeroKind move() { var currentTile : TileKind := self.getCurrentTile(); var toTile : TileKind := currentTile.next.random(); (' Moving hero from '+currentTile+' to '+toTile).println(); currentTile.removeHero(self); toTile.addHero(self); } … Operation in global context Operations for instances of ElementKind and HeroKind at level 0
  • 72. 72 operation TileKind removeHero(h : HeroKind) { (' Removing hero '+h+' from '+self).println(); } operation TileKind addHero(h : HeroKind) { (' Adding hero '+h+' to '+self).println(); } operation TileKind removeEvil(g : EvilKind) { (' Removing evil '+g+' from '+self).println(); } operation TileKind addEvil(g : EvilKind) { (' Adding evil '+g+' to '+self).println(); } Cannot provide “true” code for adding objects, since we do not know the name of the reference These operations should be overriden at the next meta-level “Hot spots”: typically to be overriden at the next meta-level J. de Lara, E. Guerra, J. Sánchez Cuadrado. Model-driven engineering with domain-specific meta-modelling languages. SoSyM 14(1): 429-459 (2015)
  • 73. 73 // -------------------------------------------------------- // Specific to Pacman.... // -------------------------------------------------------- operation Cell removeHero(h : HeroKind) { self.eatCoin(h); (' Removing pacman '+h+' from cell '+self).println(); self.pacman:=null; } operation Cell eatCoin(h : HeroKind) { if (self.coin.isDefined()) { h.score := h.score + self.coin.value; delete self.coin; self.coin := null; (' Pacman score = '+h.score).println(); } } operation Cell addHero(h : HeroKind) { (' Adding pacman '+h+' to cell '+self).println(); self.pacman:= h; self.eatCoin(h); } operation Cell removeEvil(g : EvilKind) { (' Removing ghost '+g+' from cell '+self).println(); self.ghosts.remove(g); } operation Cell addEvil(g : EvilKind) { (' Adding ghost '+g+' to cell '+self).println(); self.ghosts.add(g); }
  • 74. MODEL-TO-MODEL TRANSFORMATION Many scenarios: • Deep transformations (eg. defined at @2, applied at @0) • Co-transformations (eg. defined at @2, applied at @1 and @0) • Refining transformations (overriding rules at @1) • Reflective & linguistic transformations (generic, using linguistic types) • Multi-level target (eg creating models at @1 and @0) For the running example: • A (deep) transformation into Petri nets • Reusable for any concrete adventure game 74 J. de Lara, E. Guerra, J. Sánchez Cuadrado. Model-driven engineering with domain-specific meta-modelling languages. SoSyM 14(1): 429-459 (2015)
  • 75. MODEL-TO-MODEL TRANSFORMATION 75 @metamodel(name=ArcadeGame,file=Arcade.mdepth,domain=source) @metamodel(name=PetriNet,file=PetriNet.mdepth,domain=target) rule CharacterToToken transform h : SLevel0!CharacterKind to p : Target!Token { p.^name := h.^type+'_'+h.^name; } rule TileToPlace transform t : SLevel0!TileKind to p : Target!Place { p.name := t.type.name+'_'+t.^name; p.^name := t.type.name+'_'+t.^name; p.tokens ::= t.elements;// implicit call to equivalents() for ( n in t.next) { var tr := new Target!Transition; tr.name := t.^name+' to '+n.^name; tr.^name := t.^name+'_to_'+n.^name; p.outTr := tr; n.equivalents().first().inTr := tr; } }
  • 76. CODE GENERATION 76 <!doctype html> <html> <head> … <script type="text/javascript"> // create an array with nodes var nodes = new vis.DataSet([ [% var counter : Integer := 0; // Generic for(t in Level0!Node.all) { counter := counter+1; %] [%if (counter > 1) {%], [%}%] {id: [%=counter%], label: '[%=t.type%] [%=counter%]'} [% t.~identif := counter; %] [%}%] ]); … </html> Visualization of the game • vis.js (http://visjs.org) Code generator • Deep (reusable for the DSL) • Generic (linguistic types)
  • 77. GENERATED CODE 77 <script type="text/javascript"> // create an array with nodes var nodes = new vis.DataSet([ {id: 1, label: 'Coin 1'} , {id: 2, label: 'Coin 2'} , {id: 3, label: 'Coin 3'} , {id: 4, label: 'Coin 4'} , {id: 5, label: 'Coin 5'} , {id: 6, label: 'Pacman 6'} , {id: 7, label: 'Ghost 7'} , {id: 8, label: 'Castle 8'} , {id: 9, label: 'Cell 9'} , {id: 10, label: 'Cell 10'} , {id: 11, label: 'Cell 11'} , {id: 12, label: 'Cell 12'} ]);
  • 78. AGENDA 78 Multi-level modelling: the basics MetaDepth Multi-level model management Advanced techniques splitting models leap potency deep references When and where to use multi-level modelling Summary and conclusion
  • 79. SPLITTING MODELS Having all elements in one model does not scale • Models created to “annotate” other ones Facility for model import • Makes accesible the model elements of other models Level mismatches • Importing and imported models do not need to have the same level • Often reconciled through deep references 79
  • 80. EXAMPLE: DEFINING A CONCRETE SYNTAX 80 Model Graphics@2 { abstract Node Figure { x: int; y: int; rotation : double = 0; scale : double = 1; refsTo : Node; } Node Rectangle : Figure { width@1 : int; height@1 : int; } }
  • 81. EXAMPLE: DEFINING A CONCRETE SYNTAX 81 Graphics PeopDiag imports People{ Rectangle PersonRep { width = 6; height = 6; refsToPerson : Person {refsTo}; } } Model People{ Node Person { name : String; age : int; } }
  • 82. EXAMPLE: DEFINING A CONCRETE SYNTAX 82 PeopDiag somePeopleDiag imports somePeople { PersonRep p1r { x = 10; y = 10; refsToPerson = p1; } } People somePeople{ Person p1 { name = “Alan”; age =42; } }
  • 83. EXAMPLE: COMPONENT-BASED COLLABORATIVE WEB APPLICATIONS 83 •Component types •Component instances •Interconnections Component view •Pages •Style •Layout Presentation view •Users •Roles User view •Data format (schemas) •Data values Data view Model of Collaborative Web Application instance of Language Definition code generator Language Usage Final Application Juan de Lara, Esther Guerra, Ruth Cobos, Jaime Moreno-Llorena: Extending Deep Meta- Modelling for Practical Model-Driven Engineering. Comput. J. 57(1): 36-58 (2014)
  • 84. SPLITTING MODELS AND DEEP REFERENCES 84 ComponentView @2 ComponentType ident: String name:String JavaScript Component @1 AppletComponent codeBase: String params:String[*] @1 StyleContent 1 Presentation StyleTree 11 Page * content PresentationView StyleHead bgcolor: String color: String fontSize: Integer @1 ... ... «imports» comps * @1 @0 mapTable: TableVisualizer TableVisualizer: JavaScriptComponent p1: Page @0 Not what we want: we want pages to hold instances of instances of ComponenType
  • 85. SPLITTING MODELS AND DEEP REFERENCES 85 ComponentView @2 ComponentType ident: String name:String JavaScript Component @1 AppletComponent codeBase: String params:String[*] @1 StyleContent 1 Presentation StyleTree 11 Page * content PresentationView StyleHead bgcolor: String color: String fontSize: Integer @1 ... ... «imports» Not allowed: instances of comps should point to direct instances (with potency 1) of ComponentType comps * @1 @0 mapTable: TableVisualizer TableVisualizer: JavaScriptComponent p1: Page @0
  • 86. SPLITTING MODELS AND DEEP REFERENCES 86 ComponentView @2 ComponentType ident: String name:String JavaScript Component @1 AppletComponent codeBase: String params:String[*] @1 StyleContent 1 Presentation StyleTree 11 Page * content PresentationView StyleHead bgcolor: String color: String fontSize: Integer @1 ... ... «imports» comps@0 * p1: Page @0 Deep reference: reference to a clabject with certain potency @1 @0 mapTable: TableVisualizer TableVisualizer: JavaScriptComponent
  • 87. LEAP POTENCY Identity instantiation: elements instantiated at intermediate levels with no extra information 87 @2 Component view Component Type @1 @0 cal:CalendarEngine InParam OutParam Connector * * * * CalendarEngine: JavaScriptComponent TableVisualizer: JavaScriptComponent CallEvents:OutParam DTable:InParam tab:TableVisualizer ev:CallEvents c:Connector dt:DTable Connector: Connector * *
  • 88. LEAP POTENCY “Syntactic sugar” to avoid identity instantiation 88 @2 Component view Component Type @0 @1 @0 cal:CalendarEngine InParam OutParam Connector * * @(2)* * @0 CalendarEngine: JavaScriptComponent TableVisualizer: JavaScriptComponent CallEvents:OutParam DTable:InParam tab:TableVisualizer ev:CallEvents c:Connector dt:DTable
  • 89. LEAP POTENCY AS MODEL SPLITTING 89 @2Component view Component Type @0 @1 @0 cal:CalendarEngine InParam OutParam* * * * @0 CalendarEngine: JavaScriptComponent TableVisualizer: JavaScriptComponent CallEvents:OutParam DTable:InParam tab:TableVisualizer ev:CallEvents dt:DTable Connector view Connector @1 c:Connector @0
  • 90. RUNNING EXAMPLE Assume we do not need to define types of tiles • All tiles are the same: same behaviour and connectivity We have a “potency mismatch” • We only want tile instances, not types (ie., potency 1) • We still want to define character types (ie., potency 2) 90
  • 91. SOLUTION 1: LEAP POTENCY 91 Model ArcadeSimple@2 { // we are not interested in defining types of tiles Node Tile@(2) { // leap potency (otherwise identity instantiation) next : Tile[*]; elements : ElementKind@0[*]; // deep reference } abstract Node ElementKind{ } abstract Node CharacterKind : ElementKind { } Node HeroKind : CharacterKind { initLives@1 : int = 3; lives : int = 3; score : int = 0; } Node EvilKind : CharacterKind {} Node TreasureKind : ElementKind {} }
  • 92. SOLUTION 1: LEAP POTENCY 92 ArcadeSimple PacMan { TreasureKind Coin { value : int=10; } HeroKind Pacman { initLives = 5; } EvilKind Ghost { } } PacMan RuntimePacman { Tile c0 { next = [c1, c4]; elements = [co0, p]; } Tile c1 { next = [c2, c0]; elements = [co1]; } Tile c2 { next = [c3, c1]; elements = [co2]; } Tile c3 { next = [c4, c2]; elements = [co3, g]; } Tile c4 { next = [c0, c3]; elements = [co4];} Pacman p {} Ghost g {} Coin co0 {} Coin co1 {} Coin co2 {} Coin co3 { value = 20; } Coin co4 {} }
  • 93. SOLUTION 2: MODEL SPLIT 93 Make explicit the two concerns of the DSL: • Board layout • Character definition Model ArcadeCharacters@2 { abstract Node ElementKind{} abstract Node CharacterKind : ElementKind {} Node HeroKind : CharacterKind { initLives@1 : int = 3; lives : int = 3; score : int = 0; } Node EvilKind : CharacterKind {} Node TreasureKind : ElementKind {} } ArcadeCharacters PacmanCharacters { TreasureKind Coin { value : int=10;} HeroKind Pacman { initLives = 5; } EvilKind Ghost {} } PacmanCharacters PacmanRuntime { Pacman p {} Ghost g {} Coin co0 {} … }
  • 94. SOLUTION 2: MODEL SPLIT 94 Make explicit the two concerns of the DSL: • Board layout • Character definition Model ArcadeBoard imports ArcadeCharacters { // Not interested in defining types of tiles Node Tile { next : Tile[*]; elements : ElementKind@0[*]; } } ArcadeBoard PacmanBoard imports PacmanRuntime { Tile c0 { next = [c1, c4]; elements = [co0, p]; } Tile c1 { next = [c2, c0]; elements = [co1]; } Tile c2 { next = [c3, c1]; elements = [co2]; } Tile c3 { next = [c4, c2]; elements = [co3, g]; } Tile c4 { next = [c0, c3]; elements = [co4];} }
  • 95. AGENDA 95 Multi-level modelling: the basics MetaDepth Multi-level model management Advanced techniques When and where to use multi-level modelling Multi-level patterns How frequent are these ML “smells”? Summary and conclusion
  • 96. MULTI-LEVEL PATTERNS 96 Patterns signalling that a multi-level solution could be beneficial Emulate a meta-modelling facility within a meta-model: • Type-object: typing and instantiation • Dynamic features: feature definition and instantiation • Dynamic auxiliary domain concepts: class definition and instantiation • Relation configurator: Reference cardinality and its semantics • Element classification: Inheritance In multi-level these facilities are native at every meta-level J. de Lara, E. Guerra, J. Sánchez Cuadrado: When and How to Use Multilevel Modelling. ACM Trans. Softw. Eng. Methodol. 24(2): 12:1-12:46 (2014)
  • 97. TYPE-OBJECT 97 ProductType Book: ProductType GoF: Book vat@1: double price: double vat=4.0 price = 35 @2 @1 @0 ProductType vat: double Product price: double type1 Book: ProductType vat = 4.0 :type GoF: Product price = 35 Dynamic addition of new types, and instantiation of these ProductType Book vat: double {readonly} price: double vat : double =4.0 GoF: Book price = 35 Explicit modelling Static types Multi-level
  • 98. DYNAMIC FEATURES 98 Dynamic addition of new features to a type, and corresponding slots to their instances
  • 99. RELATION CONFIGURATOR 99 Configuration of a reference type dynamically created Instantiation of the reference type according to that configuration.
  • 100. DYNAMIC AUXILIARY DOMAIN CONCEPTS 100 Dynamic addition of new entities related to a type, as well as the instantiation of those entities
  • 101. ELEMENT CLASSIFICATION 101 Organization of dynamically created elements along subtyping and inheritance hierarchies.
  • 102. PRACTICAL APPLICABILITY How often do these patterns occur? Analysis of meta-model repositories: • ATL meta-model zoo (305 meta-models) [8.5% occur.] • OMG specifications (116 specs) [35%~38% occur.] • ReMoDD (15 meta-models) [20% occur.] • Articles in journals/conferences 84 meta-models with 459 occurrences (avg 5.5) • Most common pattern is the type-object • Most used solution is explicit types (~70%) 102
  • 103. WHERE? 103 19 17 13 4 4 3 3 3 2 3 Enterprise/Process Modelling Software Architecture Systems/Software Modelling Manufacturing Reverse Engineering Data modelling Requirements Bibliographic Traceability Metrics #META-MODELS 153 85 48 46 19 14 10 9 8 4 #PATTERN OCCURRENCES
  • 104. WHERE? Software architecture, components and services • Component types and instances, port types and instances • Mostly explicit types solution 104 Example: CloudML
  • 105. WHERE? Business process/enterprise modelling • Base meta-model customized for different enterprises or project types (OrganizationType/Organization, ProjectType/Project, etc) • Process modelling languages (TaskType/Task) • Powertypes, explicit modelling for implementation • Many occurrences per meta-model 105
  • 106. BUSINESS PROCESS/ENTERPRISE 106 E=Explicit, S=Static, ST=Stereotypes, EN=Enumerated Types, PT=Powertypes
  • 107. EXPLICIT TYPES TO MULTI-LEVEL 107 • CloudML (6 T-O, 1 DF) • 14 classes • Multi-level solution • 6 classes
  • 108. STATIC TYPES TO MULTI-LEVEL 108 KDMElement name: String KDM Relationship from to /outbound /inbound *{union} {union}* KDMModel /owned element {union}* CodeModel AbstractCode Element AbstractCode Relationship /owned relation{union}* coderelation {subsets ownedRelation} * ParameterTo CodeItem from{redefines from} to{redefines to} KDMElement name: String KDM Relationship from to outbound inbound * * KDMModel @2 CodeModel : KDMModel @1 AbstractCode Element: KDMElement CodeItem: KDMElement AbstractCode Relationship: KDMRelationship ParameterTo: KDMRelationship from: from to: to * {subsets ownedElement} codeElement • KDM (OMG) • Simpler base meta-model
  • 109. AGENDA 109 Multi-level modelling: the basics MetaDepth Multi-level model management Advanced techniques When and where to use multi-level modelling Summary, conclusions and outlook
  • 110. SUMMARY Multi-level modelling • Generalizes two-level modelling overcoming some of its limitations • Useful when the type-object pattern arises • Leads to simpler models MetaDepth • A tool for Multi-level modelling • Integrated with the Epsilon languages for model management 110 The limits of my language mean the limits of my world. Ludwig Wittgenstein
  • 111. OUTLOOK Use it in real MDE scenarios • Let us know if you use metaDepth Improve tooling • Eclipse plugin Refactoring of multi-level models • flattenings and un-flattenings A-posteriori typing 111
  • 112. MORE… 112 Other related tools • melanee (http://www.melanee.org/) • DPF Workbench • … MULTI series of workshops (at MODELS) • MULTI 2014 (Valencia) • MULTI 2015 (Ottawa) • MULTI 2016 (Saint Malo) MLM wiki • http://homepages.ecs.vuw.ac.nz/Groups/MultiLevelModeling/
  • 113. MAIN METADEPTH REFERENCES 1. Original publication about the tool: J. de Lara and E. Guerra. “Deep meta-modelling with MetaDepth“. 2010. Proc. TOOLS 2010. LNCS 6141, Springer, pp.: 1-20. 2. Integration with ML management languages. Concrete syntax: J. de Lara, E. Guerra, J. Sánchez-Cuadrado. “Model-driven engineering with domain- specific meta-modelling languages“. 2015. SoSyM (Springer), Vol 14(1). pp.:429-459. Best papers of ECMFA'12. 3. Leap potency, deep reference, deep code generation, application in practice: J. de Lara, E. Guerra, R. Cobos, J. Moreno Llorena. “Extending deep meta-modelling for practical model-driven engineering”. 2014. The Computer Journal, Vol 57(1). pp.:36-58 4. Analysis of ML constraints: E. Guerra, J. de Lara. ”Towards automating the analysis of integrity constraints in multi- level models”. 2014. MULTI'2014, (Valencia) (CEUR). pp.:1-10. 5. ML patterns. Applicability study for MLM: J. de Lara, E. Guerra, J. Sánchez Cuadrado. “When and How to Use Multi-Level Modelling”. 2014. ACM TOSEM, Vol 24(2). pp.:1-46. 113