スポンサーリンク

【応用情報技術者試験】汎化ー特化関係

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

画像参照:https://dcross.impress.co.jp/docs/column/column20200825/001711-2.html

汎化

  • 意味: 複数の異なるものから共通する性質や法則を見つけ出し、より抽象的な概念(上位クラス)を定義すること。
  • : 「動物」という上位クラスは、「犬」「猫」「鳥」などの下位クラスに共通する「呼吸する」「食べる」といった性質を汎化したもの。 

特化

  • 意味: 汎化された上位クラスの性質を受け継ぎつつ、さらに具体的な属性や機能を追加して、より限定的なクラス(下位クラス)を定義すること。
  • : 「犬」クラスは、「動物」クラスの性質を特化し、「鳴く(ワンワン)」という犬特有の機能を持つ。 

関係性(継承・is-a関係)

  • is-a関係: 下位クラスが上位クラスの一種であることを表す関係。「犬は動物の一種である」。
  • UMLでの表現: 下位クラスから上位クラスへ向かう、白抜きの矢印(三角形)で表現される。 

なぜ重要か

  • コードの再利用: 共通の機能や属性を上位クラスに集約することで、何度も記述する必要がなくなる。
  • 設計の明確化: システムの構造を階層化し、理解しやすくする。
  • 保守性の向上: 共通部分の修正で、関連するすべてのクラスに反映される。 

具体例

  • 汎化(上位)乗り物 クラス(「移動する」という機能を持つ)
  • 特化(下位)自動車 クラス(「移動する」を継承し、「運転する」などを追加)、自転車 クラス(「移動する」を継承し、「ペダルを漕ぐ」などを追加)。 

コメント