MGSE

Modellgetriebene Softwareentwicklung - HTWG

Modellgetriebene Softwareentwicklung - HTWG


D. S.
Diese Lernkarten decken fortgeschrittene Themen der Informatik auf Universitätsniveau ab. Sie konzentrieren sich auf modellgetriebene Softwareentwicklung (MDSD), domänenspezifische Sprachen (DSL) und deren Implementierung mit Tools wie Xtext. Die Karteikarten behandeln Themen wie Syntax, Codegenerierung, Metamodelle und die Vorteile von MDSD, einschließlich Produktivitätssteigerung und höherer Qualität. Sie richten sich an Entwickler und Studierende, die sich mit der Erstellung und Nutzung von DSLs sowie der Automatisierung von Softwareentwicklung beschäftigen.
Cartes-fiches
138
Utilisateurs
1
Langue
Allemand
Catégorie
Informatique
Niveau
Université
Créé / Mis à jour
30.01.2018 / 01.02.2018

Cartes-fiches

Was ist ein Domänenmodell?

beschreiben, wofür eine Software entwickelt werden soll (Konzepte von Domänen in Form von Entitäten und Beziehungen) z.B. Datenmodelle

Der Übergang zwischen Modellierung und Programmierung ist fließend. Trotzdem was ist eine Abgrenzung zwischen den Bereichen?

- Programmierung

Anweisungsfolgen erstellen, die auf einem Rechner ausführbar sind (imperative Programmierung) mit mathematischen Mitteln (Funktionen, Logik, ...) Lösungen beschreiben, die der Rechner finden soll (deklarative Programmierung)

- Modellierung

für eine zu erstellende Software relevante ausgewählte Aspekte beschreiben

Aspekte können der Problemdomäne oder der technischen Lösungsdomäne entstammen, es können Struktur- oder Verhaltensaspekte sein, ...
für unterschiedliche Aspekte in der Regel separate Beschreibungen

Wie können Modellierungssprachen repräsentiert?

• die Notation kann graphisch oder textuell sein

• die Sprache kann domänenspezifisch oder universell sein

• die Sprache muss formal sein, wenn Modelle automatisiert verarbeitet werden

sollen

 

Beispiele:

Mathematische Formalismen sind als Modellierungssprachen nutzbar

UML ist eine (bezogen auf die Informatik) universelle graphische Modellierungssprache

XML ist eine universelle für unterschiedliche Domänen spezialisierbare textuelle Sprache

HTML ist eine domänenspezifische textuelle Sprache für die Erstellung von Web-Seiten (Ist eine HTML-Seite ein Modell?)

Welche Arten von Modelle gibt es?

• statische / dynamische Modelle

• diskrete / kontinuierliche Modelle

• deterministische / stochastische Modelle

• eindimensionale / mehrdimensionale Modelle

• lineare / nicht-lineare Modelle

Was ist UML?

UML (Unified Modeling Language) ist von der OMG (Object Management Group)

als universelle grafische Repräsentation für Beschreibungsmodelle in der

Informatik entwickelt worden.

• aktuelle Version 2.5 von 2015: ca. 750 Seiten Spezifikation

• UML unterscheidet Strukturmodelle und Verhaltensmodelle.

Was ist ein Metamodell?

Ein Metamodell ist ein klassifizierendes Modell von Modellen.

ein Modell besteht immer in irgendeiner Form aus Entitäten und Beziehungen

ein zugeordnetes Metamodell beschreibt, aus welchen Arten von Entitäten und Beziehungen konforme Modelle bestehen

Was ist ein Meta-Metamodell?

Ein Meta-Metamodell ist ein Modell von Metamodellen usw.

Meta-Metamodelle werden bei Model-zu-Modell-Transformationen gebraucht
(wir kommen darauf in Teil 4 bei den Modelltransformationen zurück)

Ein selbstbeschreibendes (Meta-)Metamodell beendet die Meta-Rekursion

Beispiel von Modell und Metamodell:

Beim Domain-Driven Design (DDD) nach Eric Evans beruhen Domänenmodelle auf einem Metamodell mit folgenden Bestandteilen...

• Entity Objekt, das durch seine individuelle Existenz gekennzeichnet ist.
  Seine Attributwerte können sich über die Lebenszeit ändern.

• Value Object Objekt, das nur durch seine Attributwerte gekennzeichnet ist.
  Seine Attributwerte sind unveränderlich. Kopien sind austauschbar.

• Aggregat durch eine Entity gekapselte Sammlung von Objekten

• Domain Event Objekt, das ein in der Domäne relevantes Ereignis repräsentiert

• Service Operation, die keinem bestimmten Objekt zuzuordnen ist

• Repository Objekt, über das andere Objekte auffindbar sind

• Factory Objekt, über das andere Objekte erzeugbar sind

Ein Modellierungswerkzeug ist mehr als Tein Text- oder Graphikeditor. Neben der Notation der Modellierungssprache müssen unterstützt sein:

• Metamodelle

Modelle sollen Instanzen eines Metamodells sein.
Das Werkzeug muss gültige (d.h. zum Metamodell konforme)
von ungültigen Modellen unterscheiden können.

• Modelltransformationen

z.B. in Form von APIs für den Zugriff auf Modelle und Metamodelle,
oder mittels Transformationssprachen, ...

Beispiel: Microsoft Visio 2010 ist kein UML-Modellierungswerkzeug

Empfehlung zur Modellierung wären...

• "Modelle an sich" von ihrer Repräsentation unterscheiden

ein und dasselbe Modell kann mit verschiedenen Mitteln erstellt und dargestellt werden (textuell, graphisch, interaktiv)

wir kommen darauf beim Thema domänenspezifische Sprachen zurück

• unterschiedliche Aspekte getrennt voneinander modellieren

eventuell Subdomänen definieren und dafür getrennte Modelle erstellen (z.B. technische Subdomäne(n) und fachliche Subdomäne(n) unterscheiden)

mit Subdomänen können umfangreiche Problemfelder modularisiert und damit für ein arbeitsteiliges Vorgehen erschlossen werden

Beispiel für eine technische Subdomäne: GUI-Layout

Was sind Domäne?

Arbeits-, Wissensgebiet, auf dem jemand besonders gut Bescheid weiß,
auf dem er sich speziell und besonders intensiv betätigt ...
(Duden Fremdwörterbuch, 1982)

Jede Software wird für eine bestimmte Domäne entwickelt,

z.B.:

• Übersetzung von Programmiersprachen

• Kommunikation in verteilten System

• Grafische Benutzeroberflächen

• Web-Shop

• Buchhaltung

• Waschmaschinensteuerung

• ...

Domänenspezifische Bibliotheken

Traditionell wird Domänenwissen in Bibliotheken (und Frameworks) erfasst, die ihrerseits in einer universellen Programmiersprache implementiert sind.

Die Aufteilung Sprachen universell und Bibliotheken domänenspezifisch ist im Prinzip ein Erfolgsmodell, hat aber trotzdem auch Nachteile:

• Das Domänenwissen muss mit Hilfe der Konzepte der Programmiersprache ausgedrückt werden (z.B. mit Funktionen oder Objekten). Die dadurch bedingte semantische Lücke ist eine Fehlerquelle und führt zu Redundanz in Form von sich wiederholendem Standardcode (Boilerplate).

Beispiele: GUI-Programmierung mit Java Swing, Datenverwaltung mit Java Collections

• Bibliotheksimplementierungen binden Domänenwissen an bestimmte Plattformen und an bestimmtes Laufzeitverhalten.

macht die Integration mehrerer Bibliotheken für unterschiedliche Domänen in einer Anwendung mitunter schwierig erfordert gegebenenfalls viele aufwendig zu pflegende Varianten einer Bibliothek

Domänenspezifische Sprachen

DSL (Domain Specific Language, auch: Fachsprache)

Eine formale Sprache, die speziell für ein bestimmtes Problemfeld (die Domäne) entworfen und implementiert wird.

Potentielle Vorteile einer DSL:

• die relevanten Aspekte einer Domäne (und möglichst nichts darüber hinaus) lassen sich kompakt und korrekt beschreiben und können auf unterschiedliche Implementierungen abgebildet werden

wenige spezialisierte Konzepte mit möglichst wenig syntaktischem Ballast

• Domänenexperten können damit umgehen, d.h. sie können zumindest mit der DSL verfasste Beschreibungen verstehen

Anlehnung an die in der Domäne üblichen Notationen

Entwurfsschritte für eine DSL:

• Domänenanalyse zum Bestimmen der relevanten Aspekte

• Sprachklasse, Syntax und Semantik festlegen

Was ist eine Formale Sprache?

Menge von Symbolen mit Regeln für zulässige Kombinationen der Symbole

z.B. Programmiersprachen

Was ist eine Metasprache?

formale Sprache zum Beschreiben formaler Sprachen (d.h. zum Definieren der Symbole und Regeln)

eine unendliche Meta-Rekursion ist durch selbstbeschreibende Metasprachen vermeidbar z.B. erweiterte Backus-Naur-Form (EBNF)

Möglichkeiten zum Erfassen der relevanten Konzepte einer Domäne:

• Glossar

Liste von Begriffen mit Erklärungen

• Taxonomie

hierarchischer Einordnung von Begriffen in Kategorien

• Thesaurus

Taxonomie mit zusätzlichen Synonym-/Verwandtschafts-Beziehungen

• Ontologie (Begriffsnetz, semantisches Netz)

Begriffe mit Eigenschaften, beliebigen Relationen und Axiomen

 

Axiome sind Aussagen, die in der Domäne immer wahr sind


Taxonomien und Thesauren sind im Prinzip Spezialfälle von Ontologien
mit fest vorgegebenen Relationstypen und ohne Axiome

Was für Sprachklassen gibt es?

Klassifizierung nach Notation:

• rein textuell

• grafisch mit textuellen Beschriftungen

Klassifizierung nach Implementierung:

• Spezialisierung einer Universalsprache

z.B. UML-Profile, XML-Dialekte

• Black-Box-Einbettung in eine Wirtssprache

Kapselung in Strings oder Kommentaren der Wirtssprache

z.B. reguläre Ausdrücke, printf-Formatstrings, Dokumantationskommentare in Java

• White-Box-Einbettung in eine Wirtssprache (interne DSL)

Realisierung als Ausdrücke in der Wirtssprache

z.B. EasyMock mit Wirtssprache Java

• eigenständige Sprache (externe DSL)

z.B. HTML, Unix shell script, Makefile

Was für Syntaxe gibt es?

- konkrete Syntax

- abstrakte Syntax

Was ist eine konkrete Syntax?

die konkrete Syntax einer DSL legt fest, wie etwas formuliert werden kann:

spezifiziert im Detail die Notation der Sprache (Schlüsselwörter, Symbole, ...),
z.B. bei textuellen DSLs mit Hilfe von regulären Ausdrücken und/oder EBNF

die konkrete Syntax ist die Benutzerschnittstelle der DSL und ist entscheidend für die Lesbarkeit der DSL durch den Menschen

Was ist eine abstrakte Syntax?

die abstrakte Syntax einer DSL legt fest, was formuliert werden kann:

spezifiziert die Struktur der Sprache (Konzepte und deren Beziehungen ...), z.B. mittels eines Metamodells, das als abstrakter Syntaxgraph (ASG)
bzw. abstrakter Syntaxbaum (AST) instanziert wird

zu ein und derselben abstrakten Syntax kann es mehrere konkrete Syntaxformen geben z.B. eine textuelle und eine grafische Notation

die abstrakte Syntax ist entscheidend für die automatisierte Verarbeitung dessen,was der Benutzer mit der DSL formuliert

Was für Semantike gibt es?

- statische Semantik

- dynamische Semantik

Was ist die statische Semantik?

die statische Semantik regelt die Wohlgeformtheit von Formulierungen:
explizit in Form von Konsistenzregeln für abstrakte Syntaxgraphen

z.B. eindeutige Namen für Entitäten verlangen

z.B. bei Programmiersprachen: Variablen müssen vor ihrer Verwendung definiert werden

Was ist die dynamische Semantik?

die dynamische Semantik regelt die Bedeutung von Formulierungen:

implizit in Form von Transformatoren für abstrakte Syntaxgraphen

Transformatoren erzeugen aus jedem Sprachkonzept etwas Bestimmtes

z.B. erzeugt der Compiler einer Programmiersprache aus einer Variablendefinition
eine Speicherreservierung

Was für Werkzeug-Unterstützung gibt es?

Werkzeuge machen eine DSL erst praktisch einsetzbar:

• Parser

wandelt konkrete Syntax in abstrakte Syntax

muss nur bei externen DSLs jeweils neu implementiert werden

• Serialisierer

wandelt abstrakte Syntax in konkrete Syntax

ist nicht immer erforderlich

• Editor

ermöglicht das interaktive Bearbeiten von konkreter und/oder abstrakter Syntax

je nach Sprachklasse und gewünschtem Komfort entweder Wiederverwendung

oder spezielle Implementierung

• Interpreter / Transformatoren / Generatoren

verarbeiten die in abstrakter Syntax vorliegende Information

legen die dynamische Semantik der DSL fest

Wie kann UML mittels Profile spezialisiert werden?

Ein UML-Profil besteht aus

• Stereotypen Spezialisierungen von Modellelementen

• Tagged Values Attribute der Stereotypen

• Constraints Konsistenzregeln für mit den Stereotypen markierte Modellelemente

Ein UML-Profil modifiziert

• die abstrakte Syntax von UML mittels Stereotypen und Tagged Values

als Metasprache wird im Prinzip das UML-Klassendiagramm verwendet,

siehe dazu auch den MOF-Standard (Meta Object Facility)

• die statische Semantik von UML mittels Constraints

als Metasprache wird die Object Constraint Language (OCL) verwendet

• die konkrete Syntax von UML mittels graphischen Symbolen

einem Stereotyp kann ein graphisches Symbol zugeordnet werden

Was sind OCL und für was werden Sie genutzt?

Constraints werden mit OCL (Object Constraint Language) formal spezifiziert.

Sie machen Aussagen über die Gültigkeit von Modellen (statische Semantik).

Was für Arten von Constraints gibt es?

• Invarianten

context Klasse
inv: Bedingung

Beispiele: Wertebereich von Attributen beschränken
                Beziehungen zwischen Klassen / Objekten beschränken

• Vorbedingungen (Preconditions) und Nachbedingungen (Postconditions):

context Methode
pre: Bedingung
post: Bedingung

Bedingungen, die bei jedem Objekt der genannten Klasse zu jedem Zeitpunkt erfüllt (true) sein müssen.

Bedingungen, die vor bzw. nach Aufruf der Methode erfüllt (true) sein müssen.

Was für XML-Spezialisierungen gibt es?

- DTD

- XSD

XML-Spezialisierung

XML kann als DSL verwendet werden.

Der Sprachumfang kann (und sollte unbedingt) formal spezifiziert werden:

• entweder mittels Metasprache DTD (Document Type Definition)

• oder mittels Metasprache XSD (XML Schema Definition).

Die XML-Spezialisierung betrifft:

• Elemente und deren syntaktische Kombination (Schachtelung, Reihenfolge, ...)

<element>...</element>

• Elementattribute und deren Wertebereiche

<element attribut="wert">

• Entities (Textbausteine, nur mittels DTD definierbar)

&entity;

DTD Beispiel

XSD-Beispiel

Interne DSL

In Java können APIs (Application Programming Interfaces) so definiert werden,

dass sie den Charakter einer DSL bekommen:

• Method-Chaining

API-Methoden liefern als Rückgabewert ihre this-Referenz,

um Aufrufketten innerhalb eines Ausdrucks zu ermöglichen

Beispiel: append-Methoden der Klasse java.lang.StringBuilder

String s = new StringBuilder()

.append("Hallo").append(" World!").toString();

• Method-Nesting

Rückgabewerte von API-Methoden als Argumente für API-Methodenaufrufe

dadurch sind rekursive Strukturen beschreibbar

• Object-Scoping

API-Methoden liefern als Rückgabewert jeweils ein Kontext-Objekt, das die

als nächstes aufrufbaren Methoden festlegt und Zwischenergebnisse speichert

dadurch sind bestimmte Aufrufreihenfolgen für das Method-Chaining definierbar

Beispiel Interne DSL in Java: EasyMock

Beispiel Interne DSL in Java: DOM-Baum

Siehe Skript 3-22 bis 3-24

Externe DSL: Reguläre Ausdrücke

Mit regulären Ausdrücken als Metasprache

kann die konkrete Syntax einfacher textueller DSLs definiert werden

(einfach heißt ohne rekursive Verschachtelungskonstrukte)

• Zeichenklassen:

a das Zeichen 'a'

[abc-e] eines der Zeichen 'a', 'b', 'c', 'd' oder 'e'

[^abc-e] keines der Zeichen 'a', 'b', 'c', 'd' oder 'e'

. beliebiges Zeichen (außer Zeilenwechsel)

• Quantifizierung:

r{2} zweimal hintereinander

r{1,3} ein bis drei Wiederholungen

r? entspricht r{0,1}

r* entspricht r{0,}, d.h. beliebig oft inklusive keinmal

r+ entspricht r{1,}, d.h. mindestens einmal

• Verknüpfung:

rs Konkatenation, d.h. erst r, dann s

r|s Alternative, d.h. r oder s

(r) Klammerung zum Überschreiben der Vorrangregeln

(Quantifizierung vor Konkatenation vor Alternative)

Externe DSL: EBNF

 

Mit der Erweiterten Backus-Naur-Form (EBNF) als Metasprache

können kontextfreie Grammatiken für textuelle DSLs definiert werden

• Terminale:

"abc" die Zeichenfolge abc

• Nichtterminale:

Name metasprachliche Variable

• Symbolfolgen:

s t s gefolgt von t

s | t entweder s oder t

{s} beliebig viele s inklusive keinmal

[s] kein oder ein s

(s) Klammerung zum Überschreiben der Vorrangregeln

• Produktionsregeln:

Nichtterminal = Symbolfolge ;

Externe DSL: Parse-Tree versus AST

• ein Parse-Tree zeigt, mit welchen Regeln ein Parser seine Eingabe zerlegt hat

• ein AST (Abstract Syntax Tree) entsteht aus einem Parse-Tree, indem man

die Knoten der Nicht-Terminale und der rein syntaktisch motivierten Terminale

daraus entfernt

Externe DSL: Implementierung

• mit reguläre Ausdrücken und EBNF die konkrete Syntax der DSL definieren

reguläre Ausdrücke für die Definition der Tokens (Schlüsselwörter, Zahlen, Namen, ...)

und EBNF für die Definition der zulässigen Token-Folgen

daraus (in der Regel automatische) Erzeugung eines Parsers, der die Syntax prüft

• zusätzlich Rückgriff auf eine Programmiersprache,

um die abstrakte Syntax und die statische Semantik einer DSL zu definieren

als Programmiersprache empfiehlt sich die Implementierungssprache des Parsers

EBNF und die erforderlichen Programmfragmente werden oft in einer Quelle gemischt,

dann sogar automatische Erzeugung eines Parsers, der einen konsistenten abstrakten

Syntaxgraph liefert

• Beispiele für Parser-Generatoren:

flex und bison (ehemals lex und yacc) Klassiker unter Linux / Unix

ANTLR bzw. ANTLWorks aktuell viel verwendet, besonders im Java-Umfeld

Externe DSL: Scanner-Generator flex

flex (fast lexical analyser) generiert einen Scanner, der Symbole (Tokens)

in einem Text findet

Étudier