Case Tools Unterstützung für Design Pattern von Vladislav Krasnyanskiy
Übersicht Einleitung Design Pattern Programmiersprachen für Design Pattern Automatische Codegenerierung für Design Pattern Fujaba
Einleitung Verbesserung der Softwarequalität durch: Entwicklungsmodelle (Wasserfallmodell) Design Pattern
Wasserfallmodell Anforderungsanalyse/V alidation Entwurf/Validation/V erifikation Implementierung/ Verifikation Test und Integration InstallationWartung Pflichtenheft Systemarchitektur Programme Beweise Testpläne Testergebnisse technische Handbücher Benutzerhandbuch
Design Pattern historischer Überblick 1977 Christopher Alexander 1987 W. Cunningham, K. Beck “Constracting Abstractions for Object- Oriented Applications” 1994 E. Gamma, R. Helm, R. Johnson and J. Vlissides, “Design Pattern: Elements of Reusable Object-Oriented Sofware”
Purpose CreationalStructuralBehavioral Scope ClassFactory MethodAdapterInterpreter Template Method ObjectAbstract Factory Builder Prototype Singleton Adapter Bridge Composite Decorator Facade Proxy Chain of Responsibility Command Iterator Mediator Memento Flyweight Observer State Strategy Visitor Design Pattern nach Gamma
Design Pattern Was ist das ? Aufbau Entwicklung
Aufbau eines Design Patterns
Entwicklung eines Design Patterns 1.Reflektion des Problems 2.Welche Struktur ist die Richtige ? 3.Motivation mit konkretem Beispiel 4.Was unterscheidet das neue Pattern von anderen und wie ergänzt es sich ? 5.Publikation des Patterns 6.Verbesserungen 7.Sammeln und Einbauen von Kommentaren
Design Pattern im Quellcode Syntaktische Variationen Variationen in der Implementierung Delokalisierung Nicht verwertbare Bauteile Variation in der Organisation der Komponenten Redundanz
Programmiersprachen für Design Pattern textorientierte Programming Language for Design Patterns (PaL) visuelle Visual Language for Design Pattern (DPML )
Beispiel für PaL 1 (Abstract Factory) GUIFactory make GUIFactory +createScrollBar(): ScrollBar +createMenu(): Menu +createButton(): Button MetalFactorySpaceFactory +createScrollBar(): MetalScrollBar +createMenu(): MetalMenu +createButton(): MetalButton +createScrollBar(): SpaceScrollBar +createMenu(): SpaceMenu +createButton(): SpaceButton structure GUIFactory class SpaceFactory inherit GUIFactory creation make creation make class GUIFactory feature createScrollBar() is … creation make feature createMenu() is … feature createScrollBar() is … feature createButton() is … feature createMenu() is … end feature createButton() is … end end class MetalFactory inherit GUIFactory creation make feature createScrollBar() is… feature createMenu() is … feature createButton() is end
Beispiel für PaL 2 (Abstract Factory) ScrollBar make ScrollBar SpaceScrollBarMetalSrollBar structure ScrollBar creation make class ScrollBar creation make... end class Metal ScrollBar inherit ScrollBar creation make... end class Space ScrollBar inherit ScrollBar creation make … end
Beispiel für PaL 3 (Abstract Factory) Menu make Menu MetalMenuSpaceMenu structure Menu creation make class Menu creation make... end class MetalMenu inherit Menu creation make... end class SpaceMenu inherit Menu creation make … end
Beispiel für PaL 4 (Abstract Factory) Button make Button SpaceButtonMetalButton structure Button creation make class Button creation make... end class MetalButton inherit Button creation make... end class SpaceButton inherit Button creation make … end
Beispiel für DPML 1 (Abstract Factory) Absrac tFactor y createOps concreteCreateOps concreteFactories concreteProducts Products Declared_In Implements RealisesDefined_In Return Type Creates Implements
Beispiel für DPML 2 (Abstract Factory) Absract Factory GUIFactory CreateOps CreateMenu createScrollBar createButton CreateOps CreateMenu createScrollBar createButton ConcreteCreateOps 6 bound elements ConcreteCreateOps 6 bound elements ConcreteFactories MetallFactory SpaceFactory ConcreteFactories MetallFactory SpaceFactory ConcreteProducts 6 bound elements ConcreteProducts 6 bound elements Products Menu ScrollBar Button Products Menu ScrollBar Button Declared_In Implements RealisesDefined_In Return Type Creates Implements
PaL vs DPML Unterschiede
PaL vs DPML Gemeinsamkeiten benutzen Design Pattern zum Modellieren. haben Patterninstanzeierung haben visuelle Elemente unterstützen Vererbung
Automatische Codegenerierung für Design Pattern 1 Entwicklerziele 1. schnelle Modifikation von Komponenten 2. hohe Flexibilität 3einfache Spezifikation Benutzerziele 1. das Tool soll als Entwicklerhilfe dienen 2. integrierte Design Pattern Eigenschaften 3. Benutzerrückkopplung
Automatische Codegenerierung für Design Pattern 2 Architektur Presenter implementiert Benutzeroberfläche (Browser) Code Generator implementiert die Pattern Mapper spezifiziert wie der Presenter und der Code Generator miteinander kooperieren
Fujaba Java-Codegenerierung aus UML -Diagrammen Generierung der Designdiagrammen aus bestehendem Java-Quellcode Forward-(4 Pattern) und Reengineering (7 Pattern)