「オブジェクト指向設計実践ガイド」 第1章 オブジェクト指向設計

第一章 オブジェクト指向設計

オブジェクト指向の本質: 世界をオブジェクト間でのメッセージが受け渡しの連続としてモデリングすること

「手続き」をオブジェクトの中に隠蔽し、表面から「手続き」を見えないようにする。表面から見えるのはオブジェクトがメッセージをやりとりしている様子。

設計はなぜ大事なのか

アプリケーションはかならず変更が起きる。アプリケーションはただ動くのではなく、柔軟で適応性があり、変化に強いものである必要がある。

オブジェクトがメッセージを送り合うことを実現するには、メッセージの送り手が受け手のことを知っている必要がある。ここに依存関係が生まれ、変更の妨げになる。オブジェクト指向設計とは、この依存関係を管理することである。そのために、いくつかのコーディングテクニックがある。

設計テクニック

設計の指針としては

  • SOLID原則
    • S: 単一責任(Single Responsibility)
    • O: オープン・クローズド(Open-Closed)
    • L: リスコフの置換(Liscov)
    • I: インターフェイス分離(Interface Segration)
    • D: 依存性逆転(Dependency Inversion)

のような原則やデザインパターンといったものがある。

設計の実践

アプリケーションについての完璧な要件は誰も知らない。注文者でさえ、細かいことはまだ考えていない。だからアプリケーションは小さく作り始め、フィードバックをこまめに受けつつ小さい追加を繰り返していくことで作られる。

アジャイルな開発における2つの真理 - 前もって全体の詳細設計を作ることには何の意味もない - アプリケーションの完成時期はだれにも予測できない(そもそも「完成する」とは何か?)

オブジェクト指向をはじめる

データと振る舞いがひとつのオブジェクトとしてまとめられており、オブジェクト同士がメッセージをやり取りすることで処理が進行する。各オブジェクトは、自分の持つデータをどれだけ外にさらすかをコントロールできる。(カプセル化) オブジェクトは「型」を持ち、型によってそのオブジェクトはどんなメッセージに応答可能か予測することができる。

オブジェクト指向プログラミングは、この「型」を設計することでもある。