オブジェクト指向は何のためのものか

オブジェクト指向に目的はない?

再利用性?ご冗談でしょう?

原則から探る価値

「拡張に対して柔軟で、かつ変更の影響が局所化されること」そのために「個々のエンティティはシンプルであり、それらの関係は疎であること」を是とするのはなぜか。それは私やあなたを解放するためと思いたい。理解しやすいソフトウェアを重視するのだ、と。理解しやすさが品質と保守性を確保し、幸せへ導くのだ、と。

オブジェクト指向言語がサポートすること

オブジェクト指向言語の特徴としてカプセル化、継承、ポリモーフィズムが挙げられるが、これらとて不必要な依存性を排除しようとする働きなのでは。

カプセル化は、特定の手続きをふまなければデータにアクセスする(ましてや変更する)ことはできないように強制する(罰則はコンパイル不可)こと。これは分かりやすい。

継承とポリモーフィズムは、抽象による実装の隠蔽、契約された仕様のみに依存し、実装に依存させない、ということを可能とする仕組み。

設計の定石を共有することによる解決

しかし言語レベルのサポートと開発者個々人のひらめきだけでは約束の地へはたどり着けない。シンプルなソフトウェアエンティティの疎な関係による組み合わせで、複雑な機能を実現するにはどうしたらいいのか。

それに対する回答として、カタログ形式で記述された知恵の共有と集積。パターン。