継承→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・・・・ランタイム時に依存関係ができる。プログラム同士にもバイナリ同士にも依存関係はない。
ランタイム時に依存関係ができるということは、パソコンの組み立てと同じく、プログラムを部品と見なすことができることを意味する。インターフェイスさえ合致していれば、いくらでも部品を組み合わせることができる。
とはいえ、プログラムではインターフェイスを合わせることに四苦八苦することが多いが。。。
平鍋さんの記事を読むと、プログラミング言語の将来像について深く考えさせられる。
| 固定リンク
「日記・コラム・つぶやき」カテゴリの記事
- TwitterやFacebookは人力キュレーションツールとして使う(2022.10.02)
- 「現代病「集中できない」を知力に変える 読む力 最新スキル大全」の感想(2022.08.28)
- 人類は海辺から生まれた~水生類人猿説が面白い(2022.08.09)
- 戦前の日本人の気質はまだ成熟していない青年期と同じだった(2022.06.14)
- 物理学を攻略するためのマップ(2022.04.18)
「プログラミング」カテゴリの記事
- Javaのモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのモジュールシステムは複雑性をより増している(2022.09.10)
- Javaはなぜ関数型言語になろうとしているのか(2022.09.02)
- Javaのラムダ式の考え方(2022.08.10)
- Javaはオブジェクト指向言語ではなく関数型言語だった~「[増補改訂]関数プログラミング実践入門」はお勧めの本だ(2022.08.06)
コメント