Wir haben schon ganz viel darüber gesprochen, wie Modellierungssprachen
aufgebaut werden sollen zuletzt, wie sie erweitert werden sollen.
Und wir hatten schon mehrfach den Begriff Meta-Modell. Nun also
, was ist ein Meta-Modell? Wie geht man damit um
? Ein Meta-Modell ist zunächst erstmal so was ähnliches wie,
oder überhaupt so was wie die Grammatik eines Modells.
Das sollten wir durchaus einfach mit aufschreiben, auch wenn eine
Modellierungssprache Sowie eine Programmiersprache ebenfalls, Syntax und Semantik hat.
Sie sehen das hier weiter unten, Syntax und Semantik.
So ist das Meta-Modell, die Grammatik einer Modellierungssprache.
Das ist letztlich das Gleiche. Das Meta-Modell beschreibt,
wie Modelle aufgebaut werden kann,
sie sollen und damit auch die mögliche Struktur, ihre Elemente,
ihre Konstrukte und was für Regeln habe ich dabei einzuhalten.
Sie definiert dabei
die abstrakte Syntax
Ich sag gleich noch, warum es noch ein konkretes schönen Tag gibt.
Sie definiert, welche Metamodell-Elemente, welche Modellelemente,
Elemente der Modellierungssprache dann existieren, wie die zueinander in Beziehungen sind.
Um zu sagen, konkreter Abstrakte,
zum Beispiel in der Programmiersprache Java,
gibt es durchaus Klassen und die Klassen haben einen Namen und Klassen können etwas erben.
Das wäre die abstrakte Syntax. Die konkrete Syntax wäre,
es gibt das Schlüsselwort Klaas und die Basisklasse
wird mit Extenz angehängt
Das wäre also, dass man, das sind textliche Bezeichnungen nimmt,
um Klaas, das wäre dann die konkrete Syntext.
Genauso ist das hier, das Metamodell-Element wird erstmal definiert.
Es gibt es halt die und die Bedeutung oder so und so steht es im Zusammenhang.
Und ob es konkret grafisch so aussieht oder textuell so dargestellt
wird, das wäre dann die konkrete Syntax.
Für die Semantik, so haben wir eine statische Semantik,
Semantik aufgrund der Regeln der Programmiersprache und damit beschreiben wir,
wann ist ein Modell korrekt.
Der Theoretiker, der Mathematiker, der Sprachwissenschaftler sagt, well formed,
wo er geformte Modelle und das drücken wir durch Konstreens aus.
Konstreens sind Bedingungen, die immer Geld sind müssen. Die sind,
laufen auf einem bullischen Ausdruck hinaus, entweder wahr oder falsch, erfüllt oder verletzt.
Ein bisschen erfüllt gibt es da nicht. Ja,
also diese Bedingungen, dass die Sprache,
die sprachlichen Ausdrücke den Vorschriften entsprechen, das wäre,
würde ich durch Konstrains darstellen,
das wäre gleichzeitig die letzte Frage hier von diesen Wiederholungsfragen,
die kann ich dann auch bei der, die sagen,
ob das Modell gültig ist,
die kann ich
da auch wieder verwenden
Ja, so, die beziehen sich immer auf die Abstrakte des Syntax.
Also die sagen, eine Klasse muss, kann von einer anderen Klasse erben,
aber nur von einer, zum Beispiel in Java.
Das wäre eine solche Prüfung, ein solcher Bezug.
Und in der Programmiersprache würde das typischerweise durch einen Compiler geprüft.
Das ist sehr gut, wenn wir solche konstruent solche Regeln haben,
dass wir Prüfungen frühzeitig durchführen, wenn wir etwas modellieren,
dass wir gleich merken, oh, da stimmt was in unserem Modell nicht.
Bevor wir irgendwo etwas damit machen wollen
Ja, diese Konstrains für die Modellveder Validierung sagen,
ob ein Modell gültig ist.
Ja, zum Beispiel in der UML gibt es die Komponente,
die unterscheiden sich von der Klasse. Ja, die Klasse,
der hat dann ein Stereotyp zum Beispiel Component und dieses grafische Stereotyp,
was aussieht wie so ein kleiner Stecker.
Und eine UML-Komponente darf zum Beispiel keine Attribute haben.
Das ist eine Bedingung, die spricht für die Gültigkeit
einer Komponente und das ist etwas,
was ich als konstraint formulieren kann
Damit ist es möglich, wenn ich solche Konstruenz benutze,
für die Bordmodellierungssprache, dann ist es möglich, effizienter zu entwickeln,
weil ich frühzeitig Fehler merke, beziehungsweise Fehler auch zu vermeiden.
Das wäre im Editor abzulegen, der Editor würde
dann gleich meckern, wenn ich da irgendwas falsch mache.
Ich kann also während der Eingabe eine Prüfung einstoßen.
Oder ich mache das erst im Bildprozess und da brauche ich diese Information auch.
Ich kann so etwas wie ein Transformator oder Generator oder Interpreter verwenden,
der das Modell auswertet,
umformt und damit beim Einlesen und Verarbeiten des Modells, diese Konstrenz,
die Einhaltung der Prinzdrenz und damit die Gültigkeit des Modells prüft.
Es ist sehr wichtig, dass die Constraints immer die gleiche Implementierung als Basis haben.
Sonst haben wir irgendwelche Sonderfälle, die dann von dem einen
abgedeckt werden und vom anderen nicht. Das wäre ja ganz dumm,
wenn sie mit ihrem, sie zwar Code-Generierung haben,
und sie können auch etwas entwerfen und zeichnen, visualisieren alles wunderschön.
Dummerweise funktioniert es nicht, wenn wir Code draus erzeugen wollen,
obwohl es eigentlich eine Code-Erzeugung gibt.
Das heißt, diese Implementierung, Und das muss hier aus
einer Richtung kommen. Beispiel Open Architecture Ware,
dort habe ich direkt eine Delaratie, ist ein Werkzeug,
was wir zum Modellieren, für die Generierung benutzen können.
Da habe ich eine deklarative Formulierung solcher Constraints in der Sprache check.
Ja, jetzt, was ist ein Meta-Modell? Das ist ein Bild,
das wird ganz beliebt zum Einstieg genommen in die Prüfung.
Zunächst erstmal könnte ich das so sagen,
ein Meta-Modell beschreibt ein Modell,
ein Meta-Modell gibt Elemente des Meta-Modells wieder
Was ist dann ein Modell? Naja, ein Modell ist
zum Beispiel ein grafischer oder textliche Beschreibung der realen Welt.
Und die reale Welt, das sind dann eben zum Beispiel
Instanzen, Objekte der realen Welt. Die Objekte der realen
Welt oder Objekte einer Domäne werden durch das Modell beschrieben,
also in umgekehrt Richtung Werten beschrieben, werden definiert.
Und wenn mir hier mal ein Beispiel angeben wollen,
da könnte als Objekt der realen Welt Christiane Schmidt gelten,
ein Mensch, eine Person.
Und wenn ich davon, wenn ich die in irgendeiner Form modellieren möchte.
Nehmen wir mal an, der Name und der Vorname reichen uns aus.
Da müssen wir, okay, das ist bezeichnet diese reale Person und mehr brauchen wir nicht.
Und wenn wir dann noch eine Ebene höher gehen auf dem Meta-Modell,
sagt er uns,
das steht nichts mehr von Christiane und Schmidt und auch nicht mehr,
was sie für einen Namen hat oder irgendwas,
das steht nur, es gibt Klassen, die haben als Tribute.
Und sie haben eine Operation, die wir gerade nicht brauchen.
Aber mehr steht hier nicht. Das heißt,
auf der Meta-Modell-Ebene habe ich keine Informationen mehr aus der Instanz.
Hier habe ich auch keine aus der Instanz,
aber den Typ der Elemente aus der Instanz
So, soweit zum Meta-Modell und zum Modell. Und nun könnte
die Frage auftauchen, naja, was ist denn nun ein Meta-Modell?
Und damit das klar beantwortet werden kann,
hat die OMG eine weitere Ebene definiert, dass Meta-Meta-Modell.
Das sieht also am Ende genauso aus, wie wir es hatten.
Es gibt hier noch Zahlen dazu. Also M0 ist die Ebene
der Instanzen. Im Eins ist die Ebene des Modells,
in zwei, das Meta-Modell M3, das Meta-Meta-Modell.
Also das Modell, die reale Welt ist eine Instanz des Modells.
Das Modell ist eine Instanz des Meta-Modells. Also wir wissen
, ändern uns ja hier Grammatik, war das.
Also das Modell ist ein konkretes Ausprägung dieser,
etwas mit dieser Grammatik gebaut ist.
Ja, und das Meta-Modell, das enthält die grammatikalischen Elemente.
So, und das selber gibt es nicht nochmal oben drüber.
Also Meta-Meta-Meta-Modell gibt es nicht. Es gibt nur Meta-Meta.
Also zweimal gibt es und mehr gibt es nicht.
Die OMG hat gesagt, hier ist Schluss.
Es gibt immer mal wieder Wissenschaftler, die der Meinung sind,
ich möchte noch eine Ebene erfinden.
Nein, sollte nicht sein. Die OMG hat gesagt,
das sollte hier erreichen
Und tatsächlich reicht es auch. So,
jetzt als Beispiel, ja, wieder Christiane Schmidt,
dann hat das auf dieser Ebene eine ID,
auf dieser Ebene ist es eine Klasse, mit Personenname,
Vorname,
auf dieser Ebene ist die Klasse schon der Bezeichnung des Elements und der Typ ist einfach nur classy fire.
Ja, und es gibt Attribute, aber das ist nicht klar,
welche Attribute das sind auf der Ebene.
Das kann man sagen, hier geht es ja um die
Grammatik der Sprache. Die Grammatik sagt, es gibt Klassen,
Punkt, was du da einträgst, ist deine Sache.
Und die nächst höhere Ebene wäre die Grammatikbeschreibung.
Hier gibt es also einfach nur Classy fire
Soweit die OMG-Elemente. Sie sollten in der Lage sein,
das zu erklären in dieser und in dieser Richtung.
Und sie sollten in der Lage sein, ein Beispiel zu geben.
Und das wäre hier ein mögliches Beispiel. Ja, diese
Modellebenen stellen eine Abstraktion dar. Ja, soweit haben wir
das ja gesagt. Jedes ist abstrakter als das Vorgehende.
Ich hatte gesagt, es sind auch viele Informationen weg.
Aber wir müssen trotzdem unterscheiden, was ist eine Abstraktion?
Und was ist eine Meta-Beziehung? Das Meta-Modell definiert Konzepte,
aber dass
die Abstraktion verallgemeinert
Und das ist nicht das Gleiche.
Häufig vereinigt der Männer die Abstraktion bezüglich der technischen Realisierung,
aber es gibt auch andere Verallgemeinerungen, die man machen könnte.
Zum Beispiel in fachlicher Hinsicht. Ja, so,
nun gibt es einen Besonderfall, darauf möchte ich mal darauf hinweisen,
dass sie da nicht in die Falle tappen.
Man hat für modellgetriebene Entwicklung häufig, denen freundet man manchmal
den Ausdruck, projektspezifisches und Projekt unabhängiges Modell.
Ich schreibe das mal hier dran, damit das hier klar wird.
Oder steht es auf der nächsten Folie?
Nein, steht es nicht
PSM Project, Specific. Modeln, per EM, Project Independent Modeln. So,
diese beiden Begriffe sind das die hier drin,
auftauchen und Hier würde man jetzt sagen, ja,
das braucht man, ach so,
vielleicht wollte ich noch kurz erklären, was PM und PSM ist.
Man benutzt das in der Modellgetriebenen, modellgetriebene Entwicklung. Und
da hätte man das PEM, ist dann das Modell,
was die Anforderungen zum Beispiel beschreibt und sagt,
ich möchte den und den Workflow, ganz unabhängig, wie ihr den implementiert.
Während das Projekt spezifische Element wäre, würde dann den Workflow implementieren,
zum Beispiel mit Programmcode oder mit der Aufruf von Aufruf von Services oder so etwas.
Und da kann man natürlich sagen, das Projekt spezifische Modell,
Ist konkreter als das Projekt Unabhängige, nämlich in diese Richtung geht es abstrakt.
Nun können Sie aber auch noch sagen, ja,
wie ist denn das mit abstrakt,
das Meta-Modell ist ja abstrakter als das Modell.
Und da sagt er, es ist besser,
die Sprache Meta hierfür zu verwenden für diese Beziehung.
Nein, das ist nicht automatisch abstrakter, es ist einfach eine andere Darstellung.
Es ist die Grammatik, die ich hier darstelle. Also insofern Meta,
während das die Abstraktion ist und deswegen diese Unterscheidung,
ja, das Meta-Modell definiert Konzepte,
definiert die Grammatik und die Abstraktion
lässt Details weg
Soviel zu diesen Ebenen. Nun der Begriff Moph,
den hatte ich schon mal gebraucht vorher. Ich möchte Ihnen
den kurz nahe bringen. Worum geht es dabei? Moph
steht für Meta-Object Facility. Das ist eine Möglichkeit mit Meta-Modellen umzugehen.
Das gehört zum Umfeld von Eclipse, dem Eclipse Modelling Framework.
Dort wird es unterstützt. Und hier können wir das so machen,
wenn wir nochmal diese drei Ebenen, diese Meta-Modell-Ebenen hier haben,
M1, M2, M3, Er würde da so aussehen,
dass im Eins ist ein konkretes Modell mit dieser Juliane Richter oder wie sie eben hieß.
Ja, wir haben konkret ein Objekt, was wir dort modellieren.
Und das ist eine Instanz des UML-Meta-Modells,
weil es natürlich im Moment Klassenliga kaum verwenden,
ist es ein, folgt sie der Grammatik.
Ja, also das wirkliche UML-Modell folgt der Grammatik.
Auf der Ebene M2 wird mit der Hilfe des Meta-Modells
die Modellierungssprache festgeschrieben, dargestellt.
Nämlich, das ist dann wieder
diese Grammatik
Und sie stellt eine Instanz von diesem Mofter. Ja,
und die Mofice, das Meta-Meta-Modell, das hier als Beschreibung,
dienen für UML, für Babyman oder manche andere Sachen.
Und das wiederum beschreibt sich selber, das ist dieser Pfeil,
den wir hier oben gesehen hatten, da gibt es nichts Höheres.
Ja, so und jetzt,
dass wir das hier unten nochmal sehen, ja,
also ich habe hier eine Klasse und die Klasse der UML,
die irgendwie etwas beschreibt und das ist eine Instanz von Mof
Und wenn ich hier noch eine Metaklasse einführe,
wäre das auch eine Instanz von Moff.
Ja, wir hatten gesagt, UML kann erweitert werden.
UML hat die Erweiterungsmöglichkeiten eingebaut, die Stereotype umfassen,
Tech Values und Constraints zusammengefasst zu Profilen.
Diese Profile können dazu genutzt werden, die UML zu erweitern.
Ich bin hier mal zurückgesprungen zu den Folien von Kapitel 5.
Da hatten wir diese Erweiterungsmöglichkeiten, der UML dargestellt und hatten
gesagt, das sind die leichtgewichtigen Erweiterungen.
Und dann gibt es noch die schwergewichtigen Erweiterungen,
die Erweiterung des Meta-Modells. Und tatsächlich ist das so möglich,
dass ich das UML-Meta-Modell für eine Domäne erweitere, um etwas Besonderes.
Also das könnte für UTP sein, UML-Testing Profile oder die für SisML.
Jeweils habe ich ein erweitertes Meta-Modell, das ich dann machen kann,
um ein spezifisches Modell für irgendeine Domäne hier zu schreiben.
Das wäre möglich
Ja, so viel zu den UML und zu dem Meta-Modell
und tatsächlich gibt es auch eine Implementierung,
eine Tunununterstützung für so eine, für dieses Moph.
Und zwar ist das das Eclipse Modelling Framework.
Das Eclipse Modelling Framework hatten wir schon im letzten Abschnitt im
letzten Kapitel, im Kapitel 10 kurz besprochen.
Da hatte ich Ihnen gezeigt, dass wir für einen,
für diese Zusammenfassung mit einem gemeinsamen Repository hier EMF Store,
das war auf der Basis Eclipse Modelling Framework
Und dieses Eclipse-Modelling-Framework ist, ist ein Basis,
ist die Basis in Eclipse für viele Modellierungswerkzeuge in der Eclipse-Welt.
Und hier gibt es auch eine Implementierung für das Meta-Meta-Modell,
nämlich mit E-Coor-Dateien, mit E-Coor-Dateien kann ich eine Modellierungssprache,
die Syntax und Semantik, nämlich die Grammatik beschreiben.
Und diese E-Coor-Datei enthält also die Meta-Modellelemente und die Beziehungen in XML.
Und ich kann mit einem Generator daraus Java-Klassen erzeugen
Das hilft mir, Datenaustausch zu erreichen. Ich habe eine generische Schnittstelle,
Dynamic EMF, wo ich Modelle einlesen kann, wo ich Modelle erzeugen kann.
Viele Werkzeuge sind dafür vorhanden, mit denen ich da arbeiten könnte,
aus dem Stand heraus, mit Eclipse,
dem Eclipse Modelleing Framework als Modellierungsumgebung und ICO als Austauschformat für die Grammatiken.
Ja, und im Wesentlichen müsste ich mich dann auf die,
was es Java festlegen, wenn ich nur mit Java arbeite,
ist alles gut.
Ich bin in der Umgebung von Eclipse und natürlich ist XML
die Ausdrucksform
Und auch das UML-Meter-Modell oder OML2-Meter-Modell ist tatsächlich als E-Coore-Meter-Definition vorhanden.
Und das kann man gut nutzen, um verschiedene UML-Versionen von
verschiedenen Herstellern zusammenzufassen und damit das proprietäre loszuwerden.
Natürlich finden ihn dann auch Informationen, Besonderheiten, Fragen der Anordnung.
Und damit ist UML in den EMF-Werkzeugen verfügbar und ich brauche nicht
externen Transport. Und das ist dann auch Basis dafür,
dass ich kompatible Datenmodelle in komplibibler Weise übertragen kann,
an andere Werkzeuge
Ja, um das noch für eine andere Welt darzustellen,
möchte ich mal das Ganze in Java nochmal darstellen.
Wie würde denn das diese Hierarchie von Elementen, die wir hier hatten,
wie würde denn das in der Programmiersprache Java aussehen? Tatsächlich wäre es dann so,
dass das Meta-Modell die Grammatik der Programmiersprache ist,
nämlich wo ich sage, was kann ich denn da machen,
die tatsächliche, die tatsächlichen Instanzen sind dann Objekte,
ja, und das Meta-Meta-Modell Ist überhaupt die Frage,
dass wir überhaupt ein Objekt orientierte Programmiersprache haben?
Das wäre dadurch möglich, dass sich Klassen zum Beispiel als Beans gestaltet,
damit kann ich sie flexibel einsetzen und kleine Meta-Modelle könnte ich damit darstellen.
Also es wäre damit möglich, ohne Eclipse, Klassen, Java-Klassen benutzen, um dieses Modellelement zu tragen.
Indem wir eben für jedes Meta-Modellelement eine Klasse bilden, diese Klassen tragen dann,
stellen dann das da, was hier im Eclipse-Meta-Modell-Element,
nein, ich habe jetzt gerade nicht das richtige Beispiel,
da gehen wir mal zu dem Nein, wir gehen zu dieser Folge,
wo wir hier oben die Elemente an der Grammatikbeschreibung haben,
hier die Grammatik selber ausdrücken und hier ein konkretes,
ein tatsächliches Modell darstellen.
Und diese Darstellung könnte ich mit UML,
mit Java eben so machen, dass ich für jedes Meter,
für jedes Metamodell-Element eine Klasse schaffe und für jedes,
wo ich das für die Klasse,
wo das wirklich in einem Modell vorkommt,
da nehme ich dann ein Objekt dieser Klasse.
Also bitte nicht gegenüber, nicht verstellen mit realer Welt und so weiter,
sondern hier geht es nur darum,
kann ich ohne EMF auch eine Modellierungssprache beschreiben, mit diesem Meta-Modell-Ebenen.
Das wäre halt auf diese Weise hier möglich. Das könnte
ich so implementieren, dass ich zum Beispiel Java Beans nehme.
Jede Klasse ist in einer Biene und dann könnte ich das gut nutzen,
um relativ kleine Modell-, mit der Modellelemente zu handhaben.
Ich kann das über die IDE bearbeiten. Ich brauche keine
extra Werkzeuge. Ich kann es einfach durch Funktionalitätende erweitern,
indem ich diese Klassen, die ich hier habe, mit Hilfsmethoden anreichern.
Ja, und ich kann daraus ein Meta-Modell generieren,
genauso wie ich das bei EMF mit E-Coa mache,
würde ich es hier aus dieser Klasse halt machen.
Soweit zum ersten Einheit, hier machen wir kurz Pause
und machen mit dem nächsten weiter