multi level modelling

34
Multi-Level Modelling precise | role based | modular | simple

Upload: jorn-bettin

Post on 01-Dec-2014

1.081 views

Category:

Technology


1 download

DESCRIPTION

Multi Level Modelling precise | role based | modular | simple

TRANSCRIPT

Page 1: Multi Level Modelling

Multi-Level Modellingprecise | role based | modular | simple

Page 2: Multi Level Modelling

A typical problem

Page 3: Multi Level Modelling

Class : Mammal

dateOfBirth

Class : Dog

isPoliceDog

Class : Cat

Dog : Jack{1/5/03, yes}

Dog : Susie{1/2/00, no}

Class : AnimalSpecies

maxAge

Class : Animal

dateOfBirth[*][1]

Cat : Coco{4/3/07}

Cat : Peter{10/9/98}

[*]

[2]

[*]

[2]

Animal : Jack{1/5/03}

Animal : Susie{1/2/00}

Animal : Coco{4/3/07}

Animal : Peter{10/9/98}

[*]

[2]

A.S. : Dog{20 years}

A.S. : Cat{30 years}

problem precision of links

problemno species

data

problemno species-specific

instance data

object oriented model A(modelling instantiation via association)

object oriented model B(modelling instantiation via specialisation)

Page 4: Multi Level Modelling

Class : Mammal

dateOfBirth

Class : Dog

isPoliceDog

Class : Cat

Dog : Jack{1/5/03, yes}

Dog : Susie{1/2/00, no}

[*][1]

Cat : Coco{4/3/07}

Cat : Peter{10/9/98}

[*]

[2]

[*]

[2]

problemFragmentation of

concepts

Class : AnimalSpecies

maxAge

A.S. : Dog{20 years}

A.S. : Cat{30 years}

problemSpurious complexity

object oriented model C(Power Type pattern)

Page 5: Multi Level Modelling

Class : Mammal

dateOfBirth

Class : Dog

isPoliceDog

Class : Cat

Dog : Jack{1/5/03, yes}

Dog : Susie{1/2/00, no}

[*][1]

Cat : Coco{4/3/07}

Cat : Peter{10/9/98}

[*]

[2]

[*]

[2]

Class : AnimalSpecies

maxAge

A.S. : Dog{20 years}

A.S. : Cat{30 years}

object oriented model C(Power Type pattern)

design time

run time

configuration time?

Page 6: Multi Level Modelling

The solution

Page 7: Multi Level Modelling

Vertex : AnimalSpecies

maxAgeisAbstract : no

AnimalSpecies : Dog

maxAge : 20isAbstract : noisPoliceDog

AnimalSpecies : Cat

maxAge : 30isAbstract : no

[*]

[2]

[*]

[2]

Dog : Jack

dateOfBirth : 1/5/03isPoliceDog : yes

AnimalSpecies : Mammal

maxAge : 150isAbstract : yesdateOfBirth

Dog : Susie

dateOfBirth : 1/2/00isPoliceDog : no

Cat : Coco

dateOfBirth : 4/3/07

Cat : Peter

dateOfBirth : 10/9/98

run time

configuration time

design timemulti-level modellingprecise instantiation semantics

role based binding timesmodularitysimplicity

Page 8: Multi Level Modelling

Vertex : AnimalSpecies

maxAgeisAbstract : no

AnimalSpecies : Dog

maxAge : 20isAbstract : noisPoliceDog

AnimalSpecies : Cat

maxAge : 30isAbstract : no

[*]

[2]

[*]

[2]

Dog : Jack

dateOfBirth : 1/5/03isPoliceDog : yes

AnimalSpecies : Mammal

maxAge : 150isAbstract : yesdateOfBirth

Dog : Susie

dateOfBirth : 1/2/00isPoliceDog : no

Cat : Coco

dateOfBirth : 4/3/07

Cat : Peter

dateOfBirth : 10/9/98

run time

configuration time

design timemulti-level modellingprecise instantiation semantics

role based binding timesmodularitysimplicity

instantiation ...establishes connections between two levels of abstraction that

define different binding times

generalisation/specialisation ...expresses the commonalities and variabilities between the concepts

relevant to a specific binding time

a consistent instantiation mechanism at all levels

& unlimited levels of instantiation

Page 9: Multi Level Modelling

The technology

Page 10: Multi Level Modelling
Page 11: Multi Level Modelling

EdgeEnd : semanticIdentity[1]

Graph : Graph

EdgeEnd : EdgeEnd

minCardinalitymaxCardinalityisContainerisNavigableisAbstract = FALSE

isAbstractisAbstract = TRUE

Edge : #

EdgeEnd : edgeEnds[2]

Edge : #

EdgeEnd : fromSubGraph[1]

EdgeEnd : toSubGraph[1]Edge : #

Edge : #

EdgeEnd :superSet[1]

EdgeEnd : subSet[1] Edge : #

EdgeEnd : propertyDefinitions[*]

Edge : #

SuperSetReference : SuperSetReference

isAbstract = FALSE

Visibility : Visibility

isAbstract = FALSE

Edge : #

Link : Link

isAbstract = TRUE

OrderedPair : OrderedPair

EdgeEnd : detail[1]EdgeEnd : abstraction[1]

Edge : #

EdgeTrace : EdgeTrace

isAbstract = FALSE

Edge : #

Edge : #

EdgeEnd :vertex[1]

Vertex : SemanticDomain.SemanticIdentity

isAbstract = FALSE

Edge : #

Edge : #

EdgeEnd : propertyValues[*]

Edge : #

Edge : #

Edge : #

Edge : #

Vertex : Vertex

isAbstract = FALSE

EdgeEnd : artifact[1]

EdgeEnd : artifact[1]

EdgeEnd : artifact[1]

EdgeEnd : artifact[1]

EdgeEnd : artifact[1]

Gmodel

Edge : Edge

isAbstract = FALSE

OrderedSet :OrderedSet

*EdgeEnd : SuperSetReferenceFlavored[*]

EdgeEnd : visibilityFlavored[*]

EdgeEnd : edgeTraceFlavored[*]

EdgeEnd : edgeFlavored[*]

EdgeEnd : vertexFlavored[*]

EdgeEnd : commands[*]

Edge : #EdgeEnd : queries[*]

Edge : #

beyond Open Source

Page 12: Multi Level Modelling

The following pages illustrate the use of the Gmodel API.

For further information on the open source Gmodel technology

based on denotational semantics, contact:

Jorn Bettinjbe @ sofismo.ch

Page 13: Multi Level Modelling

Examples

Page 14: Multi Level Modelling

Vertex : DomainAnalysis

Vertex : DomainEngineering

Vertex : ApplicationEngineeringVertex : ProductManagement

Vertex : ProjectManagement

Vertex : ProductLineManagement

Page 15: Multi Level Modelling

Vertex : DomainAnalysis

Vertex : DomainEngineering

Vertex : ApplicationEngineeringVertex : ProductManagement

Vertex : ProjectManagement

Vertex : ProductLineManagement

Model expressed through the Gmodel API

Instance domainanalysis = instantiateAbstractArtifact(kernelI.graph, "Domain Analysis", kernelI.vertex); Instance projectmanagement = addAbstractSubGraphArtifact(domainanalysis, "Project Management"); Instance productmanagement = addAbstractSubGraphArtifact(domainanalysis,"Product Management"); Instance productlinemanagement = addAbstractSubGraphArtifact(domainanalysis, "Product Line Management"); Instance applicationengineering = addAbstractSubGraphArtifact(domainanalysis, "Application Engineering"); Instance domainengineering = addAbstractSubGraphArtifact(domainanalysis, "Domain Engineering");

G.link(kernelI.visibility, projectmanagement, productmanagement); G.link(kernelI.visibility, productmanagement, productlinemanagement); G.link(kernelI.visibility, applicationengineering, productmanagement); G.link(kernelI.visibility, applicationengineering, productlinemanagement); G.link(kernelI.visibility, applicationengineering, domainengineering); G.link(kernelI.visibility, domainengineering, productlinemanagement); G.link(kernelI.visibility, domainengineering, productmanagement);

Page 16: Multi Level Modelling

Vertex : DomainAnalysis.ProductLineManagement

Vertex : Organization

Vertex : System

Vertex : ManagedFeature

Page 17: Multi Level Modelling

Vertex : DomainAnalysis.ProductLineManagement

Vertex : Organization

Vertex : System

Vertex : ManagedFeature

Model expressed through the Gmodel API

Instance organization = addAbstractSubGraphArtifact(productlinemanagement, "Organization"); Instance system = addAbstractSubGraphArtifact(productlinemanagement,"System"); Instance managedfeature = addAbstractSubGraphArtifact(productlinemanagement, "Managed Feature");

G.link(kernelI.visibility, organization, system); G.link(kernelI.visibility, system, managedfeature);

Page 18: Multi Level Modelling

Vertex : DomainAnalysis.ProductManagement

Vertex : ...ProductLineManagement.ManagedFeatureVertex : ...ProductLineManagement.Organization

Vertex : Product

Vertex : ProductFeedback Vertex : UseCase

Page 19: Multi Level Modelling

Vertex : DomainAnalysis.ProductManagement

Vertex : ...ProductLineManagement.ManagedFeatureVertex : ...ProductLineManagement.Organization

Vertex : Product

Vertex : ProductFeedback Vertex : UseCase

Model expressed through the Gmodel API

Instance product = addAbstractSubGraphArtifact(productmanagement, "Product"); Instance productfeedback = addAbstractSubGraphArtifact(productmanagement,"Product Feedback"); Instance usecase = addAbstractSubGraphArtifact(productmanagement, "Use Case");

G.link(kernelI.visibility, product, productfeedback); G.link(kernelI.visibility, product, usecase); G.link(kernelI.visibility, productfeedback, organization); G.link(kernelI.visibility, usecase, organization); G.link(kernelI.visibility, usecase, managedfeature);

Page 20: Multi Level Modelling

Vertex : DomainAnalysis.ProjectManagement

Vertex : ...ProductManagement.Product

Vertex : Timebox

Page 21: Multi Level Modelling

Vertex : DomainAnalysis.ProjectManagement

Vertex : ...ProductManagement.Product

Vertex : Timebox

Model expressed through the Gmodel API

Instance timebox = addAbstractSubGraphArtifact(projectmanagement, "Timebox");

G.link(kernelI.visibility, timebox, product);

Page 22: Multi Level Modelling

Vertex : DomainAnalysis.DomainEngineering

Vertex : ...ProductManagement.UseCaseVertex : DomainAnalysis.ProductLineManagement

Vertex : Development

Vertex : Design

Page 23: Multi Level Modelling

Vertex : DomainAnalysis.DomainEngineering

Vertex : ...ProductManagement.UseCaseVertex : DomainAnalysis.ProductLineManagement

Vertex : Development

Vertex : DesignModel expressed through the Gmodel API

Instance development = addAbstractSubGraphArtifact(domainengineering, "Development"); Instance design = addAbstractSubGraphArtifact(domainengineering, "Design");

G.link(kernelI.visibility, development, design); G.link(kernelI.visibility, design, productlinemanagement); G.link(kernelI.visibility, design, usecase);

Page 24: Multi Level Modelling

Vertex : DomainAnalysis.ApplicationEngineering

Vertex : ...DomainEngineering.DevelopmentVertex : ...DomainEngineering.Design

Vertex : DevelopmentVertex : Design

Vertex : ...ProductManagement.UseCase

Vertex : ...ProductLineManagement.Organization

Vertex : ...ProductLineManagement.ManagedFeature

Page 25: Multi Level Modelling

Vertex : DomainAnalysis.ApplicationEngineering

Vertex : ...DomainEngineering.DevelopmentVertex : ...DomainEngineering.Design

Vertex : DevelopmentVertex : Design

Vertex : ...ProductManagement.UseCase

Vertex : ...ProductLineManagement.Organization

Vertex : ...ProductLineManagement.ManagedFeature

Model expressed through the Gmodel API

Instance appdevelopment = addAbstractSubGraphArtifact(applicationengineering, "App Development"); Instance appdesign = addAbstractSubGraphArtifact(applicationengineering, "App Design");

G.link(kernelI.visibility, appdevelopment, appdesign); G.link(kernelI.visibility, appdevelopment, development); G.link(kernelI.visibility, appdesign, design); G.link(kernelI.visibility, appdesign, usecase); G.link(kernelI.visibility, appdesign, organization); G.link(kernelI.visibility, appdesign, managedfeature);

Page 26: Multi Level Modelling

Vertex : DomainAnalysis.DomainEngineering.Design

Vertex : EntityRelationshipSchema

Vertex : HierarchicalERSchema

Page 27: Multi Level Modelling

Vertex : DomainAnalysis.DomainEngineering.Design

Vertex : EntityRelationshipSchema

Vertex : HierarchicalERSchemaModel expressed through the Gmodel API

Instance entityrelationshipschema = addConcreteSubGraphArtifact(design, "Entity Relationship Schema"); Instance hierarchicalerschema = addConcreteSubGraphArtifact(design, "Hierarchical ER Schema");

G.link(kernelI.visibility, hierarchicalerschema, entityrelationshipschema);

Page 28: Multi Level Modelling

Vertex : DomainAnalysis.DomainEngineering.Design.EntityRelationshipSchema

EdgeEnd : source[*]

EdgeEnd : target[*]

EdgeEnd : owner[1] EdgeEnd : attributes[*]

Edge : relationship

Vertex : Attribute

typeEdge : #

Vertex : Entity

Page 29: Multi Level Modelling

Vertex : DomainAnalysis.DomainEngineering.Design.EntityRelationshipSchema

EdgeEnd : source[*]

EdgeEnd : target[*]

EdgeEnd : owner[1] EdgeEnd : attributes[*]

Edge : relationship

Vertex : Attribute

pluralName = AttributesString : type

Edge : #

Vertex : Entity

Model expressed through the Gmodel API

Instance entity = addConcreteVertex(entityrelationshipschema, "Entity", kernelI.vertex); Instance attribute = addConcreteVertex(entityrelationshipschema, "Attribute", kernelI.vertex);

Instance entity_to_attribute = G.link(kernelI.edge, semanticIdentityFactory.createSemanticIdentity("owner", "owners"), entity, kernelP.minCardinality_1, kernelP.maxCardinality_1, kernelP.isNavigable_TRUE, kernelP.isContainer_TRUE, semanticIdentityFactory.createSemanticIdentity("attribute", "attributes"), attribute, kernelP.minCardinality_0, kernelP.maxCardinality_n, kernelP.isNavigable_TRUE, kernelP.isContainer_FALSE ); Instance entity_to_entity = G.link(kernelI.edge, semanticIdentityFactory.createSemanticIdentity("source", "sources"), entity, kernelP.minCardinality_0, kernelP.maxCardinality_n, kernelP.isNavigable_TRUE, kernelP.isContainer_FALSE, semanticIdentityFactory.createSemanticIdentity("target", "targets"), entity, kernelP.minCardinality_0, kernelP.maxCardinality_n, kernelP.isNavigable_TRUE, kernelP.isContainer_FALSE );

Page 30: Multi Level Modelling

EntityRelationshipSchema : ApplicationEngineering.Design.CustomerRelationshipManagement

Attribute : price

source : products[*]Boolean : isIncorrect

target : orders[*]

owner : owner[1] attribute : prices[*]

relationship : #

type = amtOfMoneyamtOfMoney.usdamtOfMoney.fromamtOfMoney.until

# : #

Entity : Product

Entity : Order

databaseLocation

Page 31: Multi Level Modelling

EntityRelationshipSchema : ApplicationEngineering.Design.CustomerRelationshipManagement

Attribute : price

source : products[*]Boolean : isIncorrect

target : orders[*]

owner : owner[1] attribute : prices[*]

relationship : #

pluralName = pricestype = amtOfMoneyBigDecimal : amtOfMoney.usdBigDecimal : amtOfMoney.fromBigDecimal : amtOfMoney.until

# : #

Entity : Product

pluralName = Products

Entity : Order

pluralName = OrdersString : databaseLocation

Model expressed through the Gmodel API

Instance crm = instantiateConcreteArtifact(design, "CRM", entityrelationshipschema); Instance crm_product = addConcreteVertex(crm, "Product", entity); Instance order = addConcreteVertex(crm, "Order", entity);

Instance product_to_order = G.link(entity_to_entity, semanticIdentityFactory.createSemanticIdentity("product", "products"), order, kernelP.minCardinality_0, kernelP.maxCardinality_n, kernelP.isNavigable_TRUE, kernelP.isContainer_FALSE, semanticIdentityFactory.createSemanticIdentity("order", "orders"), crm_product, kernelP.minCardinality_0, kernelP.maxCardinality_n, kernelP.isNavigable_TRUE, kernelP.isContainer_FALSE ); Instance product_to_price = G.link(entity_to_attribute, semanticIdentityFactory.createSemanticIdentity("owner", "owners"), order, kernelP.minCardinality_1, kernelP.maxCardinality_1, kernelP.isNavigable_TRUE, kernelP.isContainer_TRUE, semanticIdentityFactory.createSemanticIdentity("price", "prices"), crm_product, kernelP.minCardinality_0, kernelP.maxCardinality_n, kernelP.isNavigable_TRUE, kernelP.isContainer_FALSE );

Page 32: Multi Level Modelling

CustomerRelationshipManagement : InstalledApplication.Sofismo

Attribute : price : #

source : products : #[#]isIncorrect = true

target : orders : #[#]

owner : owner : #[#] attribute : prices : #[#]

relationship : # : #

amtOfMoney.usd = 3.5amtOfMoney.from = 2009 04 12amtOfMoney.until = 2009 12 31

# : # : #

Entity : Product : #

Entity Order : #

databaseLocation = Lenzburg

Page 33: Multi Level Modelling

Language Extension Example

Page 34: Multi Level Modelling

Vertex : DomainAnalysis.DomainEngineering.Design.HierarchicalERSchema

EdgeEnd : source[*]

Edge : relationship

Vertex : RootEntity Vertex : ChildEntity

EdgeEnd : target[1]

Edge : relationship

EdgeEnd : source[*]isNavigable = false

Edge : relationship

EdgeEnd : source[0]isNavigable = false

EdgeEnd : target[*]

Vertex : Entity

EdgeEnd : target[0]