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
SOLID原則について / about the SOLID principles
Search
Jun Ageishi
September 26, 2018
Technology
0
170
SOLID原則について / about the SOLID principles
社内勉強会でSOLID原則、SRP・OCPについて発表しました。
Jun Ageishi
September 26, 2018
Tweet
Share
More Decks by Jun Ageishi
See All by Jun Ageishi
Bridgeパターン / Bridge Design Pattern
jageishi
0
140
Other Decks in Technology
See All in Technology
小さく始めるBCP ― 多プロダクト環境で始める最初の一歩
kekke_n
1
400
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.4k
Tebiki Engineering Team Deck
tebiki
0
24k
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
360
予期せぬコストの急増を障害のように扱う――「コスト版ポストモーテム」の導入とその後の改善
muziyoshiz
1
1.8k
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
920
OWASP Top 10:2025 リリースと 少しの日本語化にまつわる裏話
okdt
PRO
3
660
今日から始めるAmazon Bedrock AgentCore
har1101
4
400
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
150
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
Oracle Cloud Observability and Management Platform - OCI 運用監視サービス概要 -
oracle4engineer
PRO
2
14k
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Prompt Engineering for Job Search
mfonobong
0
160
It's Worth the Effort
3n
188
29k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
130
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
Tell your own story through comics
letsgokoyo
1
810
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
How GitHub (no longer) Works
holman
316
140k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
430
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
49
Transcript
SOLIDݪଇʹ͍ͭͯ @jageishi
ѱ͍ઃܭͬͯʁ
• มߋ͠ʹ͍͘ • ෆඞཁʹෳࡶ • ෆඞཁͳ܁Γฦ͠ • ෆಁ໌ • Ҡ২ੑ͕ͳ͍
ةͳ͍ɺɺ
• मਖ਼ʹ͕͔͔࣌ؒΔ • Өڹൣғ͕Θ͔Βͳ͍ • मਖ਼͢Δͷ͕ා͍ • ۀ͕૿͑Δ etc..
SOLIDݪଇʹ ͍ͯ͠Δ͜ͱ͕ଟ͍
SOLIDݪଇ • ΦϒδΣΫτࢦݴޠʹ͓͍ͯɺ࠷ྑͷઃܭΛ͢Δॿ͚ͱ ͳΔݪଇ
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle) 3.Ϧείϑͷஔݪଇ (LSP : Liskov Substitution Principle) 4.ΠϯλϑΣʔεͷݪଇ (ISP : Interface Segregation Principle) 5.ґଘؔٯసͷݪଇ (DIP : Dependency Inversion Principle)
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle) ࠓ͜ͷ2ͭʹ͍ͭͯઆ໌͠·͢ɻ
ਤܗඳըΞϓϦέʔγϣϯ Λྫʹߟ͑ͯΈΔ
ཁ݅ • ํܗͱԁΛը໘ʹඳը͍ͨ͠
None
DrawingToolRectangleͱ CircleΛ͏
None
None
SOLIDݪଇΛ ͯΊͯΈΔ
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
୯Ұͷݪଇ (SRP : Single Responsibility Principle) • Ϋϥεͷ2ͭҎ্ଘࡏͯ͠ͳΒͳ͍
ํܗΛඳը͢Δ ׂ ԁΛඳը͢Δ ׂ
͜ͷΫϥεΛมߋ͢Δέʔε • ํܗΛඳը͢ΔॲཧΛमਖ਼͢Δ߹ • ԁΛඳը͢ΔॲཧΛमਖ਼͢Δ߹ • ଞͷਤܗʹରԠ͢Δ߹ etc..
มߋཧ༝͕ෳ͋Δ = ͕ෳ͋Δ
୯ҰͷݪଇΛ ຬ͍ͨͯ͠ͳ͍
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
• मਖ਼͢Δͨͼʹϝιου͕ෳࡶʹͳΔ • ίϯϑϦΫτ͢ΔՄೳੑ͕ߴ͘ͳΔ • ํܗ༻ͷඳըॲཧΛमਖ਼ͨͭ͠Γ͕ԁͷඳըॲཧʹ Өڹ͕ग़ͯ͠·͏͔ etc..
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed Principle) • ֦ுʹରͯ͠։͍͍ͯͯɺमਖ਼ʹରͯ͠ด͍ͯ͡ͳ͚Ε ͳΒͳ͍
None
ཁ͢Δͱɺɺɺ • ֦ுͰ͖ͯमਖ਼؆୯
͜͜Ͱ
Ճཁ݅ • ࡾ֯ܗΛѻ͑ΔΑ͏ʹ͍ͨ͠
ͲͷΑ͏ʹमਖ਼͢Δʁ
• TriangleΫϥεΛՃ͢Δ • DrawingToolΫϥεͷdrawAllShapes()Λमਖ਼͢Δ
ࡾ֯ܗΫϥεΛՃ
ࡾ֯ܗΛඳը͢Δ ॲཧΛՃ
؆୯ʂ
Ͱɺɺɺ • ӨڹՕॴ͚ͩ͜͜ʁ • ଞͷਤܗΛՃͨ͠ΒͲΜͲΜෳࡶʹͳΔ͚Ͳେৎʁ • मਖ਼ଞͷॲཧʹӨڹ͍ͯ͠ͳ͍͜ͱΛอূͰ͖Δʁ
େมɺɺɺ
• ࡾ֯ܗΛՃ͢ΔͷՄೳ (TriangleΫϥεͷՃ) = ֦ுʹରͯ͠։͍͍ͯΔʢ͍͓ͪ͏ʣ • ͔͠͠ɺमਖ਼ՕॴʢӨڹՕॴʣଟ͍͠ɺௐࠪඞཁ = मਖ਼ʹରͯ͠ด͍ͯ͡ͳ͍ʂ
ΦʔϓϯɾΫϩʔζυͷݪଇΛ ຬ͍ͨͯ͠ͳ͍
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
• ػೳ֦ுΛߦ͏ࡍͷӨڹൣғ͕ଌΕͳ͍ • मਖ਼͢ΔͨͼʹӨڹՕॴΛௐࠪ͢ΔͷർΕΔ • ରԠ͕࿙ΕΔՄೳੑ্͕͕Δ • ճؼςετ͕͍
ݪଇΛຬͨ͢Α͏ʹ मਖ਼͠Α͏ʂ
伴ʮநʯ
• એݴ͕ݻఆ͞Ε͍ͯͯɺಛఆͷ࣮ʹ݁߹͍ͯ͠ͳ͍ϝιο υΛʮநʯͰදݱͰ͖Δɻ ͭ·Γɺϝιουݺͼग़͠ํ๏ಉ͚ͩ͡Ͳɺ࣮ࡍͷॲ ཧΠϯελϯεʢੜΫϥεʣʹͤΔ͜ͱ͕ग़དྷΔɻ
मਖ਼ͯ͠ΈΔ
None
(ந)ਤܗΫϥεΛ࡞ ํܗԁ ਤܗΫϥεΛ࣮ drawAllShapes()Ͱ ํܗԁΛʮਤܗʯ ͱͯ͠ѻ͏͜ͱ͕ग़དྷΔ
None
֤ਤܗઐ༻ͷdraw()Λ࣮
None
நਤܗΫϥεͷdraw()Λݺͼग़͚ͩ͢
ྑͦ͞͏
ݪଇΛͯΊͯΈΔ
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
୯Ұͷݪଇ (SRP : Single Responsibility Principle) • Ϋϥεͷ2ͭҎ্ଘࡏͯ͠ͳΒͳ͍
None
͋͘·ͰʮਤܗʯΛඳը͢Δ͚ͩ
• ਤܗͷඳըॲཧΛमਖ਼͢Δͱͯ͠ɺShapeΫϥεΛ࣮ ͨ͠ੜΫϥεͷdraw()Λमਖ਼͢Δ͚ͩ
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed Principle) • ֦ுʹରͯ͠։͍͍ͯͯɺमਖ਼ʹରͯ͠ด͍ͯ͡ͳ͚Ε ͳΒͳ͍
Ճཁ݅ • ࡾ֯ܗΛѻ͑ΔΑ͏ʹ͍ͨ͠
ʮਤܗʯΫϥεΛ࣮ͨ͠ ࡾ֯ܗΫϥεΛՃ
None
ࡾ֯ܗ༻ͷdraw()Λ࣮
None
drawAllShapes()ʮਤܗʯ͕ ࣮ࡍʹͲͷΑ͏ͳܗͷਤܗͳͷ ͔Βͳͯ͘ྑ͍ मਖ਼͢Δඞཁͳ͍ʂ
• ਤܗΫϥεΛ࣮ͨ͠ࡾ֯ܗΫϥεΛՃ͠ɺdraw()Λ࣮ ͢Δ • طଘॲཧͷमਖ਼ෆཁ
• ਤܗΫϥεΛ࣮ͨ͠ࡾ֯ܗΫϥεΛՃ͠ɺdraw()Λ࣮ ͢Δ = ֦ுʹରͯ͠։͍͍ͯΔ • طଘॲཧͷमਖ਼ෆཁ = मਖ਼ʹରͯ͠ด͍ͯ͡Δ
1.୯Ұͷݪଇ (SRP : Single Responsibility Principle) 2.ΦʔϓϯɾΫϩʔζυͷݪଇ (OCP : Open-Closed
Principle)
·ͱΊ • SOLIDݪଇڧݻͰॊೈͳઃܭΛߦ͏ͨΊͷ5ͭͷݪଇ • ઃܭͨ͠ΒSOLIDઃܭݪଇΛͯΊͯΈΑ͏ • मਖ਼͢ΔࡍʹσβΠϯύλʔϯΛ͍ͬͯΕબࢶ͕૿͑ΔΑ • ॊೈʹରԠ͢Δ͜ͱ͕େࣄ •
ϖΞϓϩͱ͔ྑ͍Έ͍ͨͰ͢Α • ଞʹݴ͍͍ͨ͜ͱ͋Δ͚ͲແཧͰͨ͠ɺɺɺ