explizite und editierbare metainformationen für software muster
TRANSCRIPT
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
• 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