Explizite und editierbare Metainformationen für Software Muster.

20
Explizite und editierbare Metainformationen für Software Muster

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

Page 1: Explizite und editierbare Metainformationen für Software Muster.

Explizite und editierbare Metainformationen für Software Muster

Page 2: 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

Page 3: Explizite und editierbare Metainformationen für Software Muster.

Software Muster

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

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

• andere ... (im Ausblick)

Page 4: Explizite und editierbare Metainformationen für Software Muster.

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

Page 5: Explizite und editierbare Metainformationen für Software Muster.

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.

Page 6: Explizite und editierbare Metainformationen für Software Muster.

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

Page 7: Explizite und editierbare Metainformationen für Software Muster.

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, …}

Page 8: Explizite und editierbare Metainformationen für Software Muster.

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

Page 9: Explizite und editierbare Metainformationen für Software Muster.

Erweiterbares Meta-Modell

Page 10: Explizite und editierbare Metainformationen für Software Muster.

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

Page 11: Explizite und editierbare Metainformationen für Software Muster.

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

Page 12: Explizite und editierbare Metainformationen für Software Muster.

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.

Page 13: Explizite und editierbare Metainformationen für Software Muster.

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:

Page 14: Explizite und editierbare Metainformationen für Software Muster.

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

Page 15: Explizite und editierbare Metainformationen für Software Muster.

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

Page 16: Explizite und editierbare Metainformationen für Software Muster.

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

Page 17: Explizite und editierbare Metainformationen für Software Muster.

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

Page 18: Explizite und editierbare Metainformationen für Software Muster.

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

Page 19: Explizite und editierbare Metainformationen für Software Muster.

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

Page 20: Explizite und editierbare Metainformationen für Software Muster.

Ausblick – Anwendungsgebiete

• Entwurfsmuster

• „Persistente Refactorings“

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

• „Programming by Copy & Paste“

• Infrastruktur, um Intentionen „expliziter“ zu machen