オブジェクト指向ってなんだっけ

オブジェクト指向を見ていく中で下記についてあまりピンと来なかったのですが、

  • オブジェクト指向ってなんのためにあるんだっけ?
  • 変更が簡単って?

オブジェクト指向系の本を読んでいく中で、腑に落ちたので簡単に書きだしてみました。

オブジェクト指向ってなんのためにあるんだっけ?

要件が変わらないのであれば、そもそも変更を加える必要はなく、「変更しやすさ」を意識した設計も不要です。 しかし実際の開発では、要件は必ずといっていいほど変化・追加されていくものです。だからこそ、変更に強い設計を意識する必要があります。

オブジェクト指向でアプリケーションを作る際に難しさが生まれるのは、多くの場合「依存関係の複雑化」が原因です。 一箇所の修正が思わぬ箇所に影響を及ぼしてしまう、といった問題が典型的な例です。

オブジェクト指向設計では、こうしたオブジェクト同士の関係を整理し、適切に管理できる形へと落とし込むことで、「変更を許容できる構造」を実現します。 未来の出来事を正確に予測することはできません。 そのため、特定の未来を想定したコードを書くのではなく、「いずれ何かが起こる」という前提を持ち、変化に対応できる余地を設計の中に残しておくことが重要です。

つまり、後からでも設計を見直せるようにしておくこと――それが、変更コストを下げることにつながります。

設計を柔軟にし、変更に強い構造を作るための代表的な手段として、SOLID原則(単一責任原則、オープン・クローズド原則、リスコフの置換原則、インターフェース分離原則、依存性逆転の原則)や、デザインパターンといった考え方が挙げられます。

設計が失敗する主な原因は二つあります。

  • 複雑化によって変更が難しくなってしまうこと
  • 開発の早い段階で設計を固定してしまい、後からの変更を受け入れにくくなること

設計とは漸進的に進めるプロセスであり、繰り返しのフィードバックを通じて少しずつ形作られていくものです。

変更が簡単って?

「変更が容易である」とは、以下のような条件を満たすことを指します。

  • 変更によって副作用が生じない
  • 小さな変更であれば、影響範囲も最小限で済む
  • 既存のコードを再利用できる
  • 最も簡単な変更はコードの追加であり、追加したコード自体も変更しやすい

さらに、変更の容易さを支える性質として、以下が必要です。

  • 見通しが良い:変更の影響範囲が明確である
  • 合理的:変更にかかるコストと得られる利益が釣り合っている
  • 利用性が高い:新しい環境や意図しない環境でも再利用できる
  • 模範的:追加するコードが、上記の性質を備えている