フレヌムワヌク

原則

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