(57)【要約】【課題】  開発者が状態遷移表のみを定義するだけで済むとともに、状態制御を行う側の構造を共通化し、フレームワークとして利用可能な状態制御方法を提供する。【解決手段】  イベントと状態との組み合わせと、それに対応するアクションが記述されている状態遷移表に基づいて状態を制御する状態制御方法であって、状態制御エンジンが、アクションを実行する際に、前記状態遷移表に記述されている実行対象のアクションクラス名に対応する、同一名称のアクション関数を実装したアクションクラスを検索してメモリ上にロードし、前記アクション関数を実行することにより、前記状態制御エンジンが、アクションクラスの種類に依らず統一的にアクション関数を実行可能とする。また、前記メモリ上にロードしたアクションクラスを、アクションクラス格納手段に格納しておき、実行するアクションクラスが格納済みの場合は、新たにアクションクラスのロードを行わずに、格納済みのアクションクラスに対応するアクション関数を実行する。【選択図】        図１
2007065837.tif 000002
【特許請求の範囲】
【請求項１】
イベントと状態との組み合わせと、それに対応するアクションが記述されている状態遷移表に基づいて状態を制御する状態制御方法であって、
状態制御エンジンが、アクションを実行する際に、前記状態遷移表に記述されている実行対象のアクションクラス名に対応する、同一名称のアクション関数を実装したアクションクラスを検索してメモリ上にロードし、前記アクション関数を実行することにより、
前記状態制御エンジンが、アクションクラスの種類に依らず統一的にアクション関数を実行可能としたことを特徴とする状態制御方法。
【請求項２】
前記メモリ上にロードしたアクションクラスを、アクションクラス格納手段に格納しておき、
実行するアクションクラスが、前記アクションクラス格納手段に格納されている場合は、新たにアクションクラスのロードを行わずに、格納済みのアクションクラスに対応するアクション関数を実行することを特徴とする請求項１に記載の状態制御方法。
【請求項３】
新たにロードしたアクションクラスを前記アクションクラス格納手段に格納する際に、格納しているアクションクラス数が予め定めた数を超えた場合は、最後にアクションを実行してからの経過時間が最も長いアクションクラスを破棄することを特徴とする請求項２に記載の状態制御方法。
【請求項４】
前記請求項１ないし請求項３のいずれか１項の状態制御方法を、コンピュータに実行させるための状態制御プログラム。
【請求項５】
請求項４記載の状態制御プログラムを記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、状態制御方法、状態制御プログラムおよび状態制御プログラムを記録した記録媒体に係り、特に、イベントと状態との組合せと、それに対応するアクションが記述されている状態遷移表に従って状態制御を実施する状態制御方法に関する。
【背景技術】
【０００２】
近年、ブロードバンドの普及により、通信ソフトウェアは、Ｗｅｂブラウザやメールだけでなく、ＩＰ電話や映像コミュニケーションサービス等その機能は高度化・複雑化しつつある。このような状況下で、新しいサービスをタイムリーに世に出すためには、通信ソフトウェアの短期開発を実現することが重要である。
短期開発を実現するための１つの方法として、フレームワークを用いた開発がある。フレームワークとは、アプリケーションの構造において共通部分を抽出し、この共通部分をアプリケーションの“土台”として再利用することにより、開発者は共通部分を新たに開発する必要がなく、開発生産性が向上する。また、土台を利用することでアプリケーションの構造も均質化され、品質向上の効果も見込むことができる。
ＩＰ電話や映像コミュニケーションサービスといった高度で複雑な機能を有する通信ソフトウェアは、ユーザによる操作で発生するイベントだけでなく、通信相手やネットワークの作用等によって発生するイベントがあり、かつ、これらのイベントは非同期に発生し、イベント発生に伴うアクションの実行や状態遷移の処理が複雑になる傾向がある。
【０００３】
イベント発生からアクションの実行、そして状態を遷移する一連の処理を状態制御と呼ぶこととする。
この状態制御を通信ソフトウェアの共通構造としてフレームワーク化することにより、開発生産性および品質向上が期待できる。
状態制御を行うプログラムでは、外部ファイルあるいはハードコーディングされた状態遷移表の記述に従って状態制御を実行する構造がある。このような構造の従来の技術として、下記特許文献１（特開２００４−９４８３７号公報）に記載された技術が公知である。
この引用文献１に記載された技術では、イベントが発生した場合、発生したイベントとイベント発生時のプログラムの状態との組み合わせを基に、状態遷移表中に記述されている文字列としてのコールバック関数名称を検索する。
そして、検索された文字列としてのコールバック関数名称に対応するコールバック関数のポインタに変換するコールバック関数名称ポインタ解決手段を利用して、実行すべきコールバック関数（すなわち、アクション）を決定するものである。
【０００４】
なお、本願発明に関連する先行技術文献としては以下のものがある。
【特許文献１】特開２００４−９４８３７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
前述の特許文献１に記載された技術では、状態遷移表の他に、コールバック関数定義ファイルや関数名称マッピングファイル等を作成する必要があり、状態遷移表の記述のみでは動作できないという問題があった。
あるいは、状態遷移表からコールバック関数定義ファイルや関数名称マッピングファイル等を自動的に生成する手段をあらかじめ用意する必要があるという問題があった。
また、コールバック関数の戻り値や引数を自由に定義した場合、コールバック関数を呼び出す側である状態制御側の実装が複雑になり、共通構造化できないという問題があった。
本発明は、前記従来技術の問題点を解決するためになされたものであり、本発明の目的は、開発者が状態遷移表のみを定義するだけで済むとともに、状態制御を行う側の構造を共通化し、フレームワークとして利用可能な状態制御方法を提供することにある。
また、本発明の他の目的は、前述の状態制御方法をコンピュータに実行させるための状態制御プログラムを提供することにある。
また、本発明の他の目的は、前述の態制御プログラムを記録した記録媒体を提供することにある。
本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述及び添付図面によって明らかにする。
【課題を解決するための手段】
【０００６】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、下記の通りである。
前述の課題を解決するために、本発明は、イベントと状態との組み合わせと、それに対応するアクションが記述されている状態遷移表に基づいて状態を制御する状態制御方法であって、状態制御エンジンが、アクションを実行する際に、前記状態遷移表に記述されている実行対象のアクションクラス名に対応する、同一名称のアクション関数を実装したアクションクラスを検索してメモリ上にロードし、前記アクション関数を実行することにより、前記状態制御エンジンが、アクションクラスの種類に依らず統一的にアクション関数を実行可能としたことを特徴とする。
【０００７】
また、本発明では、前記メモリ上にロードしたアクションクラスを、アクションクラス格納手段に格納しておき、実行するアクションクラスが、前記アクションクラス格納手段に格納されている場合は、新たにアクションクラスのロードを行わずに、格納済みのアクションクラスに対応するアクション関数を実行することを特徴とする。
また、本発明は、新たにロードしたアクションクラスを前記アクションクラス格納手段に格納する際に、格納しているアクションクラス数が予め定めた数を超えた場合は、最後にアクションを実行してからの経過時間が最も長いアクションクラスを破棄することを特徴とする。
また、本発明は、前述の状態制御方法を、コンピュータに実行させるための状態制御プログラムである。
また、本発明は、前述の状態制御プログラムを記録した記録媒体である。
【発明の効果】
【０００８】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば、下記の通りである。
本発明によれば、開発者が状態遷移表のみを定義するだけで済むとともに、状態制御を行う側の構造を共通化し、フレームワークとして利用可能になる。
【発明を実施するための最良の形態】
【０００９】
以下、図面を参照して本発明の実施例を詳細に説明する。
なお、実施例を説明するための全図において、同一機能を有するものは同一符号を付け、その繰り返しの説明は省略する。
図１は、本発明の実施例の状態制御方法を説明するための図である。
状態制御フレームワーク１１は、状態制御を共通構造として抽出し、フレームワーク化したものである。開発者はこの部分を新たに開発する必要はなく、再利用が可能である。
状態制御フレームワーク１１は、状態制御エンジン１１１と、イベント格納部１１２と、現在状態保持部１１３と、状態遷移表保持部１１４と、アクションクラス動的ロード手段１１５と、アクション関数呼び出し手段１１６から構成される。
イベント格納部１１２は、ユーザによる操作または通信相手やネットワークによる作用等が起因となって発生したイベントを格納する機能と、状態制御エンジン１１１からの要求を受け、格納しているイベントを状態制御エンジン１１１に渡す機能を提供する。
現在状態保持部１１３は、通信ソフトウェアの状態を管理・保持する機能を提供し、状態制御エンジン１１１の制御によって保持している通信ソフトウェアの状態を変更する。
状態遷移表保持部１１４は、通信ソフトウェア起動直後の初期化処理において外部ファイルとして定義されている状態遷移表１３をメモリ上にロードし、その情報を保持し、状態制御エンジン１１１からの問い合わせに応じて、対応するアクション情報を提供する機能を提供する。
アクションクラス動的ロード手段１１５は、前記アクション情報に記載されているアクションクラス名称に対応するアクションクラスを動的にロードする手段を提供する。アクション関数呼び出し手段１１６は、アクションクラス動的ロード手段１１５によってメモリ上にロードされたアクションクラスに対し、そのアクションクラスが具備しているアクション関数を実行する手段を提供する。
【００１０】
状態制御エンジン１１１は、イベント格納部１１２からイベントを取り出し、現在状態保持部１１３が保持する現在の状態を参照し、イベントと現在状態との組合せに基づき、状態遷移表保持部１１４に問い合わせを行い、前記イベントと前記現在状態の組み合わせに対応するアクション情報を取得する。
アクション情報には、実行するアクションクラスの名称、アクション成功時の遷移先状態、およびアクション失敗時の遷移先状態が格納されている。
取得したアクション情報を基に、アクションクラス動的ロード手段１１５およびアクション関数呼び出し手段１１６により該当するアクションを実行する。
アクション実行後、現在状態保持部１１４が管理している状態情報を、アクションが成功した場合は前記アクション成功時の遷移先状態に更新する。アクションが失敗した場合は前記アクション失敗時の遷移先状態に更新する。
アクション１２は、通信ソフトウェアの機能を実行するものであり、複数のアクションクラスから構成される。
１２１、１２２、１２３のアクションクラスは、通信ソフトウェアの個々の機能を実装したものであり、１つのアクションクラスが１つの機能に対応する。図１では構成例として３つのアクションクラスを記載しているが、実際のアクションクラスの数は機能数によって決定される。
【００１１】
状態遷移表１３は、イベントと現在状態との組合せに対応して実行するアクション名、アクション成功時の遷移先状態、およびアクション失敗時の遷移先状態が記述されており、外部ファイルとして定義されている。
図２は、本実施例の状態制御方法を具体的に説明するための状態遷移表の一例を示す図である。
状態遷移表２１の最左列にイベント名２１１を、最上行に状態名２１２を記述し、各セルにアクション情報を記述する。
アクション情報には、少なくとも１つ以上のアクションクラス名と、アクション成功時の遷移先状態と、アクション失敗時の遷移先状態を記述する。
状態遷移表２１の内容は、通信ソフトウェア起動直後に実行される初期化処理において、状態遷移表保持部１１４により、予め読み込まれているものとする。
図２に示す状態遷移表２１は、当該状態遷移表２１に基づいて動作する通信ソフトウェアが、通信相手とコネクションを確立する接続機能と、確立されたコネクションを終了する切断機能のみをもつ簡単なアプリケーションを定義したものである。
イベントとして、接続要求イベントと切断要求イベント、状態として待機状態と接続状態が存在する。
【００１２】
図２の状態遷移表２１の記述内容に基づく、状態制御エンジン１１１の動作について説明する。
待機状態中に接続要求イベントが発生した場合、状態制御エンジン１１１は、イベント格納部１１２から接続要求イベントを取り出す。続いて、現在状態保持部１１３より現在状態を参照し、現在状態が待機状態であることを知る。
そして、状態制御エンジン１１１は、状態遷移表保持部１１４に対して、接続要求イベントと待機状態の組合せを基に、対応するアクション情報の問い合わせを実施し、アクション情報２１３を取得する。
次に、取得したアクション情報２１３に記述されているアクションクラス名に基づき、アクションクラス動的ロード手段１１５により、“Ｓａｍｐｌｅ．Ｃｏｎｎｅｃｔ”という名称をもつクラスを動的にメモリ上にロードする。
ロードした「Ｓａｍｐｌｅ．Ｃｏｎｎｅｃｔ」クラスに対して、アクション関数呼び出し手段１１６によりアクション関数を実行し、実行結果を得る。
実行結果を見て、アクションが成功した際は、アクション情報２１３に記載されている成功時の遷移先状態である接続状態に遷移し、アクションが失敗した際はアクション情報２１３に記載されている失敗時の遷移先状態である待機状態に遷移する。
状態遷移の具体的方法は、現在状態保持部１１３が管理している状態情報を更新することである。
【００１３】
接続状態中に切断要求イベントが発生した場合、状態制御エンジン１１１は、イベント格納部１１２から切断要求イベントを取り出す。続いて、現在状態保持部１１３より現在状態を参照し、現在状態が接続状態であることを知る。
そして、状態制御エンジン１１１は、状態遷移表保持部１１４に対して、切断要求イベントと接続状態の組合せを基に、対応するアクション情報の問い合わせを実施し、アクション情報２１４を取得する。
次に、取得したアクション情報２１４に記述されているアクションクラス名に基づき、アクションクラス動的ロード手段１１５により、“Ｓａｍｐｌｅ．Ｄｉｓｃｏｎｎｅｃｔ”という名称をもつクラスを動的にロードする。
ロードした「Ｓａｍｐｌｅ．Ｄｉｓｃｏｎｎｅｃｔ」クラスに対し、アクション関数呼び出し手段１１６によりアクション関数を実行し、実行結果を得る。
実行結果を見て、アクションが成功した際は、アクション情報２１４に記載されている成功時の遷移先状態である接続状態に遷移し、アクションが失敗した際はアクション情報２１４に記載されている失敗時の遷移先状態である待機状態に遷移する。
待機状態中に切断要求イベント、または接続状態中に接続要求イベントが発生した場合は、状態遷移表２１には、“×”を記述し、エラーであることを示している。この場合は、アクションの動的ロードおよびアクション関数の実行といった一連の処理は実行しない。
一方、エラーではないがそのイベントを無視する場合は、“×”ではなく、“−”等と記述し、エラーとは区別する記述方法も考えられる。
【００１４】
アクションクラス動的ロード手段１１５は、前述したとおり、状態遷移表に記述されているアクション情報のアクションクラス名を基に、該当するアクションクラスを動的にメモリ上にロードする手段を提供する。
例えば、Ｊａｖａ（登録商標）や、Ｃ＃といったオブジェクト指向言語において、リフレクション機能というものがある。
リフレクション機能とは、指定したクラスのメンバ変数（フィールド）、関数（メソッド）、およびコンストラクタに関する情報を検索したり、検索したメンバ変数や関数、コンストラクタを実行したりするＡＰＩ（Application Program Interface）である。
このリフレクション機能を利用することにより、アクションクラス動的ロード手段は比較的容易に構築可能である。
しかし、リフレクション機能のような動的にロードする手段は、通常の処理と比べて負荷が重く、上記のようにアクションを実行するたびに動的にロードしていてはパフォーマンス上不利となる。
【００１５】
図３は、本発明の実施例の状態制御方法の変形例を説明するための図であり、動的ロードに伴う負荷を軽減するための構成例を示す図である。なお、図３において、図１と同じ部分には対応する符号を付して重複する説明は省略する。
図３に示す例では、動的ロードに伴う負荷を軽減するために、アクションクラス格納手段３１７を設けている。
アクションクラス格納手段３１７は、アクションクラス動的ロード手段３１５によって動的にロードされたアクションクラスを、一定数格納する手段を提供する。
状態制御エンジン３１１は、アクション情報を基にアクションクラスをロードする際、アクションクラス格納手段３１７を用いて、当該アクションクラスが格納されているかを確認する。
もし、アクションクラス格納手段３１７に当該アクションクラスが格納されている場合、当該アクションクラスに対して、アクション関数呼び出し手段３１６によりアクション関数を実行する。
アクションクラス格納手段３１７に当該アクションクラスが格納されていない場合、アクションクラス動的ロード手段３１５により当該アクションクラスを動的にロードし、アクション関数呼び出し手段３１６によりアクション関数を実行する。
そして、ロードしたアクションクラスをアクションクラス格納手段３１７に格納する。この際、格納されたアクションクラス数が一定数を超えた場合は、最後にアクションを実行してからの経過時間が最も長いアクションクラスが破棄される。
これにより、頻繁に利用するアクションクラスがアクションクラス格納手段３１７によってメモリ上に保持されることになり、動的ロードに伴う負荷を軽減することができ、パフォーマンスの向上を図ることができる。
【００１６】
次に、アクション関数呼び出し手段（１１６，３１６）について説明する。
アクション関数呼び出し手段（１１６，３１６）は、アクションクラス動的ロード手段（１１５，３１５）、あるいはアクションクラス格納手段３１７によってロードされたアクションクラスに対し、統一的なアクション実行方法を提供する。
アクションクラスをメモリ上にロードしただけではアクションは実行されず、アクションクラスが備える関数（メソッド）を実行して初めてアクションは実行される。これをアクション関数と呼ぶ。
図４は、アクション関数呼び出し手段（１１６，３１６）が適用されない場合の状態制御フレームワークおよびアクションクラスの実装例を示す図である。
図４では、アクションクラス毎に、アクション関数の名称やその引数、戻り値等を自由に定義されており、アクション１の実装例４２のアクション関数の名称はＥｘｅｃｕｔｅ、引数はＰａｒａｍｅｔｅｒ型、戻り値はＲｅｓｕｌｔ型である。
また、アクション２の実装例４３のアクション関数の名称はＰｅｒｆｏｒｍ、引数はＰａｒａｍｅｔｅｒ型、戻り値はＲｅｓｕｌｔ型である。
さらに、アクション３の実装例４４のアクション関数の名称はＶｉｅｗＷｉｎｄｏｗ、引数はなし、戻り値はＲｅｓｕｌｔ型である。
このように、アクションクラス毎に、アクション関数を自由に実装されると、状態制御フレームワーク（１１，３１）は、アクションクラス毎にどのような形式のアクション関数が定義されているか知っている必要がある。
つまり、状態制御フレームワークの実装例４１のように、各アクションクラスに対応する実装をしなければならず、状態制御フレームワーク（１１，３１）の肥大化をまねくだけでなく、共通構造としてのフレームワークを定義することが困難となる。
【００１７】
図５は、アクション関数呼び出し手段（１１６，３１６）を適用した場合の状態制御フレームワークおよびアクションクラスの実装例である。
ＪａｖａやＣ＃といったオブジェクト指向言語には、継承という概念がある。継承とは、あるクラスの機能（メンバ変数や関数等）を別のクラスが引き継ぐことである。継承される側のクラスを基本クラスまたはスーパークラス、継承する側のクラスを派生クラスまたはサブクラスと呼ぶ。
この継承を用いることで、基本クラスで規定した関数を派生クラスが実装しない場合はコンパイルでエラーとなるようにすることも可能である。
図５は、アクション関数呼び出し手段（１１６，３１６）が適用される場合の状態制御フレームワークおよびアクションクラスの実装例を示す図であり、前述の継承を用いてアクション関数呼び出し手段を実現する例である。
図５では、基本クラス（SuperActionClass）の実装例５１において、Ｅｘｅｃｕｔｅという名称で、引数はＰａｒａｍｅｔｅｒ型、戻り値はＲｅｓｕｌｔ型のアクション関数を規定している。
【００１８】
基本クラス（SuperActionClass）の派生クラスであるアクションクラス（ActionClass）１の実装例５２は、基本クラス（SuperActionClass）と同じ名称、同じ引数、同じ戻り値のアクション関数Ｅｘｅｃｕｔｅを実装しているので、問題なくコンパイルが可能である。
一方、基本クラス（SuperActionClass）の派生クラスであるアクションクラス（ActionClass）２の実装例５３は、基本クラス（SuperActionClass）を継承しているにもかかわらず、アクション関数の名称がＥｘｅｃｕｔｅではなくＰｒａｃｔｉｃｅとなっている。したがって、アクション関数の内容が正しく実装されていたとしても、Ｅｘｅｃｕｔｅ関数が存在しないためコンパイルの時点でエラーとなる。
このように、アクションクラス間で共通の基本クラスを状態制御フレームワーク（１１，３１）が用意し、開発者はこの基本クラスを継承したアクションクラスを実装することで、各アクションクラスは同じアクション関数を実装していることが保証される。
これにより、状態制御フレームワーク（１１，３１）は、実行するアクションクラス名さえ分かれば、統一的な方法で所望のアクションクラスのアクション関数を実行することが可能となる。
【００１９】
図６は、本実施例における、外部ファイルとして定義する状態遷移表（１３，３３）の一例を示す図である。図６では、例としてＸＭＬ（eXtensible Markup Language）を用いて記述している。また、図６では、簡単のため各値を日本語で記述しているが、実際はシステムが読み込むことができる形式となる。
図６に示す状態遷移表は、状態遷移表自身を表すＳｔａｔｕｓＭａｔｒｉｘ要素、イベントを表すＥｖｅｎｔ要素、状態を表すＳｔａｔｅ要素、アクションを表すＡｃｔｉｏｎ要素、アクションの実行が成功した場合の遷移先状態を表すＳｕｃｃｅｓｓ要素、アクションの実行が失敗した場合の遷移先状態を表すＦａｉｌｅｄ要素から成り、ＳｔａｔｕｓＭａｔｒｉｘ要素、Ｅｖｅｎｔ要素、およびＳｔａｔｅ要素には、それぞれを識別するためのｎａｍｅ属性を具備する。
Ａｃｔｉｏｎ要素、Ｓｕｃｃｅｓｓ要素、Ｆａｉｌｅｄ要素を合わせた６１が、アクション情報である。
図６の６２では、接続要求イベントが発生した際、アプリケーションの状態が待機状態であるならば、接続処理アクションを実行し、接続処理アクションが成功した場合は、アプリケーションの状態が待機状態から接続状態に遷移し、接続処理アクションが失敗した場合は、アプリケーションの状態が待機状態のまま遷移しないことを表している。
一方で、接続要求イベントが発生した際、アプリケーションの状態が接続状態であるときは、エラー（Ｅｒｒｏｒ）であることを表している。
エラーの他、発生したイベントに対して何もしない（無視する）場合には、ＥｒｒｏｒではなくＩｇｎｏｒｅと記述する。
【００２０】
また、図６の６３では、ファイル受信要求イベントが発生した際、アプリケーションの状態が接続状態であるならば、ファイル受信開始通知処理アクション、ファイル受信処理アクション、およびファイル受信完了通知処理アクションを実行し、これらのアクションが全て成功した場合は、接続状態のまま遷移せず、アクションの１つでも失敗した場合も接続状態のまま遷移しないことを表している。
このように、イベントと状態の１つの組合せの中で、複数のアクションを記述することを許容する。これにより、開発者は柔軟に設計可能となることが期待できる。
外部ファイルとして定義する状態遷移表（１３，３３）は、ＸＭＬのように、状態遷移表保持部（１１４，３１４）が読み込める形式で記述される。
一方、設計書等に記載される状態遷移表は、図２に示すような表形式で表現され、開発者も表形式の方が視覚的にも理解が容易であると考えられる。
そのため、開発者が設計書に記載された表形式の状態遷移表を、図６に示すような形式に変換する場合に、変換ミスや変換漏れ等が発生する可能性がある。
そこで、表形式で表現された状態遷移表を、例えば、図６に示すような形式に変換するツールを適用すれば、設計書に記載された表形式の状態遷移表に記載の情報を、変換ミスや変換漏れ等をすることなくシームレスに変換可能である。
【００２１】
図７は、本実施例の状態制御方法の処理手順を示すフローチャートである。
まず、状態制御エンジン（１１１，３１１）は、イベント格納部（１１２，３１２）にイベントが格納されているかを確認する（ステップ７１）。イベントが格納されていない場合は待機する。
イベントが格納されていた場合、状態制御エンジン（１１１，３１１）は、イベント格納部（１１２，３１２）からイベント情報を取り出し、取り出したイベントと現在状態保持部（１１３，３１３）が管理している現在の状態との組合せに対応するアクション情報を、状態遷移表保持部（１１４，３１４）より取り出す（ステップ７２）。
なお、状態遷移表保持部（１１４，３１４）は、アプリケーションの起動時に状態遷移表（１３，３３）を既に読み込んで管理しているものとする。
次に、状態制御エンジン（１１１，３１１）は、アクション情報に記載されているアクションクラス名をもとに、アクションクラス動的ロード手段（１１５，３１５）によりアクションクラス名に該当するアクションクラスをロードする（ステップ７３）。
【００２２】
次に、状態制御エンジン（１１１，３１１）はアクション関数呼び出し手段（１１６，３１６）により、ロードしたアクションクラスに実装されているアクション関数を実行し（ステップ７４）、アクションの実行結果を判定する（ステップ７５）。
実行したアクションが成功した場合は、状態制御エンジン（１１１，３１１）はアクション情報に記載のアクション成功時の遷移先状態に基づき、現在状態保持部（１１３，３１３）が管理している現在の状態を更新する（ステップ７６）。
アクションが失敗した場合は、状態制御エンジン（１１１，３１１）は、アクション情報に記載のアクション失敗時の遷移先状態に基づき、現在状態保持部（１１３，３１３）が管理している現在の状態を更新する（ステップ７７）。
最後に、状態制御エンジン（１１１，３１１）は、イベントの要求元に対し、アクションの実行結果を通知する（ステップ７８）。
以上が状態制御フレームワークにおける一連の処理であり、これらの処理はアプリケーションが終了するまで繰り返し実行される。
【００２３】
図８は、本実施例の状態制御方法において、アクションクラスの種類に依らず統一的にアクション関数を実行できることを説明するための図である。
図８に示すように、アクションクラスＡ（８３１）と、アクションクラスＢ（８３２）とは、同一名称のアクション関数（図８では、Ｅｘｅｃｕｔｅ関数）を実装している。
状態制御エンジン（１１１，３１１）は、イベントが発生すると、状態遷移表（１３，３３）より発生したイベントと現在の状態との組合せに対応するアクション情報８２を取り出す（ステップ８１１）。
次に、状態制御エンジン（１１１，３１１）は、アクション情報８２に記載のアクションクラス名に基づき、対応するアクションクラスをロードする（ステップ８１２）。
図８では、アクション情報８２に記載のアクションクラス名は「Ｂ」であるので、アクションクラスＢ（８３２）がロードされる。
次に、状態制御エンジン（１１１，３１１）は、ロードしたアクションクラスのアクション関数を実行する（ステップ８１３）。図８では、アクションクラスＢ（８３２）のＥｘｅｃｕｔｅ関数が実行される。
このように、状態制御エンジン（１１１，３１１）における、アクション情報の抽出、アクションクラス名に対応するアクションクラスのロード、ロードしたアクションクラスのアクション関数実行、といった一連の処理８１は、実行するアクションクラスの種類に依らず不変となるため、即ち、各アクションクラスが、同一名称のアクション関数（図８では、Ｅｘｅｃｕｔｅ関数）を実装しているため、共通化（フレームワーク化）が可能となる。
【００２４】
以上説明したように、本実施例によれば、アクションクラス動的ロード手段（１１５，３１５）により、開発者が状態遷移表（１３，３３）のみを作成すれば、状態遷移表（１３，３３）に記述されたアクション情報より、アクションクラスを動的にメモリ上にロードすることが可能となる。
さらに、アクション関数呼び出し手段（１１６，３１６）により、アクションクラスの種類によらず統一的な方法でアクション関数の実行が可能となる。
これにより、状態制御エンジン（１１１，３１１）は、アクションクラスの実装内容にかかわらず、イベント格納部（１１２，３１２）からのイベント取り出し、現在状態保持部（１１３，３１３）に対する状態の参照、状態遷移表保持部（１１４，３１４）に対するイベントと状態との組み合わせに応じたアクション情報の取得、アクション情報に含まれるアクションクラス名を動的にロードしてアクション関数を実行、アクションの実行結果に応じて現在状態保持部が管理している状態を更新、といった一連の状態制御動作を共通化できることとなる。
したがって、この状態制御動作のフレームワーク化が可能となり、開発者はこの部分を新たに開発する必要がなく、フレームワークとしての再利用が可能となる。
なお、本実施例の状態制御方法は、コンピュータ内のハードディスクなどに格納される状態制御プログラムを、コンピュータが実行することにより行われる。このプログラムは、ＣＤ−ＲＯＭ、あるいは、ネットワークを介したダウンロードにより供給される。
以上、本発明者によってなされた発明を、前記実施例に基づき具体的に説明したが、本発明は、前記実施例に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは勿論である。
【図面の簡単な説明】
【００２５】
【図１】本発明の実施例の状態制御方法を説明するための図である。
【図２】本発明の実施例の状態制御方法を具体的に説明するための状態遷移表の一例を示す図である。
【図３】本発明の実施例の状態制御方法の変形例を説明するための図である。
【図４】アクション関数呼び出し手段が適用されない場合の状態制御フレームワークおよびアクションクラスの実装例を示す図である。
【図５】アクション関数呼び出し手段を適用した場合の状態制御フレームワークおよびアクションクラスの実装例を示す図である。
【図６】本発明の実施例の状態制御方法における、外部ファイルとして定義する状態遷移表の一例を示す図である。
【図７】本発明の実施例の状態制御方法の処理手順を示すフローチャートである。
【図８】本発明の実施例の状態制御方法において、アクションクラスの種類に依らず統一的にアクション関数を実行できることを説明するための図である。
【符号の説明】
【００２６】
１１，３１  状態制御フレームワーク
１１１，３１１  状態制御エンジン
１１２，３１２  イベント格納部
１１３，３１３  現在状態保持部
１１４，３１４  状態遷移表保持部
１１５，３１５  アクションクラス動的ロード手段
１１６，３１６  アクション関数呼び出し手段
１２，３２  アクション
１２１，１２２，１２３，３２１，３２２，３２３  アクションクラス
１３，２１，３３  状態遷移表
２１１  イベント名
２１２  状態名
２１３，２１４  アクション情報
３１７  アクションクラス格納手段
４１  状態制御フレームワークの実装例
４１  Ａｃｔｉｏｎ１の実装例
４２  Ａｃｔｉｏｎ２の実装例
４３  Ａｃｔｉｏｎ３の実装例
５１  状態制御フレームワークが提供する基本クラスの実装例
５２  開発者が作成するアクションクラス１の実装例
５３  開発者が作成するアクションクラス２の実装例
８１  アクション情報
８３１  アクションクラスＡ
８３２  アクションクラスＢ
【図１】
2007065837.tif 000003
【図２】
2007065837.tif 000004
【図３】
2007065837.tif 000005
【図４】
2007065837.tif 000006
【図５】
2007065837.tif 000007
【図６】
2007065837.tif 000008
【図７】
2007065837.tif 000009
【図８】
2007065837.tif 000010