200 likes | 305 Views
Explizite und editierbare Metainformationen für Software Muster. Gliederung. Einführung Probleme Thesen Eine Sprache für strukturelle Meta-Daten Ausdrucksfähigkeit Erweiterbarkeit Alternative Ansätze Proof-of-concept Prototypische Umsetzung. Software Muster.
E N D
Explizite und editierbare Metainformationen für Software Muster
Gliederung • Einführung • Probleme • Thesen • Eine Sprache für strukturelle Meta-Daten • Ausdrucksfähigkeit • Erweiterbarkeit • Alternative Ansätze • Proof-of-concept • 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. 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
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.
Document • Folder • Print • Delete • printDoc • delDoc • printFol • delFol Document Folder Print printDoc printFol Delete delDoc delFol Metadaten für das Visitor-Muster Klassen für Daten: Klassen für Operationen: Methoden für Operatoren: 3-Stellige Relation:
«Java Method Role» OperationAcceptor «Java Interface Role» - /card : 1..* abstractVisitor 1 «use» «Java Class Role» «Java Class Role» DataElement Operation +/- +/- + card : 1..* + card : 1..* 1 1 «proj» «proj» 1 «Java Method Role» DataSpecificOperator - /card : 0..* PatchWork Modell für Visitor
StructureInstanceEditor User Modeller StructureEditor IDE reads and analyses readsdomain-specific meta model creates and stores reads creates and stores changes& generates refers to codefragments StructureInstances StructureModels MetaModel TargetCode System Architecture Conception
StructureInstanceEditor User Modeller StructureEditor IDE reads reads and analyses readsdomain-specific meta model creates and stores createsand stores changes& generates StructureInstances StructureModels MetaModel TargetCode refers to codefragments System Architecture Conception
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