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
オブジェクト指向のこころ: 第2章 / DESIGN PATTERNS EXPLAINED: ...
Search
hideki kinjyo
PRO
August 24, 2021
Programming
0
41
オブジェクト指向のこころ: 第2章 / DESIGN PATTERNS EXPLAINED: chapter-2
会社で「オブジェクト指向のこころ」の読書会をやっています
hideki kinjyo
PRO
August 24, 2021
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
色んなオートローダーを覗き見る #phpcon_okinawa
o0h
PRO
5
360
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
2
210
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
3
390
SPLから始める「データ構造」入門
o0h
PRO
7
1.5k
PHPUnit11の新しい仲間たち
o0h
PRO
3
270
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
60
19k
パンフ記事 「初めてのリファクタリング!」 の裏側 #phperkaigi
o0h
PRO
2
130
phpunit/php-code-coverageって何をしてるんだ #phperkaigi
o0h
PRO
3
1k
Composerを便利に使うために私がやっていること #phperkaigi
o0h
PRO
1
2.2k
Other Decks in Programming
See All in Programming
Vue :: Better Testing 2024
up1
1
360
Flutterアプリを生成AIで生成する勘所
rizumita
0
240
全方位強化 Python 服務可觀測性:以 FastAPI 和 Grafana Stack 為例
blueswen
1
360
Kotlin Multiplatform at Stable and Beyond (Kotlin Vienna, October 2024)
zsmb
2
320
ポケモンで考えるコミュニケーション / Communication Lessons from Pokémon
mackey0225
3
130
RemixとCloudflare Stack におけるFile Upload
ossamoon
1
120
dbt-ga4パッケージを実業務に導入してみた話
t_tokumaru_feedcorp
0
110
"型"のあるRailsアプリケーション開発 / Typed Rails application development
sinsoku
8
2.2k
CDKを活用した 大規模コンテナ移行 プロジェクトの紹介
yoyoyopg
0
230
sqlcを利用してsqlに型付けを
kamiyam
0
220
AWS認定資格を受験するにあたり、気づいたこと・実践していたことのまとめ
satoshi256kbyte
1
120
Go製CLIツールGatling Commanderによる負荷試験実施の自動化
okmtz
3
640
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
324
23k
The Cult of Friendly URLs
andyhume
76
6k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
Music & Morning Musume
bryan
46
6.1k
From Idea to $5000 a Month in 5 Months
shpigford
380
46k
Bash Introduction
62gerente
608
210k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
38
2.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
59k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
30
2.6k
Happy Clients
brianwarren
97
6.6k
Git: the NoSQL Database
bkeepers
PRO
425
64k
How GitHub Uses GitHub to Build GitHub
holman
473
290k
Transcript
第2章 UML統⼀モデリング⾔語 課題図書: オブジェクト指向のこころ: デザインパターンとともに学ぶ
͜ͷষͷॏཁͳΩʔϫʔυ • UML • モデリング • クラス図 • 関連 •
依存 • 集約 • コンポジション • 相互作⽤図(シーケンス図)
【突然のネタバレ】 この章ではUMLを扱いますが UML⾃体を学習することは 本書を読む上で些細なことだと思います
では、なぜ(1章を割くほど) UMLが「重要」なのか・・・?
UMLとは何か 2.2 UMLとは何か? 2.3 UMLを使う理由
UMLͬͯԿ͢Δͷͳͷ • 開発って「⼯程」があるでしょ • 分析、設計、実装・・・ • イメージを擦り合わせながら進めたいですよね? • って事はコミュニケーションが⼤事ですよね •
”UMLは主に、⾃分⾃⾝、チームメンバ、顧客とのコミュ ニケーションを図るために使⽤されます”
ίϛϡχέʔγϣϯͷͨΊͷUML • 「モデル」を使って話そーぜ、を出来るようにする • それによって、「実際にコード書いて動かす」の⼿前の段 階で「どういう感じになるかな?」の認識を揃える • 認識を揃えた上で、「ここはこうしたくない?」とか「ア レが⾜りなくない?」とかの議論も出来るようになる
UMLͳΜͯ”ΘΓΌ͍͍ͷΑ” ͬͯେޚॴ͕ݴͬͯ·ͨ͠ • 「実際にコード書かなくても認識揃えてコミュニケー ションとれるようにする」というのが重要で • そのための「気軽さ」をUMLは兼ね備えている • UMLは「何となく図形で分かる」ようなダイアグラムと なっている
• 未学習者でも説明しながら使えば伝わりそうなレベル • 「⽂法(記法)の正しさ」「情報の正確性(⾼解像)」より も「最低限の認識が揃う」のが⼤事だよ〜
ࢀߟ • スケッチとしてのUML https://bliki-ja.github.io/UmlAsSketch/ • Fowlerと軽量UML|オブジェクトの広場 https://www.ogis-ri.co.jp/otc/hiroba/specials/ MartinFowler/FowlersUML.html • 書籍「UMLモデリングのエッセンス」
ܹΦεεϝ
ຊॻʹͱͬͯͷUML • 全体を通じて、クラス図・シーケンス図が出てきます • クラス(オブジェクト)間の関係やどう作⽤し合うか?を 視覚的に表現するための⼿段として、くらいの位置づけ • なので「めっちゃ正確にUMLを覚えるぞ・・!」や 「⾼度な記法を覚えるぞ・・!」はいらないです •
ざっくり「あーはいはい、完全に理解した」でOK • ⾒慣れない記法が出てきたらその都度で調べましょ
(本書を読む上で)主要なダイアグラム 2.4 クラス図 2.5 相互作⽤図
Ϋϥεਤ クラスやクラス同⼠の関連性を⽰す(静的なモデリング)
ूͱίϯϙδγϣϯ • ある要素が他の要素を所有する(has)ことを「集約」 • サイクリスト has a⾃転⾞ • 集約の⼀形態に「コンポジション」がある •
⾃転⾞ is composed of gears • 違いは「集約は弱く、コンポジションは強く依存する」 • とは・・・?
ڧ͍ґଘɺऑ͍ґଘɺͦΜͳͷਓͷɾɾ • ⾔いたいことは「互いにどういう影響を及ぼしているの か?を強調したいね」って点 • なので、「私がいなくても⽣きていけるの・・?」みたい な情報は嬉しいですよね • (それによって、お互いの存在意義って変わるでしょ?)
ͬ͘͟Γίϯϙδγϣϯ • 端折った説明 • 集約: 部分が無くても全体が成り⽴つ • コンポジション: 部分は全体が無いと意味を成さない •
コンポジション関係だと、 「全体がdestructされた時に部分も破棄される」イメージ • この説明はちょっとミスリードかもだけども
ࢀߟ • オブジェクトの動的側⾯を⾒極める:【改訂版】初歩の UML - ITmedia エンタープライズ https://www.itmedia.co.jp/im/articles/0306/05/ news001.html •
やはりお前らのコンポジションは間違っている - Qiita https://qiita.com/turanukimaru/items/ 0b1396393908b7e22618
૬ޓ࡞༻ਤ クラス(オブジェクト)がどのようにメッセージングし合うか を⽰す(動的モデリング)