【ソフト開発 アンチパターン】Functional Decomposition

  • 機能分解(functional decomposition)は手続き指向型言語では有効
    • 大規模ソフトのモジュール要素を理解しやすい
  • しかし,オブジェクト指向言語には適さない

どんな問題?

  • オブジェクト指向言語なのに手続き指向のコードができあがる
  • オブジェクト指向を理解してない人が設計・実装した場合におきる
    • そういう人の特徴
      • main関数が好き
      • すべてのサブルーチンにクラスを作る
      • クラス階層を無視する

症状と結果

  • 機能を表す名前をもつクラスがある
    • たとえばCalculate_interestとかDisplay_tableとか
  • 全クラスの属性がprivateになっており,内部からしか使えない
  • 1つの関数しかもっていないクラスがある
  • オブジェクト指向原則に従ってない
  • システムがどう動くか説明できない
    • クラスモデルが意味を成さない
  • テスターのイライラや絶望が伝わってくる

原因

どう解決する?

  • クラス群に下記のガイドラインを適用する
    1. 1つの関数しか持たないクラスがあれば,既存クラスの一部にできないか検討する
    2. 幾つかのクラスを設計の目的にあうよう,新しいクラスに統合する
      • 結合性を小さく,凝集性を高く
    3. 状態をもたないクラスであれば,クラスを関数として記述する

yusuke-ujitoko.hatenablog.com