Modell/Metamodell

Werbung
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
Herunterladen