Schuh, A. (2013). Automatisierung von Software-Mustern mittels Metaprogrammierung [Diploma Thesis, Technische Universität Wien]. reposiTUm. https://doi.org/10.34726/hss.2013.23148
Das Thema dieser Diplomarbeit ist die Automatisierung von Software-Mustern, welche während der Entwicklung mit konventionellem Java, d.h. ohne die Hilfe von Frameworks und Generatoren, vorkommen. Das deutlichste Kennzeichen solcher Muster ist eine häufige Anwendung von Copy/Paste/Replace. Boilerplate-Code: Getter/Setter, Constructor,.... Design-Patterns: Proxy, Strategy,.... Abstraktions-Code: Persistenz (Data Access Object),.... Cross-Cutting-Concerns: Logging, .... Diese Muster führen zu einer großen Menge an manuell erstelltem Code, welcher die Produktivität sowie Wart- und Erweiterbarkeit negativ beeinflusst. Der Lösungsansatz ist, dass die typischen Programmierschritte des Musters in einem Metaprogramm spezifziert werden, damit sie der Computer generieren kann. Im Zuge dieser Diplomarbeit wird ein funktionaler Prototyp eines passenden Metaprogramming-Systems erstellt. Anschließend wird mit dessen Hilfe versucht verschiedene Muster (Boilerplate-Code, Design-Patterns,....) zu automatisieren. Diese werden stichprobenartig ausgewählt um einen statistischen Überblick zu erhalten, ob Muster prinzipiell gut oder schlecht generiert werden können. Am Ende konnte auf folgende konkrete Forschungsfrage eine Antwort gegeben werden: Kann die Automatisierung von Software-Mustern die Programmierung ohne Frameworks in Hinblick auf Produktivität, Erweiterbarkeit und Wartbarkeit verbessern? Es konnten alle ausgewählten Muster sehr gut automatisiert werden, welche nun mittels deklarativer Programmierung (Annotationen) gesteuert werden. Dadurch konnte die Produktivität, Wart- und Erweiterbarkeit aufgrund von reduzierter Codierungsarbeit, besserer Übersicht und zentraler Verwaltung verbessert werden. Statische Codegenerierung macht die Funktion von Metaprogrammen sichtbar und erleichtert das Debugging. Eigenschaften von dynamischer Metaprogrammierung wurden während der Entwicklung nicht vermisst. Weiters führt die Erstellung von Metaprogrammen zu einem besseren Verständnis von Mustern: So konnten viele Gemeinsamkeiten zwischen Design-Patterns erkannt werden. Eventuell könnte sich nach einiger Zeit ein Kern an oft gebrauchten Mustern herauskristallisieren, welcher in die Konzeption neuer Programmiersprachen miteinbezogen werden könnte. Insgesamt erwies sich die entwickelte Lösung als mächtiges Werkzeug zur Automatisierung von Code-Mustern, mit vielen Vorteilen und wenigen Nachteilen. Der Einsatz kann flexibel gestaltet werden und ist technologieunabhängig.
de
The topic of this thesis is the automation of software patterns. These software patterns occur during the development with conventional Java, without help of frameworks and generators. An indicator of such patterns is a frequent use of copy/paste/replace; Boilerplate-Code: Getter/Setter, Constructor,.... Design-Patterns: Proxy, Strategy,.... Abstraction-Code: Persistence (Data Access Object),.... Cross-Cutting-Concerns: Logging,.... The problem with these patterns is, that they lead to a large amount of manually created code. This negatively affects the productivity, maintainability and extensibility of the software. This thesis's interest is to find an answer to the following question: Can the automation of software patterns improve the productivity, maintainability and extensibility for programming without frameworks? The approach is to specify the typical programming steps of the pattern in so-called metaprograms, so that the computer can execute them. A functional prototype of an appropriate metaprogramming-system will be created. The next step is to automate different patterns (boilerplate-code, design patterns,....) They are randomly selected to get a statistical overview of whether patterns can be generated easily or only with difficulties. In summary it can be said, that all selected patterns have been automated successfully and now can be programmed via annotations. The productivity, maintainability and extensibility has been improved due to reduced programming work, improved overview and central definition. Static code generation makes the function of metaprograms visible and helps debugging. The properties of dynamic metaprogramming were not missed. Furthermore the creation of metaprograms improve the understanding of patterns: Lots of common properties between patterns have been discovered. After a while, a core of common patterns could emerge, which could be used to build new programming languages. All in all the developed solution is a mighty tool for the automation of software patterns, with lots of advantages and few disadvantages. The usage is flexible and platform-independent.
en
Additional information:
Abweichender Titel laut Übersetzung der Verfasserin/des Verfassers Zsfassung in engl. Sprache