汎化ー特化関係とは、「犬は動物である」のように、共通する性質を持つ下位クラス(特化)が上位クラス(汎化)に属する関係で、抽象化(汎化)と具象化(特化)の概念です。オブジェクト指向では、共通機能を親クラス(スーパークラス)にまとめ、子クラス(サブクラス)がそれを引き継ぐ(継承する)ことでコードの重複を防ぎます(例:動物クラスから犬クラス、猫クラスを派生させる)。

画像参照:https://dcross.impress.co.jp/docs/column/column20200825/001711-2.html
汎化
- 意味: 複数の異なるものから共通する性質や法則を見つけ出し、より抽象的な概念(上位クラス)を定義すること。
- 例: 「動物」という上位クラスは、「犬」「猫」「鳥」などの下位クラスに共通する「呼吸する」「食べる」といった性質を汎化したもの。
特化
- 意味: 汎化された上位クラスの性質を受け継ぎつつ、さらに具体的な属性や機能を追加して、より限定的なクラス(下位クラス)を定義すること。
- 例: 「犬」クラスは、「動物」クラスの性質を特化し、「鳴く(ワンワン)」という犬特有の機能を持つ。
関係性(継承・is-a関係)
- is-a関係: 下位クラスが上位クラスの一種であることを表す関係。「犬は動物の一種である」。
- UMLでの表現: 下位クラスから上位クラスへ向かう、白抜きの矢印(三角形)で表現される。
なぜ重要か
- コードの再利用: 共通の機能や属性を上位クラスに集約することで、何度も記述する必要がなくなる。
- 設計の明確化: システムの構造を階層化し、理解しやすくする。
- 保守性の向上: 共通部分の修正で、関連するすべてのクラスに反映される。
具体例
- 汎化(上位):
乗り物クラス(「移動する」という機能を持つ) - 特化(下位):
自動車クラス(「移動する」を継承し、「運転する」などを追加)、自転車クラス(「移動する」を継承し、「ペダルを漕ぐ」などを追加)。

コメント