DCI Tokyo 2 - Commonality / Variability Analysis: Practical MPD - ãéå¬ãããŸãã
2018幎1æ10æ¥ã«éå¬ããã DCI Tokyo 1 ã«ç¶ãã2018幎3æ27æ¥ã« DCI Tokyo 2 ãéå¬ãããŸãããä»åã James Coplien @jcoplien ããããæãããŠã®ããŒã¯ã»ãã·ã§ã³ãšãªããŸãããäŒå Žã¯ æ ªåŒäŒç€ŸãŽã¡ã«ç ç©¶æ æ§ã«æäŸããŠããã ããŸããã
ã»ãã·ã§ã³ã¯ãåååæ§ @remore ãããš @ganchiku ããã«ããåæéèš³ãšãšãã«é²ããããŸããã
ä»åã®ããŒãã¯ãã«ããã©ãã€ã ãã¶ã€ã³ïŒMulti-Paradigm Design: MPDïŒã®äžæ žãæããDCI / ãªãŒã³ã¢ãŒããã¯ãã£ïŒLean ArchitectureïŒãšãæ·±ãé¢ä¿ãã å ±éæ§ïŒå¯å€æ§åæ ã§ããã
ã¬ããŒã㯠@smori1983 ãæ åœãããŠããã ããŸãã
åœæ¥ã®æ§å㯠Coplien ããã®èš±å¯ãåŸãŠ YouTube ã® DCI Tokyo å ¬åŒã¢ã«ãŠã³ãã«ãŠå ¬éãããŠããŸããCoplien ããã®ããããTã·ã£ãã«ã泚ç®ããªããããã²ã芧ãã ããã
DCI Tokyo 2- Commonality / Variability Analysis: Practical MPD by James Coplien (Part 1 of 4)
DCI Tokyo 2- Commonality / Variability Analysis: Practical MPD by James Coplien (Part 2 of 4)
DCI Tokyo 2- Commonality / Variability Analysis: Practical MPD by James Coplien (Part 3 of 4)
DCI Tokyo 2- Commonality / Variability Analysis: Practical MPD by James Coplien (Part 4 of 4)
DCI Tokyo 2- Commonality / Variability Analysis: Practical MPD by James Coplien (extra)
å šäœã®æµã
å šäœã®æµããšããŠã¯ã1980幎代以éã®ãœãããŠã§ã¢éçºã®æŽå²ããäž»ã«ãªããžã§ã¯ãæåã«å¯Ÿããèãæ¹ã®å€é·ãéããŠæ¯ãè¿ãã€ã€ãMPD ãš DCI ã®é¢ä¿æ§ã«è¿«ããã®ãšãªããŸããã
ãªããžã§ã¯ãæåïŒ1988ïŒ
åœæã¯ C++ ã®ä»ã«ããã¬ã³ã æ¥çåãèšèªã§ãã CHILL ããè»éç£æ¥åãèšèªã§ãã Ada ãªã©ã®èšèªãããããããã®èšèªããªããžã§ã¯ãæåãªã®ããšããè°è«ããããŠããŸããã
æçµçã« C++ ãæ®ãããšã«ãªããŸãããC++ ã®äœè ã§ãã Stroustrup æ°ã¯ããããã C++ ããªããžã§ã¯ãæåèšèªã§ã¯ãªãããã«ããã©ãã€ã èšèªãšå®çŸ©ããŠããããšã«æ³šæããå¿ èŠããããŸãã
åœæèããããŠãããªããžã§ã¯ãæåã®æ§æèŠçŽ ã¯æ¬¡ã®3é ç®ã§ããã
inheritance / ç¶æ¿
polymorphism / ããªã¢ãŒãã£ãºã
instantiation / ã€ã³ã¹ã¿ã³ã¹å
1994幎㫠Coplien ãã㯠David Weiss æ°ãš Robert Chi Tao Lai æ°ãšãšãã«ä»äºãããŸããããã®æãå ±éæ§ïŒå¯å€æ§åæãéããŠããœãããŠã§ã¢ãã¡ããªã®æ¯ãèããªã©ãç¹åŸŽã¥ããåœæåãçµãã§ãããœãããŠã§ã¢ã®ããã® DSL(Domain Specific Language) ãéçºããŸãããéçºèšèªã¯ C ã§ããã
ãã®ãå ±éæ§ã«æ³šç®ããŠã°ã«ãŒãã³ã°ãããã®ããã¡ããªãšå®çŸ©ããæ¹æ³ã¯ãWeiss æ°ããèæ¡ããFAST(Family Abstraction Specification Technique) ãšããææ³ã«åºã¥ããŠããŸãã
DSL ã¯å°ããªãã¡ã€ã³ã察象ã«ããŠããŠããã¡ã€ã³ãå€åããªãéãã¯ããŸããã£ãããã§ããããã¡ã€ã³ã¯å€åããŠãããã®ã§ããDSL ã¯ããããã¬ãªã©åšèŸºæè¡ãšã®å¯ãªé¢ä¿æ§ã®äžã§æç«ããããããã®å€åã«å¯ŸããŠã¯èããšããåé¡ããããŸããã
ãã ããå ±éæ§ïŒå¯å€æ§åæèªäœã¯éåžžã«æçšã§ããã¡ã€ã³åæã«å¯ŸããŠã¯éåžžã«å€ãã®åç©«ããã£ãããã§ãã
åæã®çµæåŸãããå ±éæ§ïŒå¯å€æ§ããŒãã«ã®å 容ã®åã蟌ã¿ïŒæ³š: 解決ãã¡ã€ã³ã®æœè±¡ã«ããå®è£ ïŒã«é¢ããŠã
DSL ã§åã蟌ããšãåºããªããããèããªãã
C ã§åã蟌ããšãèšèªç¹æã®å¶çŽãå€ããéçºè ã® intentionalityïŒæå³ïŒãããããªããªãã
ãšãã課é¡ããããŸããããC++ ãçšããããšã§ãããããŸãããããã«ãªããŸããã
ãªããžã§ã¯ãæåïŒ1995ïŒ
Coplien ããã¯ãC++ ã
å ±éæ§ïŒå¯å€æ§åæã®ããã®ãæ±çšèšèªãããã§ãã
ãšæããŸãã
ãã®èŠç¹ã§èŠããªããžã§ã¯ãæåã¯ã次ã®4é ç®ã®æ§æèŠçŽ ã§çè§£ãããããã«ãªããŸããã
Common Signature
Common Data
Variation in Data
Variation in Algorithm
ãŸããpolymorphism / instantiation ã¯ãå ±éæ§ïŒå¯å€æ§ã®ãã€ã³ãã£ã³ã°ã¿ã€ã ïŒæ³š: å ±éæ§ïŒå¯å€æ§ã倿°ã«æçžãããã¿ã€ãã³ã°ïŒã®éžæã®åé¡ãšããŠæãçŽãããããšã«ãªããŸããã
ãªããžã§ã¯ãæåïŒDCI æä»£ïŒ
Coplien ããã«ããã°ãæŽã«ãã®åŸã3段éã®æ°ä»ããçµãŠãçŸåšã®ãªããžã§ã¯ãæåçè§£ãžãšã€ãªãã£ãŠããããã§ãã
1段éç®: There  is no OO in C++
2010幎ããããŸã§ã¯ããªããžã§ã¯ãæåãšããèšèããæœè±¡ããŒã¿åïŒ Abstract Data Type: ADT ïŒãšããæå³ã§äœ¿ã£ãŠããã
C++ ã¯å®éã«ã¯æœè±¡ããŒã¿åã§ã¯ãªããå ·è±¡ããŒã¿åïŒ Concrete Data Type: CDT ïŒã§ãããšããããšã
2段éç®: There are no objects in source code
C++ ããã°ã©ã ã¯ãœãŒã¹ã³ãŒãã§ããã
ããã«ã¯ãªããžã§ã¯ãã¯ååšããªãããœãŒã¹ã³ãŒãã«èšè¿°ããŠããã®ã¯ã¯ã©ã¹ã§ããã
å€ãã®äººã ã Java ãªã©ã®èšèªã§ãã£ãŠããã®ã¯ã¯ã©ã¹æåããã°ã©ãã³ã°ã§ããã
3段éç®: OO is mental model
Trygve Reenskaug æ°ãšãªããžã§ã¯ããšã¯äœãããªããžã§ã¯ããã©ãã€ã ãšã¯äœãã«ã€ããŠè©±ãåããDCI ãçãŸããã
DCI ã¯ãæœè±¡ããŒã¿åã®å®è£ ãæå³ãããããŸã§ã®ãªããžã§ã¯ãæåãšã¯å¥ã®èŠç¹ãäžããã
å®è¡æã«ããããªããžã§ã¯ãã®ãããã¯ãŒã¯ãã©ã®ããã«åé¡ã解決ãããã«æ³šç®ããïŒ Alan Kay ã®å®çŸ©ïŒã
æã ã¯ã¯ã©ã¹ãšããŒã«ããã¡ããŸãã«ããŠèããŠããã
æœè±¡ããŒã¿åã«ã€ããŠèããã®ãã¯ã©ã¹æåã
ããŒã«ã«ã€ããŠèããã®ããªããžã§ã¯ãæåã
æœè±¡ããŒã¿åïŒã€ã³ã¹ã¿ã³ã¹åãããŒã«ãå®è¡ïŒplayïŒã
MPD ãš DCI
MPD ã¯ãã¯ã©ã¹æåã®ã¬ã€ã€ãŒã«ãããŠãã¡ã€ã³åæãè¡ãæããœãããŠã§ã¢ãã¡ããªã®å ±éæ§ïŒå¯å€æ§åæãéããŠãã¡ã€ã³ã¢ãã«ãæ§ç¯ããææ³ãæäŸããŸãã
DCI ã¯ãæã ã®ã¡ã³ã¿ã«ã¢ãã«ã«åºã¥ããŠããªããžã§ã¯ãã©ããã®çžäºäœçšãå®çŸ©ããŸããããã§ã¯ãæœè±¡ããŒã¿åãšããŠã®ã¯ã©ã¹ã«å ·äœçãªããŒã«ãæ³šå ¥ããããªããžã§ã¯ãããç¹å®ã®ã³ã³ããã¹ãã®ããšã«é 眮ãããçžäºäœçšãããšãããåçãªåŽé¢ãæããæ¹æ³ãæäŸããŸãã
以äžãç°¡åã«ãŸãšãããšã次ã®è¡šã®ããã«ãªãããšæããŸãã
ãã©ãã€ã èšèšå¯Ÿè±¡ é å ææ®µ èŠç¹ DCI ãªããžã§ã¯ããšãããã®çžäºäœçš ããŒã« / ã³ã³ããã¹ã ãŠãŒã¹ã±ãŒã¹ Time MPD æœè±¡ããŒã¿åãã¢ãã«ã®æ§é ã¯ã©ã¹ / Abstract Base Class (ABC) å ±éæ§ïŒå¯å€æ§åæ Space
æŽå²çã«ã¯ MPD ãå è¡ããŸãããããã¯åŸã«ãã¢ãã«ã®éçãªæ§é ã®åæãè¡ãããã®é åãæ ãèšè𿹿³è«ãšããæãçŽãããããŸããããããŠããªããžã§ã¯ãæåã«å¯Ÿããæ°ããèŠç¹ãæäŸãã DCI ããã¯ã©ã¹æåã§ã¯æ±ãããšãé£ããã£ããã¢ãã«ã®åçãªé¢ä¿æ§ãæããããã®æ¹æ³è«ãšããŠæèµ·ãããŠããŸãã
Time and Space ãš DCI ã«ãããå ±éæ§ïŒå¯å€æ§
DCI ã¯ããªããžã§ã¯ãã©ããã®çžäºäœçšã«æ³šç®ããŸããã€ãŸãåºæ¬çã«ã¯æéã®çµéïŒã·ãŒã±ã³ã¹ïŒãæèãããŸããããããããããŒã«ãä»äžãããè€æ°ã®ãªããžã§ã¯ããé 眮ãããŠãããçžäºäœçšãæç«ãããã®ã§ãã
ã³ã³ããã¹ããšã¯ããã®ããã«ãããç¶æ³ã«åå ããäž»äœã®ç©ºéçé çœ®ãšæéçãªçžäºäœçšã®ç·äœãšããŠæãããããã®ãšèšããŸãã
ããã§ãæ¥æ¬äººã«ãšã£ãŠã¯ãããµãããéããšããæŠå¿µãåãäžããããŸãããå ·äœäŸãšããŠã¯æ¬¡ã®ãããªãã®ã話é¡ã«ããããŸããã
æèäŒïŒ Coplien ããïŒ
éŸå®å¯ºã®ç³åºïŒ @koriym ããïŒ
ãŸããã¢ã¬ã°ã¶ã³ããŒã®èæ¡ãããã¿ãŒã³ã©ã³ã²ãŒãžã«è©±ãåã³ãŸããããã¿ãŒã³ã©ã³ã²ãŒãžã¯ã建ç¯ã®æ§é ïŒç©ºéçãªãã¿ãŒã³ïŒã ãã§ã¯ãªãããã®æ§é ãçã¿åºã人ã ã®çžäºäœçšïŒæéçãªãã¿ãŒã³ïŒãå å ãããã®ãšããŠçè§£ãããã¹ãã§ãã
pattern of behavior = pattern in space + pattern in time
ã»ãã·ã§ã³ã®çµç€ã§ã¯ããã®ããã«ãDCI ãæ ãé åã«ãããå ±éæ§ïŒå¯å€æ§æŠå¿µã®é©çšå¯èœæ§ã瀺åãããŸããã
ãããã«
äŒå ŽãæäŸããŠããã ããŸãããŽã¡ã«ç ç©¶ææ§ãDCI Tokyo ã¹ã¿ããã®çæ§ãä»åããã°ãããã€ãã³ããšãªããŸãããããããšãããããŸããã
次åã¯ãã¯ãŒã¯ã·ã§ãã圢åŒã§ã®éå¬ãèŠéã«å ¥ããªãããDCI Tokyo 3 ãéå¬ãããããšãšæããŸããMPD / DCI / Lean Architecture ã«èå³ã®ããæ¹ã¯ããã²ãåå ãã ããã















