Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 Modell/Metamodell Model Andreas Schmidt Generator Generated Source Code Modellierung 1/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 Modell • Modell beschreibt die zu generierende Anwendung • Modell ist ... • abstrakt • kompakt • formal • Modell kann in unterschiedlichen Notationen vorliegen: • textuell • graphisch • XML • API-Aufrufe • ... Andreas Schmidt Modellierung 2/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 Metamodell • Begriff „Meta“ kommt aus dem grischichen und bedeutet „über“ • Metamodelle sind Modelle, die etwas über Modellierungen aussagen. • Ein Metamodell legt die Konstrukte der Modellierungssprache (Objekte, Beziehungen, Constraints, ...) fest. • Jede formale Sprache (Java, SQL, UML, Postscript, ...) besitzt ein Metamodell. • Metamodell und Modell stehen in Klasse - Instanz Beziehung zueinander, d.h. jedes Modell ist Instanz ihres Metamodells • Metamodell beschreibt die Struktur des Modells Andreas Schmidt Modellierung 3/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 Beispiele zu Model/Metamodell • Beispiele: • Ein XML-Schema oder eine DTD bildet das Metamodell zu einem, entsprechend diesem Schema/DTD gültigen, XML-Dokument • Die BNF (Backus Naur Form) ist eine Metasprache für die Beschreibung der Syntax von Programmiersprachen, d.h. die BNF Beschreibung der Sprache Java ist eine Instanz der BNF. • Eine in BNF vorliegende Beschreibung der Sprache Java ist ein Metamodell der Sprache Java. • Ein Objektnetz das während eines Programmablaufs erzeugt wurde ist eine Instanz der für dieses Programm definierten Klassen. • Das UML Diagramm/ER-Diagram repräsentiert ein Modell einer Anwendung Andreas Schmidt Modellierung 4/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 Metamodellierung/Metamodelle • und wie lege ich die Struktur der Metamodelle fest ? => (Meta-) Metamodell • Modellierungsebenen (nach OMG, MOF): M0: Instanzen M1: Modell M2: Metamodell Typ: Stadt ID: 64647 Name: Karlsruhe Einwohner: 276543 Typ: Klasse ID: 8725811 Name: Stadt Attribute: Name, Einwohner Operationen: ... Beziehungen: ... Typ: Classifier ID: 64647 Name: Klasse Features: Attributes, Operationen, Beziehungen M3: MetaMetamodell beschreibt ist Instanz von Andreas Schmidt Modellierung 5/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 Modell (ER-Notation) jahr id spielt_mit <0,n> <0,n> Film Person <1,1> titel Andreas Schmidt id name regisseur <0,n> vorname Modellierung 6/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 andere Notation des selben Modells <?xml version="1.0"?> <!DOCTYPE my-model SYSTEM "my-meta.dtd"> <my-model> <class name="Person"> <attribute name="id" primary-key="true" type="integer" length="10"/> <attribute name="name" type="varchar" length="30"/> <attribute name="vorname" type="varchar" length="30"/> </class> <class name="Film"> <attribute name="id" primary-key="true" type="integer"/> <attribute name="titel" type="varchar" length="120"/> <attribute name="jahr" type="date"/> </class> <association name="regisseur"> <association-end class="Person" role="regisseur" min="1" max="1"/> <association-end class="Film" role="directed_film"/> </association> <association name="spielt_mit"> <association-end class="Person" role="schauspieler"/> <association-end class="Film" role="film"/> </association> </my-model> Andreas Schmidt Modellierung 7/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 DTD repräsentiert Metamodell <!ELEMENT my-model (class+, association*)> <!ELEMENT class (attribute+)> <!ATTLIST class name ID #REQUIRED> <!ELEMENT association (association-end, association-end)> <!ATTLIST association name CDATA #REQUIRED> <!ELEMENT association-end EMPTY> <!ATTLIST association-end class IDREF #REQUIRED role CDATA #REQUIRED min CDATA "0" max CDATA "*"> <!ELEMENT attribute EMPTY> <!ATTLIST attribute name CDATA #REQUIRED primary-key (true|false) #IMPLIED type (date | integer | varchar | double | number) #REQUIRED length CDATA #IMPLIED> Andreas Schmidt Modellierung 8/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 Frage: wie lautet das Metamodell des ER-Modells ? Andreas Schmidt Modellierung 9/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 was soll unser Modell ausdrücken können ? • • • • Andreas Schmidt Entitäten Attribute Typen Beziehungen zwischen Klassen • Kardinalitäten • Beziehungsenden • Rollenbezeichner Modellierung 10/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 Metamodell (ER-Notation) name name <1,n> <1,1> Entität Attribut name <1,1> <0,n> Typ <0,n> <1,1> <1,1> Beziehungsende rolle Andreas Schmidt min max <2,2> Beziehung name Modellierung 11/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 Repräsentation des Modells • Externe Repräsentation des Modells • Text • XML • Graphische Notation • Aufrufe von Methoden einer API • Interne Repräsentation des Modells • Text („on-the-fly“ Extraktion, z.B. durch reguläre Ausdrücke) • XML (nur für XSLT Transformation) • XML DOM Tree/SAX • Komplexe Datenstruktur (geschachtelte Arrays/Dictionaries) • Komplexes Objektnetz Andreas Schmidt Modellierung 12/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 Metamodel API • class MetaModel • Methods • class MetaClass • Methods MetaAttribute function addAttribute($name, $type, $len="", $is_primary_key=false) MetaRelation function addRelationEnd($role, $type, $min=0, $max="1", $name=null) MetaModel static function createModel($name) MetaClass function addClass($name) MetaRelation function addRelation($name) function setDate($value) function setSource($value) • Properties classes: array of MetaClass relations:array of MetaRelation name : string source : string date : string Andreas Schmidt • Properties name : attributes : relations : primary_key: model : string array of MetaAttribute array of MetaRelationEnd MetaAttribute MetaModel Modellierung 13/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 • class MetaAttribute • Properties name : type : length : class : is_primary_key : • class MetaRelation • Methods string MetaType integer MetaClass boolean • class MetaRelationEnd • Properties role type min max class relation_name Andreas Schmidt : : : : : : string MetaClass integer integer MetaClass string addRelationEnd($rel_end) • Properties name:string model:MetaModel relation_ends:array of MetaRelationEnd • class MetaType • Methods boolean static function is_primitive_type($type_name) • Properties name : string Modellierung 14/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 Beispiel für den Aufbau eines Modells <?php include_once 'meta-model.php'; $model = MetaModel::createModel('Film DB'); $film = $model->addClass('Film'); $person = $model->addClass('Person'); cardinality primary key $person->addAttribute('id','Integer',10, true); $person->addAttribute('surname','String',30); $person->addAttribute('first_name','String',30); $person->addAttribute('birthday','date'); $person->addRelationEnd('directed_films', 'Film',0, ’*’, "directs"); $film->addAttribute('id', 'Integer',10, true); $film->addAttribute('title', 'String',50); $film->addAttribute('year', 'date'); $film->addRelationEnd('director', 'Person',0 ,1, "directs");); indicates that both ends belong to the same relation ?> Andreas Schmidt Modellierung 15/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 Beispiel in UML-Notation Andreas Schmidt Modellierung 16/18 Fakultät IWI MDSD - SS 2014 Accessing a Modell via Properties • File api-access-example.php <?php include_once 'api-model-example.php'; print "Model $model->name\n"; foreach ($model->classes as $class) { echo "$class->name with primary key "; echo "(".$class->primary_key->name.")\n"; foreach ($class->attributes as $att) { echo " - [A] $att->name ".$att->type->name." $att->length "; echo ($att->is_primary_key?"[PK]":"")."\n"; } foreach ($class->relations as $rel) { echo " - [R] $rel->role --($rel->min/$rel->max)-->"; echo $rel->type->name."\n"; } print "\n"; } ?> • Output $ php api-read-access-example.php Model Film DB Person with primary key (id) - [A] id Integer 10 [PK] - [A] surname String 30 - [A] first_name String 30 - [A] birthday date - [R] film --(0/-1)-->Film Film with primary key (id) - [A] id Integer 10 [PK] - [A] title String 50 - [A] year date - [R] director --(0/1)-->Person Andreas Schmidt Modellierung 17/18 Fakultät für Informatik und Wirtschaftsinformatik MDSD - SS 2014 API-basiertes Metamodell: Eigenschaften • Modell wird durch Objektnetz repräsentiert • Methodenaufrufe erstellen internes Modell • Vorteile: • Die API ist einfach zu benutzen • Zusätzliche Methoden (oder Unterklassen) erlauben die Implementierung ... • von Verifikations-Methoden zur Sicherung der Modellkonsistenz • von Transformations-Methoden zum Anreichern oder Transformieren des Modells • von zusätzlichen Hilfsmethoden zur Unterstützung der Transformation/Codegenerierung für bestimmte Plattformen • Die Modellinformationen können durch Navigation entlang den Properties/Methoden des Objektmodells extrahiert werden. Andreas Schmidt Modellierung 18/18