フレームワーク

原則

is-a/has-a関係

is-a は 継承関係. has-a は 包含関係 (委譲).

📝is-a関係

📝継承(Inheritance)関係を表す代替表現. B is-a Aとは, BはAのサブクラス. における汎化.

is-a 信仰とは, なんでも継承すればいいという考え方.

📝has-a関係

包含, 移譲関係を示す代替表現.

💡is-aは分類でhas-aは分解

ref. 分析手法のキホン:「分解と分類」より.

  • 対象を分類して理解する方法がis-a関係.
  • 対象をより単純な構成要素に分解して理解する方法がhas-a関係.

ピアノの例では,

  • ピアノは鍵盤楽器.
    • ピアノ is-a 鍵盤楽器.
  • ピアノは鍵盤を持つ.
    • ピアノ has-a 鍵盤.

✨is-aはフォルダでhas-aはタグ

📝Wikiのメモを整理するとき, タグとフォルダのどちらをつかうか悩むことがよくある.

これは, OOPでいうところの, is-aとhas-aの関係に似ていることに気づいた.

  • is-aとは, 継承関係でありフォルダ構造.
  • has-aとは, 移譲関係でありタグによるグルーピング.

あるメモをひとつのファイルにいれても, 別のファイルに入れたいことはたくさんある. これはOOPにおいて📝多重継承の問題としてよく知られていることだ. この場合, タグをつかって情報を整理するのが良い解決方法.

タグ構造のほうが情報を整理しやすいがフォルダ構造のほうが理解がしやすい

ただ個人的には, 物事を理解しようとしたときに, フォルダ構造によるトップダウンの理解のほうがボトムアップよりもスピードが速い. 上からみえるからか.

📚オブジェクト指向のこころ

OOP の 2 大原則

オブジェクト指向のこころとは, ズバリ以下.

📐流動的要素を探し出してカプセル化する

🎓要素と変数

クラス継承よりもオブジェクトの集約を多用する

名詞/ 動詞 抽出法

  • 問題領域に存在する名詞を洗い出しそれらを表現するオブジェクトを生成する.
  • 名詞に関連した動詞を洗い出し,それらを表現するメソッドを追加する

共通性/ 可変性 分析法

  • 共通性分析:
    • 時間が経っても変化しにくい構造を見つけるもの
    • 共通性分析によってまとめられた概念を抽象クラスによって表現
  • 可変性分析:
    • 変化しやすい構造を洗い出すもの
    • 可変性分析で得た流動的要素は抽象クラスの派生クラスによって実装される

設計手順:

  • (抽象クラス) このクラスが持つ責務をすべて全うするにはどうようなインターフェイスが必要か?
  • (派生クラス) この特定実装の中でどうのようにして与えられた仕様を実装できるのか?

Jim Coplien が提唱. p235 第 15 章から抜粋.

References

References