- FeatureC++
-
FeatureC++ Precompiler Entwickler Marko Rosenmüller Aktuelle Version 0.7
(22. März 2010)Betriebssystem Windows, Linux, Mac OS X Kategorie Compiler Deutschsprachig nein FeatureC++ Webseite FeatureC++ ist eine Erweiterung der Programmiersprache C++ zur Unterstützung featureorientierter Programmierung (FOP)[1]. Dazu erfolgt eine Dekomposition einer Software in Features, die gleichzeitig die Grundlage der Organisation des Programmcodes bilden. Ein Feature repräsentiert ein Inkrement in Programmfunktionalität ausgehend von einer festen Programmbasis und wird im Rahmen von FOP als modular implementiert. FeatureC++ vereint zudem FOP und aspektorientierte Programmierung (AOP) unter Verwendung von Aspectual Mixin Layers [2].
Technische Umsetzung
Die Umsetzung erfolgt durch Codetransformation von FeatureC++ Code in herkömmlichen C++ Code durch einen Precompiler. Ausgangspunkt ist die Organisation von Features in Verzeichnissen. Ein Verzeichnis enthält alle zu einem Feature gehörenden Klassen und Klassenverfeinerungen, die jeweils in einer Header-Datei spezifiziert werden. FeatureC++ erweitert die C++-Syntax um zwei neue Schlüsselwörter: super und refines. Das folgende Beispiel verdeutlicht die Arbeitsweise:
Definition von base.h in src/base:#include <iostream> class base { public: void print() { std::cout << "base-print" << std::endl; } };
Definition von base.h in src/ext1:refines class base { public: void print() { super::print(); std::cout << "ext-print" << std::endl; } };
base.h (in src/ext1) ist eine Erweiterung der base-Klasse aus src/base. super::print() wird durch die Methode print() aus der base-Klasse (src/base) ersetzt. Darüber hinaus lassen sich Member-Variablen oder neue Methoden einer Klasse hinzufügen (engl. static introduction). Eine Erweiterung kann auf anderen Erweiterungen aufsetzen. Dadurch ergibt sich eine lineare Erweiterungshierarchie. Die Reihenfolge der Anwendung von Erweiterungen wird in einer Datei spezifiziert. Der folgende Quelltext zeigt das Ergebnis nach dem FeatureC++-Compiler Lauf:
class base { //**** Layer base **** public: inline void base_print() { std::cout << "base-print" << std::endl; } //**** Layer ext1 **** public: void print() { base_print(); std::cout << "ext-print" << std::endl; } };
Weblinks
Einzelnachweise
- ↑ FeatureC++: On the Symbiosis of Feature-Oriented and Aspect-Oriented Programming. Abgerufen am 28. Dezember 2010.
- ↑ Aspectual Mixin Layers: Aspects and Features in Concert. Abgerufen am 28. Dezember 2010.
Kategorie:- Programmiersprache C++
Wikimedia Foundation.