オブジェクト指向
データと操作をオブジェクトとしてまとめ、現実の概念に近づけて設計する考え方
オブジェクト指向とは
オブジェクト指向は、データ (状態) とそれを操作する手続き (振る舞い) を「オブジェクト」という単位にまとめて、プログラムを組み立てる考え方だ。現実世界のものごと (利用者・注文・商品など) をオブジェクトとして表現し、それらの相互作用としてシステムを記述する。大規模で複雑なソフトウェアを、人間が理解しやすい形に整理する手法として広く使われている。
3 つの柱
| 概念 | 意味 |
|---|---|
| カプセル化 | データを隠し、決められた操作経由でのみ触れる |
| 継承 | 既存の性質を引き継いで新しい種類を作る |
| ポリモーフィズム | 同じ呼び出しで対象ごとに異なる振る舞い |
中でもカプセル化は重要で、内部の状態を勝手に書き換えられないようにすることで、変更の影響範囲を局所化できる。
なぜ生まれたか
プログラムが大規模化すると、データと処理が散らばり、どこを変えると何に影響するかが見えなくなる。オブジェクト指向は、関連するデータと処理を 1 か所にまとめ、外部からの干渉を制限することで、この複雑さを管理しようとする試みだった。設計の関心を「手順」から「責務を持つ部品の組み合わせ」へと移したことに意義がある。
誤解と適切な距離感
オブジェクト指向は「継承を多用すること」と誤解されがちだが、過度な継承はかえって複雑な依存関係を生む。近年は継承より「組み合わせ (コンポジション)」を優先する考え方が一般的だ。また、すべてをオブジェクト指向で書くべきとも限らず、関数型など他のパラダイムと使い分ける場面も多い。重要なのは形式を守ることではなく、変更に強く理解しやすい構造をつくるという本来の目的を見失わないことだ。
考え方を学ぶには関連書籍が役立つ。
この記事は役に立ちましたか?
関連用語
設計
要求を満たすソフトウェアの構造や振る舞いを、実装前に決める活動
アーキテクチャ
システム全体の構造設計。コンポーネントの分割と関係を決める最上位の設計判断
プログラミング
コンピュータに実行させる手順をプログラミング言語で記述し、動作を作り出す行為
エンティティと値オブジェクト
DDD における 2 つの基本的なドメインモデル要素 - 同一性で区別するエンティティと、値で区別する値オブジェクト
Flyweight パターン
多数のオブジェクト間で共有可能な状態を分離し、メモリ使用量を削減するデザインパターン
Builder パターン
複雑なオブジェクトの生成をメソッドチェーンで段階的に構築するデザインパターン