私が最初の Java 講師を行ったのが平成 13 年でした。それから 7 年余、のべ 500 名以上の技術者にオブジェクト指向の話をしてきました。そこでわかったことは、オブジェクト指向を理解する(慣れる)過程には、ある共通の「段階」があるということです。
最初の段階では、一つのクラスに多くのメソッドを実装しようとします。巨大なクラス、巨大なメソッドが登場し、「このコードはどうすればオブジェクト指向っぽくなるだろう」と悩み始めます。
次の段階では、クラスの関係を「継承」で考えようとします。その結果、パッケージ内で結合依存度の高いクラス群ができあがってしまい、まだオブジェクト指向のメリットを享受できていません。引き続き、もっとよい方法は何かと学習を続けます。
インタフェースの使い方に慣れたころ、クラス間の関係性を疎結合に保つことの重要性を理解できます。リファクタリングとデザインパターンを学ぶ意味がわかります。クラスの数は増えますが、一つ一つのクラスは単一目的で実装され、クラスの組み合わせを行うことが楽しくなります。
インタフェースプログラミングをさらに進めると、DI と AOP 技術の存在意義が理解できるようになります。言い換えると、あるレベルに達しない限り、DI や AOP の有効性には気付かないということです。
オブジェクト指向は「ソースコードの正規化」技術だと思っています。RDB はテーブルの正規化によってデータの二重管理を防ぎますが、オブジェクト指向はデザインパターンによってソースコードのコピペを防ぎます。