4

悲しいことに、どこで読んだか覚えていませんが...
...C++ では、テンプレート パラメーターからクラスを派生させることができます。
私はそれが機能指向プログラミング(FOP)と呼ばれ、何らかの形で役立つことを意図していたと確信しています。

それは次のようなものでした:

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

これに関する私の質問:

  1. そのようなパターンの意味は何ですか?

  2. これは Java / C# では不可能なため、これらの言語でこのパターンをどのように実現していますか?

  3. いつか Java / C# で実装されると期待できますか?
    (まあ、最初に Java は型消去を取り除く必要があります)

編集
私は本当にJava / C#のジェネリックについて話しているわけ
では ありません(ジェネリック型パラメーターからクラスを派生させることはできません)

4

3 に答える 3

3

そのため、C++ でそのパターンが最も多く見られる場所は、FOP の実装であると思われるmixins ( link ) の動作です。私がリンクした記事はアスペクト指向プログラミングの例に入り、Java で同様の効果を作ろうとしています。

テンプレートのような機能 (ミックスイン アプローチに不可欠) を他の言語で目にすることはないと思いますが、AOP のより良いパターンを開発することはできます。個人的には、インターフェイスの操作が可能な Python や Ruby などの言語が最も簡単な方法だと思いますが、これは C++ のコンパイル時のメタプログラミング機能に対する実行時のメカニズムであるため、リンゴとオレンジを比較するようなものです。

于 2009-06-04T13:36:50.263 に答える
1

このパターンは以前にも見たことがありますが、機能指向プログラミングとは知りませんでした。ここで FOP を調べました: http://wwwiti.cs.uni-magdeburg.de/iti_db/forschung/fop/featurec/と似ていません。

私が知っているパターンは、あなたの説明と非常によく似たもので、ポリシー ベースの設計と呼ばれます。Andrei Alexandrescu による Modern C++ Design で徹底的に議論されています。以前の投稿者は、アスペクト指向プログラミングについて言及しましたが、ポリシー ベース デザインはその小さなサブセットであると思います (基本的には、N 次元ではなく 1 次元 AOP です)。

Policy Based Design が Java や C# で実装されるとは思いませんが、AOP のようなものは AspectJ http://www.eclipse.org/aspectj/を使用した Java 用です。C# でいくつかの試みがあったようですが、言及する価値があることに気づきませんでした。

于 2009-06-05T03:17:51.460 に答える
0

AHEAD は機能指向プログラミングを行うための方法論であり、Java コンポーザーがあります。fop アプリケーションを実行するための Eclipse IDE もあります。AHEAD composer (java) または featurec++ for c++ を選択することもできます。これらはすべて、ソースからソースへのコンパイラとして実装されています

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

このアプローチの意味は、機能をレイヤーとして実装することです。各レイヤーは正確に 1 つの機能です。したがって、このレイヤーでは、下位レイヤーのコードの一部を改良するコードを保持し(レイヤー/機能は順序付けられています)、機能が他の機能とどのように相互作用するかをエンコードします。レイヤーでは、複数のクラスに改良が加えられる場合があります (既存のプログラムに特定の機能を追加する必要がある場合に行うこととまったく同じです) が、FOP を使用すると、以前のバージョンを実際に失うことはありません。特定のビルドの特定の機能を無効にすると、その機能とやり取りするコードは挿入されず、残りの機能は変更されないという考えです。

これは、ポリモーフィズムの追加の次元であり、機能をどのように編成するかであると考えてください。

于 2010-06-17T19:32:00.533 に答える