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


0 コメント:
コメントを投稿