JMishelle 設計書
JMichelle system design

Copyright(C) 2000 Yoshinori WATANABE

本ソフトウェアの概要

図.1 クラス図
Fig.1 Class Diagram


JMichelleの主なクラスについてクラス図を示します。
JMichelleがエントリとなるクラスです。 init()のあとにprocess()を行い、最後にexit()を行う簡単な構造です。 process()の中で、MdShellEngineを生成し、initで生成したMdShellEnvを渡して MdShellEngineのprocess()を呼んでいます。
このprocess()の中で、プロンプトを表示し、キーボードからの入力を行い、 コマンドを実行し、これらの一連の動作を繰り返しています。 ここがシェルのメインの処理を行っているところといえるでしょう。
1つのコマンドを処理しているのが、processCommand()で、この中で、 dirやcd、pwdなどの内部コマンドや、ネイティブの外部コマンドを 実行しています。
それらのコマンドを管理しているのが、MdShellCmdListで、これは、 MdShellCommandInterfaceインターフェースを持つクラスの集合を管理 しています。 つまり、すべてのコマンドはこのMdShellCommandInterfaceインターフェース を持つことになります。
MdShellCommandInterfaceには以下のメソッドが定義されています。
public interface MdShellCommandInterface {
    public String getCommand();
    public String getHelpString();
    public void registerImplementedCommand(Vector vecList);
    public boolean isThisCommand(MdShellEnv shellenv,String strCommand);
    public void processCommand(MdShellEnv shellenv);
    public boolean isHiddenCommand();
}
getCommand()はコマンド名を返します。 dirコマンドの場合、"dir"にあたります。 getHelpString()はHelpコマンド時に表示される文字列です。 dirコマンドの場合、"dir : ディレクトリ一覧 , lsはエイリアス"にあたります。


processCommand()が実際にコマンドを実行するメソッドです。 ここで、目的の処理を行えばよいのです。 引数にMdShellEnvが渡されますが、それからgetOut()で取得できる標準出力に対して出力すれば 画面に処理の結果を表示させることができます。 また必要ならば、ユーザーに問い合わせて標準入力から取り入れることができます。


registerImplementedCommand()はMdShellCmdListに自分自身のコマンドを登録します。
・・・
うーん、registerImplementedCommand(Vector vecList)と、 isThisCommand(MdShellEnv shellenv,String strCommand)について、 チョット考えさせて下さい。 dirのlsや、helpの?など、aliasは個々のコマンドで定義すべきでは ないと思うのです。 aliasを組み込めば、この2つは変わってくると思うのですが・・・。 あれれっ、でも、MdShellCmdAlias というクラスもありますね。 むむむ、混乱。
それと、isHiddenCommand()は最近追加したメソッドのようですが、 どういうのを目的に作られたのでしょうか?