
ç§ãã¡ã®æèŠã§ã¯ããªããžã§ã¯ãå¶çŽèšèªïŒOCLïŒã¯ãã¢ããªã³ã°ã«æºãã£ãŠããããã¢ãã«æåã®éçºã«èå³ããããã¹ãŠã®äººã«ç¥ãããã¹ãã§ãã ãããã圌ã¯äžåœã«ãããã¯ãŒã¯å šè¬ã«æ³šæã奪ãããŠãããå®éããã·ã¢èªã®æ å ±ã»ã°ã¡ã³ãã¯æ²æšãªãã®ã«ãããŸããã ãããã©ã®ãããªèšèªã§ããããªãå¿ èŠãªã®ãã¯ããã®èšäºã§èª¬æãããŠããŸãã ãã®èšäºã¯ãåºæ¬çãªãã®ãå®å šãªç¯å²ãå®çŸ©ã®æ£ç¢ºããªã©ãè£ ããã®ã§ã¯ãããŸããã ãã®ã¿ã¹ã¯ïŒ1ïŒãã®èšèªãèããããšããªã人ã«OCLã玹ä»ããç°¡åãªäŸãéããŠã2ïŒãããèããããšããªã人ã®ããã«ãããã䜿çšããæ°ããæ¹æ³ãçºèŠããããšãå¯èœã§ãã
æ§é çããã³è¿œå ã®å¶é
äŸããããã«å§ããŸãããã Jiraãªã©ã®ããã°ã©ã ãéçºããŠããããžã§ã¯ããã¿ã¹ã¯ãèæ ®ãããããã®ã¿ã¹ã¯ãåŸæ¥å¡ã«åé ãããšããŸãã ãã®ãããªããã°ã©ã ã®ããŒã¿ã¢ãã«ã¯ããã®ããã«éåžžã«åçŽåãããŠããããã«èŠããŸãã

ãã®ãããªå³ãæããåŸããµããžã§ã¯ããšãªã¢ã«å¶éã課ããŸãããåŸæ¥å¡ãã¿ã¹ã¯ãããã³ãããžã§ã¯ãã®ã¿ãããã«ååšãããããããŸãã«ãã®ãããªå±æ§ãæã¡ããã®ãããªæ¥ç¶ã§æ£ç¢ºã«æ¥ç¶ã§ããããšãä¿®æ£ããŸããã ããšãã°ããµããžã§ã¯ããšãªã¢ã§ã¯ãåŸæ¥å¡ã«ã¯æ°åãšç幎ææ¥ãå¿ èŠã§ãã ãã ããã¿ã¹ã¯ãŸãã¯ãããžã§ã¯ãã«ãã®ãããªå±æ§ãå«ããããšã¯ã§ããŸããã ãŸãã¯ãã¿ã¹ã¯ã®å®è¡è ã¯åŸæ¥å¡ã«ãããªããŸããããå¥ã®ã¿ã¹ã¯ãŸãã¯ãããžã§ã¯ãã¯å®è¡è ã«ã¯ãªããŸããã ãããã¯æãããªããšã§ããããã®ãããªã¢ãã«ãäœæãããšããå¶éãçå®ããããšãç解ããããšãéèŠã§ãã ãã®ãããªå¶çŽã¯ãæ§é çå¶çŽãšåŒã°ããããšããããŸãã
ãã ããå€ãã®å Žåããã¡ã€ã³ãã¢ãã«åãããšãã®æ§é çãªå¶éã§ã¯äžååã§ãã ããšãã°ããããžã§ã¯ããããŒãžã£ãŒãåæã«ãããžã§ã¯ãã®åå è ã«ãªããªããšããå¶éãå¿ èŠã«ãªãå ŽåããããŸãã ããŠããã®å¶éã¯ãã®å³ã«ã¯åŸããŸããã è¿œå ã®ïŒéæ§é çãªïŒå¶éã®ä»ã®äŸãïŒãã£ãã;-)ã§ïŒç€ºããŸãã
- ç ä¿®çã¯ãããžã§ã¯ãã管çã§ããŸãã
- ããã°ã©ããŒã¯1ã€ã®ãããžã§ã¯ãã管çã§ããŸãããä»ã®ãããžã§ã¯ãã«åå ããããšã¯ã§ããŸããã
- ãªãŒãããã°ã©ãã¯ãäžåºŠã«2ã€ãŸã§ã®ãããžã§ã¯ãã管çã§ããŸã
- ãããžã§ã¯ãã«ã¯ãªãŒããŒã1人ããããŸãã
- å®å šãªååã®äººã1ã€ã®ãããžã§ã¯ãã«åå ããããšã¯ã§ããŸãã
- éãããããžã§ã¯ãã«éããŠããã¿ã¹ã¯ãå«ããããšã¯ã§ããŸããïŒå®éã®å®è¡æéãããå Žåãã¿ã¹ã¯ã¯éããããŠãããšèŠãªãããŸãïŒ
- ã¿ã¹ã¯ã«ãšã°ãŒãã¥ãŒã¿ãŒãå²ãåœãŠãåã«ãèšç»å®è¡æéã決å®ããå¿ èŠããããŸã
- çµäºããåã«ãã¿ã¹ã¯ã®ã¹ã±ãžã¥ãŒã«ãããå®è¡æéã決å®ããå¿ èŠããããŸãã
- 1ã€ã®ãããžã§ã¯ãã®åŸæ¥å¡ã¯ãéããŠããã¿ã¹ã¯ã1ã€ã ãæã€ããšãã§ãããã¹ãŠã®ãããžã§ã¯ãã«å¯ŸããŠ5ã€ä»¥äžã®ã¿ã¹ã¯ããæã€ããšãã§ããŸããã
- åŸæ¥å¡ã¯æ³å®å¹Žéœ¢ã§ãªããã°ãªããŸãã
- åŸæ¥å¡ã®ååã¯ãã¹ããŒã¹ã§åºåããã3ã€ã®éšåïŒå§ãåãããã³åŸæŽè ïŒã§æ§æããå¿ èŠããããŸãïŒã¹ããŒã¹ã2éã3éãªã©ã«ããããšã¯ã§ããŸããïŒ
- ãªãŒãããã°ã©ããŒãSigmundã«é»è©±ã§ããªã
- ã¿ã¹ã¯ã®å®éã®äœæ¥æéã¯ãèšç»ãã2åãè¶ ããããšã¯ã§ããŸãã
- ã¿ã¹ã¯ããã®ãµãã¿ã¹ã¯ã«ããããšã¯ã§ããŸããã
- ã¿ã¹ã¯ãå®äºããäºå®æéã¯ããµãã¿ã¹ã¯ã®äºå®æé以äžã§ãªããã°ãªããŸããã
- ...èªåã§ããã€ãã®å¶éãèãåºã...
ãŸãšã
ããŸããŸãªã¢ããªã³ã°èšèªã䜿çšããŠããµããžã§ã¯ãé åã«èª²ãããæ§é çå¶çŽãèšè¿°ããããšãã§ããŸãã
- ãªããžã§ã¯ãã®ã¿ã€ãïŒãªããžã§ã¯ãã¯å¯Ÿå¿ããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«ãããªããŸããïŒåŸæ¥å¡ã¯ãããžã§ã¯ãããããã£ãæã€ããšãã§ãããã¿ã¹ã¯ã¯åŸæ¥å¡ãšãšãã«ããŒãã«ã«ä¿åããããšã¯ã§ããŸããããªã©ïŒã
- 蚱容ãããããããã£ãšé¢é£ä»ãã
- ã¿ã€ãã«ã€ããŠïŒããããã£ã¯ç¹å®ã®ã¿ã€ãã®å€ã®ã¿ãåãããšãã§ããŸãã
- å€é床ïŒå¿ èŠãªããããã£/é¢é£ä»ãã®å€ãæå®ããå¿ èŠããããŸããè€æ°ã®ã1ããæã€ããããã£/é¢é£ä»ãã«ã€ããŠã¯ãããã€ãã®å€ãæå®ã§ããŸãããªã©ã
OCLãªã©ã®è¿œå èšèªã䜿çšããŠãè¿œå ã®å¶éã説æã§ããŸãã
Eclipseãæ§æãã
ããããã¹ãŠãå®éã«è©ŠããŠã¿ããå Žåã¯ãEclipseãå¿ èŠã§ãã ããã§ãªãå Žåã¯ã次ã®ã»ã¯ã·ã§ã³ã«é²ã¿ãŸãã
- Eclipse ïŒã§ããã°Eclipse Modeling ToolsïŒãããŠã³ããŒãããŠè§£åããŸãã ãã§ã«Rational Software Architect 9.0ïŒEclipseããŒã¹ïŒã䜿çšããŠããå Žåã¯ãããã䜿çšã§ããŸãã
- å¿
èŠãªã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŸãã
- Eclipseã®å Žåã ã¡ãã¥ãŒãã[ãã«ã]-> [ã¢ããªã³ã°ã³ã³ããŒãã³ãã®ã€ã³ã¹ããŒã«]ãéžæããŸãã 衚瀺ããããŠã£ã³ããŠã§ããGraphical Modeling Framework ToolingãããOCL Toolsããããã³ãEcore Toolsããå¹²æžããªãããšãéžæããŸãã
- RSA 9.0ã®å Žåã org.eclipse.gmf.tooling.runtime _ *ãJarããã³org.eclipse.ocl.examples.interpreter _ *ãJarãã¡ã€ã«ãCïŒ\ Program Files \ IBM \ SDP \ plugins \ãã©ã«ããŒã«ã³ããŒããŸãïŒã€ã³ã¹ããŒã«ããã©ã«ããŒã«ãã£ãŠç°ãªããŸãïŒå€åå°ãéãïŒã
- ãã¹ãã¡ã¿ã¢ãã«ã§pm * .jarãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããŸãã
- Eclipseã®å Žåã ãããã®ãã¡ã€ã«ãã$ ECLIPSE_HOME / dropinsããã©ã«ããŒã«ã³ããŒããŸã
- RSA 9.0ã®å Žåã ãããã®ãã¡ã€ã«ããã©ã«ããŒãCïŒ\ Program Files \ IBM \ SDP \ plugins \ãã«ã³ããŒããŸãïŒã€ã³ã¹ããŒã«ã«ãã£ãŠããã©ã«ããŒã¯è¥å¹²ç°ãªãå ŽåããããŸãïŒã ããã€ãã®ãã°ã®ãããdropinsãã©ã«ããŒã¯æšå¥šãããŸããã
- Eclipseãåèµ·åããŸãã ã¡ãã¥ãŒãã[ãã¡ã€ã«]-> [æ°èŠ]-> [ãã®ä»]ãéžæããæ€çŽ¢ããŒã«ãpmããšå ¥åããŸãã ãPm ModelããšãPm Diagramãã衚瀺ãããŸãã
- ãã¹ãã¢ãã«ãèªåã§äœæãããã å®æãããã®ã䜿çšã§ããŸãã
- ã³ã³ãœãŒã«ãéããŸãïŒãŠã£ã³ããŠ->ãã¥ãŒã衚瀺->ãã®ä»...ãªã¹ãã§ãã³ã³ãœãŒã«ããèŠã€ããŸãã
- ã³ã³ãœãŒã«ãŠã£ã³ããŠã§ã[ã³ã³ãœãŒã«ãéã]ããããããŠã³ãªã¹ããéãããã®äžã®[ã€ã³ã¿ã©ã¯ãã£ãOCL]ãéžæããŸãïŒäžå³ãåç §ïŒã
- ãã€ã¢ã°ã©ã äžã®ä»»æã®ãªããžã§ã¯ããéžæããã³ã³ãœãŒã«ã®äžéšã«ãselfããšå ¥åããŠããEnterããæŒããŸãã ãã¹ãŠãæ£ããæ§æãããŠããå Žåã次ã®ãããªãã®ã衚瀺ãããŸãã

ã¡ã¿ã¢ãã«ã䜿çšãããã©ã°ã€ã³ãæ©èœããªãå Žåã¯ã ãœãŒã¹ã³ãŒãããèªåã§ã³ã³ãã€ã«ã§ããŸãã RSA 9.0ã§ã¯ãæ¯èŒçå€ãããŒãžã§ã³ã®GMFã䜿çšããŠåäœããŸãã
äŸ1ãã¿ã¹ã¯ãå®è¡ããäºå®æéã¯ããµãã¿ã¹ã¯ã®äºå®æé以äžã§ãªããã°ãªããŸããã
OCLã«ã€ããŠæåã«ç¥ã£ãŠããã¹ãããšã¯ãå¶çŽãåžžã«ãªããžã§ã¯ãã®ç¹å®ã®ã¯ã©ã¹ã«é©çšãããããšã§ãã OCLã«ãŒã«ãèšè¿°ããåã«ããã®ã¯ã©ã¹ãéžæããå¿ èŠããããŸãã æã ããã®éžæã¯ããŸãæçœã§ã¯ãããŸããããä»ã§ã¯ãã¹ãŠãåçŽã§ããã«ãŒã«ã¯ã¿ã¹ã¯ã«é©çšãããŸãã selfå€æ°ã䜿çšããŠãã¿ã¹ã¯ã®ç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã ã¿ã¹ã¯ã®ããããã£ã®å€ãååŸããå¿ èŠãããå Žåã¯ãå€æ°åã®åŸã«ãã€ã³ããæžãããã®ããããã£ã®ååãæžããŸãã åæ§ã«ãé¢é£ä»ãã®ååãæå®ã§ããŸãã Eclipseã§è©ŠããŠã¿ãŠãã ããã
ã泚æ
äžèŠãªåé¡ãåé¿ããããã«ãã¢ãã«å ã®ãã¹ãŠã®ã¯ã©ã¹ãããããã£ãªã©ã ã©ãã³æåã䜿çšããŠååãä»ããããŸãã ãªãŒãã³ã³ããªãŒãã䜿çšããŠããã®ããããã£ãŸãã¯ãã®ããããã£ãã©ã®ããã«åŒã³åºãããããæ£ç¢ºã«èª¿ã¹ãããšãã§ããŸãïŒCtrl + SpaceãæŒããŠåŒã³åºããŸãïŒã
æçµçãªå¶åŸ¡èŠåãå³ã«ç€ºããŸãã

OCLã®åå¿è ã«ãšã£ãŠããã»ã©éèŠãªããšã¯ãæåããããšã->ãã®éãã§ãã
ãã€ã³ãã®åŸã«æ¥ããã®ã¯ãå€ãŸãã¯ãªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³å ã®åèŠçŽ ãæããŸãã
ç¢å°ãå€ãŸãã¯ãªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³å šäœã«é©çšãããåŸã«æ¥ããã®ã
è¡šã¯ããã€ã³ããšç¢å°ã®äœ¿çšäŸãããã€ã瀺ããŠããŸãã
OCLåŒ | OCLåŒã®è§£é |
---|---|
| ãPlan_timeãããããã£ã®å€ãååŸããŸã |
| å€ãã®ãµãã¿ã¹ã¯ãååŸãã |
| ã»ããå ã®åãµãã¿ã¹ã¯ã«ã€ããŠããPlan_timeãããããã£ã®å€ãååŸããæçµçã«å€ãã®ãã®ãããªå€ãååŸããŸã |
| å€ã®ã»ããå šäœã®åèšãèšç®ãã |
| ã¿ã¹ã¯ã¯Plan_timeããããã£ã«å¯ŸããŠæ倧ã§1ã€ã®å€ãæã€ããšãã§ãããšããäºå®ã«ããããããããã®å€ã¯æé»çã«ïŒåäžã®èŠçŽ ãæã€ïŒã»ããã«å€æãããŸãã sumïŒïŒæŒç®ã¯ãçµæã»ããã«é©çšãããŸãã |
ã泚æ
collectïŒïŒããã³oclAsSetïŒïŒæäœã®èª¬æã«ã€ããŠã¯ãOCLä»æ§ãåç §ããŠãã ããã
äŸ2ããããžã§ã¯ããããŒãžã£ãŒã¯ããããžã§ã¯ãã®åå è ã§ãã£ãŠã¯ãªããŸããã
å³ã¯ããã®ã«ãŒã«ã®ããã€ãã®åçã®å®åŒåã瀺ããŠããŸãããããžã§ã¯ãåå è ã®ãªã¹ããååŸãããªãŒããŒãããªãããšã確èªããŸãã

èªå·±å€æ°ã¯çç¥ã§ããŸãããæé»çã«æ瀺ãããŸãã ãã ããäžéšã®æäœïŒselectãexistsãforAllã...ïŒã¯ãè¿œå ã®æé»çãªå€æ°ïŒã€ãã¬ãŒã¿ãŒïŒã䜿çšããŠæ°ããã¹ã³ãŒããäœæããããšã«æ³šæããããšãéèŠã§ãã åæã«ãããããã£ãã§ãŒã³ãã©ã®æé»å€æ°ã«å±ããŠããããç解ããã®ã¯ããªãå°é£ã§ãã ãã®ãããªç¶æ³ã§ã¯ããã¹ãŠã®å€æ°ïŒãŸãã¯1ã€ãé€ããã¹ãŠïŒãæ瀺çã«æå®ããããšã匷ããå§ãããŸãã
äŸ3ããªãŒãããã°ã©ããŒã¯ãäžåºŠã«2ã€ãŸã§ã®ãããžã§ã¯ãã管çã§ããŸãã
ãã®ãããªã«ãŒã«ãèšè¿°ããåå¿è ã¯ãéåžžããŸãæåã«OCL if-then-elseã§ãããã©ãããå°ããŸãã ã¯ãããããŸãããã»ãšãã©ã®ã«ãŒã«ã§ã¯ã代ããã«å«æã䜿çšããæ¹ãé©åã§ãã

å«æã®åæãåœã§ããå Žåãæ®ãã®æ¡ä»¶ããã§ãã¯ããããšããããŸããã ãããŠãçã§ããå ŽåãåŸæ¥å¡ã管çãããããžã§ã¯ãã®ãªã¹ããååŸããã¯ããŒãºããããããžã§ã¯ãããããããé€å€ãããã®ãããªãããžã§ã¯ãã®æ°ã2ã€ä»¥äžã§ããã°ãæ¡ä»¶ãæºããããŠãããšèããŸãã
äŸ4ãå®å šãªååã®äººã¯1ã€ã®ãããžã§ã¯ãã«åå ã§ããŸãã
ãããããããæåã®éèŠãªã«ãŒã«ã§ãã åŸæ¥å¡ãšãããžã§ã¯ãã®äž¡æ¹ããå§ããŠãå®åŒåãè©Šã¿ãããšãã§ããŸãã æ£ããã¯ã©ã¹ã§éå§ããããšãéèŠã§ã:-) isUniqueïŒïŒãªãã¬ãŒã·ã§ã³ã®ååšãããããªãå Žåã¯ããã®ãããªã¿ã¹ã¯ã«æåã«åºäŒã£ããšãã®ããã«ãã¢ãã¹ããã€ãæ§é ã®ãã¬ãŒãã³ã°ãéå§ã§ããŸãã

æ瀺çãªå埩å宣èšãã«ãŒã«ïŒãyãå€æ°ïŒããåé€ããã«ãŒã«ã®è§£éãè©Šã¿ãŸãã å人çã«ãç§ã¯äœãèµ·ããããæ£ç¢ºã«èŠããŠããŸããã ã©ã®ååãã¢ãã¬ã¹æå®ãããŠããããæ確ã«å€æããããšãã§ããªãã®ã¯ééããããããŸããã ãŸãã¯ãã€ãã¬ãŒã¿ãselfãããåªå ãããå ŽåããããŸãã ä»æ§ã確èªããå¿ èŠããããŸãã ãããã®å Žåã§ãããã®ãããªç¶æ³ãåé¿ããå€æ°ãæ瀺çã«æå®ããããšããå§ãããŸãã
ã泚æ
ã€ãã¬ãŒã¿ã¯è€æ°ã«ããããšãã§ããŸãã OCLä»æ§ãèŠãŠãOCLã³ã³ãœãŒã«ã§å®éšããŠãã ããã ä»æ§ãæäœisUniqueïŒïŒãã©ã®ããã«å®çŸ©ããããåç §ããŠãã ããã
äŸ5ã1ã€ã®ãããžã§ã¯ãã®åŸæ¥å¡ã¯ã1ã€ã®éããŠããã¿ã¹ã¯ã®ã¿ãæã¡ããã¹ãŠã®ãããžã§ã¯ãã«å¯ŸããŠ5ã€ä»¥äžã®ã¿ã¹ã¯ãæã€ããšãã§ããŸãã
ãã®ã«ãŒã«ã§ã¯ãæåã«éããŠããã¿ã¹ã¯ã®ãªã¹ãã§å€æ°ã宣èšããŸãã 次ã«ã2ã€ã®æ¡ä»¶ã確èªããŸãã å®éã®å®è¡æéã瀺ãããŠããªãå Žåãã¿ã¹ã¯ã¯éããŠãããšèŠãªãããŸãã

ãã®ã«ãŒã«ãå®çŸ©ããã®ã«æé©ãªã¯ã©ã¹ã¯äœã ãšæããŸããïŒ åŸæ¥å¡ãŸãã¯ã¿ã¹ã¯ã®å ŽåïŒ
äŸ6ãã¿ã¹ã¯ã¯ãã®ãµãã¿ã¹ã¯ã«ã¯ã§ããŸãã
å³ã«æãããŠããã«ãŒã«ã®æ¬è³ªãããã«ç解ããªãã£ãå Žåãããã¯éåžžã«èªç¶ãªããšã§ãã äžæ¹ã§ã¯ããªããžã§ã¯ãã®ã¯ã©ã¹ãã¿ã¹ã¯ãããããä»æ¹ã§ã¯ãã¿ã¹ã¯ã«ã¯èŠªã¿ã¹ã¯ã瀺ãé¢é£ä»ããã¿ã¹ã¯ãããããŸãã ããŸããŸãªæ¹æ³ã§ã¯ã©ã¹ããã³ããããã£/é¢é£ä»ãã«ååãä»ããããšããå§ãããŸããããã«ãããã¢ãã«ã®å質ãåäžããOCLã«ãŒã«ã®ç解ã容æã«ãªããŸãã

ãé¡ãã«ãŒã«ãå®è£ ããããšããå§ããŸãããã ç¹å®ã®ã¿ã¹ã¯ã®é¢é£ä»ããåé¡ããã¿ã¹ã¯èªäœã瀺ããŠãããã©ããã確èªããŸãããïŒãselfãTask <> selfãã å³ã§ã¯ãèªå·±å€æ°ãžã®æ瀺çãªåç §ãåé€ããŸããã ããã¯èŽåœçã§ã¯ãªãããã«æãããŸãããOCLåŒã§ã¯ãããããã£ãŸãã¯é¢é£ä»ãã ãã§ãªããã¯ã©ã¹ãåç §ã§ããŸãã ããšãã°ã次ã®åŒã䜿çšãããšããã¹ãŠã®ã¿ã¹ã¯ã®ãªã¹ããTask.allInstancesïŒïŒããååŸã§ããŸãã ãã®äŸã§ã¯ãOCLã€ã³ã¿ãŒããªã¿ãŒã¯ãã¯ã©ã¹ã§ã¯ãªããã¿ã¹ã¯ãã¢ãœã·ãšãŒã·ã§ã³ã§ãããšå€æããå¯èœæ§ãé«ããªããŸãã ããããç¹°ãè¿ããŸããããã®ãããªãããŸãããé¿ããããšããå§ãããŸãã
ãã®èŠåã®2çªç®ã®æ¬ ç¹ã¯ããµãã¿ã¹ã¯ãç¬èªã®ãµãã¿ã¹ã¯ãæã€ããšãã§ããããšãèæ ®ããŠããªãããšã§ãã ã¿ã¹ã¯ã¯ããã®ãµãã¿ã¹ã¯ã®ãµãã¿ã¹ã¯ã§ããããšãç°¡åã«ããããŸãã ããã§ãªãããšã確èªããã«ã¯ãã«ãŒããŸãã¯ååž°é¢æ°ãå¿ èŠã«ãªãå ŽåããããŸãã ããããOCLã«ã¯ã«ãŒãã¯ãªããé¢æ°ã䜿çšãããšãã¹ãŠãéåžžã«åçŽã«ãªãããã§ã¯ãããŸããã ããããçŽ æŽãããClosureïŒïŒæäœããããŸãã ãã®æäœã¯ã³ã¬ã¯ã·ã§ã³ã«å¯ŸããŠå®çŸ©ãããŠããããããããã§ã¯ãªãç¢å°ãåã«çœ®ãå¿ èŠããããŸãã ã³ã¬ã¯ã·ã§ã³ã®åèŠçŽ ã«ã€ããŠãclosureïŒïŒãªãã¬ãŒã·ã§ã³ã¯åŒæ°ãšããŠæå®ãããåŒãè©äŸ¡ããååŸããå€ãã³ã¬ã¯ã·ã§ã³ã«çµåããŸãããã®åèŠçŽ ã«å¯ŸããŠãã®åŒãå床è©äŸ¡ããååŸããå€ãçµæã®ã³ã¬ã¯ã·ã§ã³ã«è¿œå ããŸãã
self.->union(self..)->union(self...)->union(...)
å³ã¯ããããã芪ã¿ã¹ã¯ãšãµãã¿ã¹ã¯ã®ååž°ã«åºã¥ããã«ãŒã«ã®2ã€ã®ããŒãžã§ã³ã瀺ããŠããŸãã æè¯ã®éžæè¢ã¯äœã ãšæããŸããïŒããªãã¯ã®è³ªåïŒã
ã泚æ
確ãã«ãé ããæ©ãããµã€ã¯ã«ãå¿ èŠã«ãªããŸãã ã»ãšãã©ã®å Žåã代ããã«ã³ã¬ã¯ã·ã§ã³ã«å®çŸ©ãããæäœïŒselectãexistsã...ïŒã䜿çšã§ããŸãã
ããã§ãã«ãŒããå¿ èŠãªå Žåã¯ã次ã®ãããªãã®ãè©Šãããšãã§ããŸãã
Sequence{1..10}->collect(...)
iterateïŒïŒæäœã«ã泚æããŠãã ããã
äŸNo.7ãåŸæ¥å¡ã®ååã¯ãã¹ããŒã¹ã§åºåããã3ã€ã®éšåïŒå§ãåãæçšè ïŒã§æ§æããå¿ èŠããããŸãïŒã¹ããŒã¹ã2éã3éãªã©ã«ããããšã¯ã§ããŸããïŒ
æããã«ããã®ãããªã«ãŒã«ã¯æ£èŠè¡šçŸã䜿çšããŠå®è£ ããã®ãæãç°¡åã§ãã ãã ãã OCLä»æ§ã«ã¯ããããæäœããæäœã¯ãããŸããã å³ã§ã¯ãæ£èŠè¡šçŸã䜿çšããªããã®ãããªã«ãŒã«ã®å®è£ äŸã瀺ããŠããŸãã 幞ããªããšã«ãæšæºã®OCLã©ã€ãã©ãªã¯æ¡åŒµå¯èœã§ãããäžéšã®å®è£ ã§ã¯ãmatchesïŒïŒæäœããŸã ååšããããèªåã§å®è£ ããããšãã§ããŸãã

OCLã³ã³ã¹ãã©ã¯ã
確èªãããã¹ãŠã®OCLåŒã¯ãBasic OCLïŒEssential OCLïŒã§èšè¿°ãããŠããŸãã ïŒãšããã§ããããã¯ã©ã®ããã«éããšæããŸããïŒïŒç§ãã¡ã䜿çšããäž»ãªæ§é ããªã¹ãããŸãïŒ
- èªå·±å€æ°-åŒã¯åžžã«ãªããžã§ã¯ãã®ç¹å®ã®ã¯ã©ã¹ã«ãã€ã³ããããŸã
- ååã«ããããããã£ïŒããã³é¢é£ä»ãïŒãžã®ã¢ã¯ã»ã¹ïŒ
- self.Actor.Tasks.Project.Manager.Tasks ...
- ç®è¡ããã³è«çæŒç®
- é¢æ°åŒã³åºãïŒ
- Name.substringïŒ1ã5ïŒ
- Name.sizeïŒïŒ=æååã®é·ã
- ã³ã¬ã¯ã·ã§ã³ãæäœããïŒ
- åå->ãµã€ãºïŒïŒ= 1 åŸæ¥å¡ã«ã¯åäžã®ååãå¿ èŠã§ã
- ã¿ã¹ã¯-> forAllïŒã¿ã¹ã¯|ã¿ã¹ã¯ãTime_plan> 10ïŒ
- å€æ°å®£èšïŒ
- let s1ïŒInteger = name.indexOfïŒ ''ïŒin
- æ¡ä»¶ä»ãã¹ããŒãã¡ã³ãïŒif-then-elseïŒ
å®å šãªOCLã«ã¯ã詳现ã«æ€èšããªãè¿œå ã®æ§é ãããã€ããããŸãããä»æ§ãèªãããšã§ãããã«æ £ããããšãã§ããŸãã
- ã¡ãã»ãŒãžãç¶æ
- ããã±ãŒãžãã³ã³ããã¹ããåŒã®ç®çïŒããã±ãŒãžãã³ã³ããã¹ããinvãpreãpostãbodyãinitãderivïŒ
宿é¡
OCLä»æ§ãåç §ããŠãã ããã
ããªããã£ãããŒã¿ã¿ã€ããã³ã¬ã¯ã·ã§ã³ã®ã¿ã€ãïŒå€æ°ãã·ãŒã±ã³ã¹ãªã©ïŒãç解ããŸãã OCLã§æ¥ä»ãšæå»ãæäœããããã®ããªããã£ãåããªãã®ã¯ãªãã ãšæããŸããïŒ ãŸã å¿ èŠãªå Žåã¯ã©ãããŸããïŒ
Basic OCLãEssential OCLãComplete OCLã®éããç解ããŸãã
ä»ã®OCLã«ãŒã«ãèªåã§å®è£ ããEclipseã§ãã§ãã¯ããŸãã
èšäºã«èšèŒãããŠãããã¹ãŠã®OCLåŒã¯ãtrueãŸãã¯falseã®å€ã®ã¿ãåãããšãã§ããŸãã ïŒãšããã§ãããªãã¯ãã®å£°æã«åæããŸããïŒïŒããªãã®æèŠã§ã¯ãOCLåŒã¯å€ã®æ°å€ç¯å²ãæ»ãæååãå€ã®ã»ãããŸãã¯ãªããžã§ã¯ããæã€ããšãã§ããŸããïŒ ãã®ãããªéããŒã«OCLåŒã¯ã©ã®ããã«äœ¿çšã§ããŸããïŒ
ããªãã®æèŠã§ã¯ãOCLåŒã®èšç®çµæã¯å¥ã®OCLåŒã«ãªããŸããïŒ
ããŒãã¹ ã¡ã¿ã¢ãã«ã«ã€ããŠå°ã
以åã«è¡ã£ãããšã¯ãã¢ãã«ã®å¶éã説æããç¹å®ã®åŸæ¥å¡ãã¿ã¹ã¯ãããã³ãããžã§ã¯ãã«é¢ãããããã®å¶éã確èªããããšã ãã§ãã ããšãã°ããããžã§ã¯ããããŒãžã£ãŒãåæã«ãããžã§ã¯ãã®åå è ã«ãªãããšã¯ã§ããªããšããã«ãŒã«ã説æããŸããã ããã«ããã¹ãŠã®ãããžã§ã¯ããšåŸæ¥å¡äžè¬ã«å¯ŸããŠãã®ã«ãŒã«ã説æããŸããã ãããŠã圌ãã¯ç¹å®ã®ãããžã§ã¯ããšåŸæ¥å¡ã®ããã«ããããã§ãã¯ããŸããã
äŸNo. 1.ã¡ã¿ã¢ãã«ãEmployee-Task-Groupã
ããã§ã¯ã1ã€äžã®ã¬ãã«ã«é²ã¿ãŸãããã ããšãã°ãã¿ã¯ã·ãŒã®æ³šæãµãŒãã¹ã®ããã«ãå¥ã®ã¢ããªã±ãŒã·ã§ã³ãéçºããŸãã åæ§ã®ããŒã¿ã¢ãã«ããããŸãã åŸæ¥å¡ã®ä»£ããã«ãã¿ã¹ã¯ã®ä»£ããã«ãã©ã€ããŒã泚æããããŠãããžã§ã¯ãã®ä»£ããã«éœåžãããããã«ããŸãã ãã¡ããããã¯éåžžã«æ¡ä»¶ä»ãã®äŸã§ãããã¢ã€ãã¢ãå®èšŒããããã«ã®ã¿å¿ èŠã§ãã ãŸãã¯ãããšãã°ãå»åž«ã«äºçŽããããã®ã¢ããªã±ãŒã·ã§ã³ãéçºããå¿ èŠããããŸãã å»åž«ãéšéãã¬ã»ãã·ã§ã³ããããŸãã
ããããã¹ãŠã®ã¢ãã«ãèŠãŠããããã®äžè¬çãªãã¿ãŒã³ãèŠãããšãã§ããŸãã ããã°ã©ããŒããã©ã€ããŒãå»åž«ã¯åºæ¬çã«åããã®ã§ãããåŸæ¥å¡ã§ãã ãªãŒããŒãã¬ã»ãã·ã§ã³-ããã¯ãèŠçŽãããšãåãªãã¿ã¹ã¯ã§ãã ããŠãåžãæ¯éšããããžã§ã¯ããèŠçŽããŸãããã ããããåãªãã°ã«ãŒããšåŒã³ãŸãã åŸæ¥å¡ãšã¿ã¹ã¯éã®æ¥ç¶ã¯å®è¡ãšåŒã°ããŸãã åŸæ¥å¡ãšã°ã«ãŒãéã®ã€ãªããã¯åå ãšåŒã°ããŸãã

ãã®ãããªçµµãæããŠãããªããšç§ã¯äž»é¡é åã®æ°ããã¬ãã«ã®èªèã«éããŸãã-ç§ãã¡ã¯ã¡ã¿ã¢ãã«ãéçºããŸãããç§ãã¡ã¯ãã®ãããªã¢ãã«ãèšè¿°ããããšãã§ããèšèªã§ãã
èšäºã®æåã®éšåã§äœæããã¢ãã«ãã察象é åã®ãªããžã§ã¯ãã«é¢ããæ å ±ã«æ§é çããã³éæ§é çå¶éã課ããããšãæãåºããŠãã ããã
åæ§ã«ãã¡ã¿ã¢ãã«ã¯ããã®ã¡ã¿ã¢ãã«ã«åŸã£ãŠæ§ç¯ãããã¢ãã«ã«æ§é çããã³éæ§é çå¶çŽã課ããŸãã ããšãã°ããã®ã¡ã¿ã¢ãã«ã«å¯Ÿå¿ããã¢ãã«ã§ã¯ãå³ã§èµ€ã§ããŒã¯ãããã¡ã¿ã¯ã©ã¹ã«åºã¥ããèŠçŽ ã®ã¿ãååšã§ããŸãã ããšãã°ãã¯ã©ã¹ãBuildingãããRoadãããŸãã¯åŸæ¥å¡ãã¿ã¹ã¯ãªã©ã§ã¯ãªãé¡äŒŒã®ãã®ã¯ãã¢ãã«ã«è¡šç€ºã§ããŸããã
ã泚æ
ãšããã§ãã¡ã¿ã¢ãã«ã¯ã¡ã¿ã¡ã¿ã¢ãã«ïŒMOFãEcoreãªã©ïŒã«åºã¥ããŠæ§ç¯ãããŸãã èå³ãããå Žåã¯ãOMG MOFä»æ§ããèªã¿ãã ããã äžè¬çãªã±ãŒã¹ã§ã¯ãã·ãã¥ã¬ãŒã·ã§ã³ã¬ãã«ã®æ°ã¯ä»»æã§ãããéåžžã¯2ã3ã§ååã§ãã
ãšããã§ãMOFèªäœãæ§ç¯ãããã¡ã¿ã¡ã¿ã¢ãã«ã«åºã¥ããŠã©ãæããŸããïŒ
è³ã®è±èŒãæããªãå Žåã¯ãèšäºDragan DjuricãDraganGaÅ¡evicãããã³VladanDevedÅŸicãThe Tao of Modeling Spacesããèªãã§ãã ããïŒç§ã¯å人çã«åœŒãã®èåããè³ã®è±èŒããããŸãïŒã æŠããŠããœãããŠã§ã¢ãéçºãããšãããã¹ãŠã¯ã¢ãã«ã§ããïŒéçºè ã®å¿ã®äžã®ç²Ÿç¥çãªã€ã¡ãŒãžãããœãŒã¹ã³ãŒããããã¥ã¡ã³ãããã¹ãã¹ã¯ãªãããªã©ïŒãéçºããã»ã¹ã¯äžéšã®ã¢ãã«ãä»ã®ã¢ãã«ã«å€æããããšã§ãã ã¢ãã«å€æã®ãããã¯ã«ã€ããŠã¯ãåŸç¶ã®èšäºã§é瀺ããäºå®ã§ãã
ããªãã®æèŠã§ã¯ãäžã®å³ã«ç€ºãããŠããã¢ãã«ïŒç·ã®é·æ¹åœ¢ãéãç·ïŒã¯ã¡ã¿ã¢ãã«ïŒèµ€ãé·æ¹åœ¢ïŒã«å¯Ÿå¿ããŠããŸããïŒ
æããã«ãæ§é çå¶çŽã«å ããŠãã¡ã¿ã¢ãã«ã«ã¯éæ§é çå¶çŽãå«ãŸããå ŽåããããŸãã åŸè ã«ã€ããŠã¯ãOCLã§åã³èª¬æã§ããŸãã ãã®ãããªã«ãŒã«ã®äŸãå³ã«ç€ºããŸãã

ã泚æ
å®éããã®åçã¯ããŸãæ£ç¢ºã§ã¯ãããŸããã æ¬æ Œçãªã¡ã¿ã¢ãã«ã®ä»£ããã«ãUMLãããã¡ã€ã«ãããã§äœ¿çšãããŸããããã¯ãå³å¯ã«èšãã°ãUMLã¡ã¿ã¢ãã«ã«åºã¥ããŠæ§ç¯ãããéåžžã®UMLã¢ãã«ã§ãïŒããã¯ãMOFã¡ã¿ã¡ã¿ã¢ãã«ã«åºã¥ããŠæ§ç¯ãããŸãïŒã ãã ããå®éã«ã¯ãã¡ã¿ã¢ãã«ã¯å€ãã®å ŽåãŒãããã§ã¯ãªããUMLãããã¡ã€ã«ã®åœ¢åŒã§æ§ç¯ãããŸãã ããšãã°ã ISO 20022æšæºã§ã¯ãã¡ã¿ã¢ãã«ã¯2ã€ã®åçã®ããŒãžã§ã³ã§å®è£ ãããŠããŸãã1ïŒEcoreã«åºã¥ãæ¬æ Œçãªã¡ã¿ã¢ãã«ã2ïŒUMLãããã¡ã€ã«ã ãã®èšäºã®ç®çã®èŠ³ç¹ããããããã®ãã¥ã¢ã³ã¹ã¯ããã»ã©éèŠã§ã¯ãªããããUMLãããã¡ã€ã«ããã¡ã¿ã¢ãã«ããšèŠãªããŸãã
äŸ2ãã¡ã¿ã¢ãã«ãEntity-Attribute-Linkã
äžèšã®ã¡ã¿ã¢ãã«ã¯å°ã人工çã§äŸ¡å€ããªãããã«èŠããŸãã ããé©åãªã¡ã¿ã¢ãã«ãæ§ç¯ããŠã¿ãŸãããã ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®ããŒã¿æ§é ãèšè¿°ã§ããèšèªãéçºããå¿ èŠããããšããŸãã ãã®å Žåãåå è ãã¿ã¹ã¯ããããžã§ã¯ããªã©ã®éãã ããã»ã©éèŠã§ã¯ãããŸããã ãããã¯ãã¹ãŠãå±æ§ãæã€ããšãã§ããé¢ä¿ã«ãã£ãŠçžäºæ¥ç¶ããããšã³ãã£ãã£ã§ãã ãã®äŸã§ã¯ã1察å€ãå€å¯Ÿå€ã®2çš®é¡ã®é¢ä¿ããããŸãã ãã®ãããªã¡ã¿ã¢ãã«ã®ã¡ã¿ã¯ã©ã¹ã¯ãå³ã®èµ€ãé·æ¹åœ¢ã§èª¬æãããŠããŸãã å³ã«ç€ºãããŠããã¢ãã«ïŒç·è²ã®é·æ¹åœ¢ãéè²ã®ç·ïŒã¯ã¡ã¿ã¢ãã«ã«å¯Ÿå¿ãããšæããŸããïŒ ãã®ã¢ãã«ã®åèŠçŽ ã¯ãã¡ã¿ã¯ã©ã¹ã®1ã€ã«å±ããããšãã§ããŸããïŒ

ããŠãæåŸã«ç·Žç¿ã«ç§»ããŸãããã ãã®ããã«ãRational Software Architectã䜿çšããŸããé©åãªUMLãšãã£ã¿ãŒã䜿çšã§ããŸãã ç¡æã§ã€ããªãã®ãŒçã«æ£ããããã«ã¹ã®äŸã§ãã¹ãŠã衚瀺ã§ããŸãããæ®å¿µãªãããããŸã䟿å©ã§ã¯ãããŸããã
ãã®ãããUMLãšãã£ã¿ãŒã§æ°ãã空ã®ãããžã§ã¯ããäœæããŸãã 以äžã®ã¹ãã¬ãªã¿ã€ãã䜿çšããŠUMLãããã¡ã€ã«ãäœæããŸãã

ã泚æ
Attributeã¹ãã¬ãªã¿ã€ãã®ããããã£ã«æ³šæããŠãã ããã ããã¯ãã¢ãã«å ã®ä»»æã®å±æ§ãæã€ããšãã§ããããããã£ã®ãªã¹ãã§ãã
次ã«ã次ã®UMLã¢ãã«ãäœæããäœæããã°ããã®ãããã¡ã€ã«ãé©çšããå¿ èŠãªã¹ãã¬ãªã¿ã€ããé©çšããŸãã ããããã¹ãŠäœæããã®ãé¢åãªå Žåã¯ã å®æãããããžã§ã¯ããååŸã§ããŸãã

倧ãŸãã«èšãã°ããã¡ã¿ã¢ãã«ãã«åŸã£ãŠã¢ãã«ãæ§ç¯ããŸããã ã¢ãã«ã®åèŠçŽ ã¯ããã¡ã¿ã¢ãã«ãã®ã¡ã¿ã¯ã©ã¹ã®ãã€ã³ã¹ã¿ã³ã¹ãã§ãã
ã泚æ
ç¹°ãè¿ããŸãããå³å¯ã«èšãã°ãããã§ã¯ãããŸããã ãããŠããããã¡ã€ã«ãã¹ãã¬ãªã¿ã€ããã¢ãã«ãããã³ã¢ãã«ã®ãã¹ãŠã®èŠçŽ -äœæãããã®ã¯ãã¹ãŠãUMLã¡ã¿ã¢ãã«ã®ã¡ã¿ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ãã ã€ãŸã ãããã¡ã€ã«ãšããã䜿çšããã¢ãã«ã®äž¡æ¹ãåãã¬ãã«ã®ã¢ããªã³ã°ã«ãããŸãã ããããå®çšçãªèŠ³ç¹ããã¯ããã®ãããã¡ã€ã«ããã¡ã¿ã¢ãã«ããšèŠãªãããšãã§ããããã«åŸã£ãŠã¢ãã«ãäœæãããŸããã ãããäœã§ããããç解ããã¡ã¿ã¢ãã«ãäœã§ããããç解ãããããã1ã€ã®ã¹ãããããããŸã-ãã€ã¢ã°ã©ã ã®é·æ¹åœ¢ãšç·ãäœã§ããããç解ããã¢ããªã³ã°ã®èŠ³ç¹ããxmiãã¡ã€ã«ãäœã§ããããç解ããŸãã äžèšã®èšäºã¯ããã«åœ¹ç«ã¡ãŸãã
次ã«ãOCLã®ã¡ã¿ã¢ãã«ã®è¿œå ã®å¶éã«ã€ããŠèª¬æããŸãã ããšãã°ãå±æ§ã¯ãšã³ãã£ãã£ã«å±ããŠããå¿ èŠããããŸãã ãããã¡ã€ã«ã§ã¯ãªããæ¬æ Œçãªã¡ã¿ã¢ãã«ã®åœ¢ã§ã¡ã¿ã¢ãã«ãäœæããå Žåããã®ã«ãŒã«ã¯éåžžã«åçŽã«ãªããŸãã
owner.oclIsKindOf(Entity)
ããã«ããã®ãããªã«ãŒã«ãèšè¿°ããå¿ èŠãããããŸããã AttributeãšEntityã®éã«ææè ã®é¢é£ä»ããäœæããã ãã§ãååãšããŠä»ã®ã¿ã€ãã®èŠçŽ ããã€ã³ãããããšã¯ã§ããŸããã
ãã ããã¡ã¿ã¢ãã«ã¯UMLãããã¡ã€ã«ãšããŠäœæããããããã«ãŒã«ãå¿ èŠã§ãããäžèŠãããšãããããããªããšã§ã¯ãããŸããã
base_Property.class.getAppliedStereotype('PMProfile::Entity') <> null
ãã®ã«ãŒã«ã¯ãUMLã¡ã¿ã¯ã©ã¹ãããããã£ããæ¡åŒµããå±æ§ã¹ãã¬ãªã¿ã€ãã«é©çšãããŸãã ããã¯ãã¢ãã«å ã§Attrbiuteã¹ãã¬ãªã¿ã€ãã®ã€ã³ã¹ã¿ã³ã¹ãäœããã®ããããã£ïŒUMLã¡ã¿ã¯ã©ã¹ãPropertyãã®ã€ã³ã¹ã¿ã³ã¹ïŒã«ãã€ã³ãã§ããããšãæå³ããŸãã åŸè ã§ã¯ãç¹å®ã®å€minLengthãmaxLengthãããã³patternãèšå®ã§ããŸãã äžèšã§äœæããOCLã«ãŒã«ã¯ãAttributeã¹ãã¬ãªã¿ã€ãã®ãã®ã€ã³ã¹ã¿ã³ã¹ã®ã¿ããã§ãã¯ããŸãã
base_Propertyããããã£ã䜿çšããŠãã¹ãã¬ãªã¿ã€ãã®ã€ã³ã¹ã¿ã³ã¹ããããããã£ã«ç§»åããŸãã 次ã«ãã¯ã©ã¹ã®é¢é£ä»ããä»ããŠãããããã£ãå±ããã¯ã©ã¹ã«ç§»åããŸãã ãããŠæåŸã«ãã¹ãã¬ãªã¿ã€ããEntityãããã®ã¯ã©ã¹ã«é©çšãããŠãããã©ããã確èªããŸãã
ã泚æ
ãããä»æ§ã«ã©ã®çšåºŠå¯Ÿå¿ãããã¯ããããŸããããã¹ãã¬ãªã¿ã€ãã®ã€ã³ã¹ã¿ã³ã¹ãšUMLã¡ã¿ã¯ã©ã¹ïŒãã®å Žåã¯base_PropertyïŒã®ã€ã³ã¹ã¿ã³ã¹ãšã®é¢é£ä»ããçç¥ã§ããå ŽåããããŸããããã¯æé»çã«selfãšããŠæ瀺ãããŸãã
ã泚æ
質åãããå Žåãã¯ã©ã¹ã®é¢é£ä»ãã䜿çšããå¿ èŠãããããšãã©ã®ããã«èŠã€ããŸãããã2ã€ã®æ¹æ³ããããŸãã1ïŒEclipseã§ã®ãªãŒãã³ã³ããªãŒãïŒCtrl +ã¹ããŒã¹ïŒããã³2ïŒ OMG UMLä»æ§ ã
äžèšã®ã«ãŒã«ã§ã¯ãEclipseããŒã¹ã®UMLãšãã£ã¿ãŒã«æšæºã®ããªãã¯ã䜿çšããŠããŸãã ãã ããgetAppliedStereotypeïŒïŒæäœã¯OCLã®éæšæºã®æ¡åŒµæ©èœã§ãããä»ã®ããŒã«ã§ã¯ãµããŒããããŠããªãå ŽåããããŸãã åãã«ãŒã«ã次ã®ããã«æžãããšãã§ããŸãã
class.extension_Entity->notEmpty()
ããããã£ãå±ããã¯ã©ã¹ã«ãEntityã¹ãã¬ãªã¿ã€ãã«åºã¥ãæ¡åŒµæ©èœãšã®æ¥ç¶ïŒextension_Entityã¢ãœã·ãšãŒã·ã§ã³ãä»ããŠïŒããããã©ããã確èªããŸãã
ã泚æ
2çªç®ã®ãªãã·ã§ã³ã¯ãçè«çã«ã¯æšæºãšããæŽåæ§ããããŸãã ãã ããEclipseã®å€ãããŒãžã§ã³ã§ã¯åé¡ãçºçããå¯èœæ§ããããããæåã®ãªãã·ã§ã³ã䜿çšããããšããå§ãããŸãã

ã泚æ
ãããã¡ã€ã«å ã§ãbase_Propertyãextension_Entityãããã³ã¯ã©ã¹ã®é¢é£ä»ããèŠã€ããŠãã ããã
å³ã¯ãããã«3ã€ã®ã«ãŒã«ã瀺ããŠããŸãã
- å±æ§ã«ã¯ã¿ã€ããå¿ èŠã§ãã
- 1察å€ã®é¢ä¿ã§ã¯ãäžæ¹ã®ç«¯ã®å€é床ã¯1以äžã§ãããäžæ¹ã®ç«¯ã®å€é床ã¯1以äžã§ãªããã°ãªããŸããã
- ãšã³ãã£ãã£ã«å±ãããã¹ãŠã®ããããã£ã¯ãéåžžã®å±æ§ãŸãã¯é¢ä¿ããŒã«ã®ããããã§ãªããã°ãªããŸããã
ã¢ãã«ãUMLãããã¡ã€ã«ãšããŠã§ã¯ãªããMOFã«åºã¥ãã¡ã¿ã¢ãã«ãšããŠäœæããå Žåããããã®ã«ãŒã«ãéåžžã®æ§é äžã®å¶éã«çœ®ãæããããšã¯å¯èœã ãšæããŸããïŒ
MOFãšEcoreã¯äºãã«éåžžã«äŒŒãŠããŸãã æ ¹æ¬çã«ç°ãªãã¡ã¿ã¡ã¿ã¢ãã«ãæ³åã§ããŸããïŒ
ã¡ã¿ã¢ãã«ã®å¶çŽã®äŸ
以äžã¯ãäœæãã1ã€ã®å®éã®ã¡ã¿ã¢ãã«ããã®æãåçŽã§æãè€éãªã«ãŒã«ã®äŸã§ãã äžæ¹ã§ãããã¯ãã¡ããã²ã©ãã³ãŒãã®äŸã§ãããä»æ¹ã§ã¯ãããã€ãã®OCLæ§æäœã®ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã§ã:-)
ADTã³ã³ããŒãã³ãã®æ倧åçŸæ§ã¯0ãã倧ããå¿ èŠããããŸãã
upper > 0
å¶çŽé¢ä¿ãéããŠç¶æ¿ãããADTã³ã³ããŒãã³ãã¯ã芪ã¿ã€ãã®å¯Ÿå¿ããã³ã³ããŒãã³ããšåãäœçœ®ã«ããå¿ èŠããããŸãã
datatype.generalization->exists( getAppliedStereotype('SomeProfile::restriction') <> null) implies ( let parent : DataType = datatype.general->any(true).oclAsType(DataType) in let props : OrderedSet(Property) = parent.ownedAttribute-> select(getAppliedStereotype('SomeProfile::Component') <> null) in let cur : Property = props->select(x|x.type=self.type)->any(true) in cur <> null implies ( let prevEnd : Integer = props->indexOf(cur) - 1 in prevEnd = 0 or ( let allPrev : OrderedSet(Property) = props->subOrderedSet(1, prevEnd) in let requiredPrev : OrderedSet(Property) = allPrev->select(lower > 0) in requiredPrev->isEmpty() or ( let prevStart : Integer = allPrev->indexOf(requiredPrev->last()) in let allowedPrev : OrderedSet(Property) = allPrev-> subOrderedSet(prevStart, allPrev->size()) in let index : Integer = datatype.ownedAttribute-> indexOf(self.oclAsType(Property)) in index > 1 and ( let selfAllPrev : OrderedSet(Property) = datatype.ownedAttribute-> subOrderedSet(1, index - 1)-> select(getAppliedStereotype('SomeProfile::Component') <> null) in selfAllPrev->isEmpty() or ( let prevType : Type = selfAllPrev->last().type in allowedPrev->exists(x|x.type=prevType)))))))
OCLãå¿ èŠãªçç±
ãããã¡ã€ã«ãŸãã¯ã¡ã¿ã¢ãã«ã®å¶åŸ¡ã«ãŒã«-ããªãã¯ãã§ã«ããã«é¢ãããã¹ãŠãç¥ã£ãŠããŸãã
ã¢ãã«å ã®å¶åŸ¡ã«ãŒã«-ãããŠãããã
æäœããã³èšç®ãããããããã£ã®ä»æ§-OCLä»æ§ãèªãããšã§ããããèªåã§ç¥ãããšãã§ããŸãã
ã¢ãã«å€æïŒ QVT ã MOF M2T ïŒ-ããã«ã€ããŠã¯ã以äžã®èšäºã§èª¬æããŸãã
ååšã®æå³ã®èªè-ãã®ããã«ãæåã®çµµãé»æ³ããŠãã ããã ã€ãšã¹ãã©ãã«åŒãå¯ããŸããïŒ ãããŠãããªãã¯ã¹ïŒ