web-dev-qa-db-ja.com

アスペクト指向、サブジェクト指向、およびロール指向プログラミングの違いは何ですか?

これらの3つのパラダイムを説明する論文はたくさんありますが、概略的な説明を探しています。

ここにはアスペクト指向プログラミングの非常に優れた説明がいくつかあるので、Stack Overflowの人々が提供するような質の高い回答を得られるように、この質問をします。

14
Peter Fountain

これについて本を書くことでこれに答えることができます。ただし、これは基本的な比較です

1。主題指向プログラミング

サブジェクト指向プログラミングは、次のようにオブジェクト指向から根本的に離れています。オブジェクト指向では、オブジェクトは組み込みの観点から定義されています(つまり、オブジェクトを個別に記述するモデルに基づいています)。これに基づいて、その属性(プロパティ)とメソッド(動作)が導出されます。アプリケーションは、これらのプロパティと動作のuseのみを作成します。これとは対照的に、サブジェクト指向プログラミングでは、そのような分離にオブジェクトは存在しません(そしてモデル化されません)。その過程で、オブジェクトの動作は、元のオブジェクトの作成者の範囲と制御を超えるオブジェクトの他のさまざまな「サブジェクト」によって提供されます。さまざまな「独立して定義可能な動作」を拡張する方法として考えてください。オブジェクトについて。これは、ここで説明されているものと比較して、継承のテンプレートを定義する以上の方法だと思います。

議論の余地のない用語の起源(および概念)は、「 Subject Oriented Programming:A Critique of Pure Objects 、William Harrison and Harold Ossher」という論文に由来しています。ここに別の良い paper があります。個人的にはこれは理論的なフレームワークだと思います。言語/実装があるかどうかわかりません

詳細は thisthis および this を参照してください。

2。アスペクト指向プログラミング

アスペクト指向 プログラミングは、「 oncernsの分離 」の概念に基づいています。基本的に、横断的である懸念事項に対して、手続き型プログラミングまたはオブジェクト指向プログラミングを拡張します。単純化しすぎると、ソフトウェアには機能要件非機能要件があると言えます。これらのクロスカッティング要件には、ロギング、例外処理、スレッド同期、メモリ管理、最適化などの例が含まれます。これらのクロスカッティング[〜#〜] aspects [〜#〜]は、他の機能部品とは別に独立して表現および実装する必要があります。
この領域での包括的な作業は [〜#〜] ibm [〜#〜] ;からです。基本的に、そのような各懸念またはアスペクトは、互いに独立して、多次元の「懸念空間」を形成できます。 、(読み取り this )。

アスペクト指向の優れた実用的な実装のいくつかは AspectJ および AspectC++ および多くの more です。 this を参照してください。

3。役割指向プログラミング
エージェントに向かって進化するにつれ、「役割」と目的を定義する必要がしばしばあります。エージェントが最終的に実行する正確なアクティビティは、その環境に依存します。これは、人間の概念の理解に類似しています。

主な目的は、cooperation processesと呼ばれる明示的な構成を定義することにより、タスクの目的をその協調機能から切り離すことです。ロールは、機能と予想される動作のセットとしてモデル化されます。ただし、これらのアプローチでは、実行環境のモデリングと、エージェント/オブジェクトが環境をどのように認識するかについてもモデリングできます。 this を参照してください。

役割ベースのモデリングと実装のための研究で提案されたさまざまなフレームワークがあります。それらのいくつかは [〜#〜] rope [〜#〜][〜#〜] brain [〜#〜][〜# 〜] alaadin [〜#〜] および more

9
Dipan Mehta