ちなみに、今回の題材はホップステップジャンプを日本語と英語で出すこと。
まずは、Template Methodパターンで言う所のAbstractクラス。これが、アルゴリズムの流れを示す。
そして、Template Methodパターンで言う所のConcreteクラス。まずは日本語で出す方。class AbstractHSJ operations public hopStepJump : () ==> () hopStepJump() == ( hop(); step(); jump(); ); protected hop : () ==> () hop() == is subclass responsibility; protected step : () ==> () step() == is subclass responsibility; protected jump : () ==> () jump() == is subclass responsibility; protected print : seq of char ==> () print(s) == def - = new IO().echo(s ^ "¥n") in skip; end AbstractHSJ
次が英語で出す方のConcreteクラス。class JaHSJ is subclass of AbstractHSJ operations protected hop : () ==> () hop() == print("ホップ!"); protected step : () ==> () step() == print("ステップ!"); protected jump : () ==> () jump() == print("ジャンプ!"); end JaHSJ
で、最後にこれらを使うクラス。AbstractHSJクラス型だけど、JaHSJクラスとEnHSJクラスのインスタンスとして生成して使う。class EnHSJ is subclass of AbstractHSJ operations protected hop : () ==> () hop() == print("Hop!"); protected step : () ==> () step() == print("Step!"); protected jump : () ==> () jump() == print("Jump!"); end EnHSJ
上記のクラスをVDMToolsで動作させるには、VDMToolsのインタープリタで以下のコマンドを入力してください。ちなみに、今回はVDMTools付属の標準ライブラリIOクラスを使っているので、VDMToolsのプロジェクトに、io.vppも追加しないと動作しません。class UseHopStepJump operations public use : () ==> () use() == ( dcl ja : AbstractHSJ := new JaHSJ(), en : AbstractHSJ := new EnHSJ(); ja.hopStepJump(); en.hopStepJump(); ); end UseHopStepJump
>> init >> print new UseHopStepJump().use()
0 コメント:
コメントを投稿