【おぶじぇくとしこうせっけい】

オブジェクト指向設計 とは?

最終更新:
💡 「モノ」を主役にして、データと動きをセットで考える設計術

データと処理をまとめたオブジェクトの責任や協調を中心に、ソフトウェアを設計する方法。カプセル化・継承・ポリモーフィズムなどの考え方を使うが、すべての設計で継承が必須ではない。

📌 このページのポイント
データと処理をまとめ、責任と協調を考える カプセル化 継承 ポリモーフィズム 🐶 犬 内部:名前 年齢など 公開操作 getName() setAge() 🐾 動物 共通の性質 🐶 犬 🐱 猫 共通の操作 鳴く() 🐶 ワン 🐱 ニャー 内部を隠し 操作を公開 親の性質を 子が受け継ぐ 共通操作で 異なる振る舞い 使う仕組みは、言語と設計の目的に応じて選ぶ
左は内部データと公開操作、中は親子の型の関係、右は共通操作で異なる振る舞いを使う例。中の矢印は子から親への継承関係、右は操作の呼び出しを示す。継承がすべてのオブジェクト指向設計に必須という意味ではない。
ひよこ ひよこ
オブジェクト指向設計って何なの?
ペンギン先生 ペンギン先生
オブジェクトが持つデータや処理、担当する責任や協調を考えて設計する方法だよ。「犬」なら名前や年齢と、鳴く・走るといった処理をまとめる例になる。ただし実物のすべてを再現せず、アプリに必要な部分を選ぶんだ。
ひよこ ひよこ
カプセル化って何のこと?
ペンギン先生 ペンギン先生
内部の詳細を隠し、公開した操作を通して利用してもらうことだよ。テレビの回路を直接触らず、リモコンで操作するイメージだね。プログラムでもデータの変更方法を管理でき、内部の変更が利用側へ広がりにくくなるんだ。
ひよこ ひよこ
継承は必ず使うの?
ペンギン先生 ペンギン先生
必須ではないよ。継承は親の性質を子が受け継ぐ仕組みで、「動物」と「犬」のような関係に使う例がある。一方、他のオブジェクトを部品として組み合わせる合成もある。共通コードがあるという理由だけで、無理に親子関係へまとめないんだ。
ひよこ ひよこ
ポリモーフィズムって難しそう…
ペンギン先生 ペンギン先生
共通のインターフェースを通して、種類ごとの振る舞いを使うことだよ。同じ「鳴く」という操作でも、犬はワン、猫はニャーと返すイメージ。名前が偶然同じだけではなく、利用側が共通の操作の契約に依存するところが大事なんだ。
ひよこ ひよこ
良い設計にするコツはあるの?
ペンギン先生 ペンギン先生
変更される理由や、オブジェクトの責任を考えるよ。SOLIDの単一責任原則なら、同じ理由で変わるものをまとめ、違う理由で変わるものを分ける。デザインパターンも課題に合う場合に使い、採用しただけで変更が不要になるとは考えないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「オブジェクト指向設計」って出てきたら「データと処理をセットにしたオブジェクト中心の設計方法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Object-Oriented Design」 = オブジェクト指向の設計
💬 object(対象)を中心にしたdesign(設計)という名前だよ。現実のものをそのまま写すのではなく、目的に必要なデータや振る舞いを選んでモデルにするんだ。

参考資料

← 用語集にもどる