Metamodellierung
Inhaltsverzeichnis |
Motivation
Eine modellgetriebene Entwicklung von komplexen Software-Systemen verlangt den Einsatz unterschiedlichster Modellierungs- und Implementationssprachen, um ressourcenschonend von einer ersten informellen Beschreibung über verschiedene Entwicklungsstufen hinweg bei Integration von Qualitätskontrollen bis zum fertigen Produkt zu gelangen. Einzelne Phasen des Entwicklungsprozesses verlangen zur Berücksichtigung mannigfaltiger Anforderungen unterschiedliche Modellabstraktionsgrade und Entwurfsziele. Darüber hinaus werden Abbildungen und Transformationen zwischen den verschiedenen Modellen (realisiert in unterschiedlichen Sprachen) benötigt, um Beziehungen und Übergänge zwischen den unterschiedlichen Modellen eines Systems zu beschreiben. Die dabei verwendeten Modellierungs- und Programmiersprachen haben faktisch mehr Gemeinsamkeiten als Unterschiede, eine Tatsache, die bei der Entwicklung und Flexibilisierung von Entwicklungswerkzeugen künftig ausgenutzt werden muss. Daraus leitete sich ein SAM-Forschungsscherpunkt ab, der die Fragestellung untersucht, wie sich objektorientierte Sprachmodelle, so genannte Metamodelle, einsetzen lassen, um Gemeinsamkeiten und Zusammenhänge zwischen Sprachen durch abstrakte Konzepte darzustellen, und wie sich solche abstrakten Konzeptbeschreibungen einsetzen lassen, um die Entwicklung von Werkzeugen für automatisierte Sprachübergänge in modernen Entwicklungsprozessen entscheidend zu flexibilisieren.
Beipiel MDA
So verwendet die an Popularität gewinnende Softwareentwicklungsarchitektur MDA (Model Driven Architecture) insbesondere Modelle auf unterschiedlichen Abstraktionsniveaus, um den Softwareentwicklungsprozess von einer ersten Analyse bis zum fertig implementierten und verteilten Produkt modellbasiert zu gestalten. In den verschiedenen Phasen der Softwareentwicklung werden natürlich verschiedene aufeinander aufbauende Modelle erstellt. Insbesondere sieht MDA vor, zwischen
- abstrakteren plattformunabhängigen und
- plattformabhängigen Modellen
zu unterscheiden, um vor allem bei komplexen verteilten Systemen mehr Flexibilität zu erlangen.
Für einen MDA-konformen Entwicklungsprozess müssen für die unterschiedlichen Entwicklungsstufen und für die plattformabhängigen und -unabhängigen Modelle eine Vielzahl unterschiedlicher, auf die jeweilige Abstraktionsstufe angepasster Sprachen verwendet werden. Das sind Sprachen, die (wenn auch auf unterschiedlichen Abstraktionsniveaus) dieselben Dinge mit denselben Konzepten modellieren. Beispiel für eine typische verkettete Anwendung von Sprachen in MDA: Man verwendet eODL zur strukturellen Zerlegung eines Systems in verschiedene Komponenten. Diesen Komponenten fügt man mit Hilfe von SDL ein plattformunabhängiges Verhaltensmodell hinzu, dieses Modell lässt sich schließlich per Transformation nach C++ oder Java für verschiedene Plattformen implementieren.
Obwohl die dabei eingesetzten Sprachen grundlegend verschieden sind und für ganz unterschiedliche Ziele entwickelt worden sind, zeigen sich dennoch gemeinsame Konzepte. Die eODL-Namensräume zum Beispiel beinhalten ein Konzept, welches von SDL-Agenten weitergetragen und bis hin zu abgeleiteten C++- oder Java-Klassen beibehalten wird. Namensraum ist also ein Beispiel eines abstrakten Konzeptes, welches deutlich macht, dass die verwendeten Sprachen durchaus Gemeinsamkeiten aufweisen. Man spricht auch von verwandten Sprachen, oder Sprachfamilien, zum Beispiel die OMG UML oder ITU-T ULF.
Metamodelle und abstrakte Grammatiken
Metamodelle und abstrakte Grammatiken sind zwei Spielarten zur Darstellung der Konzeptwelten von Modellierungssprachen. Unter einer Konzeptwelt versteht man die Zusammenfassung gedanklicher Abstraktionen, ihrer Relationen untereinander und Regeln zu ihrer Anwendung, um Modelle von originalen Sachverhalten einer bestimmten Problemdomäne bilden zu können. Unter einer Semantik versteht man die vollständige Definition einer Konzeptwelt, wobei strukturelle Aspekte durch die statische Semantik und Verhaltensaspekte durch die dynamische Semantik ausgedrückt werden können. Typische Abstraktionsmechanismen zur Bildung der Konzeptwelten sind
- Klassifikation/Exemplifikation,
- Generalisierung/Spezialisierung,
- Strukturierung/Destrukturierung,
- Organisation,
- Abkapselung,
- Information Hiding,
- Identifikation von Ursache-Wirkungs-Beziehungen,
- mathematische Verhaltensbeschreibung.
Die konkrete Notation eines Modells, d. h. die Notation der dabei eingesetzten Konzepte, erfolgt in Anwendung vereinbarter Symbole, die den Elementen der Konzeptwelt entsprechen. Obwohl die Notation eine sekundäre Relation darstellt, ist sie doch wesentlich für den Modellierungsprozess. Die Regeln zur korrekten Notation von Modellen bestimmen die Syntax der Konzepte. Die Beziehungen zwischen einem Element des zu modellierenden Originals, dem dabei verwendeten Konzept der Konzeptwelt und das eingesetzte Notationselement bilden ein semiotisches Dreieck.
Grammatiken liefern für jedes Konzept eine Produktionsregel, aus der sich die Struktur des Konzeptes ergibt. Durch Anwendung der Regeln entsteht eine Baumstruktur des jeweiligen Modells. So gebildete Konzeptwelten sind besonders für textuelle (d. h. lineare) Notationen geeignet.
Ein Metamodell beschreibt die Konzeptwelt, d. h. die Struktur der einzelnen Konzepte und ihre zulässigen Relationen in Gestalt eines gerichteten Graphen. Die Knoten des Graphen entsprechen dabei den Konzepten, die Kanten dagegen den Relationen zwischen den Konzepten. So gebildete Konzeptwelten eignen sich besonders für mehrdimensionale (d. h. graphische) Beschreibungen, zirkuläre Abhängigkeiten können direkt ausgedrückt werden.
Modellhierarchien
Die Silbe Meta ist ein aus dem Altgriechischen stammendes Präfix. Es bedeutet: darüber hinaus. Im Zusammenhang der Modellierung kann ein Metaobjekt als ein weitergehendes Objekt, als ein Objekt, welches andere Objekte beschreibt, verstanden werden.
Die Metamodellierung setzt in gewisser Weise das gewöhnliche Klasse-Objekt-Paradigma fort. Eine Klasse beschreibt eine Menge von Objekten mit gleichen Eigenschaften. Allgemein können Klassen und Objekte als Klassifizierer und Instanzen beschrieben werden. Ein Klassifizierer beschreibt eine Menge von Instanzen, also eine Menge von Daten, die der Klassifikationsbeschreibung entsprechen. Dieses Paradigma hat dann die verschiedensten Ausprägungen, zum Beispiel Typ-Wert, Grammatik-Wort, Vorlage-Dokument oder natürlich Klasse-Objekt.
Man beschreibt also Instanzen nicht von Fall zu Fall, sondern man klassifiziert anhand gleicher Eigenschaften. Man entwickelt beschreibende Informationen, also Meta-Informationen, um eine Menge gleichartiger Instanzen zu beschreiben, wobei sich hier „Gleichartigkeit“ auf gemeinsame Eigenschaften der Instanzen bezieht. Zwei Objekte derselben Klasse haben denselben Zustandsraum, stellen dieselben Operationen zur Verfügung. Zwei Werte desselben Datentyps liegen in demselben Wertebereich. Die Dokumente einer Vorlage weisen gleiches Layout auf und so weiter.
Dieses zweischichtige Zusammenspiel von Klassifikation und Instanzen kann auf mehrere Schichten erweitert werden. Das heißt, Klassifizierer können wiederum Instanzen einer noch abstrakteren Metaklassifizierung sein, welche wiederum Instanz einer Meta-Metaklassifizierung ist und so weiter. Ein Klassifizierer oder eine Instanz zu sein, ist also keine Eigenschaft, die a priori besessen wird, sondern es handelt sich lediglich um Rollen, die durch die Relation zwischen den beiden Elementen bestimmt wird.
Nun ist es sinnvoll, die einzelnen Elemente konzeptionell einzuteilen, das heißt, wohldefinierten Schichten zuzuordnen und zwar so, dass die Elemente einer Schicht die Instanzen der Elemente der darüber liegenden Schicht bilden. Die Elemente der nächsthöheren Schicht klassifizieren also die Elemente der darunter liegenden Schicht. Fasst man die Elemente einer Schicht zu Modellen zusammen, sagt man, ein Modell ist Instanz eines Modells einer höheren Schicht.
Man nummeriert die entstehenden übereinander liegenden Schichten. So wird erreicht, dass eine Schicht i die Schicht i-1 beschreibt. In einer solchen Architektur dürfen die Instanziierungsrelationen die Schichtgrenzen nur von unten nach oben überschneiden. Es darf also niemals ein Element in Mi Instanz eines Elements aus Mi-1 sein.
Die Schichten sind nach unten begrenzt, das heißt, i ist niemals negativ. Die Elemente in M0 bilden also eine reine Instanzmenge und sie können keine Klassifizierer sein. Nach oben reichen die Schichten theoretisch unbegrenzt. In der Praxis hat sich aber gezeigt, dass vier Schichten meist ausreichend sind. Diese Schichten sollen nun in Bezug auf objekt-orientierte Systemmodellierung kurz näher erläutert werden.
Von unten beginnend, M0 beschreibt die Daten, also die konkreten Werte in einem System. Dies können zum Beispiel die Objekte in einem laufenden Programm oder Produkte und Aktoren in einem Geschäftsprozess sein. Die nächste Schicht M1 wird als Modellschicht bezeichnet. Hier liegen also Modelle, welche konkrete Systeme modellieren. Das kann zum Beispiel das SDL-Modell eines Telekommunikationsprotokolls, das UML-Modell einer CORBA- Applikation oder ein Programmtext in einer gewöhnlichen Programmiersprache sein. Die Klassifizierer werden in M1 meist als Klassen bezeichnet. Die Metamodellschicht M2 beherbergt Modelle von Modellen. Dies kann zum Beispiel die Sprachdefinition einer Programmiersprache, der UML-Standard oder die Beschreibung anderer Modellierungssprachen sein.
Metamodelle werden durch Meta-Metamodelle, also der M3-Schicht, beschrieben. Hier ist zum Beispiel das MOF-Meta-Metamodell, oder kurz MOF-Modell, einzuordnen. Die Klassifizierer in den Schichten M3 und M2 werden meist als Konzepte oder genauer als Konzeptdefinitionen, respektive Konzeptbeschreibungen, bezeichnet.
SAM-Metamodellansatz zur Integration und Transformation von Sprachen
Kern einer technologischen Basis zur Erstellung und Verarbeitung von Metamodellen jeglicher Art stellen Repositories mit entsprechenden operationalen Interfaces dar. Der von SAM favorisierte Ansatz verwendet dafür derzeit A MOF 2.0 for Java (http://www.informatik.hu-berlin.de/sam/meta-tools/aMOF2.0forJava/index.html). Diese im Prinzip austauschbare Repository-Funktionalität stellt eine konkrete Implementierung der Meta-Object-Facility (MOF) 2.0 als M3-Realisierung dar. Damit steht eine offene Basisplattform zur modellbasierten Softwareentwicklung zur Verfügung, die folgende Grundfunktionalitäten unterstützt:
- Spezifikation und Konstruktion von Metamodellen durch die Bereitstellung von Basiskonzepten (Klassen, Assoziationen, Vererbung, Pakete) als Konzeptraum zur Darstellung der spezifischen M2-Konzepte, die über spezielle Interfaces angesprochen werden können,
- Speicherung und Verarbeitung von Metamodellen (M2-Modelle) und der darauf aufbauenden M1-Modelle über bereitgestellte operationelle Interfaces,
- Austausch von Metamodellen und der darauf aufbauenden M1-Modelle als XML-Repräsentationen, die unabhängig von der syntaktischen Modellrepräsentation und der MOF-Implementation sind.
Die Basisplattform wird in dem SAM-Ansatz in der gegenwärtigen Ausbaustufe um weitere Komponenten angereichert, die insbesondere ITU- und OMG-Spezifikationstechniken in ihrer Integration sowohl bei der Erstellung und Analyse als auch bei ihrem Einsatz in der Softwareproduktion unterstützen sollen. Die erweiterte Basisplattform ULF-Ware enthält gegenüber der Basisversion u.a. folgende zusätzliche Komponenten:
- Generisches Frontend für eine metamodellbasierte Sprachverarbeitung,
- Konkretes Frontend für einen metamodellbasierten SDL-2000-Compiler (und dafür ein SDL-2000-Metamodell),
- konkretes Backend für einen metamodellbasierten SDL-2000-Compiler,
- Generisches Backend für eine metamodellbasierte Sprachverarbeitung.
Mit der angestrebten Ausbaustufe von ULF-Ware soll die Compilierung von SDL-2000 (in einer signifikanten Teilsprache) nach C++ sowohl mit dem Ziel einer Simulation als auch als Echtzeitsystem unterstützt werden.
SMILE-Metamodellansatz zur Integration und Transformation von Sprachen
Parallel zum SAM-Metamodellansatz wird in Kooperation mit der Hochschule Agder (http://www.hia.no/) (Norwegen) die Konzeption und Realisierung eines allgemeineren und weitaus leistungsfähigeren Metamodellansatzes verfolgt. Während vom Projektpartner eine allgemeinere Repository-Grundfunktionalität angestrebt wird, strebt SAM die Anbindung der generischen ULF-Ware-Komponenten an die SMILE-Plattform SMILE-Ware an, so dass automatische Generierung von spezifischen SMILE-Ware-Komponenten gelingt. Ferner wird eine Anpassung der allgemeinen ULF-Ware-Komponenten an die SMILE-Plattform angestrebt.