ããã°ã©ã ãã©ã®ããã«åäœããã®ãæ€èšãããšãã«ã¯ãæ¯ãèãã®ã¢ãã«ã䜿ããŸãã æ¯ãèãã®ã¢ãã«ãäœæããåã«ãæ§é ã®ã¢ãã«ãšæ¯ãèãã®ã¢ãã«ãã©ã®ãããªã³ãŒããšããŠå®çŸãããã®ãã«ã€ããŠããã®ãã¥ãŒããªã¢ã«ã§çšããæ¹åŒã決ããŠãããŸãããã ãã®ããšããã¢ãã«ãšã³ãŒãã®å¯Ÿå¿ã¥ãããšåŒã¶ããšã«ããŸãã
Tip
|
ãã®ãããªå¯Ÿå¿ã¥ãããã¢ãã«å€æã«ãŒã«ããšåŒã¶ããšããããŸãããŸããéçºããã»ã¹ã®ãªãã§ãã®å¯Ÿå¿ã¥ããæ€èšããå·¥çšããæ¹åŒèšèšããšåŒã¶äººãããŸãã |
ã¢ãã«ãšã³ãŒãã®å¯Ÿå¿ã¥ãã決ããŠãããåæã«ããŠèšèšããïŒã¢ãã«ãäœãïŒããšã¯ãå®è£ ã«äŸåããæ å ±ãšäŸåããªãæ å ±ã®åé¢ãä¿ããŸãã ãŸãããã®ãããªèãæ¹ã¯ãå®è£ ã«äŸåããªãã¢ãã«ãäœãäžã§ãšãŠãéèŠã§ãå®åçãªã¢ãã«ãäœæããéã«ã倧ãã«åœ¹ç«ã¡ãŸãã
ãã®ãã¥ãŒããªã¢ã«ã§ã¯å®è£ ã«Rubyã䜿ãããšã«ããŸããã ãµã³ãã«ã¢ãã«ãšãµã³ãã«ã¢ãã«ã«å¯Ÿå¿ããRubyããã°ã©ã ãäœã£ãŠã¿ãããšã§ã察å¿ã¥ãã®æ¹åŒã®åºæ¬çãªèãæ¹ã決ããŠããããšããããã§ãã
Note
|
ãã®ç« ã§æ€èšãããããšã¯ãããŠãªã³ã°ã®ã¹ã³ã¢ã«é¢ããã¢ãã«ã®åé¡é åãšã¯çŽæ¥ã®é¢ä¿ã¯ãããŸããã ãããã£ãå¥ã®é åã®åé¡ãããããŸã§æ€èšããŠããããŠãªã³ã°ã®ã¹ã³ã¢ã«é¢ããåé¡é åãšãããã§æ€èšãããããšãæ··åšããŠããŸãã說æãåãåãæãæ··ä¹±ããŠããŸãã§ãããã ãããªããã§ãå¥ã®åé¡ãšããŠåããŠæ€èšããããã«ããã®ç« ãçšæããŠãããŸãã ããããã®ç« ã®åœ¹å²ããã³ãšããªããå®è£ ã«ã€ããŠã®è°è«ã«ã¯ããŸãé¢å¿ããªãã®ã§ããã°ãæåã¯ãã®ç« ãèªã¿é£ã°ããŠã¿ãŠãããŸããŸããã ããããåŸã®ç« ãžé²ããšãå®è£ ãã人ãã¢ãã«ã䜿ãéã«ã¯ãã¢ãã«ãšã³ãŒãã察å¿ã¥ããå¿ èŠããããããã§å®è£ æ¹åŒã決ããŠãããªããã°ãå®è£ è ããã®ããšã«ã€ããŠèããå¿ èŠãããïŒç¹å®ã®å®è£ è ã«äŸåããªãããèšèšããŠããã¹ãããšãå®è£ ããå人ã«å§ããŠããŸã£ãŠããïŒããšã«æ°ã¥ãã§ãããã ãã®ãšãã¯ããã®ç« ã«æ»ã£ãŠãã©ãããŠå®è£ æ¹åŒã®èšèšãå¿ èŠãªã®ãèããŠããããããšæããŸãã |
ãã¢ãã«ãšã³ãŒãã®å¯Ÿå¿ã¥ããã®æ€èšçšã« {astah} ã§å¥ã®ãããžã§ã¯ããäœæããŸãããã
-
{astah} ã§æ°èŠãããžã§ã¯ããäœæããã
-
äœæãããããžã§ã¯ãããã£ããä¿åããã
-
ã¢ãã«ãã¡ã€ã«ã®ååã¯ãstm_sample.astaããšããã
ãããžã§ã¯ããä¿åã§ãããããããžã§ã¯ãã«ã¯ã©ã¹å³ãè¿œå ããŸãããã
-
æ§é ããªãŒã§ããããžã§ã¯ãåãã¯ãªãã¯ããŠãããã¢ããã¡ãã¥ãŒãéãã
-
ãå³ã®è¿œå ïŒã¯ã©ã¹å³ãã§ã¯ã©ã¹å³ãè¿œå ããã
-
ããããã£ãŒãããã¯ã©ã¹å³ã®ååããã¯ã©ã¹å³ãã«å€æŽããã
察å¿ã¥ãã®èª¬æçšã«ãç°¡åãªã¯ã©ã¹ãSampleãã®å®çŸ©ããå§ããŸãããã ãã®ã¯ã©ã¹ã¯ãæäœãPlayããšå±æ§ãattr_aããattr_bããæã€ã¯ã©ã¹ãšããŸãã ãããUMLã®ã¯ã©ã¹ãšããŠè¡šããŠã¿ãŸãããã
-
ãã¬ããããã¯ã©ã¹ãéžæããã¯ã©ã¹å³ã«è¿œå ããã
-
ã¯ã©ã¹åããSampleãã«ããïŒ ã¯ã©ã¹å³ã«ãSampleãã¯ã©ã¹ãè¿œå ãã ïŒã
-
ã¯ã©ã¹ã«æäœãplayããè¿œå ããã
-
ã¯ã©ã¹ã«å±æ§ãattr_aããattr_bããè¿œå ããã
察å¿ã¥ãã«ãŒã«ã®1ã€ç®ãšããŠã ã¯ã©ã¹å³ã«ãSampleãã¯ã©ã¹ãè¿œå ãã ãè¡šããRubyã®ã³ãŒã㯠ãRubyããSampleãã¯ã©ã¹ãè¡šãRubyã®ã³ãŒã ã®ããã«æžããããšæ±ºããããšã«ããŸãã
class Sample # (1)
def initialize # (2)
@attr_a = true # (3)
@attr_b = true # (3)
end
def play # (4)
end
end
-
ã¯ã©ã¹ãSampleãã®å®çŸ©ã®å§ãŸã
-
åæåã¡ãœããïŒã³ã³ã¹ãã©ã¯ã¿ã«ãããã¡ãœããïŒ
-
ãã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹å€æ°
-
ã¡ãœãããPlayãã®å®çŸ©ã®å§ãŸã
ãã®ãµã³ãã«ã«ãããŠã¯ãããŸè¿œå ããæäœãplayããããSampleãã¯ã©ã¹ã®æ¯ãèããæäŸããŠãããšããŸãã ããããã¯ã©ã¹å³ã«æãããSampleãã¯ã©ã¹ã«æäœãplayããè¿œå ããã ãã§ã¯ããã®åŠçå 容ã¯ããããŸããã ã©ããã«ãplayãã®åŠçå 容ãè¡šããå³ãå¿ èŠã§ãã
ããã§ããSampleãã¯ã©ã¹ã«å¯ŸããŠãæäœãplayãã®æ¯ãèããè¡šãã¹ããŒããã·ã³å³ãè¿œå ããŸãã ããã§ãå³ãè¿œå ãã察象ããSampleãã¯ã©ã¹ã«ããŠããã®ã¯ããã®ã¹ããŒããã·ã³å³ããSampleãã¯ã©ã¹ã®æ¯ãèãã®ã¢ãã«å³ã§ãããšãããããã«ããããã§ãã
ãSampleãã¯ã©ã¹ã«ã¹ããŒããã·ã³å³ãè¿œå ããŸãã
-
æ§é ããªãŒãããSampleãã¯ã©ã¹ãéžæããã
-
å³ã¯ãªãã¯ããŠãããã¢ããã¡ãã¥ãŒã衚瀺ããïŒ ãSampleãã¯ã©ã¹ã«ã¹ããŒããã·ã³å³ãè¿œå ãã ïŒã
-
ãå³ã®è¿œå ïŒã¹ããŒããã·ã³å³ããéžæãããšãã¹ããŒããã·ã³å³ãè¿œå ãããã
-
ããããã£ãŒããå³ã®ååãç·šéãããSampleã®playã®ã¹ããŒããã·ã³å³ããšããïŒ è¿œå ããã¹ããŒããã·ã³å³ã«ååãã€ãã ïŒã
-
ãã€ã¢ã°ã©ã ãšãã£ã¿ã®ã¿ã€ãã«ãã¿ãã«ãå³ã®ååãåæ ãããã
ããã§ã¯ãã¢ãã«ãšã³ãŒãã®å¯Ÿå¿ã¥ãã説æããããã«ãæ¯ãèãã®ã¢ãã«ã®äžçš®ã§ããã¹ããŒããã·ã³å³ãäœæããŠããŸãã ã¹ããŒããã·ã³å³ã䜿ã£ãŠæ¯ãèããèšèšããæ¹æ³ã«ã€ããŠã¯ã次ã®ãã¥ãŒããªã¢ã«ãåèã«ããŠã¿ãŠãã ããã
- ã¹ããŒããã·ã³å³ & ç¶æ é·ç§»è¡šãã¥ãŒããªã¢ã«
-
https://www.changevision.co/tutorial-statemachine-japanese.html
Note
|
ãSampleãã¯ã©ã¹ã«ã¹ããŒããã·ã³å³ãè¿œå ãã ã§ã¯ãSampleã¯ã©ã¹ã®æ¯èããè¡šãã¹ããŒããã·ã³å³ãšãããããã«ãšèããŠãã¯ã©ã¹ã«å¯ŸããŠã¹ããŒããã·ã³å³ãå²ãåœãŠãŸããã ãã®ä»ã {astah} ã§ã¯ãã¡ãœããã«å¯ŸããŠã¹ããŒããã·ã³å³ãå²ãåœãŠãããšãã§ããŸãã ä»»æã®ã¡ãœããã®åŠçã瀺ãã¹ããŒããã·ã³å³ã®å²åœãŠãšããŠã¯ãåŸè ã®ã»ãã奜ãŸããã§ãããã ããã§ã¯ãã¯ã©ã¹ã®æ¯èããšããããšãæèããŠãã¯ã©ã¹å³ã«å²åœãŠãŠã¿ãŠããŸãã ã©ã¡ãã®æ¹æ³ã䜿ãã«ããŠããã¯ã©ã¹ã®æ¯èããæ åœããã¡ãœããã察å¿ã¥ãããããšã¯å¿ èŠã«ãªãã§ãããã |
次ã«ãè¿œå ããã¹ããŒããã·ã³å³ã«ãç¶æ ãè¿œå ããŸãã
-
ãã¬ãããããç¶æ ããéžæããã¹ããŒããã·ã³å³ã«ç¶æ ãè¿œå ããã
-
è¿œå ããç¶æ ã®ç¶æ åã¯ãç¶æ 0ãïŒæ°åã¯è¿œå ã®éœåºŠå€ããïŒãšãªã£ãŠããïŒ æ°ããç¶æ ãè¿œå ãã ïŒã
-
-
ãç¶æ 0ããéžæããããããã£ãŒã®ãããŒã¹ãã¿ãã®ãååããç·šéããŠãç¶æ ã®ååããST0ãã«ããïŒ æ°ããç¶æ ã«ç¶æ åãã€ãã ïŒã
-
ç¶æ ãST0ãã¯ããã®ãµã³ãã«ã®äŸç€ºçšã«äœ¿ãç¶æ åã®1ã€ã
-
-
ãã®ãµã³ãã«ã§ã¯3ã€ã®ç¶æ ã䜿ãããã®ã§ãç¶æ ããã2ã€è¿œå ããïŒ æ°ããç¶æ ã«ç¶æ åãã€ãã ïŒã
-
ãST1ãããST2ããè¿œå ããã
-
-
éå§ç䌌ç¶æ ãçµäºç䌌ç¶æ ãè¿œå ããïŒ éå§ç䌌ç¶æ ãçµäºç䌌ç¶æ ãè¿œå ãã ïŒã
ç¶æ ãè¿œå ã§ããã®ã§ãããã©ã¯ç¶æ é·ç§»ãè¿œå ããŸãããã ã¹ããŒããã·ã³å³ã«ã¯ãéåžžã®ç¶æ ã®ã»ãã«ããã€ãã®ãç䌌ç¶æ ããç»å ŽããŸãã ããšãã°ããéå§ç䌌ç¶æ ãã¯ããã®å³ã«ãããæåã®ç¶æ ã瀺ãã®ã«äœ¿ããŸãã ãçµäºç䌌ç¶æ ãã¯ããã®å³ã«ãããæåŸã®ç¶æ ïŒ1ã€ãšã¯éããŸããïŒã瀺ãã®ã«äœ¿ããŸãã
-
ãã¬ãããããé·ç§»ããéžæããŠããéå§ç䌌ç¶æ ãã®å éšãžããŠã¹ã«ãŒãœã«ã移åããéæ ã衚瀺ãããã®ãåŸ ã€ïŒ éå§ç䌌ç¶æ ã®å åŽã§éæ ã衚瀺ããã ïŒã
-
éæ ã衚瀺ããããããŠã¹ã«ãŒãœã«ããã©ãã°ããïŒããŠã¹ã®ãã¿ã³ãæŒãããŸãŸããŠã¹ã«ãŒãœã«ã移åããïŒã
-
ããŠã¹ã«ãŒãœã«ããST0ããžãã©ãã°ããŠéæ ã衚瀺ãããã®ãåŸ ã€ïŒ ãST0ããžããŠã¹ã«ãŒãœã«ããã©ãã°ããŠéæ ã衚瀺ãããã®ãåŸ ã€ ïŒã
-
ãST0ãã§ãéæ ã衚瀺ããããããŠã¹ã®ãã¿ã³ãé¢ããšç¶æ é·ç§»ãåŒãããïŒ ãST0ãã§ãéæ ã衚瀺ããããããŠã¹ã®ãã¿ã³ãé¢ããšç¶æ é·ç§»ãåŒããã ïŒã
-
ã»ãã®ç¶æ ã«ã€ããŠã ã»ãã®ç¶æ é·ç§»ãè¿œå ãã ãšåãããã«ç¶æ é·ç§»ãè¿œå ããã
ã¹ããŒããã·ã³å³ã«ãããŠãç¶æ ã¯ãã€ãã³ããã®çºçãåŸ ã£ãŠãããšããã§ãã å€ãã®å Žåãã€ãã³ãã¯ããã®ã¯ã©ã¹èªèº«ã®æäœã§ã¯åŠçãå ã«é²ããããªããªããããªã§ãããšã§ãã ããšãã°ãå€éšããã®å ¥åïŒæäœåŸ ã¡ãåä¿¡åŸ ã¡ãªã©ïŒããäžå®ã®æéçµéãªã©ãã€ãã³ãã®åè£ã«ãªããŸãã
ç¶æ é·ç§»ã¯ãããç¶æ ã«ãããŠåŸ ã£ãŠããã€ãã³ããçºçããŠãå¥ã®ç¶æ ãžç§»ãããšãè¡šããŠããŸãã ã€ãã³ãã«ã¯ãã€ãã³ããçºçãããšããå®éã«é·ç§»ãããå€å®ããæ¡ä»¶ãè¿œå ã§ããŸãã ãã®æ¡ä»¶ã®ããšããã¬ãŒãæ¡ä»¶ããšåŒã³ãŸãã ã¬ãŒãæ¡ä»¶ã€ãã®ã€ãã³ãã§ã¯ãã€ãã³ããçºçãããšãã«ã¬ãŒãæ¡ä»¶ãè©äŸ¡ããæ¡ä»¶ãçãªãç¶æ é·ç§»ããŸãã ã¬ãŒãæ¡ä»¶ãåœã®ãšããã€ãã³ãã¯èµ·ããããšã«ãªããŸãïŒæ¶è²»ããããšåŒã³ãŸãïŒããç¶æ ã¯é·ç§»ããŸããã
ãããŠãç¶æ é·ç§»ã«ã¯ãã€ãã³ããçºçãããšãã«å®è¡ãããåŠçãè¿œå ã§ããŸãã ãã®åŠçã®ããšããã¢ã¯ã·ã§ã³ïŒãŸãã¯ãšãã§ã¯ãïŒããšåŒã³ãŸãã
ã€ãã³ããçºçãããšãã¬ãŒãæ¡ä»¶ã€ãã®ã€ãã³ããªãããã«ã¬ãŒãæ¡ä»¶ãçãªããç¶æ é·ç§»ã«äŒŽãã¢ã¯ã·ã§ã³ãå®è¡ããããããã次ã®ç¶æ ãžé·ç§»ããŸãã
ãŸãããST0ããããST1ããžã®ç¶æ é·ç§»ããã€ãã³ãããev1ãã§ã¬ãŒãæ¡ä»¶ã¯ãgdïŒãçïŒãã®ãšããã¢ã¯ã·ã§ã³ãact1ããå®è¡ããããç·šéããŠã¿ãŸãããã
-
ãST0ããããST1ããžã®ç¶æ é·ç§»ãéžæãããã®é·ç§»ã®ããããã£ãŒã衚瀺ããããŒã¹ã¿ããéãã
-
ããããã£ãŒãç·šéããïŒ ãST0ããããST1ããžã®ç¶æ é·ç§»ã®ã€ãã³ããšã¢ã¯ã·ã§ã³ãç·šéãã ïŒã
-
ãããªã¬ãŒãã«ã€ãã³ãåãèšå®ãããããã§ã¯ãev1ããšããã€ãã³ããèšå®ããã
-
ãã¬ãŒããã«ã¬ãŒãæ¡ä»¶ãèšå®ãããããã§ã¯ãgd1ïŒãçïŒããèšå®ãããã
-
ãã¢ã¯ã·ã§ã³ãã«ã¢ã¯ã·ã§ã³ãèšå®ãããããã§ã¯ãact1ããšããåŠçããããšããŠããããèšå®ããã
-
act1ã¯ã2ã€ã®åŒæ°ïŒã€ãã³ããšãã©ã¡ãŒã¿ãŒïŒãæã€ã¡ãœãããšæ³å®ããã
-
-
次ã«ããST1ãããã®ãST2ããžã®é·ç§»ã§ãã ãã®é·ç§»ã«å²ãåœãŠãã€ãã³ãã¯ããev2ããã¢ã¯ã·ã§ã³ããact2ããšããŸãã ãããŠããã®ã¢ã¯ã·ã§ã³ã®å®è¡åŸãã¬ãŒãæ¡ä»¶ãgd2ããçãªããST2ããžãåœãªãã¢ã¯ã·ã§ã³ãact3ããå®è¡ããŠãããST1ããžé·ç§»ããããã«å€æŽããŠã¿ãŸãã
é·ç§»å ã2ã€ãããªããç¶æ é·ç§»ãå¥ã ã«åŒãã°ããããã§ãã ãšããããåãã€ãã³ããåŸ ã£ãŠãé·ç§»å ã2ã€ä»¥äžãããšãã©ã¡ãã®ç¶æ ãžé·ç§»ããã®ã決å®ã§ããªããªããŸãïŒãããŸããªç¶æ é·ç§»ãšåŒã³ãŸãïŒã ããã§ã1ã€ã®ã€ãã³ãã«ããé·ç§»å ãç¶æ³ã«ãã£ãŠå€ããå Žåã«ã¯ãéžæç䌌ç¶æ ãã䜿ããŸãã
-
ãã¬ãããããéžæç䌌ç¶æ ããéžæããã¹ããŒããã·ã³å³ã«è¿œå ããïŒ ãéžæç䌌ç¶æ ããã¹ããŒããã·ã³å³ã«è¿œå ãã ïŒã
-
ãST1ããããST2ããžã®ç¶æ é·ç§»ãéžæãããST2ãåŽã®ãã³ãã«ïŒäžžå°ïŒãããŠã¹ã§ã€ãŸã¿ããéžæç䌌ç¶æ ããžã€ãªãçŽãïŒ æ¢åã®ç¶æ é·ç§»ãè¿œå ãããéžæç䌌ç¶æ ããžã€ãªãçŽã ïŒã
-
ãéžæç䌌ç¶æ ããããST0ããšãST2ããžã®ç¶æ é·ç§»ãè¿œå ããïŒ ãéžæç䌌ç¶æ ããããST0ããšãST2ããžã®ç¶æ é·ç§»ãè¿œå ãã ïŒã
-
ããããã®é·ç§»ã®ããããã£ãŒãç·šéããïŒ ç¶æ é·ç§»ã®ã€ãã³ããšã¢ã¯ã·ã§ã³ãç·šéãã ïŒã
-
ããªã¬ãŒã«ãev2ããã¬ãŒãæ¡ä»¶ã¯ãªããã¢ã¯ã·ã§ã³ããact2ãã«èšå®ããã
-
ã¬ãŒãã«ã¬ãŒãæ¡ä»¶ã!gd2ïŒgd2ã§ã¯ãªãïŒããã¢ã¯ã·ã§ã³ããact3ãã«èšå®ããã
-
ã¬ãŒãã«ã¬ãŒãæ¡ä»¶ãgd2ãã«èšå®ããã
-
-
åæ§ã«ããŠããã2ã€ã»ã©ç¶æ é·ç§»ãè¿œå ããïŒ ããã«ç¶æ é·ç§»ãšã€ãã³ããšã¢ã¯ã·ã§ã³ãè¿œå ãã ïŒã
ã¹ããŒããã·ã³å³ãã§ããã®ã§ããã®å³ã«åããããªRubyã®ã³ãŒããäœæãã«ãŒã«ãèããŸãããã
ãŸãããSampleãã¯ã©ã¹ã«ç¶æ ãä¿æããã€ã³ã¹ã¿ã³ã¹å€æ°ãè¿œå ããŸãïŒ ãRubyãç¶æ ãä¿æããã€ã³ã¹ã¿ã³ã¹å€æ°ãè¿œå ãã ïŒã åæå€ã¯ãæåã®ç¶æ ïŒ ST0 ïŒã«ããŸãã
class Sample
def initialize
@state = :ST0 # (1)
@attr_a = true
@attr_b = true
end
# ç¥
end
-
çŸåšã®ç¶æ ãä¿æããå€æ°ãçšæãã ST0 ã§åæåãããã :ST0 ãã¯Rubyã®ã·ã³ãã«ã®è¡šèšæ³ãã·ã³ãã«ã¯ååä»ãã®æ°å€å®æ°ã
ã¹ããŒããã·ã³å³ã«æžããç¶æ é·ç§»ãæ åœããæäœãplayããplayã¡ãœãããšããŠäœæããŸãïŒ ãRubyãç¶æ é·ç§»ãæ åœããã¡ãœãããäœæãã ïŒã ã«ãŒã«ã®æ€èšçšãªã®ã§ãéäžã«ã¯åŠçã®ç¢ºèªçšã®è¡šç€ºåŠçãæžããŠãããŸãã
class Sample
def initialize
# ç¥
end
def play(evt, param)
puts "#{@state} ->" # (1)
puts " event:#{evt}, param: #{param}" # (2)
case @state # (3)
when :ST0
st0_proc(evt, param) # (4)
when :ST1
st1_proc(evt, param)
when :ST2
# none
end
puts " -> #{@state}" # (5)
puts 'finished.' if @state == :ST2 # (6)
end
end
-
é·ç§»åã®ç¶æ ã衚瀺ããã
-
ã€ãã³ããšãã©ã¡ãŒã¿ãŒã衚瀺ããã
-
ç¶æ ããšã®åŠçã caseæã䜿ã£ãŠåå²ããã
-
ç¶æ ããšã®è©³çŽ°ãªåŠçãæ åœããã¡ãœãããåŒã³åºãïŒããã§ã¯ st0_procïŒ ã
-
é·ç§»åŸã®ç¶æ ã衚瀺ããã
-
çµäºç¶æ ã«ãªã£ãããšãç¥ãããã
ãã®ãµã³ãã«ã®ã¹ããŒããã·ã³å³ã«ã¯ãç¶æ é·ç§»ã®ã¬ãŒãæ¡ä»¶ãšããŠãgd1ããgd2ããç»å ŽããŸãã ããããrubyã®ã¡ãœãããšããŠäœæããŸãã rubyã§ã¯ãçåœå€ãè¿ãã¡ãœããã«ã¯ã?ããã€ããç¿æ £ããããŸãã®ã§ãããã«ãããã£ãŠã¡ãœããåã¯ãgd1?ããgd2?ããšããŸãã ãµã³ãã«ãšããŠãå±æ§ã®å€ã䜿ã£ãæŒç®ãå²ãåœãŠãŸããïŒ ãRubyãã¬ãŒãæ¡ä»¶ã®ã¡ãœãããäœæãã ïŒã
class Sample
def initialize
# ç¥
end
def play
# ç¥
end
def gd1? # (1)
@attr_a && @attr_b # (2)
end
def gd2? # (3)
!@attr_a || @attr_b
end
end
-
ãgd1ãçšã®ã¡ãœãããçåœå€ãè¿ãã¡ãœããã«ã?ããã€ããRubyã®ç¿æ £ã«å£ã£ãã
-
å±æ§å€ã䜿ã£ãæ¡ä»¶åŒã®äŸã
-
ãgd2ãçšã®ã¡ãœããã
ç¶æ ããšã®åŠçãåãæã€ã¡ãœãããäœæããŸãã ã¡ãœããåã¯ãç¶æ åãå°æåããŠã_procããã€ãããšããã«ãŒã«ã«ããŸãã ãããã£ãŠãç¶æ åãST0ãã®å Žåãã¡ãœããåã¯ãst0_procãã«ãªããŸãïŒ ãRubyããST0ãã®ç¶æ é·ç§»ã®ã¡ãœãããäœæãã ïŒã
class Sample
def initialize
# ç¥
end
def play
# ç¥
end
def st0_proc(evt, param)
case evt # (1)
when :ev1 # (2)
if gd1? # (3)
puts " gd1: #{gd1?}"
act1(evt, param) # (4)
@state = :ST1 # (5)
else # (6)
puts " <<< gd1: #{gd1?}, transition is ignored. >>>"
end
when :ev3 # (7)
act3(evt, param)
@state = :ST2
end
end
# gd1?, gd2? ãç¶ã
end
-
ã€ãã³ãã§å Žååãããã
-
ã€ãã³ãããev1ãã®å Žåãã€ãã³ãã¯Rubyã®ã·ã³ãã«ã䜿ã£ãŠè¡šãã
-
ã¬ãŒãæ¡ä»¶ã«ããå€å®ã
-
ã¢ã¯ã·ã§ã³ãact1ãã®åŒã³åºãã
-
次ã®ç¶æ ãST1ããžã®é·ç§»ã
-
ã¬ãŒãæ¡ä»¶ãåœã ã£ããšããã€ãã³ããç¡èŠãããããšã衚瀺ããã
-
ã€ãã³ãããev3ãã®å Žåã
ãã®éšåã®Rubyã®ã³ãŒããšã¹ããŒããã·ã³å³ã®å¯Ÿå¿ãå³ã§è¡šããŠã¿ãŸãããïŒ Rubyã®ã³ãŒããšã¹ããŒããã·ã³å³ã®å¯Ÿå¿é¢ä¿ïŒïŒïŒ ïŒã
ããããã®ããšã¯ Rubyã®ã³ãŒããšã¹ããŒããã·ã³å³ã®å¯Ÿå¿é¢ä¿ïŒïŒïŒ ãèªãã°ãããã§ããããã察å¿é¢ä¿ã説æããŠãããŸãã
-
é·ç§»å ã®ç¶æ ã§åŸ ã£ãŠããã€ãã³ãããšã«å Žååãããã
-
ã¬ãŒãæ¡ä»¶ãªãã®ãšãã¯ïŒã¢ã¯ã·ã§ã³ãããã°ãããåŒã³åºããŠïŒã次ã®ç¶æ ãžé·ç§»ããã
-
ã¬ãŒãæ¡ä»¶ããããšãã¯ãå ã«ã¬ãŒãæ¡ä»¶ãè©äŸ¡ããŠãçã§ããã°ã¢ã¯ã·ã§ã³ãå®è¡ããŠæ¬¡ã®ç¶æ ãžé·ç§»ããã
-
ã¬ãŒãæ¡ä»¶ãåœã®ãšãã¯ãã¢ã¯ã·ã§ã³ã¯å®è¡ããããç¶æ ãé·ç§»ããªãã
ããã©ã¯ããST1ãããã®ç¶æ é·ç§»ã«å¯Ÿããã¡ãœãããst1_procãã§ãïŒ ãRubyããST1ãã®ç¶æ é·ç§»ã®ã¡ãœãããäœæãã ïŒã
class Sample
def initialize
# ç¥
end
def play
# ç¥
end
def st0_proc(evt, param)
# ç¥
end
def st1_proc(evt, param)
case evt
when :ev2 # (1)
act2(evt, param) # (2)
puts " gd2: #{gd2?}"
if gd2? # (3)
@state = :ST2 # (4)
else
act3(evt, param) # (5)
@state = :ST0 # (6)
end
when :ev3 # (7)
act3(evt, param)
@state = :ST0
end
end
# gd1?, gd2? ãç¶ã
end
-
ã€ãã³ãããev2ãã®å Žåã
-
ã¢ã¯ã·ã§ã³ãact2ãã®åŒã³åºãã
-
éžæç䌌ç¶æ ã«ãããã¬ãŒãæ¡ä»¶ã«ããå€å®ã
-
次ã®ç¶æ ãST0ããžã®é·ç§»ã
-
éžæç䌌ç¶æ ããã®é·ç§»ã«ãããã¢ã¯ã·ã§ã³ãact3ãã®åŒã³åºãã
-
次ã®ç¶æ ãST2ããžã®é·ç§»ã
-
ã€ãã³ãããev3ãã®å Žåã
ãã®éšåã®Rubyã®ã³ãŒããšã¹ããŒããã·ã³å³ã®å¯Ÿå¿ãå³ã§è¡šããŠã¿ãŸãããïŒ Rubyã®ã³ãŒããšã¹ããŒããã·ã³å³ã®å¯Ÿå¿é¢ä¿ïŒïŒïŒ ïŒã
ããããã®ããšã¯ Rubyã®ã³ãŒããšã¹ããŒããã·ã³å³ã®å¯Ÿå¿é¢ä¿ïŒïŒïŒ ãèªãã°ãããã§ããããã察å¿é¢ä¿ã説æããŠãããŸãã
-
éžæç䌌ç¶æ ã®åã®ç¶æ é·ç§»ã«ã€ããŠã¯ãRubyã®ã³ãŒããšã¹ããŒããã·ã³å³ã®å¯Ÿå¿é¢ä¿ïŒïŒïŒ ã®ã«ãŒã«ã§è³ãã
-
ãã®åŸã§ãéžæç䌌ç¶æ ã®åŸã®ç¶æ é·ç§»ã®ã¬ãŒãæ¡ä»¶ãè©äŸ¡ããã
-
è©äŸ¡çµæã«ãã£ãŠïŒã¢ã¯ã·ã§ã³ãããã°å®è¡ããŠããïŒã次ã®ç¶æ ãžé·ç§»ããã
-
éžæç䌌ç¶æ ã®åŸã®ç¶æ é·ç§»ã¯ãã¬ãŒãæ¡ä»¶ã«ããå Žååãã§æŒããå Žåããªãããã«æ³šæããã
ãã®ãµã³ãã«ã§ã¯ãã¢ã¯ã·ã§ã³ãact1ãããact2ãããact3ãã¯ãå®ããã«ãŒã«ã確èªããããã¡ãœããã«ããŠãããŸãïŒ ãRubyããST1ãã®ç¶æ é·ç§»ã®ã¡ãœãããäœæãã ïŒã ãããã®ã¢ã¯ã·ã§ã³ãšãå ã«æããã¬ãŒãæ¡ä»¶ããã§ãã¯ããã¡ãœããã¯ããSampleãã¯ã©ã¹å éšã®ã¡ãœããã ãã䜿ããŸããããã§ãRubyã®ã³ãŒãã§ããããã®ã¡ãœããã®ã¹ã³ãŒãããprivateãã«ããŸããããRubyã§ã¯ããprivateãããŒã¯ãŒããè¿œå ããŠãã®åŸã«ã¡ãœãããé 眮ããŸãã
class Sample
# initializeãplayãst0_procãst1_proc ã®å®çŸ©ãçç¥
praivate # (1)
def act1(evt, prm)
puts " act1: event:#{evt}, param: #{prm}"
end
def act2(evt, prm)
puts " act2: event:#{evt}, param: #{prm}"
end
def act3(evt, prm)
puts " act3: event:#{evt}, param: #{prm}"
end
def gd1? # (2)
@attr_a && @attr_b
end
def gd2?
!@attr_a || @attr_b
end
end
-
ãã®å®£èšä»¥éã®ã¡ãœããã¯ãå¯èŠæ§ããprivateããªã¡ãœããã«ãªãã
-
ã¬ãŒãæ¡ä»¶ã®å€å®çšã¡ãœããããprivateããªã¡ãœããã«å«ããã
ããã§ãã¹ããŒããã·ã³å³ã§è¡šããã¯ã©ã¹ã®æ¯ãèããRubyã®ã³ãŒãã«å¯Ÿå¿ã¥ããããŸããã
ã¹ããŒããã·ã³å³ãäœæãããšãã«è¿œå ããã¢ã¯ã·ã§ã³ã¯ããã®ã¹ããŒããã·ã³å³ãå²ãåœãŠãŠããã¯ã©ã¹ïŒããã§ã¯ãSampleãã¯ã©ã¹ïŒã®æäœã«ããŠãããŸãããã ããã§ããSampleãã¯ã©ã¹ããã¹ãããã¯ã©ã¹ãSampleTestããè¿œå ããŠãããŸãã
-
ã¯ã©ã¹å³ãéãã
-
ãSampleãã¯ã©ã¹ãéžæããããããã£ãŒãããæäœãã¿ãã衚瀺ããã
-
ãïŒãã¢ã€ã³ã³ã䜿ã£ãŠæäœãact1ããè¿œå ããã
-
å¯èŠæ§ããprivateãã«èšå®ããã
-
ãact2ãããact3ãã«ã€ããŠãåãããã«èšå®ããïŒ ãSampleãã¯ã©ã¹å éšã§äœ¿ãæäœãact1ããact2ããact3ããè¿œå ãã ïŒã
-
ã¬ãŒãæ¡ä»¶ã«äœ¿ãã¡ãœãããgd1?ããgd2?ããè¿œå ããŠããã
-
ãSampleTestãã¯ã©ã¹ãè¿œå ããïŒ ãSampleTestãã¯ã©ã¹ãšé¢é£ãè¿œå ãã ïŒã
-
ãã®ãã¹ãçšã¯ã©ã¹ã«ã¯ããã¹ããå®è¡ãããrunãã¡ãœãããçšæããŠããã
-
ãã¹ãçšã®ã¡ãœãããããã€ãè¿œå ããŠããã
-
-
ãSampleTestããããSampleãã¯ã©ã¹ãžé¢é£ãåŒããé¢é£ç«¯åããsamp01ããå€é床ãã1ããšããŠããã
ããã§ãã¯ã©ã¹å³ãšã¹ããŒããã·ã³å³ãšRubyã®ã³ãŒãã®å¯Ÿå¿ã¥ããã§ããŸããã å®éã®åé¡ã«ã€ããŠãã¯ã©ã¹å³ãã¹ããŒããã·ã³å³ãäœæãããšãã¯ããã®ãããªã«ãŒã«ã䜿ãåæã§äœæããŸãã ãããŠãRubyã§ã³ãŒããäœæãããšãã¯ãäœæããå³ãšå¯Ÿç¶²ã¥ãã®ã«ãŒã«ã䜿ã£ãŠã³ãŒããäœæããŸãã
Rubyã«ã¯enumã®ãããªåæåãçŽæ¥å®çŸ©ããæ¹æ³ããªãã®ã§ããã®ãã¥ãŒããªã¢ã«ã®ç°¡åã®ããã«ãç¶æ ãè¡šãå®æ°ãå®çŸ©ããããã«ãã·ã³ãã«ïŒ:ST0ãªã©ïŒãã䜿ããŸããã
{astah} ã¯ãJava, C#ãC++ ã«ã€ããŠã¯ãenumãèšå®ããæ¹æ³ãæäŸããŠããŸãã®ã§ããã®æ¹æ³ã§ä»£çšããŠãããã§ãããã
詳ããèšå®æ¹æ³ã«ã€ããŠã¯ã次ã®èšäºãåèã«ããŠã¿ãŠãã ããã
- Javaãenumã®èšå®
-
http://astah-users.change-vision.com/ja/modules/xhnewbb/viewtopic.php?topic_id=1249
æ€èšçšã®ã¯ã©ã¹å³ãšã¹ããŒããã·ã³å³ã«å¯Ÿå¿ã¥ããRubyã®ããã°ã©ã ã®åäœã確èªããŠã¿ãŸãããã
äœæããããã°ã©ã ã®å šäœã ãRubyãstm_sample.rb ã«ç€ºããŸãã ãã®ããã°ã©ã ã®ã³ãŒãã«ã¯ããSampleTestãã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŠããã¹ããèµ·åããåŠçãããã¹ãã¡ãœããã®å ·äœäŸãå«ãŸããŠããŸãã ãã¹ãã¯ã©ã¹ããã¹ãçšã¡ãœããã®çŽ°ãã説æã¯çããŸãã
link:{sourcesdir}/stm_sample.rb[role=include]
-
æååã®ç Žå£çå€æŽã®æ€åºãæ瀺ããããžãã¯ã³ã¡ã³ãã
-
簡䟿ã«ãã¹ãããããã«ãã¢ã¯ã»ãµãŒãè¿œå ããïŒãããŸã§ãã®ãµã³ãã«ã«ããã䟿å®ãšããŠïŒã
-
Sampleã¯ã©ã¹ã®ã¡ãœãããåŒã³åºããã¹ããå®çŸ©ãããã¹ãçšã®ã¯ã©ã¹ã®å®çŸ©ã
-
ãã¹ãçšã¯ã©ã¹ãå®è¡ããã³ãŒãããã®ãããã¯ã¯ãã¡ã€ã«åãšå®è¡ããã°ã©ã åãäžèŽãããšãã«æå¹ã«ãªãïŒãã®ãšãã ãå®è¡ãããïŒã
ã³ãã³ãããã³ãããèµ·åããŠïŒMacãLinuxãªãã¿ãŒããã«ãèµ·åããŠïŒãããã°ã©ã ãå®è¡ããŠã¿ãŸãïŒ ã端æ«ãstm_sample.rb ãå®è¡ãã ïŒã
åäœããããšãç¶æ é·ç§»ãã€ãã³ãã衚瀺ãããŸãã äœæããã¢ãã«å³ãæ¯èŒããŠæåŸ ããåäœãããŠããã確èªããŠã¿ãŸãããã
C:\Users\kuboaki>cd Desktop\BowlingScore
C:\Users\kuboaki\Desktop\BowlingScore>ruby stm_sample.rb
ST0 ->
event:ev1, param: 676481
gd1: true
act1: event:ev1, param: 676481
-> ST1
ST1 ->
event:ev2, param: 678623
act2: event:ev2, param: 678623
gd2: true
-> ST2
finished.
================
ST0 ->
event:ev1, param: 680596
<<< gd1: false, transition is ignored. >>>
-> ST0
ST0 ->
event:ev3, param: 681783
act3: event:ev3, param: 681783
-> ST2
finished.
================
ST0 ->
event:ev1, param: 683477
<<< gd1: false, transition is ignored. >>>
-> ST0
ST0 ->
event:ev2, param: 685784
-> ST0
ST0 ->
event:ev3, param: 708214
act3: event:ev3, param: 708214
-> ST2
finished.
================
C:\Users\kuboaki\Desktop\BowlingScore>
ã¯ã©ã¹å³ãšã¹ããŒããã·ã³å³ã§åäœãè¡šçŸããã°ãRubyã®ã³ãŒãã«å€æã§ããããšãããããŸããã
æ§é ã®ã¢ãã«ã«ç»å Žããæ§æèŠçŽ ãèŠçŽ éã®é¢é£ãèŠã€ãåºããã¹ã³ã¢ã·ãŒãã®æ§é ãæŽçããŸããã
-
ã¹ã³ã¢ã·ãŒãã«é¢ããæ§æèŠçŽ ã®çºèŠ
-
å ·äœçãªã¹ã³ã¢ã·ãŒãã芳å¯ããŠãããã«ããèŠçŽ ãæŽãåºããŠãªããžã§ã¯ãå³ã§è¡šããã
-
-
ã¹ã³ã¢ã·ãŒãã«é¢ããã¯ã©ã¹å³ã®äœæ
-
ãªããžã§ã¯ãå³ã«ç»å Žãããªããžã§ã¯ãããã¯ã©ã¹ãããªããžã§ã¯ãå士ã®ãªã³ã¯ããé¢é£ãèŠåºããã¯ã©ã¹å³ã«è¡šããã
-
æ§é ã®ã¢ãã«ãäœã£ãããšã§ãããã°ã©ã ãæ§æããèŠçŽ ãšãèŠçŽ å士ã®é¢ä¿ïŒé¢é£ïŒãè¡šããããã«ãªããŸããã ãŸããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ããªããžã§ã¯ãå³ã«èŠåãããã«äœæããã°ãå®éã«èŠ³å¯ããã¹ã³ã¢ã·ãŒããšåããããªããŒã¿æ§é ãäœæã§ããããšãããããŸããã
ãšããã§ãäœãããã£ãã®ã¯ãããŠãªã³ã°ã®ã²ãŒã ã¹ã³ã¢ãã€ããããã°ã©ã ã§ããã ã€ãŸãããã¬ãŒã€ãŒããã¬ãŒã ããšã«äº€ä»£ããŠæçãããã®ãã³ã«ã¹ã³ã¢ãæŽæ°ããåŠçã§ãã ã§ããããããŸã§ã«äœæããæ§é ã®ã¢ãã«ã§ã¯ãã²ãŒã ã®é²è¡ã«å¿ããŠã©ããªããšãåŠçãããè¡šããŠããŸããã ãã®ããã«ã¯ãåŠçã®äžèº«ãè¡šããæ¯ãèãã®ã¢ãã«ããäœæããå¿ èŠããããŸãã 次ã®ç« ã§ã¯ãã¹ããŒããã·ã³å³ã䜿ã£ãŠããã¬ãŒã ãã¹ã³ã¢ã®æ¯ãèããè¡šãã¢ãã«ãäœæããŸãã