Explizite und editierbare Metainformationen für Software Muster.

Post on 05-Apr-2015

119 views 3 download

Transcript of Explizite und editierbare Metainformationen für Software Muster.

Explizite und editierbare Metainformationen für Software Muster

Gliederung

1. Einführung2. Probleme3. Thesen4. Eine Sprache für strukturelle Meta-Daten

• Ausdrucksfähigkeit• Erweiterbarkeit

5. Alternative Ansätze6. Proof-of-concept7. Prototypische Umsetzung

Software Muster

„A pattern is anything characterized by repetition.“ (WikiPedia dictionary)

Relevante Beispiele:• Entwurfsmuster (Visitor, Observer)• Idiome (Getter/Setter)

• andere ... (im Ausblick)

Probleme

Software-Muster sind zwar Ausdruck von Intentionen, aber ...• zugehörige Bedingungen bleiben implizit• fehlerhafte Muster => falsches Vertrauen• Struktur geht leicht verloren• prinzipiell gut skalierbar, aber manuell

fehleranfällig• manuelle Anpassung an anderen Kontext

schwierig

Thesen

• Metadaten über die Programmstruktur können helfen, die meisten der genannten Probleme zu lindern oder zu beheben.

• Mit Hilfe formaler Metadaten können z.B. Entwurfsmuster langfristig im Entwicklungsprozess unterstützt werden.

PatchWork Meta-Modell (1)

Zentrale Elemente (nicht domänen-spezifisch):

• Role– Entity, Role Player, Entity Type

• Relation– Projection

• Constraint– z.B. Cardinality, Containment

• Operation– Atomic / Composed Operation

Beispiel: Kardinalitätsbedingung

Sei R eine Relation zwischen den n+1 Rollen S1, …, Sn und T.

Die Kardinalität der Rolle T in R ist “1..*” gdw.

CardTtRtssSSss nnn |),,,(:),,( 111

Wobei Card die Menge aller gültigen Kardinalzahlen ist.

Z.B. “1..*” = {1, 2, 3, …}

PatchWork Meta-Modell (2)

Domänen-spezifische Erweiterungen:Beispiele für die Domäne Java:• Entity Types:

– Class, Method, Field, ...– is-class, is-method, is-field, ...

• Constraints:– in-scope, sub-type, calls, ...

• Operations:– add/remove/replace für jeden Entity Typ

Erweiterbares Meta-Modell

Alternative Ansätze

• Eingebettete Metadaten– Sprachspezifisch– Explizit: ja; Editierbar: nein

• Metaprogrammierung– Makro-basierte Systeme

• Focus auf Transformation statt Invarianten• nicht explizit• schwer editierbar (?)• komplementär zu PatchWork

– Reflektions-basierte Systeme• Sprachspezifisch

Meta-Programmierung?

• Für das wesentliche: Nein!– Explizite Muster– Verbunden mit zugehörigen Kode-Fragmenten– Bedingungen beschränken den Kode

• Interaktion auf semantischen Niveau der Muster führt zu:– Kode Generierung– Kode Transformationen

Beispiel: Das Visitor-Muster

Intention:

• Datenstruktur durch einige Klassen beschreiben• Operationen auf diesen Daten beschreiben• Definition der Daten zusammenhalten• Definition der Operationen zusammenhalten• ... und das nicht in Lisp sondern in Java.

Metadaten für das Visitor-MusterKlassen für Daten:

Klassen für Operationen:• Delete

Delete

• Print

Print

• Folder

Folder

• Document

Document

Methoden für Operatoren:

printDoc

• printDoc

delDoc

• delDoc

printFol

• printFol

delFol

• delFol

3-Stellige Relation:

PatchWork Modell für Visitor

«Java Interface Role»abstractVisitor

«use»

«Java Method Role»OperationAcceptor

- /card : 1..*

1

+/- +/-

«Java Class Role»DataElement

+ card : 1..*

«Java Class Role»Operation

+ card : 1..*

«Java Method Role»DataSpecificOperator

- /card : 0..*

11 «proj»

«proj»

1

Use Cases – Überblick

UserModellerDomain Engineer

Manage Pattern Model

Instantiate Pattern

Edit Pattern Instance

Edit Pattern Model

Synchronize Pattern Instance with Target

Code

Define Meta Model for Target

Language

Select Pattern from Catalogue

Release Pattern Model

readscreates and stores

readsdomain-specific

meta model

System Architecture Conception

Modeller User

MetaModel

StructureModels

StructureInstances

TargetCode

StructureEditor

StructureInstanceEditor

IDE

changes& generates

creates and stores

refers to codefragments

reads and analyses

System Architecture Conception

changes& generates

reads and analyses

refers to codefragments

createsand stores

readscreates and stores

readsdomain-specific

meta model

Modeller User

MetaModel

StructureModels

StructureInstances

TargetCode

StructureEditor

StructureInstanceEditor

IDE

Status Quo

• viele bekannte Entwurfsmuster in Java mit dem Meta-Modell beschrieben

• zwei Test-Prototypen für das Basis-Meta-Modell

• erste Version einer graphischen Notation

Nächste Schritte

• Analogie zu E-R-Modell und Relationalem Modell ausloten

• Grenze der Ausdrucksfähigkeit genauer untersuchen (z.B. dynamische Aspekte)

• vollständige Formalisierung des Meta-Modells für Java

• bekannte Entwurfsmuster modellieren

Ausblick – Anwendungsgebiete

• Entwurfsmuster

• „Persistente Refactorings“

• Sprachübergreifende Strukturen(z.B. Quellkode und Dokumentation)

• „Programming by Copy & Paste“

• Infrastruktur, um Intentionen „expliziter“ zu machen