Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SOLID原則について / about the SOLID principles
Search
Jun Ageishi
September 26, 2018
Technology
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SOLID原則について / about the SOLID principles
社内勉強会でSOLID原則、SRP・OCPについて発表しました。
Jun Ageishi
September 26, 2018
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
パスキーの自動テストはどこまでいけるのか
teamlab
PRO
0
200
Rust で関数型ドメインモデリング
takonda
0
140
しろおびから始める!ログ活用の第一歩
shumei_ito
0
950
Getting Started with Google Antigravity
glaforge
0
300
Classmethod Company Deck
satoshi7
1
680
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
380
分析AIエージェントを育てる、動く環境を育てる
codatum
1
1.1k
AI時代のPRレビューにどう向き合うか?
kairim0
1
240
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
6
4.6k
How to Design Configuration for Rails Applications
willnet
1
770
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
170
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
170
Featured
See All Featured
Designing Experiences People Love
moore
143
24k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
950
Raft: Consensus for Rubyists
vanstee
142
7.8k
Are puppies a ranking factor?
jonoalderson
2
4.1k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
Writing Fast Ruby
sferik
630
63k
BBQ
matthewcrist
90
10k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
So, you think you're a good person
axbom
PRO
2
2.2k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
730
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
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ઃܭݪଇΛͯΊͯΈΑ͏ • मਖ਼͢ΔࡍʹσβΠϯύλʔϯΛ͍ͬͯΕબࢶ͕૿͑ΔΑ • ॊೈʹରԠ͢Δ͜ͱ͕େࣄ •
ϖΞϓϩͱ͔ྑ͍Έ͍ͨͰ͢Α • ଞʹݴ͍͍ͨ͜ͱ͋Δ͚ͲແཧͰͨ͠ɺɺɺ