見出し画像

【新書】オブジェクト指向について:二番煎じ編

※ 上記動画は、以下の内容をまとめたものになります。


オブジェクト指向について

オブジェクト指向の概要

オブジェクト指向とは、現実世界の『モノ(オブジェクト)』を基に、それらを組み合わせてシステムを構築する考え方です。

オブジェクト指向の思考

プログラムで扱う対象を現実世界のモノ(例えば、学校の生徒や商品)に見立て、それに必要な情報(属性)と行動(メソッド)を整理することが重要です。

「クラス」と「オブジェクト指向」の違いについて

オブジェクト指向とは、「オブジェクト指向の考え方で設計されたシステムを実装する場合」を指し、「クラスを使うことでオブジェクト指向になる」というのは誤りです。

  • クラス:プログラミング言語が提供する構文・機能であり、オブジェクトを設計し、それに基づいてインスタンスを生成するための設計テンプレート。

  • オブジェクト指向:プログラムの設計方法や思考法であり、現実世界のモノ(オブジェクト)をプログラムで表現し、属性(データ)とメソッド(処理)を一体として扱う考え方。

  • オブジェクト指向で設計された設計書から実装する場合:オブジェクト指向プログラミングに基づき、クラスを用いてオブジェクトを生成し、設計の概念に従って実装を行い、多態性を含めた設計思想を適用する。

  • オブジェクト指向で設計されていない設計書から実装する場合:手続き型プログラミングでは、クラスを単なるデータ型や構造体として扱い、手続き的な処理を記述する。これは、関数や手続きを中心にプログラムを構築する方法。

オブジェクト指向の基本的な概念

オブジェクト指向の基本的な概念は以下の通りです。
オブジェクト指向で設計を行う場合、これら概念を念頭に行います。

  • オブジェクト:データと処理を一つにまとめた『実際に存在するモノ』

  • クラス:オブジェクトの設計図、オブジェクトを作るためのテンプレート(型)

  • カプセル化:クラス内部でのデータや処理を隠蔽し、外部から適切にアクセスさせる

  • 継承:既存のクラス(親クラス)を基にして新しいクラス(子クラス)を作成する

  • 多態性:同じメソッドを異なるオブジェクトで異なる処理をする

  • 抽象化:共通の特徴や振る舞いを一つの概念としてまとめる

オブジェクト指向の基本的なプロセス

クラス図を活用した設計

設計を行う際には、クラス図を用いてシステムの構造や関連性を視覚的に整理します。
具体的には、システム全体の関係を視覚的に捉えるため、属性やメソッドの関連性を図示します。
また、論理的思考の手法であるMECE(Mutually Exclusive, Collectively Exhaustive)やロジックツリーを活用することで、設計の効率と網羅性を高めることができます。

  • MECE:システムの要素を漏れなく、重複なく分割し、全体像を整理します。

  • ロジックツリー:要素間の関連性や依存関係を視覚的に把握するのに役立ちます。

トップダウンで行う場合

  1. 全体の抽象化
    システム全体の目的や構造を高い視点から定義し、クラス図を用いて大まかな機能や役割に分けます。

  2. 具体的なクラスの設計
    抽象化した要素を具体化し、各クラスの役割や責任を明確にします。
    クラス図を活用して、各クラスの関係性や依存性を詳細に整理します。

  3. 具体的なクラスの構築
    設計された各クラスにデータ(プロパティ)と処理(メソッド)を追加し、実際のクラスを構築します。

  4. 共通部分の抽出
    クラス間の共通する機能や属性を抽出し、基底クラスを設計します。
    これにより、設計の再利用性が向上し、コードの冗長性を低減できます。

  5. 多態性の導入
    抽象度の高い基底クラスを作成することで、多態性を活用した柔軟な設計を実現します。
    多態性により、同じ操作を異なるクラスで異なる処理として実行できます。

ボトムアップで行う場合

  1. 具体的なクラスの構築
    システム全体を小さな要素に分割し、それぞれを具体的なクラスとして構築します。
    各クラスの役割と処理を具体的に定義します。

  2. クラス間の共通部分を抽出
    構築したクラスの共通する機能や属性を抽出し、基底クラスを設計します。

  3. 抽象化の実施
    基底クラスを作成し、クラス間の共通性を整理します。これにより、設計の効率と再利用性が向上します。

  4. 多態性の適用
    抽象化された基底クラスを基に、多態性を導入します。
    これにより、柔軟で拡張性のある設計を実現します。

トップダウンとボトムアップの比較

「トップダウン」と「ボトムアップ」は、設計における異なる観点や流れを表す手法です。
これらは互いに補完関係にあり、どちらか一方だけでは不完全な設計となる可能性があります。
設計では、トップダウンで全体像を把握しつつ、ボトムアップで具体的な細部を詰めることが重要です。

  • トップダウン:システムの全体像を把握し、抽象的な視点で大まかな構造や設計を進める方法です。このアプローチにより、全体の統一感や漏れのない設計が可能です。

  • ボトムアップ:個別の要素やモジュールから設計を積み上げ、具体的な課題やニーズに対応する方法です。この手法では、現場の細かな要件や課題に即した実践的な設計が可能です。

設計における両手法の統合的利用

設計を進める際には、トップダウンで全体像を把握しつつ、ボトムアップで細部を詰める流れが不可欠です。
例えば、全体設計で抽象的な基盤を定義し、それを詳細設計や実装段階で具体化することで、設計の網羅性と柔軟性を確保できます。
両手法を繰り返し適用することで、設計の精度を高めることが可能です。