【新書】オブジェクト指向について:二番煎じ編
※ 上記動画は、以下の内容をまとめたものになります。
オブジェクト指向について
オブジェクト指向の概要
オブジェクト指向とは、現実世界の『モノ(オブジェクト)』を基に、それらを組み合わせてシステムを構築する考え方です。
オブジェクト指向の思考
プログラムで扱う対象を現実世界のモノ(例えば、学校の生徒や商品)に見立て、それに必要な情報(属性)と行動(メソッド)を整理することが重要です。
「クラス」と「オブジェクト指向」の違いについて
オブジェクト指向とは、「オブジェクト指向の考え方で設計されたシステムを実装する場合」を指し、「クラスを使うことでオブジェクト指向になる」というのは誤りです。
クラス:プログラミング言語が提供する構文・機能であり、オブジェクトを設計し、それに基づいてインスタンスを生成するための設計テンプレート。
オブジェクト指向:プログラムの設計方法や思考法であり、現実世界のモノ(オブジェクト)をプログラムで表現し、属性(データ)とメソッド(処理)を一体として扱う考え方。
オブジェクト指向で設計された設計書から実装する場合:オブジェクト指向プログラミングに基づき、クラスを用いてオブジェクトを生成し、設計の概念に従って実装を行い、多態性を含めた設計思想を適用する。
オブジェクト指向で設計されていない設計書から実装する場合:手続き型プログラミングでは、クラスを単なるデータ型や構造体として扱い、手続き的な処理を記述する。これは、関数や手続きを中心にプログラムを構築する方法。
オブジェクト指向の基本的な概念
オブジェクト指向の基本的な概念は以下の通りです。
オブジェクト指向で設計を行う場合、これら概念を念頭に行います。
オブジェクト:データと処理を一つにまとめた『実際に存在するモノ』
クラス:オブジェクトの設計図、オブジェクトを作るためのテンプレート(型)
カプセル化:クラス内部でのデータや処理を隠蔽し、外部から適切にアクセスさせる
継承:既存のクラス(親クラス)を基にして新しいクラス(子クラス)を作成する
多態性:同じメソッドを異なるオブジェクトで異なる処理をする
抽象化:共通の特徴や振る舞いを一つの概念としてまとめる
オブジェクト指向の基本的なプロセス
クラス図を活用した設計
設計を行う際には、クラス図を用いてシステムの構造や関連性を視覚的に整理します。
具体的には、システム全体の関係を視覚的に捉えるため、属性やメソッドの関連性を図示します。
また、論理的思考の手法であるMECE(Mutually Exclusive, Collectively Exhaustive)やロジックツリーを活用することで、設計の効率と網羅性を高めることができます。
MECE:システムの要素を漏れなく、重複なく分割し、全体像を整理します。
ロジックツリー:要素間の関連性や依存関係を視覚的に把握するのに役立ちます。
トップダウンで行う場合
全体の抽象化
システム全体の目的や構造を高い視点から定義し、クラス図を用いて大まかな機能や役割に分けます。具体的なクラスの設計
抽象化した要素を具体化し、各クラスの役割や責任を明確にします。
クラス図を活用して、各クラスの関係性や依存性を詳細に整理します。具体的なクラスの構築
設計された各クラスにデータ(プロパティ)と処理(メソッド)を追加し、実際のクラスを構築します。共通部分の抽出
クラス間の共通する機能や属性を抽出し、基底クラスを設計します。
これにより、設計の再利用性が向上し、コードの冗長性を低減できます。多態性の導入
抽象度の高い基底クラスを作成することで、多態性を活用した柔軟な設計を実現します。
多態性により、同じ操作を異なるクラスで異なる処理として実行できます。
ボトムアップで行う場合
具体的なクラスの構築
システム全体を小さな要素に分割し、それぞれを具体的なクラスとして構築します。
各クラスの役割と処理を具体的に定義します。クラス間の共通部分を抽出
構築したクラスの共通する機能や属性を抽出し、基底クラスを設計します。抽象化の実施
基底クラスを作成し、クラス間の共通性を整理します。これにより、設計の効率と再利用性が向上します。多態性の適用
抽象化された基底クラスを基に、多態性を導入します。
これにより、柔軟で拡張性のある設計を実現します。
トップダウンとボトムアップの比較
「トップダウン」と「ボトムアップ」は、設計における異なる観点や流れを表す手法です。
これらは互いに補完関係にあり、どちらか一方だけでは不完全な設計となる可能性があります。
設計では、トップダウンで全体像を把握しつつ、ボトムアップで具体的な細部を詰めることが重要です。
トップダウン:システムの全体像を把握し、抽象的な視点で大まかな構造や設計を進める方法です。このアプローチにより、全体の統一感や漏れのない設計が可能です。
ボトムアップ:個別の要素やモジュールから設計を積み上げ、具体的な課題やニーズに対応する方法です。この手法では、現場の細かな要件や課題に即した実践的な設計が可能です。
設計における両手法の統合的利用
設計を進める際には、トップダウンで全体像を把握しつつ、ボトムアップで細部を詰める流れが不可欠です。
例えば、全体設計で抽象的な基盤を定義し、それを詳細設計や実装段階で具体化することで、設計の網羅性と柔軟性を確保できます。
両手法を繰り返し適用することで、設計の精度を高めることが可能です。