Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
オブジェクト指向のこころ: 第3章 / DESIGN PATTERNS EXPLAINED: ...
Search
hideki kinjyo
PRO
August 24, 2021
Programming
0
38
オブジェクト指向のこころ: 第3章 / DESIGN PATTERNS EXPLAINED: chapter-3
会社で「オブジェクト指向のこころ」の読書会をやっています
hideki kinjyo
PRO
August 24, 2021
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
色んなオートローダーを覗き見る #phpcon_okinawa
o0h
PRO
5
390
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
3
220
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
3
400
SPLから始める「データ構造」入門
o0h
PRO
7
1.6k
PHPUnit11の新しい仲間たち
o0h
PRO
3
280
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
60
19k
パンフ記事 「初めてのリファクタリング!」 の裏側 #phperkaigi
o0h
PRO
2
130
phpunit/php-code-coverageって何をしてるんだ #phperkaigi
o0h
PRO
3
1.1k
Composerを便利に使うために私がやっていること #phperkaigi
o0h
PRO
1
2.2k
Other Decks in Programming
See All in Programming
モジュラモノリス、その前に / Modular monolith, before that
euglena1215
6
690
CDKを活用した 大規模コンテナ移行 プロジェクトの紹介
yoyoyopg
0
310
Subclassing, Composition, Python, and You
hynek
3
170
(Deep|Web) Link support with expo-router
mrtry
0
170
Iteratorでページネーションを実現する
sonatard
3
720
Cloud Adoption Frameworkにみる組織とクラウド導入戦略(縮小版)
tomokusaba
1
190
The Efficiency Paradox and How to Save Yourself and the World
hollycummins
0
180
型付きで行うVSCode拡張機能開発 / VSCode Meetup #31
mazrean
0
240
クラウドサービスの 利用コストを削減する技術 - 円安の真南風を感じて -
pyama86
3
390
[PHPカンファレンス沖縄2024]「無理なくできるだけ安全に」テストもないレガシーコードをリファクタリングするテクニック
ikezoemakoto
3
130
AWS CDKを用いたセキュアなCI/CDパイプラインの構築 / Build a secure CI/CD pipeline using AWS CDK
seike460
PRO
3
610
学生の時に開催したPerl入学式をきっかけにエンジニアが組織に馴染むために勉強会を主催や仲間と参加して職能間の境界を越えていく
ohmori_yusuke
1
130
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.3k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
GraphQLの誤解/rethinking-graphql
sonatard
65
9.9k
How to Think Like a Performance Engineer
csswizardry
16
1k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.1k
Fireside Chat
paigeccino
32
3k
Imperfection Machines: The Place of Print at Facebook
scottboms
264
13k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.6k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Optimizing for Happiness
mojombo
375
69k
How GitHub Uses GitHub to Build GitHub
holman
473
290k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
41
9.2k
Transcript
第3章 柔軟なコードを必要とする問題 課題図書: オブジェクト指向のこころ: デザインパターンとともに学ぶ
ͲΜͳষͳͷ 「こういう課題を解決したい」を分析して(問題領域)、 「それにはどうやってアプローチできるだろう?」という 初めてのモデリング体験のコーナー!!みたいなやつです
問題を表現してみよう 3.2 CAD/CAMシステムから情報を抽出する 3.3 ボキャブラリを理解する 3.4 問題を表現する 3.5 本質的な問題とアプローチ
͓ $"%$".γεςϜ͔ΒใΛநग़͢Δ Ͱ·ͣɺࢲ͕ຊॻͰղઆ͍ͯ͠ΔಎΛಘΔ͖͔͚ͬͱͳͬͨɺࢲࣗͷաڈͷઃܭΛৼΓฦͬ ͯΈΔ͜ͱʹ͠·͢ɻ ࣌ɺࢲγʔτϝλϧ ൘ۚ ͷՃΛߦ͏$"%$".γεςϜͷઃܭ࡞ۀΛߦ͍ͬͯ·ͨ͠ɻਤ ɺͦ͏͍ͬͨγʔτϝλϧͷՃྫͰ͢ɻ ࢲͷࣄɺ$"%$".γεςϜ͔ΒσʔλΛநग़͠ɺطଘͷΤΩεύʔτγεςϜ͕ར༻Ͱ͖Δ Α͏ʹɺͦͷσʔλΛՃ͢ΔγεςϜΛ։ൃ͢Δ͜ͱͰͨ͠ɻ
ΤΩεύʔτγεςϜɺ࡞ػցΛ੍ޚ͢ΔͨΊʹ͜ͷใΛඞཁͱ͍ͯͨ͠ͷͰ͢ɻ͔͠͠ɺ ΤΩεύʔτγεςϜมߋ͢Δ͜ͱ͕͘͠ɺݱࡏ༻͍ͯ͠Δ$"%$".γεςϜසൟʹι ϑτΣΞ͕όʔδϣϯΞοϓ͢Δͱ͍͏͜ͱ͔ΒɺσʔλͷՃʹಛԽͨ͠γεςϜΛ։ൃ͢Δ ͜ͱͰɺ$"%$".γεςϜͷվగʹ؆୯ʹରԠͰ͖ΔΑ͏ʹ͔ͨͬͨ͠ͱ͍͏Θ͚Ͱ͢ɻ 1
͓ $"%$".γεςϜ͔ΒใΛநग़͢Δ Ͱ·ͣɺࢲ͕ຊॻͰղઆ͍ͯ͠ΔಎΛಘΔ͖͔͚ͬͱͳͬͨɺࢲࣗͷաڈͷઃܭΛৼΓฦͬ ͯΈΔ͜ͱʹ͠·͢ɻ ࣌ɺࢲγʔτϝλϧ ൘ۚ ͷՃΛߦ͏$"%$".γεςϜͷઃܭ࡞ۀΛߦ͍ͬͯ·ͨ͠ɻਤ ɺͦ͏͍ͬͨγʔτϝλϧͷՃྫͰ͢ɻ ࢲͷࣄɺ$"%$".γεςϜ͔ΒσʔλΛநग़͠ɺطଘͷΤΩεύʔτγεςϜ͕ར༻Ͱ͖Δ Α͏ʹɺͦͷσʔλΛՃ͢ΔγεςϜΛ։ൃ͢Δ͜ͱͰͨ͠ɻ
ΤΩεύʔτγεςϜɺ࡞ػցΛ੍ޚ͢ΔͨΊʹ͜ͷใΛඞཁͱ͍ͯͨ͠ͷͰ͢ɻ͔͠͠ɺ ΤΩεύʔτγεςϜมߋ͢Δ͜ͱ͕͘͠ɺݱࡏ༻͍ͯ͠Δ$"%$".γεςϜසൟʹι ϑτΣΞ͕όʔδϣϯΞοϓ͢Δͱ͍͏͜ͱ͔ΒɺσʔλͷՃʹಛԽͨ͠γεςϜΛ։ൃ͢Δ ͜ͱͰɺ$"%$".γεςϜͷվగʹ؆୯ʹରԠͰ͖ΔΑ͏ʹ͔ͨͬͨ͠ͱ͍͏Θ͚Ͱ͢ɻ 1
ੳͷॳา: ϘΩϟϒϥϦͷཧ • 「要求」を聞き出しつつ、名詞や動詞を抽出していきま しょうね〜みたいな話があります • それによって「責任を伴うオブジェクト」を⾒出していこ う、というものですね
本⽂をみてくれよな!
Զ͕ؤுͬͯॻ͍ͨਤݟ͍ͯͩ͘͞
ͯ͞ɺͲ͏͍͏ͷΛ࡞Ζ͏ʁ • なんでもCADはversion1(現⾏)、version2(移⾏ターゲッ ト)、version3(出るという噂)があるらしい • V1とV2で全く作りが異なる • V1はルーチンのコレクション、V2はOOP的な作り • 要するに使い⽅が異次元に違うの・・・
• でも「エキスパートシステム」から⾒た際に、 「CADデータのバージョンいくつ?」は隠蔽したいよね
͜͏͍͏ײ͡Ͱ͍͚͔ͦͬ͢
૬ޓ࡞༻ਤ クラス(オブジェクト)がどのようにメッセージングし合うか を⽰す(動的モデリング)
ݱ͔ΒҎ্Ͱ͢ 感じてほしいのは、 この章では↓みたいなことを体験できたぜ〜という点 • 「問題領域」に対して「抽象」で思考する流れ • 静的なモデリングを⽤いて、責任の区分を汲み取りやすくし た点 • 誰がどこまで関与するか、何を隠蔽するか
「コードから⼊って考える」以外の武器を⼿に⼊れることは、 オブジェクト脳を作る上での第1歩ですよ・・!