Upgrade to Pro — share decks privately, control downloads, hide ads and more …

オブジェクト指向のこころ: 第1章 / DESIGN PATTERNS EXPLAINED: chapter-1

オブジェクト指向のこころ: 第1章 / DESIGN PATTERNS EXPLAINED: chapter-1

会社で「オブジェクト指向のこころ」の読書会をやっています

hideki kinjyo

August 24, 2021
Tweet

More Decks by hideki kinjyo

Other Decks in Programming

Transcript

  1. ͜ͷষͷॏཁͳΩʔϫʔυ • 機能分解と構造化プログラ ミング • オブジェクト指向パラダイ ム • 要求と変化(変更) •

    カプセル化とポリモーフィ ズム • 概念と仕様と実装 • 型 • データとメッセージ(メ ソッド) • 責任(責務) • 凝集度と結合度
  2. ڽू౓ ⾼凝集 >>> 低凝集 • 知っていますか、凝集を極限まで薄めると神が⽣まれます • https://en.wikipedia.org/wiki/God_object • 「凝集度が低い」という状態は、

    「変更の必要性が出やすい」という状態をもたらす • 例えば「注⽂をとったら調理はキッチン任せ」は⾼凝集、「注⽂ とってキッチンへ向かって調理をします」は低凝集 • 「お客さんが激昂してる」「フライパンに⽳が空いた」 => 誰が影 響受ける? たぶん何かの魔法陣です、 セフィロトの樹みたいで神秘的ですね
  3. Өڹ(ൣғ)͕๲ΒΉ => มߋ͕೉͘͠ͳΔ • 「思わぬ影響をもたらしてしまう」ような状態を「好ましくな い副作⽤」 • 好ましくない副作⽤が怖くて変更が怖くなる • 好ましくない副作⽤がどこまで⾏ってるか分からなくて、バグ

    対応が⼤変になる • こうした問題は「どこで・なにを」の責務の問題で説明できる • 結合度、凝集度はソフトウェア品質を測る価値指標と⾔える
  4. ͜ͷҧ͍͸ͳΜͩʁ • 責任の移⾏を⾏った • before: 学⽣が次の教室へ⾏くのは講師の責任 • after: 学⽣が次の教室へ⾏くのは学⽣⾃⾝の責任 •

    元の問題 • 「講師が学⽣の移動にも責任を持つ」という低凝集 • 「講師が(⾃分の関係ない)講義も知る」という⾼結合
  5. (ຊʹ͋Δ಺༰ʹ໭͠·͢) • 「セミナーが終わった時に、⼤学院⽣はアンケート結果⽤紙 を集めてください」という要件が⼊った例 • 構造化〜 => 講師が「君は院⽣かな?」と問う必要 • 責任〜

    => 学⽣が「私は院⽣だからな…」と判断 • 後者は学⽣が⾃らの振る舞いに責任を持てていると⾔える • 講師が知るべき情報を最⼩化できる(低結合化) • 学⽣が「やるべきこと」を⾃分で達成できる(⾼凝集)
  6. Ͳ͏͍͏ͱ͜Ζ͕خͦ͠͏͔ͬ͢ʁ • 「責任」で語っていくと、「問題領域に存在する実態」をそのまま落とし込みやす くなるね〜という点 • 問題領域 = いわゆる「要求」とか「⾮開発者でも分かる⾔葉で語られる」ような 現実世界(のモデル) •

    つまり「ソフトウェア的な知識をなくして語った理解(モデリング)と、コードが⼀ 致しやすい」みたいな利点がある ※理想論 • 「ドメイン層」って⾔葉でピンとくる⼈はそれで👍 • DDDできる〜のは「オブジェクト指向の強みの発露」ではあるけど、 そのプリミティブには「責任とコラボレーションの実現をサポートできる」がある よ、的な
  7. ʮ3ͭͷ؍఺ʯͱΦϒδΣΫτࢦ޲ 1. 概念レベル = 責任の集合 2. 仕様レベル = 関係と振る舞い •

    Interface&呼び出し元・呼び出し先、的な 3. 実装レベル = コード(データ、メソッド) • 具体的なclassとかプロパティとか
  8. P15ͷphper޲͚ิ଍ “どうしたら謝った型のオブジェクトが追加されないように保証できるので しょう” について • PHPのarrayが `mixed[]` なコレクションなのでアレですが • いわゆるジェネリクスとかああいう、「コレクション(の要素)が型を持つ

    (縛られる)」みたいな前提で説明されているので注意してください • と考えると、「⼤学院⽣でも学部⽣でもOKにしたい、そのために は・・」で抽象クラスの定義、というソリューションが導出されるのも違 和感ないはず • 抽象(, 継承)の使い道〜みたいな話はあとの⽅で出てくる(確か)ので、今は あまり気にしなくて良さそう
  9. ϙϦϞʔϑΟζϜͱ͍͏֓೦Λ ֮͑·͠ΐ͏ • ポリモーフィズム = 多相性(多様性、多態性) • ・・・何が多様なんだ!? • 呼び出し⼿が「Aしてね」と告げた時に、

    (その責任を果たすために)必要に応じた処理を内部的に使い分け るよ • 例えば「講師 -> 学⽣ (移動してね)」といったつもりが、中では 「院⽣ extends 学⽣」「学部⽣ extends 学⽣」が働いてくれて た・・・!みたいな事が成し得る