Post on 01-Dec-2014
description
Multi-Level Modellingprecise | role based | modular | simple
A typical problem
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)
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)
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?
The solution
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
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
The technology
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
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
Examples
Vertex : DomainAnalysis
Vertex : DomainEngineering
Vertex : ApplicationEngineeringVertex : ProductManagement
Vertex : ProjectManagement
Vertex : ProductLineManagement
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);
Vertex : DomainAnalysis.ProductLineManagement
Vertex : Organization
Vertex : System
Vertex : ManagedFeature
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);
Vertex : DomainAnalysis.ProductManagement
Vertex : ...ProductLineManagement.ManagedFeatureVertex : ...ProductLineManagement.Organization
Vertex : Product
Vertex : ProductFeedback Vertex : UseCase
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);
Vertex : DomainAnalysis.ProjectManagement
Vertex : ...ProductManagement.Product
Vertex : Timebox
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);
Vertex : DomainAnalysis.DomainEngineering
Vertex : ...ProductManagement.UseCaseVertex : DomainAnalysis.ProductLineManagement
Vertex : Development
Vertex : Design
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);
Vertex : DomainAnalysis.ApplicationEngineering
Vertex : ...DomainEngineering.DevelopmentVertex : ...DomainEngineering.Design
Vertex : DevelopmentVertex : Design
Vertex : ...ProductManagement.UseCase
Vertex : ...ProductLineManagement.Organization
Vertex : ...ProductLineManagement.ManagedFeature
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);
Vertex : DomainAnalysis.DomainEngineering.Design
Vertex : EntityRelationshipSchema
Vertex : HierarchicalERSchema
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);
Vertex : DomainAnalysis.DomainEngineering.Design.EntityRelationshipSchema
EdgeEnd : source[*]
EdgeEnd : target[*]
EdgeEnd : owner[1] EdgeEnd : attributes[*]
Edge : relationship
Vertex : Attribute
typeEdge : #
Vertex : Entity
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 );
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
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 );
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
Language Extension Example
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]