« 再帰SQL | トップページ | MSはCMMに取り組む必要なし »

2005/01/24

継承→Aspect→DI へプログラミング言語は進化している

 オブジェクト倶楽部の定期MLで、「オブジェクト指向の再定義」と題して平鍋さんが連載記事を書かれているが、すごく面白い!
 記事の中で印象に残った言葉は、下記の二つの文章。

EoT(Ease of Testing、テスト容易性)の高い設計が、よいオブジェクト指向設計である
EoC(Ease of Changing、変更容易性)の高い設計が、よいオブジェクト指向設計である

 オブジェクト指向言語のあらゆる機能は「テスト容易性」を実現するためにある、と言い切っている。実際、下記のことが思いつく。

1.MockObjectを作るには、無名クラスで実現するために継承を用いる。
2.インターフェイス優先は、テストしやすくさせるため。
3.パッケージ循環依存性を排除するのは、テストしやすくするため。
4.オブジェクトの責務割り当ては、テストしやすいモジュール分割をするため。

 更に、「再利用性」よりも「変更容易性」の方がオブジェクト指向設計で重要だと主張している。最近のアジャイル開発の流行を見ると、そのことを強く感じる。プログラムの変更リスクが低い方がはるかに変化に強い。
 一昔前はコンピュータやネットワークのリソースが高価だったため、変化への対応能力はあまり重要視されていなかった。でも今は違う。変化に強くないと、プログラムの品質そのものも低下するから。

 変更容易性を実現する技術が、継承や委譲だったり、最近ならAspectやDIだったりする。それらの技術を比較してみると、「継承→Aspect→DI」の方向へプログラミング言語が進化しているのが分かる。

A.継承・・・実装時に既に依存関係がある。最も強固な依存関係ゆえ、できるだけ避けるべき。
B.委譲・・・OOでは継承よりも良いと言われるが、無駄な空メソッドが増える。
C.Aspect・・・コンパイル時に依存関係ができる。プログラム同士の依存関係はないが、バイナリ同士には依存関係がある。
D.DI・・・・ランタイム時に依存関係ができる。プログラム同士にもバイナリ同士にも依存関係はない。

 ランタイム時に依存関係ができるということは、パソコンの組み立てと同じく、プログラムを部品と見なすことができることを意味する。インターフェイスさえ合致していれば、いくらでも部品を組み合わせることができる。
 とはいえ、プログラムではインターフェイスを合わせることに四苦八苦することが多いが。。。

 平鍋さんの記事を読むと、プログラミング言語の将来像について深く考えさせられる。

|

« 再帰SQL | トップページ | MSはCMMに取り組む必要なし »

日記・コラム・つぶやき」カテゴリの記事

プログラミング」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: 継承→Aspect→DI へプログラミング言語は進化している:

« 再帰SQL | トップページ | MSはCMMに取り組む必要なし »