2009-06-04 8 views
4

Leider kann ich mich nicht erinnern, wo ich es gelesen habe, aber ...
... in C++ können Sie eine Klasse aus einem Template-Parameter ableiten. Ich bin ziemlich sicher, dass es
Feature Oriented Programmierung (FOP) genannt wurde und irgendwie nützlich sein soll.Was ist der Sinn der "Feature Oriented Programming" (FOP) in C++, und würde es in Java und C# Sinn machen?

Es war so etwas wie:

template <class T> 
class my_class : T { 
    // some very useful stuff goes here ;) 
} 

Meine Fragen dazu:

  1. Was ist der Sinn solcher Muster?

  2. Da dieser es nicht möglich in Java/C#, wie dieses Muster in diesen Sprachen erreicht wird?

  3. Kann erwartet werden, dass es eines Tages in Java/C# implementiert wird?
    (Na ja, erster Java müsse vom Typ Löschung loszuwerden)

EDIT:
Ich bin wirklich nicht über Generika sprechen in Java/C#
(wo Sie kann nicht leiten eine Klasse von einem generischen Typ Parameter)

Antwort

3

Also, der Ort, den ich sehe, dass das Muster am meisten in C++ ist das Verhalten von Mixins (link), was ich denke, ist eine Implementierung von FOP. Der Artikel, den ich verlinkt habe, geht in ein Beispiel für aspektorientierte Programmierung ein, um einen ähnlichen Effekt in Java zu erzielen.

Ich bezweifle, dass Sie Features wie Vorlagen (die für den Mixin-Ansatz wesentlich sind) in anderen Sprachen sehen, obwohl sie bessere Muster für AOP entwickeln könnten. Persönlich denke ich, dass die einfachste Methode, die ich gesehen habe, Sprachen wie python und ruby ​​sind, die eine Manipulation der Schnittstelle erlauben, aber es ist ein Laufzeitmechanismus zu C++ Metaprogrammierungsfunktionen, so dass es vergleichbar ist, Äpfel und Orangen zu vergleichen.

1

Ich habe dieses Muster schon einmal gesehen, wusste es aber nie als Feature Oriented Programming. Ich habe FOP hier nachgeschlagen: http://wwwiti.cs.uni-magdeburg.de/iti_db/forschung/fop/featurec/ und es sieht nicht ähnlich aus.

Das Muster, das ich weiß, das etwas sehr ähnlich wie Ihre Beschreibung tut, heißt Policy Based Design. Es wird ausführlich in Modern C++ Design von Andrei Alexandrescu diskutiert. Das vorherige Poster erwähnte die aspektorientierte Programmierung, von der ich denke, dass das Policy Based Design eine kleine Untermenge von (im Grunde ist es ein 1-dimensionales AOP anstelle von N-dimensional) ist.

Ich kann mir nicht vorstellen, dass Policy Based Design in Java oder C# implementiert wird, aber AOP Art für Java mit AspectJ http://www.eclipse.org/aspectj/. Es sieht so aus, als hätte es einige Versuche mit C# gegeben, aber ich habe nichts Erwähnenswertes bemerkt.

0

AHEAD ist eine Methodik für die Feature-orientierte Programmierung, und es gibt einen Java-Composer. Es gibt auch eine Eclipse-IDE für FOP-Anwendungen.Sie können sogar AHEAD Composer (Java) oder Feature C++ für C++ wählen. Alle diese sind implementiert als Quelle-Source-Compiler

http://wwwiti.cs.uni-magdeburg.de/iti_db/research/featureide/

die Bedeutung dieses Ansatzes ist, dass Sie Funktionen wie Schichten implementieren, wobei jede Schicht genau ein Merkmal. In dieser Ebene behalten Sie den Code, der verfeinert, einige der Codes in den unteren Ebenen (Ebenen/Features sind geordnet) und Sie codieren auch, wie das Feature mit anderen Features interagiert. In einer Schicht könnte es Verfeinerungen für mehrere Klassen geben (genau das, was Sie tun würden, wenn Sie Ihrem bestehenden Programm ein bestimmtes Feature hinzufügen müssten), aber mit FOP verlieren Sie nicht wirklich die vorherige Version. Wenn Sie ein bestimmtes Feature in einem bestimmten Build deaktivieren, bedeutet dies, dass der Code, der mit diesem Feature interagiert, nicht injiziert wird, der Rest der Features jedoch unverändert bleibt.

Betrachten Sie es als eine zusätzliche Dimension des Polymorphismus und wie Sie die Funktionalität organisieren