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
クラスの抽象化とオブジェクト インターフェース
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
reniasz
July 24, 2017
Programming
43
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
クラスの抽象化とオブジェクト インターフェース
またその違い
reniasz
July 24, 2017
Other Decks in Programming
See All in Programming
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
300
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
290
すこし踏み込む CancellationToken
htkym
2
1.7k
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
590
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
790
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
180
ジョジョの世界をXRで再現する
mofurune
0
160
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
残高管理から台帳サービスへの進化
artoy
1
200
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.6k
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
880
Featured
See All Featured
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
540
Become a Pro
speakerdeck
PRO
31
6.3k
RailsConf 2023
tenderlove
30
1.6k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Unsuck your backbone
ammeep
672
58k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
A better future with KSS
kneath
240
18k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.4k
A Soul's Torment
seathinner
8
3.8k
Transcript
ΫϥεͷநԽͱΦϒδΣΫτ ΠϯλʔϑΣʔε ·ͨͦͷҧ͍
·ͣɺܧঝͷ෮श ܧঝར༻͢Δͱɿ ɾಉ͡ίʔυΛ͍ճͤΔ ɾϓϩάϥϜϝϯςφϯε͘͢͠ͳΔ ɾOOPͷجຊͳͷͰઈରΕͳ͍Α͏ʹ͠· ͠ΐ͏ʢDRY - Don’t Repeat Yourself)
நԽ
நԽΫϥεͱ ར༻Ͱ͖Δɺ·ͨநͷίϯεΤϓτΛද͢ΔΫϥεɻ VehicleʢΓʣ <- நͷίϯεΤϓτ drive() <- ͯ͢ͷΓΛӡసͰ͖Δ͕ɺӡసͷํҧ͏ Animalʢಈʣ <-
நͷίϯεΤϓτ eat() <- ͯ͢ͷಈΛ৯ͯΔ͕ɺ৯ํҧ͏
நԽΫϥεΛ͍ͭ͏ʁ ɾνʔϜͷΤϯδχΞʢࣗ͘͠ʣʹΫϥεͷϝιουΛΘͤͨ ͍͕ɺ໊લ͔ܾ͠·ͬͯͳ͍࣌ͱ͔ Αͬͯɺ Bicycle extends Vehicleͷdrive()ͱCar extends Vehicleͷdrive()ɺ ίʔυͷதͰҧ͏ͣɻ
͠Bicycleͷdrive()ͷதʹΦΠϧަͷΓํΛॻ͖ࠐΉͱɺͦΕ͓ ͔͍͠Ͱ͠ΐɻ
நԽΫϥε͔ΒࢠΫϥεͷ ࡞Γํ ɾΫϥεʹநԽϝιουʹೖΕͨΒɺΫϥεநԽʹ͠ͳ͍ͱ͍͚ͳ͍ ɾٯʹநԽΫϥεʹநԽ͡Όͳ͍ϝιουΛೖΕΔͷ͕Մೳɻpropertiesେ ৎ ɾநԽΫϥε͔ΒΦϒδΣΫτΛ࡞Εͳ͍ͨΊɺநԽΫϥεͷίʔυܧঝ͢Δ ࢠΫϥεΛ࡞Βͳ͍ͱ͍͚ͳ͍ ɾextendsͷΩʔϫʔυͰఆٛ͞ΕΔɻ·ͨɺநԽΫϥε͔Βܧঝ͞ΕΔࢠΫϥ εɺநԽϝιουʹbodyΛఆٛ͠ͳ͍ͱ͍͚ͳ͍ɻ
நԽΫϥεͷ͜ͱΛ·ͱΊ Δͱɿ ɾநԽ͞ΕͨΫϥε͔ΒΠϯελϯεԽͰ͖ͳ͍ʢͭ·ΓΫϥε͔ΒΦϒδΣΫτ࡞Εͳ ͍ʣ ɾநԽͷϝιουΫϥεʹ࣮͞Εͯͳ͍ʢsignatureͷΈʣ ɾΫϥεΛܧঝ͠ͳ͍ͱ͍͚ͳ͍ ɾࢠΫϥεͯ͢ͷநԽͷϝιουΛ࣮͠ͳ͍ͱ͍͚ͳ͍ʢvisibilityΛΊΒΕͳ͍ʣ ɾͪͳΈʹconstructorΛೖΕΒΕΔ͕ɺΠϯελϯεͰ͖ͳ͍ͨΊɺΫϥε͔Βݺͳ ͍ ɾநԽͷϝιουΛೖͬͯΔΫϥε͕͍ͭநԽͷΫϥεͰ͋Δɻ
ීஈநԽΫϥεΛpublic abstract classͰ࡞Δ͕ɺͦΕΛΕͯΫϥεͷதʹabstract public methodΛೖΕͨΒɺΫϥεࣗମ͕நԽ͞ΕΔʢPHPΤϥʔʹͳΔ͚Ͳʣ
ΠϯλʔϑΣʔε
ΠϯλʔϑΣʔεͱ ɾجຊతʹɺநԽΫϥε ɾ͔ͩΒɺநԽΫϥε͘͢͝ࣅͯΔʢͦͯ͠ҧ͍Θ͔ΓͮΒ͍ʣ ɾܧঝϝΠϯ ɾΦϒδΣΫτͷΠϯλʔϑΣʔεɺͲΜͳϝιουΛࢠΫϥε͕࣮͠ͳ͍ͱ͍͚ͳ͍͔ ΛܾΊΒΕΔ ɾinterfaceΩʔϫʔυͰ࣮͞ΕΔ ɾΠϯλʔϑΣʔεʹɺpublicϝιου͚ͩΛೖΕΒΔʢͦΕΠϯλʔϑΣʔεͷಛʣ ɾΠϯλʔϑΣʔεimplementsͷΩʔϫʔυͰܧঝ͞ΕΔʢextendsͰͳͯ͘ʣ ɾϝιου໊͕͔ͿΒͳ͍ݶΓɺҰͭͷΫϥεʹɺ͍͔ͭ͘ͷΠϯλʔϑΣʔεΛ࣮Ͱ͖Δ
ɾநԽΫϥεΈ͍ͨʹɺநԽϝιουͱconst͕ೖΕΒΕΔ ɾಉ࣌ʹɺநԽͱҧͬͯɺΠϯλʔϑΣʔεʹpublicϝιου͔͠ೖΕΒΕͳ͍ɻ·ͨɺม ఆٛͰ͖ͳ͍
ͳΜͰΠϯλʔϑΣʔεΛ͏ʁ ɾࢠΫϥεΛ࡞Δ࣌ʹɺࢠΫϥεઈରΠϯλʔϑΣʔεͷϝιουΛ Θ͍ͤͨ࣌ ɾͦΕͰڞಉ։ൃͷͱ͖ɺνʔϜϝϯόʔ͕ͯ͢ͷϝιουΛ͏͜ ͱΛ֬ೝͰ͖Δ ɾ͜͜ͰநԽΫϥεͱͷҧ͍͕ͰΔ ʢநԽΫϥεΛ࣮͢Δ࣌ɺશ ෦ͷϝιουΛΘͳͯ͘OKʣ ɾࢥͬͨ͜ͱɿઃܭͷ࣌ʹ͑ͦ͏
͍ͭநԽʁ͍ͭΠϯλʔϑΣʔεʁ <?php class X extends Y { } // X
ɹΫϥεͷ෦ͷYΛͤ͞Δ class X implements Y { } // X ɹY ݴޠͰ͢͜ͱʹࢍ͢Δ ?> ݁ɺநΫϥεͬͯʁ ܧঝؔΛ࣮ͭͷ࠶ར༻ΛͰ͖Δɻ ܧঝͱଟଶੑΛཁٻ͢Δҙຯ͍͕͋ڧ͍ɻ ݁ɺΠϯλϑΣʔεͬͯʁ Ϋϥεͷܕ(༷)Λఆٛ͢Δͷɻ ΧϓηϧԽͱଟଶੑΛཁٻ͢Δҙຯ͍͕͋ڧ͍ɻ
ҧ͍Λ·ͱΊͯΔͱ
நԽΫϥεʹɺϝιου͕abstractͱ͔ͯ͠ී௨ͷϝιουΛఆٛͰ͖Δɻ͠ϝ ιουநͰ͋Εɺͦͷϝιου͕extend͞ΕͨࢠΫϥεʹఆٛ͠ͳ͍ͱ͍͚ͳ͍ ΠϯλʔϑΣʔεʹɺͯ͢ͷϝιουநɻͦͷͨΊʹɺͯ͢ͷϝιουΛΫϥ εͷதͰఆٛ͠ͳ͍ͱ͚ͳ͍ɻ ᶃɹ
நԽΫϥεʹɺϝιουΛpublic͔privateͰఆٛͰ͖Δɻ ΠϯλʔϑΣʔεʹɺͯ͢ͷϝιουpublic. ᶄɹ
நԽΫϥεʹɺநͰͳ͍ݶΓɺϝιουproperties۩ମతͳίʔυΛೖΕΒ ΕΔɻ ΠϯλʔϑΣʔεʹɺpropertiesఆٛͰ͖ͣɺϝιουʹதΛೖΕͪΌμϝɻ ᶅɹ
ΫϥεҰ͚ͭͩͷநԽΫϥεΛextendͰ͖Δ͕ɺແؔͰɺΫϥεʹແݶʢ͓ͦΒ ͘255)ͷΠϯλʔϑΣʔεΛimplementͰ͖Δ ᶆɹ
நԽΫϥεͷϝιουͷ্ॻ͖Մೳ͕ͩʢࣗ༝ʣɺΠϯλʔϑΣʔεͷ߹ͯ͢ͷ ϝιουΛ্ॻ͖͠ͳ͍ͱ͍͚ͳ͍ɻ ᶇɹ
ࢀߟURL http://www.xpertdeveloper.com/2014/07/abstract-vs-interface/ https://codeinphp.github.io/post/abstract-class-vs-interface/ http://www.techflirt.com/tutorials/oop-in-php/abstract-classes-interface.html https://paulund.co.uk/using-interface-and-abstract-classes-in-php http://php.net/manual/en/language.oop5.abstract.php https://stackoverflow.com/questions/6373224/what-are-the-advantage-if-i-use- abstract-class-in-php http://www.xpertdeveloper.com/2011/10/abstract-in-php/ http://www.xpertdeveloper.com/2011/10/interface-in-php/
http://jaskokoyn.com/2013/06/11/interfaces/ http://phpenthusiast.com/object-oriented-php-tutorials/inheritance-in-object-oriented- php http://phpenthusiast.com/object-oriented-php-tutorials/interfaces http://phpenthusiast.com/object-oriented-php-tutorials/abstract-classes-and-methods https://stackoverflow.com/questions/1913098/what-is-the-difference-between-an- interface-and-abstract-class https://www.javatpoint.com/difference-between-abstract-class-and-interface http://qiita.com/chkkchy/items/643eed88f59bd2b44d71