コンピューティングにおいて、サブジェクト指向プログラミングは 、オブジェクトの状態 (フィールド) と動作 (メソッド) がオブジェクト自体に固有のものとして見られるのではなく、オブジェクトのさまざまな主観的認識 (「サブジェクト」) によって提供されるオブジェクト指向ソフトウェア パラダイムです。この用語と概念は、1993 年 9 月に会議論文[1]で初めて発表されました。この論文は、後に 1986 年から 1996 年にかけての会議で発表された 3 つの最も影響力のある論文の 1 つとして認識されました。[2]この論文で説明されているように、プラトンとカントの哲学的見解の対比と類似点が示され、それがソフトウェア オブジェクトに適用されています。たとえば、私たちはみな、木が測定可能な高さ、重さ、葉の量などを持っていると認識しますが、鳥の観点から見ると、木は食料や巣作りの目的で相対的な価値の尺度を持っているかもしれません。また、税務査定官の観点から見ると、特定の年に課税対象となる特定の価値を持っているかもしれません。鳥や税務査定官の追加の状態情報は、木に固有のものとして見られる必要はなく、鳥と税務査定官の認識によって追加されます。カントの分析から、私たちが固有と考える特性についても同じことが当てはまる可能性があります。
サブジェクト指向プログラミングは、オブジェクトを記述するクラスを「サブジェクト」に編成することを提唱しており、サブジェクトはより大きなサブジェクトを形成するために合成される可能性があります。フィールドまたはメソッドへのアクセス ポイントでは、複数のサブジェクトの貢献が合成される可能性があります。これらのポイントは、サブジェクトの結合ポイント[3]として特徴付けられました。たとえば、木が伐採された場合、関連するメソッドは、鳥と税務査定官のサブジェクトの行動を木自体の行動と結合する必要がある場合があります。したがって、これは基本的に、アルゴリズム (手続き型) または表現を隠す (オブジェクト) 性質とは対照的に、ソフトウェア開発の合成性質の見方です。
人間関係
アスペクト指向プログラミングとの関係
1997 年にアスペクト指向プログラミングが導入されたことで[4]、サブジェクト指向プログラミングとの関係や、サブジェクトとアスペクトの違いについて疑問が生じました。これらの疑問はしばらくは解決されませんでしたが、1999 年に出願されたアスペクト指向プログラミングの特許[5]で解決され、従来の技術との特徴的な違いとして次の 2 つの点が浮かび上がりました。
- アスペクト プログラムは、a) 実行において横断的動作が含まれるポイントを含むクロスカットと、b) クロスカットに関連付けられた実装の一部を含むクロスカット アクションの両方を含み、実装の一部は、横断的動作を実装するコンピュータ読み取り可能なプログラム コードを含みます。
- このアスペクトは、オブジェクトクラスやその他のソフトウェアエンティティに横断的な動作を透過的に強制する。
サブジェクト指向の視点では、クロスカットはアスペクト(サブジェクト)とは別に配置され、動作はアスペクトによって強制されず、合成ルールによって制御されます。Hindsight [6]では、クエリのようなポイントカットの概念を導入して活用し、アスペクトが一般的な方法で使用するジョインポイントを外部から強制することで、アスペクト指向プログラミングを区別することもできます。
サブジェクト指向プログラミングのプレゼンテーションでは、ジョインポイントは、フィールドアクセスとメソッド呼び出しに意図的に制限されていました。これは、よく設計されたフレームワークが機能拡張を許可するように設計されたポイントであるからです。外部から課せられたポイントカットの使用は重要な言語機能ですが、アスペクト指向プログラミングの最も議論の多い機能の1つです。[7]
アスペクト指向ソフトウェア開発との関係
2000 年代に入ると、いくつかの研究グループが、別々にパッケージ化された状態と機能の合成またはアタッチメントを使用してオブジェクトを形成するさまざまなテクノロジを追求していることが明らかになりました。[8]共通の関心分野を特定の特許定義を持つアスペクト指向プログラミングと区別し、合成テクノロジがソフトウェア開発のコーディング段階だけを扱うのではないことを強調するために、これらのテクノロジは、アスペクト指向ソフトウェア開発という用語の下にまとめられ、[9]このテーマに関する組織と国際会議シリーズが開始されました。アスペクト指向プログラミングと同様に、サブジェクト指向プログラミング、合成フィルタ、機能指向プログラミング、および適応型メソッドは、アスペクト指向ソフトウェア開発アプローチと見なされています。
寸法
多次元的な関心の分離、Hyper/J、および関心操作環境
サブジェクト指向プログラミングの元々の定式化では、意図的にパッケージング技術として構想され、関数とデータ型の空間をどちらの次元でも拡張できるようにしました。最初の実装はC++、[10]とSmalltalk [11]でした。これらの実装では、ソフトウェアラベルと合成ルールの概念を利用して、サブジェクトの結合を記述しました。
ソフトウェアの分析と構成のためのよりよい基盤が、パッケージングだけでなく、これらのパッケージが対処するさまざまな懸念事項の観点から提供されるべきであるという懸念に対処するために、懸念事項がそれを実装するソフトウェア ユニットに関連付けられている多次元「マトリックス」の観点から、資料の明確な構成が開発されました。この構成は、多次元の懸念事項の分離と呼ばれ、これを説明した論文[12]は、 ICSE 1999 カンファレンスで最も影響力のある論文として認められました。[13]
この新しい概念はJavaソフトウェアを作成するために実装され、ツールにはHyper/Jという名前が付けられました。 [14]
構成とサブジェクトの概念は、要件仕様やドキュメントなどの実行可能なセマンティクスを持たないソフトウェア成果物に適用できます。Eclipseの研究手段としてConcern Manipulation Environment (CME)が説明されており[ 15]、クエリ、分析、モデリング、[16]および構成のためのツールが、表現を操作するための適切なプラグインアダプタを使用することで、あらゆる言語または表現の成果物に適用されます。
Hyper/J合成エンジン[17]の後継はCMEの一部として開発され、合成エンジンのいくつかの要素に対して一般的なアプローチを採用しています。
- 結合点を識別するための統一機能を備えたクエリ言語、
- 柔軟な構造アタッチメントモデル、
- 識別された要素を順序付けるためのネストされたグラフ仕様、
- 競合するルール間の競合を解決するための優先順位の指定。
Hyper/JとCMEは、それぞれalphaWorks [18]とsourceforge [19]から入手可能ですが、どちらも積極的にサポートされていません。
「第三次元」としての主題指向プログラミング
オブジェクト指向プログラミングにおけるメソッドディスパッチは、実行されるコードがメソッド名と対象のオブジェクトの両方に依存するという意味で、「2次元」であると考えることができます。これは、手続き型プログラミングとは対照的です[20]。手続き型プログラミングでは、手続き名が直接、または1次元的にサブルーチンに解決されます。また、サブジェクト指向プログラミングでは、送信者またはサブジェクトもディスパッチに関連し、3番目の次元を構成します。
参照
参考文献
- ^ ウィリアム・ハリソンとハロルド・オッシャー、「サブジェクト指向プログラミング - 純粋オブジェクトの批評」、1993 年オブジェクト指向プログラミング システム、言語、およびアプリケーションに関する会議の議事録、1993 年 9 月
- ^ 「最も影響力のあるOOPSLA論文賞」www.sigplan.org。
- ^ Harold Ossher、Peri Tarr。オペレーションレベルの構成: (結合) ポイントの事例、ECOOP '98 ワークショップ リーダー、406–409
- ^ Kiczales, G. ; Lamping, J.; Mendhekar, A.; Maeda, C.; Lopes, C.; Loingtier, JM; Irwin, J. (1997). アスペクト指向プログラミング(PDF) . ECOOP '97.第 11 回ヨーロッパオブジェクト指向プログラミング会議の議事録. LNCS . Vol. 1241. pp. 220–242. CiteSeerX 10.1.1.115.8660 . doi :10.1007/BFb0053381. ISBN 3-540-63089-9。
- ^ キザレス;グレゴール・J.ランピング;ジョン・O;ロペス;クリスティーナ・V。フグニン。ジェームス・J.ヒルズデール;エリック・A.ボヤパティ。 Chandrasekhar、アスペクト指向プログラミング、米国特許 6,467,086、2002 年 10 月 15 日
- ^ ウィリアム・ハリソン。アスペクト指向の解体と再構築、アスペクト言語の基礎に関する第 7 回年次ワークショップ、ベルギー、ブリュッセル、2008 年 4 月 1 日、ゲイリー・T・リーヴンズ編、ACM デジタル ライブラリ、2008 年、43-50 ページ
- ^ フリードリヒ・シュタイマン。アスペクト指向プログラミングの逆説的な成功、オブジェクト指向プログラミングシステム、言語、アプリケーションに関する第 21 回 ACM SIGPLAN カンファレンスの議事録、オレゴン州ポートランド、米国、2006 年、481 - 497 ページ
- ^ Communications of the ACM、第44巻、第10号、1994年10月、28-95ページ
- ^ 「ホーム」. AOSD.net .
- ^ Harold Ossher、Matthew Kaplan、William Harrison、Alexander Katz、Vincent Kruskal、「Subject-Oriented Composition Rules」、1995 年オブジェクト指向プログラミング システム、言語、アプリケーションに関する会議の議事録、1995 年 10 月
- ^ Hafedh Mili、William Harrison、Harold Ossher、「Smalltalk でのサブジェクト指向プログラミングのサポート」、TOOLS USA 96 の議事録、1996 年 8 月
- ^ Harold Ossher、Peri Tarr、William Harrison、Stanley Sutton、「N Degrees of Separation: Multi-Dimensional Separation of Concerns」、1999 年国際ソフトウェア工学会議の議事録、1999 年 5 月
- ^ 「SIGSOFT - ACM ソフトウェア エンジニアリング特別興味グループ」。
- ^ Harold Ossher、Peri Tarr。Hyper/J: Java の多次元的な関心の分離、第 23 回国際ソフトウェア工学会議の議事録、トロント、オンタリオ州、カナダ、2001 年、ページ: 821 - 822
- ^ William Chung、William Harrison、Vincent Kruskal、Harold Ossher、Stanley M. Sutton, Jr.、Peri Tarr、Matthew Chapman、Andrew Clement、Helen Hawkins、Sian January。関心操作環境、第 27 回国際ソフトウェア工学会議議事録、米国ミズーリ州セントルイス、2005 年
- ^ William Harrison、Harold Ossher、Stanley Sutton、Peri Tarr。懸念操作環境における懸念モデリング、ソフトウェアにおける懸念のモデリングと分析に関する 2005 年ワークショップの議事録、ミズーリ州セントルイス、2005 年
- ^ William Harrison、Harold Ossher、Peri Tarr。ソフトウェア成果物の一般的な構成、ソフトウェア構成ワークショップ 2006 の議事録、2006 年 3 月、Springer-Verlag、LNCS 4089、194-210 ページ
- ^ 「レガシー コミュニティ - IBM コミュニティ」。
- ^ 「懸念操作環境 (CME)」 2015年4月24日。
- ^ 「オブジェクトテクノロジージャーナル:コンテキスト指向プログラミング」。
外部リンク
- サブジェクト指向プログラミングの分散特性: プロセスおよびオブジェクト指向パラダイムによる評価
- アルファワークス: HyperJ
- Eclipse アーカイブされたテクノロジー プロジェクト
- Amethyst: 主題指向プログラミングのための JavaScript ライブラリ
