Model Editor

Modellierung ganz individuell nach den eigenen Vorstellungen und Erfordernissen. Diese Möglichkeiten bietet der Model Editor von Meta Genius, nachdem mit dem Metamodel Editor ein entsprechendes MetaModel erstellt wurde.

Während das Anlegen und Bearbeiten von Metamodellen im Metamodel Editor immer nach dem gleichen Schema abläuft und dort die zur Verfügung stehenden Elemente wie MetaClasses und MetaAttributes fix vorgegeben sind, werden die Möglichkeiten im Model Editor vollständig durch das zugehörige MetaModel festgelegt. Es wäre hier daher wenig zielführend, auf theoretische Art die allgemeinen Features des Model Editors zu beschreiben. Mit Beispielen lässt sich hierfür jedoch schnell ein gutes Verständnis dafür vermitteln.

Beispiel: Modellierung einer Liste von Personen

In diesem sehr einfachen Beispiel soll in einem Model eine Liste von Personen erfasst werden und von jeder Person jeweils ein Name und die Haarfarbe.

Jedes Model benötigt zunächst ein MetaModel. In diesem einfachen Fall kann die erforderliche Modellierung darin schon mit zwei MetaClasses beschrieben werden:

Die MetaClass „Person“ beschreibt darin eine Person mit dem Namen und der Haarfarbe. Die MetaClass „ListOfPersons“ bildet eine Liste aus diesen Personen.

Das vollständige MetaModel mit allen Details:

Die MetaClass „ListOfPersons“ beinhaltet als MetaAttribute ein Instanz-Array von Personen. Die MetaClass „Person“ beinhaltet zwei MetaAttributes. Einen „Name“ vom Classifier String und eine „HairColor“ vom Classifier der MetaEnum namens „HairColorKind“.

Zugegeben, diese Darstellung sieht auf den ersten Blick so aus, als ob man schnell den Überblick verlieren könnte. Glauben Sie mir aber, nach kurzer Zeit hat man sich daran gewöhnt und sie ist zur Bearbeitung sehr effektiv.

Meta Genius bietet zusätzlich jedoch auch eine alternative Diagrammdarstellung. Damit werden die Zusammenhänge meist auf den ersten Blick klar:

Im Model Editor sieht das zugehörige Model sehr übersichtlich aus:

Das Model vom MetaModel <DemoSimple> beginnt mit einem Objekt der MetaClass <ListOfPersons>. Im MetaModel wurde diese „Wurzel“ des Models durch die RootMetaClass festgelegt.

Die Liste der Personen beinhaltet dann vier Objekte der MetaClass <Person>, mit ihren jeweiligen Namen und Haarfarben. Im Model Editor lassen sich diese sehr einfach editieren und es können natürlich auch weitere Personen hinzugefügt oder gelöscht werden.

Dieses erste Beispiel war bewusst extrem einfach gehalten um einen ersten Eindruck für die Zusammenhänge zwischen MetaModel und Model zu vermitteln. Codegenerierung spielt hier noch keine Rolle. Da diese aber der Hauptgrund für die Modellierung ist, geht es gleich weiter mit einem etwas komplexeren Beispiel, das auch als Basis für Codegenerierung herangezogen werden könnte.

Beispiel: Modellierung eines Einstellungsmenüs

Das vorige Beispiel – eine Liste von Personen – ist so einfach, dass man es natürlich ebenso gut in einer Excel-Tabelle erfassen könnte. Viele reale Modellierungsaufgaben erfordern darüber hinaus jedoch meist die Erfassung von Daten mit hierarchischer Gliederung. Und da stößt man mit Excel-Tabellen schnell an seine Grenzen. Mit dem passenden MetaModel ist dies mit Meta Genius aber kein Problem.

In diesem Beispiel soll ein hierarchisch gegliedertes Einstellungsmenü modelliert werden, wie es in vielen Geräten zu finden ist. Dieses Modell könnte dann in weiterer Folge als Input für einen Codegenerator dienen, mit dem die vollständige Software zur Darstellung und Navigation innerhalb des Menüs generiert werden könnte.

Das erforderliche MetaModel Diagram sieht immer noch sehr einfach aus, beinhaltet aber bereits eine verschachtelte Menü-Hierarchie:

Das zugehörige Model beginnt mit einem Objekt der MetaClass <Project>. Das enthält genau ein „MainMenu“ Objekt der MetaClass <Menu>.

Ein Menü kann dann weitere Untermenüs beinhalten. Diese hierarchische Verschachtelung wird durch das MetaAttribute „SubMenu“ spezifiziert, das eine beliebige Anzahl von weiteren <Menu> Objekt-Instanzen beinhalten kann.

In dem Model soll neben der hierarchischen Gliederung für jedes Menü auch noch jeweils ein textueller Titel erfasst werden und eine Liste von Einstellungen, die in diesem Menü möglich sein sollen.

Der Titel wird über das MetaAttribute „Title“ erfasst, vom Classifier String.

Die Liste der möglichen Einstellungen innerhalb eines Menüs soll in diesem Beispiel der Einfachheit halber nur durch eine Liste von Strings angedeutet werden, spezifiziert durch das MetaAttribute „SettingDummy/SettingDummies“, auch vom Classifier String.

Ein Model hierzu könnte beispielsweise so aussehen:

Das Model vom MetaModel <SomeDevice> beginnt mit einem Objekt von der MetaClass <Project>. Dieses beinhaltet genau ein <Menu> Objekt mit dem Titel „Hauptmenü“.

Das „Hauptmenü“ beinhaltet als oberste Gliederungsebene drei Untermenüs „Allgemeine Einstellungen“, „Druck Einstellungen“ und „Temperatur Einstellungen“.

Das Untermenü „Allgemeine Einstellungen“ hat wiederum zwei Untermenüs „Lautstärke“ und „Farbe“.

Das Untermenü „Druck Einstellungen“ hat zwei Untermenüs „Hochdrucksystem“ und „Niederdrucksystem“.

In all diesem Menüs könnte sich dann jeweils eine Liste von Einstellungen befinden, die in diesem Menü editierbar sein würden. In diesem Beispiel werden diese jedoch nur über Strings angedeutet und es wird daher auch nicht näher darauf eingegangen.

Dieses Model könnte man schon als Input für einen Codegenerator heranziehen und die vollständige Software zur Darstellung und Navigation innerhalb der Menüs generieren.