// This example refers to Figures 2, 4, 5 and 6 of 'The Dagstuhl Middle Metamodel: // A Schema for Reverse Engineering', ATEM 2003, First International // Workshop on Meta-Models and Schemas for Reverse Engineering, // WCRE, Victoria, B.C., in Electronic Notes in Theoretical Computer // Science, Elsevier, Vol. 94, pp 7-18, // Authors: Lethbridge, T.C., Sander Tichelaar, and Erhard Ploedereder (2003) // To load the entire DMM example at once, copy and paste all // five DMM components (DMM*) into the editor. Please note that the // position attributes of classes and associations will need to be // re-adjusted, as the example has been made to display the diagrams // as separate entities. class ModelElement{ visibility; } class StructuralElement{ isA ModelElement; } class BehaviouralElement{ isA ModelElement; } class Invokes{ * invoked -- 1 BehaviouralElement invokes; * invokes -- 1 BehaviouralElement invoked; } class Accesses{ * -- 1 BehaviouralElement; * -- 1 StructuralElement; } class Package{ isA ModelElement; * -- 0..1 Package isSubpackageOf; } class Contains{ * contains -- 1 Package partOf; 0..1 -- 1 ModelElement; } class Type{ isA StructuralElement; } class IsDefinedInTermsOf{ * definesBy -- 1 Type definedBy; * definedBy -- 1 Type definesBy; } class Value{ isA StructuralElement; } class IsOfType{ 0..1 -- 1 Value; * -- 1 Type; } class EnumerationLiteral{ isA Value; } class IsEnumerationLiteralOf{ 1..* -- 1 EnumerationLiteral; * -- 1 EnumeratedType; } class Variable{ isA Value; 0..1 -- 0..1 Value hasValue; } class Property{ isA Variable; 1 -- 1 MethodInProperty; } class MethodInProperty{ isA Method; } class EnumeratedType{ isA Type; } class CollectionType{ isA Type; size; } class StructuredType{ isA Type; } class Field{ isA Variable; } class IsFieldOf{ 1 -- 1 Field; * -- 1 StructuredType; } class FormalParameter{ isA Variable; pos; } class IsParameterOf{ 1 -- 1 FormalParameter; * -- 1 BehaviouralElement; } class Class{ isA StructuredType; isSubclassable; } class InheritsFrom{ 1 transmits -- * Class inherits; 1 inherits -- * Class transmits; } class Imports{ * -- 1 Package; * -- 1 Class; } class ExecutableValue{ isA BehaviouralElement; } class Method{ isA BehaviouralElement; Boolean isConstructor; Boolean isDestructor; Boolean isAbstract; Boolean isDynamicallyBound; Boolean isOverideable; } class IsMethodOf{ * -- 1 Class methodOf; 0..1 -- 1 Method hasMethod; } class Routine{ isA BehaviouralElement; } //$?[End_of_model]$? //Positioning class Method { position 678 455 216 128; } class Class { position 21 527 172 56; } class ModelElement { position 359 11 129 58; } class FormalParameter { position 546 457 109 58; } class CollectionType { position 119 312 109 58; } class BehaviouralElement { position 720 119 117 60; } class EnumerationLiteral { position 364 332 131 41; } class Routine { position 666 329 109 41; } class ExecutableValue { position 803 330 131 46; } class Field { position 318 457 109 41; } class StructuredType { position 52 384 109 41; } class EnumeratedType { position 188 381 109 41; } class Variable { position 506 331 109 41; position.association 0 79,0 106,41; } class Value { position 479 204 109 41; } class Type { position 152 204 109 60; } class Package { position 28 113 108 60; } class StructuralElement { position 318 126 133 41; } class Property { position 432 457 109 41; position.association 0 55,41 0,20; } // Association classes class Accesses { position 508 127 109 41; position.association 0 109,10 0,18; position.association 1 0,10 133,11; } class Invokes { position 800 17 109 41; position.association 0 4,41 84,0; position.association 1 26,41 106,0; } class Contains { position 24 14 109 41; position.association 0 24,41 20,0; position.association 1 109,23 0,26; } class IsOfType { position 295 205 109 41; position.association 0 109,10 0,11; position.association 1 0,4 109,56; } class Imports { position 6 226 109 41; position.association 0 62,0 40,60; position.association 1 26,41 11,0; } class IsDefinedInTermsOf { position 154 110 135 41; position.association 0 38,41 40,0; position.association 1 10,41 12,0; } class IsParameterOf { position 603 203 109 41; position.association 0 70,0 0,56.5; position.association 1 70,0 0,60; } class IsEnumerationLiteralOf { position 260 269 135 41; position.association 0 90,41 0,30; position.association 1 28,41 100,0; } class IsFieldOf { position 141 477 109 41; position.association 0 109,10 0,30; position.association 1 10,0 99,41; } class IsMethodOf { position 363 551 109 41; position.association 0 0,10 172,34; position.association 1 109,10 0,106; } class InheritsFrom { position 50 610 109 41; position.association 0 0,30 0,56; position.association 1 109,30 172,56; } class MethodInProperty { position 740 630 132 49; } class Student { } class Mentor { } class Mentor { position 60 160 109 41; } class Student { position 100 100 109 41; } class Student { } class Student { position 60 60 109 41; } class Mentor { } class Mentor { position 60 160 109 41; } class Student { } class Mentor { } class Course { } class Student { position 60 60 109 41; } class Mentor { position 60 160 109 41; } class Course { position 60 260 109 41; } class Student { } class Student { position 138 153 109 41; } class A { class B { } } class A { position 60 60 109 41; } class B { position 60 160 109 41; } class A { class B { } } class B { position 60 160 109 41; } class A { position 60 60 109 41; } class Student { } class Student { name; } class Student { position 50 30 109 41; } class A { class B { } } class A { position 60 60 109 41; } class B { position 60 160 109 41; } class Student { } class Mentor { } associationClass Course { * Student; * Mentor; } class Student { position 50 30 109 41; } class Mentor { position 50 130 109 41; } class Course { position 50 230 109 41; } class Student { } class Mentor { } associationClass Course { * Student; * Mentor; } class Student { position 50 30 109 41; } class Mentor { position 50 130 109 41; } class Course { position 50 230 109 41; }