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
OOP, Double Dispatch and Visitor Pattern
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Akihito Koriyama
May 24, 2024
Technology
210
3
Share
OOP, Double Dispatch and Visitor Pattern
OOPのエッセンスとビジターパターンを使ったディスパッチのデザインパターン。弁護士ドットコム社で紹介。
Akihito Koriyama
May 24, 2024
More Decks by Akihito Koriyama
See All by Akihito Koriyama
存在論的プログラミング: 時間と存在を記述する
koriym
5
980
BEAR.Sunday Framework Masterclass
koriym
0
64
Be Framework: 生命システムとしての存在理解
koriym
0
160
新世界の理解
koriym
0
230
AI Centric
koriym
0
530
app-state-diagram
koriym
0
160
BEAR.Sunday 2014-2024
koriym
0
96
イベント駆動コンテンツ (a.k.a Webアプリケーションの効率を再定義するBEAR.Sundayの分散キャッシングフレームワーク)
koriym
5
9.7k
Unconf: RWA読書会
koriym
0
680
Other Decks in Technology
See All in Technology
Platform engineering for developers, architects & the rest of us (AI agents)
danielbryantuk
0
160
AIが変えた"品質の守り方"
kkakizaki
13
5.5k
形式手法特論:公平性制約の位相的特徴づけ #kernelvm / Kernel VM Study Kansai 12th
ytaka23
1
640
A Harness for Behaviour: how to get AI to generate code that does what we intend, or "TDD in the age of AI"
xpmatteo
1
520
テストコードのないプロジェクトにテストを根付かせる
tttol
1
240
JEP 522 Deep Dive - G1 GC同期コスト削減によるスループット向上を徹底検証&解説
tabatad
1
470
oracle-to-databricks-migration-with-llm-and-dbt
casek
1
380
Agentic AI時代における メルカリのAIガバナンスとガードレール実装
naoichihara
17
17k
基礎から解説!Icebergで紐解くSnowflake×Databricks連携の現在地
cm_yasuhara
0
410
NFLコンペ2026 解法
lycorptech_jp
PRO
0
130
GitHub Copilot CLIでWebアクセシビリティを改善した話
tomokusaba
0
140
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.7k
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Mind Mapping
helmedeiros
PRO
1
220
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Are puppies a ranking factor?
jonoalderson
1
3.4k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
150
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
270
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.3k
Optimizing for Happiness
mojombo
378
71k
Producing Creativity
orderedlist
PRO
348
40k
Navigating Team Friction
lara
192
16k
Transcript
001 %PVCMF%JTQBUDIBOE 7JTJUPS1BUUFSO "LJIJUP,PSJZBNB
1BSU001ͱखଓܕ 001BOEQSPDFEVSBMUZQFT
-PHJD %BUB
࢛֯ܗͷ໘ੵΛٻΊΔ 'JOEJOHUIFBSFBPGBRVBESBOHMF
-PHJD %BUB < > BYC
-PHJD%BUBΛΔඞཁ͕͋Δ -PHJDOFFETUPLOPX%BUB
"SFB %BUB BYC QVCMJDB QVCMJDC
ΧϓηϧԽͰ͖ͯͳ͍ /PUFODBQTVMBUFE
-PHJD %BUB BYC HFU" JOU HFU# JOU
ΧϓηϧԽͰ͖ͯͳ͍ /PUFODBQTVMBUFE
w 8IZHFUUFSBOETFUUFSNFUIPETBSFFWJM w (FUUFS4FUUFSѱͩɻҎ্ɻ
ΦϒδΣΫτࢦ PCKFDUPSJFOUFE
4IBQF < > BYC
4IBQF < > BYC BSFB JOU
खଓ͖ܕ QSPDFEVSBMUZQF
$MJFOU %BUB BYC B C
5FMM
4IBQF < > BYC BSFB JOU
"TL
$MJFOU %BUB BYC B C
5FMM %POUBTL
5FMMࣗݾنత 5FMMJTTFMGEJTDJQMJOFE
ΧϓηϧԽ FODBQTVMBUJPO
ΦϒδΣΫτࢦ PCKFDUPSJFOUFE
"TL ϩδοΫ͕σʔλͷ֎ʹ͋Δ *O"TL UIFMPHJDJTPVUTJEFUIFEBUB
-PHJD %BUB BYC B C
σʔλߏ͕࿐ग़ %BUBTUSVDUVSFTFYQPTFE
ϧʔϧ͕ͳ͍ /PSVMFT
υϝΠϯ͕ࣝͳ͍ -BDLPGEPNBJOLOPXMFEHF
υϝΠϯශ݂ %%% %PNBJOBOBFNJB %%%
1BSUμϒϧσΟεύον %PVCMFEJTQBUDI
001Ͱ-PHJDͱ%BUBΛ
యܕత001ͰΦϒδΣΫτ͕ -PHJDΛϓϩύςΟʹอ࣋ *OUZQJDBM001 PCKFDUTIPME-PHJDBTBQSPQFSUZ
%BUB -PHJD BYC
7JTJUPSύλʔϯͰ -PHJD͕σʔλΛ๚ -PHJDWJTJUTEBUBPCKFDUJOUIF7JTJUPSQBUUFSO
7JTJUPS %BUB GVODUJPOBDDFQU 7JTJUPSW
σʔλ๚ऀΛར༻ %BUBVTFTWJTJUPST
7JTJUPS %BUB WWJTJU B C
๚ऀʹϩδοΫ͕͋Δ 7JTJUPSTIBWFMPHJD
7JTJUPS %BUB GVODUJPOWJTJU B C SFUVSOB C
7JTJUPSͰ -PHJD͕ϝιουͰ͞ΕΔ *OUIF7JTJUPSQBUUFSO -PHJDJTQBTTFECZNFUIPE
σʔλίϨΫλʔ ਤܗͷࢹ֮Խ όϦσʔγϣϯ %BUBDPMMFDUPST TIBQFWJTVBMJTBUJPO7BMJEBUJPO
ଟ༷ͳ-PHJDͷҰ࣌తͳ๚ %JWFSTF-PHJDUFNQPSBSZWJTJUT
" %BUB #
γϯάϧσΟεύον ࣮ߦͷܾఆ͕୯Ұ 4JOHMFEJTQBUDI TJOHMFEFDJTJPOUPFYFDVUF
" %BUB # BDDFQU WJTJU
μϒϧσΟεύον ࣮ߦͷܾఆ͕̎ճ %PVCMFEJTQBUDI 5XPFYFDVUJPOEFDJTJPOT
ଟॏσΟεύον ࣮ߦͷܾఆ͕ෳճ .VMUJQMFEJTQBUDI .VMUJQMFFYFDVUJPOEFDJTJPOT
QBSU%*ίϯύΠϥͷઃܭ %*DPNQJMFSEFTJHO
Πϯελϯεੜ JOTUBODFDSFBUJPO
%BUB wOFX*OTUBODF wDMBTT/BNF wBSHVNFOUT wBSHVNFOU wTFUUFS.FUIPET wTFUUFS.FUIPE wNFUIPE/BNF wBSHVNFOUT
wBSHVNFOU Dependency
ґଘʹґଘ͕͋Δ %FQFOEFODFVQPOEFQFOEFODF
%BUB wOFX*OTUBODF wDMBTT/BNF wBSHVNFOUT wBSHVNFOU wTFUUFS.FUIPET wTFUUFS.FUIPE wNFUIPE/BNF wBSHVNFOUT
wBSHVNFOU Dependency
7JTJUPSίϯύΠϥͷઃܭ 7JTJUPSDPNQJMFSEFTJHO
ड͚औͬͨΦϒδΣΫτར༻Λ܁Γฦ͢ 3FQFBUSFDFJWFEPCKFDUVTF
w WJTJU%FQFEFODZ w WJTJU/FX*OTOUBDF w WJTJU"SHVNFOUT w WJTJU"SHVNFOU w
WJTJU4FUUFS.FUIPET w WJTJU4FUUFS.FUIPE %BUB w OFX*OTUBODF wDMBTT/BNF wBSHVNFOUT wBSHVNFOU wTFUUFS.FUIPET wTFUUFS.FUIPE wNFUIPE/BNF wBSHVNFOUT wBSHVNFOU Visitor Dependency
4FUUFS.FUIPETͷ߹ 'PS4FUUFS.FUIPET
%BUB SetterMethods public function accept(VisitorInterface $visitor) { $visitor->visitSetterMethods($this->setterMethods); }
w Visitor public function visitSetterMethods( array $setterMethods ) { foreach
($setterMethods as $setterMethod) { $setterMethod->accept($this); } }
7JTJUPSड͚औͬͨΦϒδΣΫτΛ ʑͱεΫϦϓτʹ 5IF7JTJUPSTFOETUIFSFDFJWFEPCKFDUUPUIFTDSJQUDPEF
ෳࡶͳߏͷBDDFQUͱWJTJUΛ܁Γฦ͠ ݁ہ࠷ॳͷίʔϧ͕࠷ऴ݁ՌΛड͚औΔ 3FQFBUFEBDDFQUBOEWJTJUPGDPNQMFYTUSVDUVSFT &WFOUVBMMZUIF fi STUDBMMSFDFJWFTUIF fi OBMSFTVMU
w WJTJU%FQFEFODZ w %BUB w Visitor Dependency
ͦΕͧΕͷϝιου ہॴతͳࣝͱλεΫ͔͠ཁٻ͞Εͳ͍ 0OMZMPDBMLOPXMFEHFBOEUBTLTBSFSFRVJSFE
ෳࡶͳґଘߏΛίϯύΠϥΒͳ͍ $PNQJMFSTBSFVOBXBSFPGDPNQMFYEFQFOEFODZTUSVDUVSFT
ࠓԿΛ͢Δ͔ͱɺ࣍ʹԿΛݺͿ͔ ଞʹؔ৺͕ͳ͍ 8IBUUPEPOPXBOEXIBUUPDBMMOFYU /PUJOUFSFTUFEJOBOZUIJOHFMTF
શମΛΔίϯμΫλʔ͍ͳ͍ /PDPOEVDUPSLOPXTUIFXIPMFTUSVDUVSF
ΦʔέετϨʔγϣϯͰͳ͘ɺίϨΦάϥϑΟʔ $IPSFPHSBQIZ OPUPSDIFTUSBUJPO
σʔλͱϩδοΫΛ͠ɺΦϒδΣΫ τߏͷৄࡉΛΒͣʹ৽͍͠ϩδοΫ Λద༻Ͱ͖ΔσβΠϯύλʔϯ %FTJHOQBUUFSOTUIBUTFQBSBUFEBUBGSPNMPHJDBOE BMMPXOFXMPHJDUPCFBQQMJFEXJUIPVULOPXJOHUIF EFUBJMTPGUIFPCKFDUTUSVDUVSF