(57)【要約】      （修正有）【課題】モデル駆動型開発において、デバッグ用のコード又はプラットフォームの違いなどの差分について無駄なコードが生成されないようにする。【解決手段】グラフィック・プログラミング・ツール上の状態（ステート）と該状態間の遷移線とを含む状態遷移図を編集するコンピュータ・システムは、少なくとも１の上記状態遷移図を格納する格納部と、上記少なくとも１の状態遷移図を上記格納部から読み出して表示する表示部と、上記状態に対応する１以上のコード及び上記遷移線に対応する１以上のコードを格納するライブラリ部と、上記状態をアクティブに設定し又はインアクティブに設定する設定部であって、上記アクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象であり、上記インアクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象でない、上記設定部とを含む。【選択図】図３Ａ
2010003160.tif 000002
【特許請求の範囲】
【請求項１】
グラフィック・プログラミング・ツール上の状態（ステート）と該状態間の遷移線とを含む状態遷移図を編集するためのコンピュータ・システムであって、
少なくとも１の前記状態遷移図を格納する格納部と、
前記少なくとも１の状態遷移図を前記格納部から読み出して表示する表示部と、
前記状態に対応する１以上のコード及び前記遷移線に対応する１以上のコードを格納するライブラリ部と、
前記状態をアクティブに設定し又はインアクティブに設定する設定部であって、前記アクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象であり、前記インアクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象でない、前記設定部と
を含む、前記コンピュータ・システム。
【請求項２】
前記設定部が、真偽の判断をする条件式の入力をユーザに可能にし、該入力された条件式を前記状態に関連付け、及び前記条件式の結果が真である場合に前記状態をアクティブに設定し、一方前記条件式の結果が偽である場合に前記状態をインアクティブに設定する、請求項１に記載のコンピュータ・システム。
【請求項３】
前記状態が遷移線からの入力点と遷移線への出力点とを含み、
前記状態がアクティブに設定されることによって、前記表示部が前記入力点と前記出力点との間を破線で表示し、
一方、前記前記状態がインアクティブに設定されることによって、前記表示部が前記入力点と前記出力点との間を実線で表示する、
請求項１に記載のコンピュータ・システム。
【請求項４】
前記状態が少なくとも２の状態（以下、埋込状態）を含み、
前記設定部が、真偽の判断をする条件式の入力をユーザに可能にし、該入力された条件式を前記状態に関連付け、及び前記条件式の結果が真である１つの埋込状態をアクティブに設定し、残りの埋込状態をインアクティブに設定する、請求項１に記載のコンピュータ・システム。
【請求項５】
前記状態が、少なくとも２の選択可能な状態（以下、埋込状態）を含む少なくとも１のグループを含み、
前記設定部が、真偽の判断をする条件式の入力をユーザに可能にし、該入力された条件式を前記選択可能な埋込状態に関連付け、及び前記条件式の結果が真である１つの上記埋込状態をアクティブに設定し、残りの上記埋込状態をインアクティブに設定する、請求項１に記載のコンピュータ・システム。
【請求項６】
前記状態が少なくとも２以上の状態（以下、埋込状態）を含み、
前記設定部が、２以上の埋込状態のうち１の埋込状態を選択することをユーザに可能にし、及び選択された１つの埋込状態をアクティブに設定し、残りの埋込状態をインアクティブに設定する、請求項１に記載のコンピュータ・システム。
【請求項７】
前記状態が前記埋込状態への入力線と出力線を有し、及び前記埋込状態が前記状態からの入力線を接続するための入力点と前記状態への出力線を接続するための出力点を有し、
前記設定部が、前記入力線とユーザによって選択された埋込状態の入力点が接続されることに応答して、該入力線が接続された埋込状態をアクティブに設定し、選択されなかった埋込状態をインアクティブに設定する、請求項６に記載のコンピュータ・システム。
【請求項８】
前記入力線とユーザによって選択された埋込状態の入力点が接続されることに応答して、前記表示部が、該入力線が接続された埋込状態の出力点と前記状態の前記出力線との間を実線で結び、及び、前記入力線が接続されなかった埋込状態の出力点と前記状態の前記出力線との間を破線で表示する、請求項７に記載のコンピュータ・システム。
【請求項９】
前記アクティブに設定されうる状態に関連付けられた１以上のコードがコンパイルの対象であり、前記インアクティブに設定されうる状態に関連付けられた１以上のコードがコンパイルの対象でないことを示すフラグを付与するフラグ付与部をさらに含む、請求項１に記載のコンピュータ・システム。
【請求項１０】
前記フラグ付与部は前記状態にフラグを付与して、該状態をアクティブに設定し、及び前記コンピュータ・システムは、
該付与されたフラグを使用して、前記アクティブにされた状態に関連付けられた１以上のコードを前記ライブラリ部から選択する選択部をさらに含み、前記選択部は、前記インアクティブにされた状態に関連付けられたコードを選択しない、請求項９に記載のコンピュータ・システム。
【請求項１１】
前記フラグ付与部は前記状態にフラグを付与して、該状態をインアクティブに設定し、及び前記コンピュータ・システムは、
該付与されたフラグを使用して、前記アクティブにされた状態に関連付けられた１以上のコードを前記ライブラリ部から選択する選択部をさらに含み、前記選択部は、前記インアクティブにされた状態に関連付けられたコードを選択しない、請求項９に記載のコンピュータ・システム。
【請求項１２】
前記アクティブに設定された状態に関連付けられた１以上のコードを含むコンパイル対象のコードをコンパイルするコンパイル部をさらに含む、請求項１に記載のコンピュータ・システム。
【請求項１３】
前記状態が、イベント待ちをしているプログラム、状態に入るときに実行されるプログラム及び状態から出るときに実行されるプログラムに関連付けられており、及び、前記遷移線が、状態から状態に移る場合に実行されるプログラムに関連付けられている、請求項１に記載のコンピュータ・システム。
【請求項１４】
グラフィック・プログラミング・ツール上の状態（ステート）と該状態間の遷移線とを含む状態遷移図を編集するための方法であって、
少なくとも１の前記状態遷移図を格納部に格納するステップと、
前記少なくとも１の状態遷移図を前記格納部から読み出して表示するステップと、
前記状態に対応する１以上のコード及び前記遷移線に対応する１以上のコードをライブラリに格納するステップと、
前記状態をアクティブに設定し又はインアクティブに設定するステップであって、前記アクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象であり、前記インアクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象でない、前記設定するステップと
を含む、前記方法。
【請求項１５】
前記設定するステップが、
真偽の判断をする条件式の入力をユーザに可能にするステップと、
該入力された条件式を前記状態に関連付けるステップと、
前記条件式の結果が真である場合に前記状態をアクティブに設定し、一方前記条件式の結果が偽である場合に前記状態をインアクティブに設定するステップと
を含む、請求項１４に記載の方法。
【請求項１６】
前記状態が少なくとも２の状態（以下、埋込状態）を含み、
前記設定するステップが、
真偽の判断をする条件式の入力をユーザに可能にするステップと、
該入力された条件式を前記状態に関連付けるステップと、
前記条件式の結果が真である１つの埋込状態をアクティブに設定し、残りの埋込状態をインアクティブに設定するステップと
を含む、請求項１４に記載の方法。
【請求項１７】
前記状態が、少なくとも２の選択可能な状態（以下、埋込状態）を含む少なくとも１のグループを含み、
前記設定するステップが、
真偽の判断をする条件式の入力をユーザに可能にするステップと、
該入力された条件式を前記選択可能な埋込状態に関連付けるステップと、
前記条件式の結果が真である１つの上記埋込状態をアクティブに設定し、残りの上記埋込状態をインアクティブに設定するステップと
を含む、請求項１４に記載の方法。
【請求項１８】
前記状態が少なくとも２以上の状態（以下、埋込状態）を含み、
前記設定するステップが、
２以上の埋込状態のうち１の埋込状態を選択することをユーザに可能にするステップと、
選択された１つの埋込状態をアクティブに設定し、残りの埋込状態をインアクティブに設定するステップと
を含む、請求項１４に記載の方法。
【請求項１９】
前記状態が前記埋込状態への入力線と出力線を有し、及び前記埋込状態が前記状態からの入力線を接続するための入力点と前記状態への出力線を接続するための出力点を有し、
前記設定するステップが、
前記入力線とユーザによって選択された埋込状態の入力点が接続されることに応答して、該入力線が接続された埋込状態をアクティブに設定し、選択されなかった埋込状態をインアクティブに設定するステップをさらに含む、請求項１８に記載の方法。
【請求項２０】
前記アクティブに設定されうる状態に関連付けられた１以上のコードがコンパイルの対象であり、前記インアクティブに設定されうる状態に関連付けられた１以上のコードがコンパイルの対象でないことを示すフラグを付与するステップをさらに含む、請求項１４に記載の方法。
【請求項２１】
前記フラグを付与するステップが、前記状態にフラグを付与して、該状態をアクティブに設定するステップを含み、
前記方法が、該付与されたフラグを使用して、前記アクティブにされた状態に関連付けられた１以上のコードを前記ライブラリから選択するステップであって、該選択するステップは前記インアクティブにされた状態に関連付けられたコードを選択しない、前記選択するステップを含む、請求項２０に記載の方法。
【請求項２２】
前記フラグを付与するステップが、前記状態にフラグを付与して、該状態をインアクティブに設定するステップを含み、
前記方法が、該付与されたフラグを使用して、前記アクティブにされた状態に関連付けられた１以上のコードを前記ライブラリ部から選択するステップであって、該選択するステップは前記インアクティブにされた状態に関連付けられたコードを選択しない、前記選択するステップを含む、請求項２０に記載の方法。
【請求項２３】
前記アクティブに設定された状態に関連付けられた１以上のコードを含むコンパイル対象のコードをコンパイルするステップをさらに含む、請求項１４に記載の方法。
【請求項２４】
グラフィック・プログラミング・ツール上の状態（ステート）と該状態間の遷移線とを記述した状態遷移図を編集するためのコンピュータ・プログラムであって、コンピュータ・システムに、請求項１４〜２３のいずれか一項に記載のステップを実行させることを含む、前記コンピュータ・プログラム。
【請求項２５】
グラフィック・プログラミング・ツール上の状態（ステート）と該状態間の遷移線とを含む状態遷移図を編集し、そしてソースコードを作成するための方法であって、
少なくとも１の前記状態遷移図を格納部に格納するステップと、
前記少なくとも１の状態遷移図を前記格納部から読み出して表示するステップと、
前記状態に対応する１以上のコード及び前記遷移線に対応する１以上のコードをライブラリに格納するステップと、
前記状態をアクティブに設定し又はインアクティブに設定するステップであって、前記アクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象であり、前記インアクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象でない、前記設定するステップと、
前記アクティブにされた状態に関連付けられたコードを前記ライブラリから選択するステップと、
前記選択されたコードを含むコンパイル対象のコードをコンパイルするステップであって、前記コンパイル対象のコードは、前記インアクティブに設定された状態に関連付けられた１以上のコードを含まない、前記生成するステップと
を含む、前記方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グラフィック・プログラミング・ツール上の状態（ステート）と該状態間の関係とを含む状態遷移図を編集するためのコンピュータ・システム、並びにその方法及びコンピュータ・プログラムに関する。本発明はまた、グラフィック・プログラミング・ツール上の状態（ステート）と該状態間の遷移線とを含む状態遷移図を編集し、そしてソースコードを作成するためのコンピュータ・システム、並びにその方法及びコンピュータ・プログラムに関する。
【背景技術】
【０００２】
Ｃ言語における#ifdef文では、DEBUGというマクロ定義がされた場合のみ、#ifdef DEBUGと#endifで囲まれたソースコードが有効になり、該ソースコードがコンパイル対象となる。一方、DEBUGというマクロ定義がなければ、#ifdef DEBUGと#endifで囲まれたソースコードはないものとしてプリプロセッサに処理される。しかし、ＲｏｓｅＲＴなどで知られるモデル駆動型開発（ＭＤＤ：model-driven development）ツールは、上記#ifdef文に相当する機能を有していない。また、ＭＤＤにおいて、プログラムは、ステート・マシンとして記述されるためにソースコードに直接#ifdefを挿入することもできない。そのため、デバッグ用のコード又はプラットフォームの違いなどの差分を同一プログラム上に記述するために、ＲｏｓｅＲＴでは、チョイスポイントと呼ばれる機能を使用する。チョイスポイントは、条件を与えて分岐を行う機能を有する。しかし、チョイスポイントは、#ifdefのようにプリプロセッサにより実行される機能ではない。そのために、チョイスポイントで分岐された全てのプログラムがコンパイル対象となり、結果として無駄なコードが生成されてしまう。
ところで、最近のＶｉｓｕａｌ  Ｔｏｏｌ、例えばマイクロソフト社の開発環境であるＶｉｓｕａｌ  Ｓｔｕｄｉｏでは、コンパイル対象とならない個所の表示と非表示との切り替え、コンパイル対象個所の色分け等、プログラム設計を進める上での利便性を高める機能が実装されている。
【０００３】
図１は、Ｖｉｓｕａｌ  Ｔｏｏｌの画面（１０１）の例を示す。図１に示すプログラム例では、#ifdef DEBUGと#endifで囲まれたソースコードOutputDebugString(”debug message”);  がイネーブルされないために、例えば灰色で色付けされて表示されたり、或いはイタリックで文字種を変更して表示されたりする。
【０００４】
下記特許文献１は、ユーザがプログラミング言語や簡易言語に関する各種知識を習得していなくても、短時間でユーザー・コマンドを作成して運用することができるようにしたグラフィックス編集装置におけるコマンド作成方法を記載する。
【０００５】
下記特許文献２は、新たな表示画面の画面定義情報を定義するごとにこの画面定義情報を画面遷移の状態遷移表に反映させていくような対話型プログラムの開発支援装置を記載する。
【特許文献１】特開平８−１２３９７５号公報
【特許文献２】特開平８−１９０４７６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ＭＤＤにおいても、デバッグ用のソースコード又はプラットフォームの違いなどの差分についてのソースコードなどの無駄なコードが生成の対象にされないように同一プログラム上に記述するための機能が求められている。また、該機能において、プログラム設計を進める上での利便性が求められている。
【課題を解決するための手段】
【０００７】
本発明は、グラフィック・プログラミング・ツール上の状態（ステート）と該状態間の遷移線とを含む状態遷移図を編集するためのコンピュータ・システムを提供する。該コンピュータ・システムは、
少なくとも１の上記状態遷移図を格納する格納部と、
上記少なくとも１の状態遷移図を上記格納部から読み出して表示する表示部と、
上記状態に対応する１以上のコード及び上記遷移線に対応する１以上のコードを格納するライブラリ部と、
上記状態をアクティブに設定し又はインアクティブに設定する設定部であって、上記アクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象であり、上記インアクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象でない、上記設定部と
を含む。
【０００８】
本発明の１つの実施態様では、上記設定部が、真偽の判断をする条件式の入力をユーザに可能にし、該入力された条件式を上記状態に関連付け、及び上記条件式の結果が真である場合に上記状態をアクティブに設定し、一方上記条件式の結果が偽である場合に上記状態をインアクティブに設定する。該実施態様において、上記表示部が、上記状態がアクティブである場合と、上記状態がインアクティブである場合とを区別して表示する。該実施態様において、上記条件式の真偽が、上記コードのコンパイル時にスタティックに決定される。
【０００９】
本発明の１つの実施態様では、前記状態が遷移線からの入力点と遷移線への出力点とを含み、
前記状態がアクティブに設定されることによって、前記表示部が前記入力点と前記出力点との間を破線で表示し、
一方、前記前記状態がインアクティブに設定されることによって、前記表示部が前記入力点と前記出力点との間を実線で表示する、
請求項１に記載のコンピュータ・システム。
【００１０】
本発明の１つの実施態様では、上記状態が、少なくとも２の状態（以下、埋込状態）を含む。該実施態様において、上記設定部が、真偽の判断をする条件式の入力をユーザに可能にし、該入力された条件式を上記状態に関連付ける。上記設定部は、上記条件式の結果が真である１つの埋込状態をアクティブに設定し、残りの埋込状態をインアクティブに設定する。該実施態様において、本上記表示部が、上記状態がアクティブである場合と、上記状態がインアクティブである場合とを区別して表示する。該実施態様において、上記条件式の真偽が、上記コードのコンパイル時にスタティックに決定される。
【００１１】
本発明の１つの実施態様では、上記状態が、少なくとも２の選択可能な状態（以下、埋込状態）を含む少なくとも１のグループを含む。該実施態様において、上記設定部が、真偽の判断をする条件式の入力をユーザに可能にし、該入力された条件式を上記状態に関連付ける。上記設定部は、上記条件式の結果が真である上記選択可能な埋込状態のうち１つの埋込状態をアクティブに設定し、上記選択可能な埋込状態のうち残りの埋込状態をインアクティブに設定する。該実施態様において、上記表示部が、上記状態がアクティブである場合と、上記状態がインアクティブである場合とを区別して表示する。該実施態様において、上記条件式の真偽が、上記コードのコンパイル時にスタティックに決定される。
【００１２】
本発明の１つの実施態様では、上記状態が、少なくとも２以上の状態（以下、埋込状態）を含む。該実施態様において、上記設定部が、２以上の埋込状態のうち１の埋込状態を選択することをユーザに可能にする。上記設定部は、選択された１つの埋込状態をアクティブに設定し、残りの埋込状態をインアクティブに設定する。該実施態様において、上記表示部が、上記状態がアクティブである場合と、上記状態がインアクティブである場合とを区別して表示する。該実施態様において、上記条件式の真偽が、上記コードのコンパイル時にスタティックに決定される。
【００１３】
本発明の１つの実施態様では、上記状態が上記埋込状態への入力線と出力線を有し、及び上記埋込状態が上記状態からの入力線を接続するための入力点と上記状態への出力線を接続するための出力点を有する。該実施態様において、上記設定部が、上記入力線とユーザによって選択された埋込状態の入力点が接続されることに応答して、該入力線が接続された埋込状態をアクティブに設定し、選択されなかった埋込状態をインアクティブに設定する。
【００１４】
本発明の１つの実施態様では、上記入力線とユーザによって選択された埋込状態の入力点が接続されることに応答して、上記表示部が、該入力線が接続された埋込状態の出力点と上記状態の上記出力線との間を実線で結び、一方前記入力線が接続されなかった埋込状態の出力点と前記状態の前記出力線との間を破線で表示する。
【００１５】
本発明の１つの実施態様では、該コンピュータ・システムは、上記アクティブに設定されうる状態に関連付けられた１以上のコードがコンパイルの対象であり、上記インアクティブに設定されうる状態に関連付けられた１以上のコードがコンパイルの対象でないことを示すフラグを付与するフラグ付与部をさらに含む。
【００１６】
本発明の１つの実施態様では、上記フラグ付与部は、上記状態にフラグを付与し、該状態をアクティブに設定する。該コンピュータ・システムは、該付与されたフラグを使用して、上記アクティブにされた状態に関連付けられた１以上のコードを上記ライブラリ部から選択する選択部をさらに含む。該コンピュータ・システムの該選択部は、上記インアクティブにされた状態に関連付けられたコードを選択しない。
【００１７】
本発明の１つの実施態様では、上記フラグ付与部は、上記状態にフラグを付与し、該状態をインアクティブに設定する。該コンピュータ・システムは、該付与されたフラグを使用して、上記アクティブにされた状態に関連付けられた１以上のコードを上記ライブラリ部から選択する選択部をさらに含む。該コンピュータ・システムの該選択部は、上記インアクティブにされた状態に関連付けられたコードを選択しない。
【００１８】
本発明の１つの実施態様では、該コンピュータ・システムは、上記アクティブに設定された状態に関連付けられた１以上のコードを含むコンパイル対象のコードをコンパイルするコンパイル部をさらに含む。
【００１９】
本発明の１つの実施態様では、上記状態が、イベント待ちをしているプログラム、状態に入るときに実行されるプログラム及び状態から出るときに実行されるプログラムに関連付けられており、及び、上記遷移線が、状態から状態に移る場合に実行されるプログラムに関連付けられている。
【００２０】
本発明の１つの実施態様では、上記プログラムが、Ｃ、Ｃ＋＋、又はｊａｖａ（商標）のいずれかであるが、これらに限定されない。
【００２１】
本発明はまた、グラフィック・プログラミング・ツール上の状態（ステート）と該状態間の遷移線とを含む状態遷移図を編集するための方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
少なくとも１の上記状態遷移図を格納部に格納するステップと、
上記少なくとも１の状態遷移図を上記格納部から読み出して表示するステップと、
上記状態に対応する１以上のコード及び上記遷移線に対応する１以上のコードをライブラリに格納するステップと、
上記状態をアクティブに設定し又はインアクティブに設定するステップであって、上記アクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象であり、上記インアクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象でない、上記設定するステップと
を含む。
【００２２】
本発明の１つの実施態様では、上記設定するステップが、
真偽の判断をする条件式の入力をユーザに可能にするステップと、
該入力された条件式を上記状態に関連付けるステップと、
上記条件式の結果が真である場合に上記状態をアクティブに設定し、一方上記条件式の結果が偽である場合に上記状態をインアクティブに設定するステップと
を含む。本発明の１つの実施態様では、上記表示するステップが、上記状態がアクティブである場合と、上記状態がインアクティブである場合とを区別して表示するステップをさらに含む。
【００２３】
本発明の１つの実施態様では、前記状態が遷移線からの入力点と遷移線への出力点とを含み、該方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、
前記状態がアクティブに設定されることによって、前記表示部が前記入力点と前記出力点との間を破線で表示するステップと、
一方、前記前記状態がインアクティブに設定されることによって、前記表示部が前記入力点と前記出力点との間を実線で表示するステップと
を含む。
【００２４】
本発明の１つの実施態様では、上記状態が少なくとも２の状態（以下、埋込状態）を含む。該実施態様において、上記設定するステップが、
真偽の判断をする条件式の入力をユーザに可能にするステップと、
該入力された条件式を上記状態に関連付けるステップと、
上記条件式の結果が真である１つの埋込状態をアクティブに設定し、残りの埋込状態をインアクティブに設定するステップと
を含む。
【００２５】
本発明の１つの実施態様では、上記状態が、少なくとも２の選択可能な状態（以下、埋込状態）を含む少なくとも１のグループを含む。該実施態様において、上記設定するステップが、
真偽の判断をする条件式の入力をユーザに可能にするステップと、
該入力された条件式を上記状態に関連付けるステップと、
上記条件式の結果が真である上記選択可能な埋込状態のうちの１つの埋込状態をアクティブに設定し、上記選択可能な埋込状態のうちの残りの埋込状態をインアクティブに設定するステップと
を含む。
【００２６】
本発明の１つの実施態様では、上記状態が、少なくとも２以上の状態（以下、埋込状態）を含む。該実施態様において、上記設定するステップが、
２以上の埋込状態のうち１の埋込状態を選択することをユーザに可能にするステップと、
選択された１つの埋込状態をアクティブに設定し、残りの埋込状態をインアクティブに設定するステップと
を含む。
【００２７】
本発明の１つの実施態様では、上記状態が上記埋込状態への入力線と出力線を有し、及び上記埋込状態が上記状態からの入力線を接続するための入力点と上記状態への出力線を接続するための出力点を有する。該実施態様において、上記設定するステップが、上記入力線とユーザによって選択された埋込状態の入力点が接続されることに応答して、該入力線が接続された埋込状態をアクティブに設定し、選択されなかった埋込状態をインアクティブに設定するステップをさらに含む。
【００２８】
本発明の１つの実施態様では、該方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記入力線とユーザによって選択された埋込状態の入力点が接続されることに応答して、該入力線が接続された埋込状態の出力点と上記状態の上記出力線との間を実線で表示するステップと、一方前記入力線が接続されなかった埋込状態の出力点と前記状態の前記出力線との間を破線で表示するステップとを含む。
【００２９】
本発明の１つの実施態様では、該方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記アクティブに設定されうる状態に関連付けられた１以上のコードがコンパイルの対象であり、上記インアクティブに設定されうる状態に関連付けられた１以上のコードがコンパイルの対象でないことを示すフラグを付与するステップを含む。
【００３０】
本発明の１つの実施態様では、上記フラグを付与するステップが、上記状態にフラグを付与して、該状態をアクティブに設定するステップを含む。該実施態様において、該方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、該付与されたフラグを使用して、上記アクティブにされた状態に関連付けられた１以上のコードを上記ライブラリ部から選択するステップであって、該選択するステップは上記インアクティブにされた状態に関連付けられたコードを選択しない、上記選択するステップを含む。
【００３１】
本発明の１つの実施態様では、上記フラグを付与するステップが、上記状態にフラグを付与して、該状態をインアクティブに設定するステップを含む。該実施態様において、該方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、該付与されたフラグを使用して、上記アクティブにされた状態に関連付けられた１以上のコードを上記ライブラリ部から選択するステップであって、該選択するステップは上記インアクティブにされた状態に関連付けられたコードを選択しない、上記選択するステップを含む。
【００３２】
本発明の１つの実施態様では、該方法は、コンピュータ・システムに下記ステップをさらに実行させることを含む。該ステップは、上記アクティブに設定された状態に関連付けられた１以上のコードを含むコンパイル対象のコードをコンパイルするステップを含む。
【００３３】
本発明の１つの実施態様では、上記状態が、イベント待ちをしているプログラム、状態に入るときに実行されるプログラム及び状態から出るときに実行されるプログラムに関連付けられており、及び、上記遷移線が、状態から状態に移る場合に実行されるプログラムに関連付けられている。
【００３４】
本発明はまた、グラフィック・プログラミング・ツール上の状態（ステート）と該状態間の遷移線とを記述した状態遷移図を編集するためのコンピュータ・プログラムを提供する。該コンピュータ・プログラムは、コンピュータ・システムに、上記方法のいずれか一項に記載のステップを実行させることを含む。
【００３５】
本発明はまた、グラフィック・プログラミング・ツール上の状態（ステート）と該状態間の遷移線とを含む状態遷移図を編集し、そしてソースコードを作成するためのコンピュータ・システムを提供する。該コンピュータ・システムは、
少なくとも１の上記状態遷移図を格納部に格納する格納部と、
上記少なくとも１の状態遷移図を上記格納部から読み出して表示する表示部と、
上記状態に対応する１以上のコード及び上記遷移線に対応する１以上のコードを格納するライブラリ部と、
上記状態をアクティブに設定し又はインアクティブに設定する設定部であって、上記アクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象であり、上記インアクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象でない、上記設定部と、
上記アクティブにされた状態に関連付けられたコードを上記ライブラリから選択する選択部と、
上記選択されたコードを含むコンパイル対象のコードをコンパイルするコンパイル部であって、上記コンパイル対象のコードは、上記インアクティブに設定された状態に関連付けられた１以上のコードを含まない、上記コンパイル部と
を含む。
【００３６】
本発明はまた、グラフィック・プログラミング・ツール上の状態（ステート）と該状態間の遷移線とを含む状態遷移図を編集し、そしてソースコードを作成するための方法を提供する。該方法は、コンピュータ・システムに下記ステップを実行させることを含む。該ステップは、
少なくとも１の上記状態遷移図を格納部に格納するステップと、
上記少なくとも１の状態遷移図を上記格納部から読み出して表示するステップと、
上記状態に対応する１以上のコード及び上記遷移線に対応する１以上のコードをライブラリに格納するステップと、
上記状態をアクティブに設定し又はインアクティブに設定するステップであって、上記アクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象であり、上記インアクティブに設定された状態に関連付けられた１以上のコードがコンパイルの対象でない、上記設定するステップと、
上記アクティブにされた状態に関連付けられたコードを上記ライブラリから選択するステップと、
上記選択されたコードを含むコンパイル対象のコードをコンパイルするステップであって、上記コンパイル対象のコードは、上記インアクティブに設定された状態に関連付けられた１以上のコードを含まない、上記生成するステップと
を含む。
【００３７】
本発明はまた、グラフィック・プログラミング・ツール上の状態（ステート）と該状態間の遷移線とを記述した状態遷移図を編集し、そしてソースコードを作成するためのコンピュータ・プログラムを提供する。該コンピュータ・プログラムは、コンピュータ・システムに、上記方法に記載のステップを実行させることを含む。
【発明の効果】
【００３８】
本発明の実施態様によると、以下の効果をもたらす。
プログラム設計を行うユーザは、状態遷移図を描きながらプログラム設計する際に、各状態に対する条件を設定することにより、プログラム設計の段階で各状態のアクティブとインアクティブとを切り替えることができる。プログラム設計を行うユーザは、プログラムのサブバージョンにおいて必要になる各状態に対する条件を設定することにより、コンパイルの対象個所を選択することができる。コンピュータは、該設定に基づいて、各サブバージョンのプログラム・コードを生成する。コンパイル対象以外の余分なコードがコンパイルされないので、コンパイルで生成されるファイルのサイズが小さくなりうる。また、プログラム設計を行うユーザは、各状態に対する条件の表示と一般処理ロジックに対する条件との表示を分離できる。このため、プログラムの構造が単純化されるので、プログラムの可読性が上がる。
【発明を実施するための最良の形態】
【００３９】
グラフィック・プログラミング・ツールとは、状態と状態との間を遷移線で結び、状態遷移図を生成することによってコーディングを行うグラフィカル・ユーザ・インターフェース（ＧＵＩ）ツールをいう。ユーザが状態遷移図を生成すると、コンピュータは、該状態遷移図に基づいてソースコードを生成する。該グラフィック・プログラミング・ツールは例えばＲｏｓｅＲＴ（商標）であるが、これに限定されない。
状態遷移図とは、プログラムの動作を、複数の状態の間での遷移（移り変わり）として表示したものであり、状態（ステート）と該状態間の遷移線とを含む。該表示は、ＧＵＩを用いて表示される。
状態とは、イベントを処理することのできる状態を示し、通常はイベントが発生するまで待機している。状態は、イベント待ちをしているプログラム（Entry Action）、状態に入るときに実行されるプログラム（Exit Action）及び状態から出るときに実行されるプログラムに関連付けられる。一般には、イベント待ちをしているプログラムが主体であり、状態に入るときに実行されるプログラムは、初期化処理を行う。初期化処理は例えば、変数の初期化を含む。状態から出るときに実行されるプログラムは、後処理を行う。後処理は例えば、動的変数の解放を含む。また、状態は、データとして状態から出ていく出力遷移線の一覧を有する。該出力遷移線は、イベントと関連付けられている。あるイベントが発生したときに、該発生したイベントと関連付けられている出力遷移線が存在する場合、状態遷移が起こる。状態遷移が起こるとき、次の状態（ターゲット）に入るときに実行される状態（ソース）のプログラム（Exit Action）が実行される。次に、状態（ソース）と状態（ターゲット）と間の遷移線上のプログラム（Action）が実行される。次に、次の状態（ターゲット）に入るときに実行されるプログラム（Entry Action）が実行されて、状態（ターゲット）に遷移する。上記イベントに関連付けられた遷移線がない場合は、状態遷移が起こらないので何も起こらない。
遷移線は、状態（ソース）から状態（ターゲット）に移る場合に実行される、あるまとまった機能を実行するプログラムに関連付けられる。
状態遷移図からプログラムを生成するということは、状態遷移についての情報からプログラムを自動生成することをいう。
【００４０】
本発明の１つの実施態様では、状態遷移図を編集するためのコンピュータ・システムは、少なくとも１の状態遷移図を格納する格納部を含む。該格納部は、コンピュータ・システム内の記憶装置、例えばハードディスク、又は該コンピュータ・システムに接続されうる記録装置、例えば外付けハードディスク、ネットワーク接続ストレージである。
本発明の１つの実施態様では、上記コンピュータ・システムは、少なくとも１の状態遷移図を格納部から読み出して表示する表示部を含む。該表示部は、例えばディスプレイである。
本発明の１つの実施態様では、上記コンピュータ・システムは、ユーザの編集によらない状態遷移図のソースコード、例えば状態及び遷移線に対応する各コード；修正を加えた状態及び修正を加えた遷移線の各コード；並びに状態及び遷移線に対応する各コードの雛型を格納するライブラリ部を含む。該ライブラリは、コンピュータ・システムの記憶装置内の記憶装置、例えばハードディスク、又は該コンピュータ・システムに接続されうる記録装置、例えば外付けハードディスク、ネットワーク接続ストレージである。該ライブラリは、上記格納部と同一の記憶装置であってもよい。
本発明の１つの実施態様では、上記コンピュータ・システムは、状態遷移図に対して入力を行う入力部を含む。該入力部は例えば、状態をアクティブに設定し又はインアクティブに設定する設定部をさらに含む。状態がアクティブであることによって、該状態に対応する１以上のコードがコンパイル対象となる。一方、状態がインアクティブであることによって、該状態に対応する１以上のコードがコンパイル対象とならない。
【００４１】
本発明の１つの実施態様では、上記コンピュータ・システムは、上記アクティブに設定されうる状態に関連付けられた１以上のコードがコンパイルの対象であり、上記インアクティブに設定されうる状態に関連付けられた１以上のコードがコンパイルの対象でないことを示すフラグを付与するフラグ付与部を含む。該フラグは、状態に付される。該フラグ付与部は、上記設定部と同一の装置内であってもよい。
【００４２】
本発明の１つの実施態様では、上記設定部は、真偽の判断をする条件式の入力を可能にし、該入力された条件式を状態に関連付ける。条件式は、真偽を表すものであればよく、特に限定されない。条件式は例えば、任意の論理演算としてもよいし、或いはユーザによって定義された式であってもよい。本発明の１つの実施態様では、条件式は「Ｔｙｐｅ  ｉｎ  （型）」と定義される。条件式の括弧の中には、Ａ１、Ａ、Ｂ等の型が入れられる。該型として、例えば、プログラムの仕向け地を識別するための定義が使用されうる。ユーザは例えば、プログラム仕向け地を識別する定義「Ａ」を、ポップアップウィンドウ内の所定の欄に入力することにより、Ａを有効にすることができる。条件式は、括弧の中に入れられた型と同一の型が有効になったときに「真」を表す。一方、条件式は、括弧の中に入れられた型と違う型が有効になったときに「偽」を表す。例えば、条件式「Ｔｙｐｅ  ｉｎ  （Ａ１、Ｂ１）」は、Ａ１又はＢ１が指定され、有効になったときに「真」を表す。条件式の結果が真である場合、コンピュータ・システムは、該条件式を有する状態をアクティブに設定する。コンピュータ・システムは、アクティブに設定された状態に関連付けられたコードにフラグを付与する。該フラグの付されたコードは、コンパイル対象である。一方、条件式の結果が偽である場合、コンピュータ・システムは、該条件式を有する状態をインアクティブに設定する。コンピュータ・システムは、インアクティブに設定された状態に関連付けられたコードにフラグを付さない。該フラグの付されなかったコードは、コンパイル対象でない。代替の実施態様として、コンピュータ・システムは、インアクティブに設定された状態に関連付けられたコードにインアクティブであることを示すフラグを付与する。該フラグの付されたコードは、コンパイル対象でない。
以下の説明において、上記条件式を有する状態と、条件式を持たない状態とを区別するために、条件式を有する状態を「Ｔｈｒｏｕｇｈ−ａｂｌｅ状態」（Ｔｈｒｏｕｇｈ−ａｂｌｅ  Ｓｔａｔｅ）という場合がある。
ユーザは、各状態に、「ｄｏ−ｔｈｒｏｕｇｈａｂｌｅ」の属性を付与できる。「ｄｏ−ｔｈｒｏｕｇｈａｂｌｅ」の属性が付与された状態は、プログラム処理上無視される。即ち、プログラム・コードが生成されない。
【００４３】
本発明の１つの実施態様では、上記設定部は、真偽の判断をする条件式を埋込状態に関連付ける。該埋込状態の１つの実施態様は、状態が１以上の状態を内部に有する場合の該内部の状態である。本発明の１つの実施態様では、少なくとも２以上の埋込状態をグループ化する。そして、該グループから１つの状態のみが選択されうる。コンピュータ・システムは、グループの中で、真である条件式をもつ１つの埋込状態を選択する。ここで、グループの他の埋込状態に関連付けられた条件式は、偽にならなければならない。例えば、埋込状態１の条件式が「Ｔｙｐｅ  ｉｎ  （Ａ，Ｂ）」であり、埋込状態２の条件式が「Ｔｙｐｅ  ｉｎ  （Ｂ，Ｃ）」である場合を考える。この場合、Ｂが有効になると、両方とも真になるので、このような条件式は使えない。
グループに含まれる埋込状態に関連付けられた条件式には、「ＯＴＨＥＲＳ」を設定しうる。ただし「ＯＴＨＥＲＳ」を設定しうる埋込状態は、グループの間で１つの埋込状態である。「ＯＴＨＥＲＳ」は、グループに含まれる他の埋込状態に関連付けられた条件式が全て偽を表す場合に、真を表す。「ＯＴＨＥＲＳ」は、グループに含まれる他の埋込状態に関連付けられた条件式の何れかが真を表す場合に、偽を表す。
条件式の結果が真である場合、コンピュータ・システムは、該条件式を有する埋込状態をアクティブに設定する。コンピュータ・システムは、アクティブに設定された埋込状態に関連付けられたコードにフラグを付与する。該フラグの付されたコードは、コンパイル対象である。一方、条件式の結果が偽である場合、コンピュータ・システムは、該条件式を有する埋込状態をインアクティブに設定する。コンピュータ・システムは、インアクティブに設定された埋込状態に関連付けられたコードにフラグを付さない。該フラグの付されなかったコードは、コンパイル対象でない。代替の実施態様として、コンピュータ・システムは、インアクティブに設定された埋込状態に関連付けられたコードにインアクティブであることを示すフラグを付与する。該フラグの付されたコードは、コンパイル対象でない。
以下の説明において、上記埋込状態を選択する機能をもった状態と、埋込状態を選択する機能をもたない状態とを区別するために、上記埋込状態を選択する機能を持った状態を「パラレル状態」（Ｐａｒａｌｌｅｌ  Ｓｔａｔｅ）という場合がある。
【００４４】
本発明の１つの実施態様では、上記設定部は、２以上の埋込状態のうち１の埋込状態を選択することを可能にする。該選択は例えば、ユーザによって状態を選択することによって行われる。該選択は例えば、ポインティング・デバイスによって、該状態をクリックすることによって行われる。該選択された１つの埋込状態はアクティブに設定され、残りの埋込状態はインアクティブに設定される。
【００４５】
本発明の１つの実施態様では、状態が埋込状態への入力線と出力線を有する。また、埋込状態が、状態からの入力線を接続するための入力点と状態への出力線を接続するための出力点を有する。上記設定部は、入力線とユーザによって選択された埋込状態の入力線が接続されることに応答して、該入力線が接続された埋込状態をアクティブに設定し、一方選択されなかった埋込状態をインアクティブに設定する。
【００４６】
本発明の１つの実施態様では、ユーザが、フラグを用いて状態のアクティブ及びインアクティブを切り替えることができる。状態がアクティブに設定された場合、状態はコンパイル対象になる。状態がインアクティブに設定された場合、状態はコンパイル対象ではない。該切り替えの機能は、例えば、状態のプロパティに項目「フラグ」を追加することによって実装してもよいし、或いは、状態を選択した際に、チェックボックスを表示してアクティブ／インアクティブを切り替えるように実装してもよい。フラグを付した場合をアクティブとし、フラグを付さない場合をインアクティブとするか、或いは、フラグを付した場合をインアクティブとし、フラグを付さない場合をアクティブとするかは、任意である。
実装の一例として、状態をインアクティブにするためのフラグが付された場合、コンピュータ・システムは、該状態のソースコードをコメント文に変更する。状態をインアクティブにするためのフラグが外された場合、コンピュータ・システムは、該状態のソースコードのうちコメント文に変更された個所からコメントを外すといった実装が考えられうる。
【００４７】
状態がアクティブである場合と、状態がインアクティブである場合とは、区別して表示されうる。例えばインアクティブにされた状態は、グレイ表示又は破線表示などで表されうるがこれらに限定されない。コンピュータ・システムは、状態がインアクティブである場合、外見的には、該状態へ入力する遷移線及び該状態から出力する遷移線を上記区別に対応するように表示装置上で再表示する。内部的には、該状態へ入力する遷移線に対応する表と該状態から出力する遷移線に対応する表との間のリンクを用いて、表の関係の再構築が行われうる。該リンクは、遷移線のリンク・テーブルによって設定されうる。
【００４８】
以下、図面に従って、本発明の実施態様を説明する。本実施態様は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断らない限り、同一符号は、同一の対象を指す。
【００４９】
図２Ａは、状態遷移図の例を示す。
状態遷移図（２０１）は、状態と遷移線を含み、状態を遷移線で結ぶことにより、ある状態からある状態への遷移を表した図である。状態は、Ｓ１〜Ｓ４で示される。状態は、プログラム上の任意の処理のまとまりを表す。遷移線は、ｔ０、ｔ１−２、ｔ１−３、ｔ２、ｔ３で示される。遷移線（ｔ０、ｔ１−２、ｔ１−３、ｔ２、ｔ３）は、状態（Ｓ１〜Ｓ４）間の遷移を表す。
【００５０】
図２Ｂは、図２Ａの状態遷移図（２０１）に対応するプロパティの例を示す。
プロパティは、状態（Ｓ１〜Ｓ４）及び遷移線（ｔ０、ｔ１−２、ｔ１−３、ｔ２、ｔ３）のそれぞれに付加された情報を示す。
表（２１１、２１２）は、遷移線（ｔ１−２、ｔ１−３）のプロパティの例である。表（２１１）が、遷移線（ｔ１−２）に対応する。また、表（２１２）が、遷移線（ｔ１−３）に対応する。以下、表（２１１）を例として各行について説明する。１行目の「名前」は、遷移線に割り当てられた名前を示す。該例では、遷移線（ｔ１−２）の名前が、ｔ１−２であることを示す。２行目の「トリガー」は、状態が移るためのイベントの名前を示す。該例は、イベント１２が発生したとき、状態（Ｓ１）から状態（Ｓ２）に遷移線（ｔ１−２）を通って状態が遷移することを示す。３行目の「アクション」は、遷移線を通過する時に必ず実行されるコードを示す。「アクション」の例である「プログラム・コード」は、実装ではユーザが任意に記述した実際のコードである。４行目の「ソース」は、遷移線の始点の状態の名前を示す。該例では、遷移線（ｔ１−２）の始点の状態は、状態（Ｓ１）であることを示す。５行目の「ターゲット」は、遷移線の終点の状態の名前を示す。該例では、遷移線（ｔ１−２）の終点の状態は、状態（Ｓ２）であることを示す。
表（２１３、２１４）は、状態（Ｓ１、Ｓ２）のプロパティの例である。表（２１３）が、状態（Ｓ１）に対応する。また、表（２１４）が、状態（Ｓ２）に対応する。以下、表（２１３）を例として各行について説明する。１行目の「名前」は、状態に割り振られた名前を示す。該例では、状態（Ｓ１）の名前が、Ｓ１であることを示す。２行目の「エントリー・アクション」は、その状態に入るときに必ず実行されるコードを示す。「エントリー・アクション」の例である「プログラム・コード」は、実装ではユーザが任意に記述した実際のコードである。該コードは、１つの状態に１つしか定義できない。入力の遷移線が複数ある場合においても、１つの同じコードが実行される。３行目の「エグジット・アクション」は、その状態から出るときに必ず実行されるコードを示す。「エントリー・アクション」の例である「プログラム・コード」は、実装ではユーザが任意に記述した実際のコードである。該コードもまた、１つの状態に１つのコードしか定義できない。出力の遷移線が複数ある場合においても、１つの同じコードが実行される。４行目の「遷移」は、状態から出て行く遷移線の一覧を示す遷移線テーブル（２１５）と関連付けられる。
表（２１５、２１６）は、遷移線テーブルの例である。
遷移線テーブル（２１５、２１６）は、状態から出て行く遷移線の一覧を示す。遷移線テーブル（２１５）を例に説明する。遷移線テーブル（２１５）に設定されている遷移線は、ｔ１−２及びｔ１−３の２つである。これは、状態（Ｓ１）から出ている遷移線が、遷移線（ｔ１−２）及び遷移線（ｔ１−３）の２つであることを示す。
【００５１】
以下に、図２Ａ及び図２Ｂを使用して、制御が状態（Ｓ１）から状態（Ｓ２）に移る場合の処理の流れを説明する。「制御が状態から状態に移る」とは、状態（Ｓ１）から状態（Ｓ２）の遷移線（ｔ１−２）のプロパティである表（２１１）に示されるイベント１２が発生した場合のことである。上記処理で示される状態遷移は、該状態遷移図から作成されるソースコードがコンパイルされることによって、コンパイル後のプログラム・コードがコンピュータ・システムに下記処理を実行させることを意味する。イベント１２が発生することに応じて、コンピュータ・システムは、状態（Ｓ１）のプロパティである表（２１３）に示される「エグジット・アクション」の行に記載されたプログラム・コードを実行する。次に、コンピュータ・システムは、遷移線（ｔ１−２）のプロパティである表（２１１）に示される「アクション」の行に記載されたプログラム・コードを実行する。次に、コンピュータ・システムは、状態（Ｓ２）のプロパティである表（２１４）に示される「エントリー・アクション」の行に記載されたプログラム・コードを実行する。
【００５２】
図２Ｃは、カプセルの例を示す。
カプセル（２２１、２２２）それぞれは、その中に状態遷移を有する。図２Ｃの例では、カプセル（２２１）は、その中に状態遷移（２２６）を有する。カプセル間の通信は、カプセル間でイベント（シグナル）を送ることで行う。イベントのやり取りを行うカプセル同士（２２１、２２２）は、連結線（２２３）で結ばれる。ここで、１つの接続線には１つのプロトコルしか許されない。該プロトコルは、イベントのデータ定義を指す。イベントは例えば、状態遷移のアクション・コードからポートを指定して送られうる。状態遷移のアクション・コードとは、プロパティの「アクション」、「エントリー・アクション」及び「エグジット・アクション」に設定されたコードのことをいう。カプセル（２２１、２２２）と連結線（２２３）の接続点をポート（２２４、２２５）という。ポート（２２４、２２５）には、Ｂａｓｅポート（２２４）及びＣｏｎｊｕｇａｔｅポート（２２５）がある。Ｂａｓｅポート（２２４）は例えば、黒塗りのポートで表示される。Ｃｏｎｊｕｇａｔｅポート（２２５）は例えば、白抜きのポートで表示される。Ｂａｓｅポート及びＣｏｎｊｕｇａｔｅポートは、主従の関係を表すが、イベントを送る方向は規定していない。イベントは、ＢａｓｅポートからＣｏｎｊｕｇａｔｅポートの方向、及びＣｏｎｊｕｇａｔｅポートからＢａｓｅポートの方向の双方に送られうる。また、１つのカプセルは、複数のポートを有しうる。プログラムの実行時に、カプセル（２２１、２２２）は並列に実行されうる。並列は、例えば１カプセルに１スレッドを割り当てる方法で実装されうる。
【００５３】
図２Ｄは、イベントによる状態の遷移の例を示す。
以下の例では、カプセル（２３１Ａ）は、状態遷移（２３１Ｂ）を有する。カプセル（２３２Ａ）は、状態遷移（２３２Ｂ）を有する。状態遷移（２３１Ｂ）におけるアクション（２３３）は、カプセル（２３１Ａ）が動くと最初に実行されるアクションである。
また、以下の例では、コンピュータ・システムがカプセル（２３１Ａ）内の制御を状態（Ｓ１１）から状態（Ｓ１２）に遷移すると同時に、カプセル（２３２Ａ）内の制御を状態（Ｓ２１）から状態（Ｓ２２）に遷移する。カプセル（２３１Ａ）内の制御は、状態（Ｓ１１）から状態（Ｓ１２）に遷移する直前であり、カプセル（２３２Ａ）内の制御は状態（Ｓ２１）にあるとする。状態（Ｓ１１）から状態（Ｓ１２）への遷移はまた別のカプセルからイベントを受け取ったために発生したものである（図示せず）。
状態（Ｓ１１）から状態（Ｓ１２）に遷移するアクション（２３５）が発生すると、コンピュータ・システムは、Ｂａｓｅポート（２３４）に対してイベントを上げる。次に、コンピュータ・システムは、イベント（２３６）をカプセル（２３１Ａ）のＢａｓｅポート（２３４）からカプセル（２３２Ａ）のＣｏｎｊｕｇａｔｅポートに渡す。コンピュータ・システムは、カプセル（２３２Ａ）がイベント（２３６）を受け取ったことで、カプセル（２３２Ａ）において、状態（Ｓ２１）から状態（Ｓ２２）に遷移（２３７）する処理を行う。
【００５４】
図２Ｅは、キーボード・イベントを取得する例を示す。
以下の例では、キーボード・イベントを取得するために、キーボード・イベントがＲｏｓｅＲＴのイベントに変換される。キーボード・イベントとＲｏｓｅＲＴのイベントとは異なるので、イベントの変換が必要である。カプセル（２４１）はその変換のために存在しているカプセルとする。また、カプセル（２４２Ａ）は、その中に状態遷移（２４２Ｂ）を有する。
また、以下の例では、状態（Ｓ１）から状態（Ｓ２）に遷移するためにキーボードからの入力が必要な場合についてのものである。
コンピュータ・システムは、キーボード・ドライバ（２４３）を用いて、キーボード・イベント（２４４）をカプセル（２４１）にプロセス間通信を介して上げる。次に、コンピュータ・システムは、カプセル（２４１）において、キーボード・イベント（２４４）をＲｏｓｅＲＴのイベント（２４５）に変換する。次に、コンピュータ・システムは、変換されたＲｏｓｅＲＴのイベント（２４５）をカプセル（２４２Ａ）に渡す。コンピュータ・システムは、カプセル（２４２Ａ）にＲｏｓｅＲＴのイベント（２４５）を渡されたことで、カプセル（２４２Ａ）において、状態（Ｓ１）から状態（Ｓ２）に遷移（２４６）する処理を行う。
【００５５】
図３Ａは、本発明の実施態様である、Ｔｈｒｏｕｇｈ−ａｂｌｅ状態の表示の例を示す。
状態遷移（３０１）は、代表的には、状態（３０２）と、該状態（３０２）への入力である入力遷移線（３０３）と、該状態（３０２）からの出力である出力遷移線（３０４）とを含む。また、状態（３０２）は例えば、条件式として「Ｔｙｐｅ  ｉｎ  （Ａ１）」を関連付けられている。
条件式の結果が真であるとき、制御は状態（３０２）に止まる。状態遷移（３０５）は、型  Ａ１が有効になった場合、すなわち条件式の結果が真であるときの表示例である。条件式は、状態（３０６）の近傍に表示されうる。図３Ａでは、状態（３０６）の右上に表示されている。条件式の結果が真であるので、状態（３０６）はアクティブとなり、実線で表示される。また、入力遷移線と出力遷移線とを結ぶリンク（３０７）はインアクティブとなり、破線で表示される。
条件式の結果が偽であるとき、制御は状態（３０２）に止まらずに、該状態（３０２）を通過する。状態遷移（３０８）は、型としてＡ１以外が指定された場合、すなわち条件式の結果が偽であるときの表示例である。条件式は、状態（３０９）の近傍に表示されうる。図３Ａでは、状態（３０９）の右上に表示されている。条件式のうち型を示す「Ａ１」の部分は、グレイで表示される（図では、グレイで表示される文字が便宜上、斜体で表示されている。以下同じ）。グレイ表示は、型が無効であることを示す。状態（３０９）はインアクティブとなり、破線で囲われ且つグレイで表示される。入力遷移線と出力遷移線とを結ぶリンク（３１０）はアクティブとなり、上記遷移線と結合されて実線で表示される。
条件式の真偽は、コンパイル時にスタティックに決定される。
【００５６】
図３Ｂは、本発明の実施態様である、パラレル状態の表示の例を示す。
状態遷移（３１１）は、状態（３１２Ａ）と、該状態（３１２Ａ）への入力である入力遷移線（３１３）と、該状態（３１２Ａ）からの出力である出力遷移線（３１４）とを含む。状態（３１２Ｂ）は、状態（３１２Ａ）の内部を表す。状態（３１２Ａ）は、その中に選択対象の埋込状態（３１５、３１６）を有する（以下、該選択対象の状態を埋込状態という）。埋込状態（３１５）は、条件式として「Ｔｙｐｅ  ｉｎ  （Ａ，Ｂ）」を関連付けられている。埋込状態（３１６）は、条件式として「ＯＴＨＥＲＳ」を関連付けられている。また、型としてＡが有効であるとする。
埋込状態（３１５）の条件式は真である。条件式は、埋込状態（３１５）の近傍に表示されうる。条件式のうち型を示す「Ａ、Ｂ」の「Ｂ」の部分は、グレイで表示される。グレイ表示は、型が無効であることを示す。埋込状態（３１５）はアクティブとなり、実線で表示される。入力遷移線（３１３）からの入力は、埋込状態（３１５）に接続される。出力遷移線（３１４）への出力は、埋込状態（３１５）に接続される。
埋込状態（３１６）の条件式は偽である。条件式は、埋込状態（３１６）の近傍に表示されうる。条件式の「ＯＴＨＥＲＳ」は、グレイ表示になる。グレイ表示は、型が無効であることを示す。埋込状態（３１６）はインアクティブとなり、及び破線で囲われ且つグレイで表示される。
【００５７】
図３Ｃは、本発明の実施態様である、ユーザ・インタフェースの例を示す。
ウィンドウ（３２１）は、状態に条件式を設定することをユーザに可能にするための入力欄を有する。ウィンドウ（３２１）は、該状態をＴｈｒｏｕｇｈ−ａｂｌｅ状態にすることを可能にする。該状態は、例えば図３Ａを参照されたい。
ウィンドウ（３２２）は、複数の埋込状態から１つの埋込状態を選択する条件式を設定することをユーザに可能にする。該埋込状態は、例えば図３Ｂを参照されたい。
【００５８】
図４Ａ〜図４Ｄは、本発明の実施態様である、状態をＴｈｒｏｕｇｈ−ａｂｌｅ状態にした場合の例を示す。また、図４Ｅ及び図４Ｆは、本発明の実施態様である、状態をパラレル状態にした場合の例を示す。
【００５９】
以下に、図４Ａについて説明する。
状態遷移（４０１）は、複数の入力が１つの出力になる例である。状態遷移（４０２、４０３）は、状態遷移（４０１）の状態をＴｈｒｏｕｇｈ−ａｂｌｅ状態で表す例である。状態遷移（４０２）は、状態がアクティブである。該状態は、実線で表示される。状態の２つの入力は、ともに１つの出力と結ばれ、破線で表示される。状態遷移（４０３）は、状態がインアクティブである。該状態は、破線で囲われ且つグレイで表示される。状態の２つの入力は、ともに１つの出力と結ばれ、且つ実線で表示される。
【００６０】
以下に、図４Ｂについて説明する。
状態遷移（４１１）は、複数の入力のうちのある入力が必要のない例である。状態遷移（４１２、４１３）は、状態遷移（４１１）の状態をＴｈｒｏｕｇｈ−ａｂｌｅ状態で表す例である。状態遷移（４１２）は、状態がアクティブである。該状態は、実線で表示される。状態の２つの入力のうち上方からの入力は、出力と結ばれて破線で表示される。状態の２つの入力のうち左からの入力は、出力とは結ばれない。状態遷移（４１３）は、状態がインアクティブである。該状態は、破線で囲われ且つグレイで表示される。状態の２つの入力のうち上方からの入力は、出力と結ばれて実線で表示される。状態の２つの入力のうち左からの入力は、破線で表示され且つグレイで表示される。状態遷移（４１３）において、ユーザは、破線で表示され且つグレイで表示された左からの入力が本当に必要ないか確認する必要がある。
【００６１】
以下に、図４Ｃについて説明する。
状態遷移（４２１）は、複数の出力のうちのある出力が必要のない例である。状態遷移（４２２、４２３）は、状態をＴｈｒｏｕｇｈ−ａｂｌｅ状態で表す例である。状態遷移（４２２）は、状態がアクティブである。該状態は、実線で表示される。状態の２つの出力のうち下方への出力は、入力と結ばれて破線で表示される。状態の２つの出力のうち左への出力は、入力とは結ばれない。状態遷移（４２３）は、状態がインアクティブである。該状態は、破線で囲われ且つグレイで表示される。状態の２つの出力のうち下方への出力は、入力と結ばれて実線で表示される。状態の２つの出力のうち左への出力は、破線で表示され且つグレイで表示される。
【００６２】
以下に、図４Ｄについて説明する。
状態遷移（４３１）は、複数の出力を有する場合の例である。状態遷移（４３４、４３７）は、状態遷移（４３１）をＴｈｒｏｕｇｈ−ａｂｌｅ状態を用いた状態遷移で表す例である。
状態遷移（４３４）は、状態（４３２）及び状態（４３３）を有する。状態遷移（４３４）の状態（４３２）は、状態遷移（４３１）の状態に対応する。状態（４３２）はアクティブであり、実線で表示される。状態（４３２）の２つの出力は、実線で表示される。状態（４３３）はインアクティブであり、破線で表示され且つグレイで表示される。状態（４３３）の２つの出力のうち下方への出力は、入力と結ばれ、実線で表示される。状態（４３３）の２つの出力のうち左への出力は、破線で表示され且つグレイで表示される。これによって、状態遷移（４３４）は、状態遷移（４３１）の状態がアクティブであるときと同じ動作をする。
状態遷移（４３７）は、状態（４３５）及び状態（４３６）を有する。状態遷移（４３７）の状態（４３５）は、状態遷移（４３１）の状態に対応する。状態（４３５）はインアクティブであり、破線で囲われ且つグレイで表示される。状態（４３５）の２つの出力のうち下方への出力は、入力と結ばれ、実線で表示される。状態（４３５）の２つの出力のうち左への出力は、破線で表示され且つグレイで表示される。状態（４３６）はアクティブであり、実線で表示される。状態（４３６）の２つの出力は、実線で表示される。これによって、状態遷移（４３７）は、左方向への出力を残しつつ状態遷移（４３１）の状態がインアクティブであるときと同じ動作をする。
複数の出力がある状態について、１つの出力を該状態がインアクティブであるときの出力とし、他方の出力をそのまま使用したい場合においても、本発明の上記実施態様によると、上記で示した状態遷移図（４３４、４３７）への書き換えが容易である。
【００６３】
以下に、図４Ｅについて説明する。
状態遷移（４４１）は、パラレル状態が、２つの入力及び２つの出力を有する例である。状態（４４２）は、状態遷移（４４１）に含まれる状態の内部を表す。状態（４４２）は、埋込状態（４４３）及び埋込状態（４４４）を含む。埋込状態（４４３）は、条件式として「Ｔｙｐｅ  ｉｎ  （Ａ，Ｂ）」を関連付けられている。埋込状態（４４４）は、条件式として「ＯＴＨＥＲＳ」を関連付けられている。状態（４４２）は、型としてＡが有効である。埋込状態（４４３）は、実線で表示される。埋込状態（４４３）の条件式の表示のうち「Ｂ」は、グレイで表示される。状態（４４２）の２つの入力は、埋込状態（４４３）の２つ入力となる。埋込状態（４４３）の２つの出力は、状態（４４２）の２つ出力となる。埋込状態（４４４）はインアクティブであり、破線で囲われ且つグレイで表示される。埋込状態（４４４）の条件式は、グレイで表示される。
【００６４】
以下に、図４Ｆについて説明する。
状態遷移（４５１）に含まれる状態は、パラレル状態の内部に３つの埋込状態（４５３、４５４、４５５）を有する例である。状態（４５２）は、状態遷移（４５１）に含まれる状態の内部を表す。埋込状態（４５３）は、条件式として「Ｔｙｐｅ  ｉｎ  （Ａ，Ｂ）」を関連付けられている。埋込状態（４５４）は、条件式として「Ｔｙｐｅ  ｉｎ  （Ｃ）」を関連付けられている。埋込状態（４５５）は、条件式として「ＯＴＨＥＲＳ」を関連付けられている。状態（４５２）は、型としてＡが与えられている。埋込状態（４５３）は、実線で表示される。埋込状態（４５３）の条件式の表示のうち「Ｂ」は、グレイで表示される。状態（４５２）の入力は、埋込状態（４５３）の入力となる。埋込状態（４５３）の出力は、状態（４５２）の出力となる。埋込状態（４５４）は、破線で囲われ且つグレイで表示される。埋込状態（４５４）の条件式の表示のうち「Ｃ」は、グレイで表示される。埋込状態（４５５）は、破線で囲われ且つグレイで表示される。埋込状態（４５５）の条件式は、グレイで表示される。
【００６５】
図５Ａは、本発明の実施態様である、Ｔｈｒｏｕｇｈ−ａｂｌｅ状態を実装した場合における状態遷移の表示の例を示す。
状態遷移（５０１Ａ、５０１Ｂ）は、図２Ａの状態遷移（２０１）に含まれる状態のうち、状態（Ｓ２）をＴｈｒｏｕｇｈ−ａｂｌｅ状態に変更したものである。状態（Ｓ２）に関連付けられた条件式は、「Ｔｙｐｅ  ｉｎ  （Ａ）」である。状態遷移（５０１Ａ）は、型としてＢが有効である。よって、状態（Ｓ２）はインアクティブであり、破線で囲われ且つグレイで表示される。また、条件式の表示のうち「Ａ」は、グレイで表示される。状態遷移（５０１Ｂ）は、型としてＡが有効である。よって、状態（Ｓ２）がアクティブであり、実線で表示される。
【００６６】
図５Ｂは、本発明の実施態様である、状態（Ｓ２）をＴｈｒｏｕｇｈ−ａｂｌｅ状態とした場合のプロパティを示す。
破線（５１４）で囲われた個所が、本発明の実施態様において追加される個所である。
表（５１１）５行目の「条件」は、状態に設定した条件式を表す。該例では、状態（Ｓ２）は、条件式として「Ｔｙｐｅ  ｉｎ  （Ａ）」を関連付けられている。６行目の「リンク」は、遷移線のリンク・テーブル（５１３）と関連付けられる。遷移線のリンク・テーブル（５１３）は、状態（Ｓ２）の入力遷移線（ｔ１−２）及び出力遷移線（ｔ２）の組を持つテーブルである。１列目の「入力遷移線」と２列目の「出力遷移線」に登録した遷移線が、リンクで結び付けられる。ここで、入力遷移線と出力遷移線の対応がユーザの判断によらず一意に求まる場合、コンピュータは自動で遷移線のリンク・テーブルにレコードを追加するといった実装も考えられうる。状態（Ｓ２）がインアクティブになった場合、入力遷移線と出力遷移線のリンクは実線の矢印で表示される。状態がアクティブになった場合、入力遷移線と出力遷移線のリンクは破線で表示される。よって、図５Ａの状態遷移（５０１Ａ）においては、入力遷移線（ｔ１−２）と出力遷移線（ｔ２）とを結ぶリンクが実線の矢印で表示される。状態遷移（５０１Ｂ）においては、入力遷移線（ｔ１−２）と出力遷移線（ｔ２）を結ぶリンクが破線で表示される。７行目の「状態」は、状態がパラレル状態である場合、状態テーブルと関連付けられる。状態テーブルについては後述する。該例では、状態がパラレル状態ではないので、状態テーブルと関連付けられない。よって、「状態」には、ヌル値（ＮＵＬＬ）が設定されている。
【００６７】
図５Ｃは、本発明の実施態様である、遷移線のリンクの例を示す。
状態遷移（５２１〜５２３）は、１つの状態（Ｓ１）と、該状態（Ｓ１）への入力遷移線と、該状態からの出力遷移線とを含む。状態遷移（５２１）は遷移線のリンク・テーブル（５２４）に対応する。状態遷移（５２２）は、遷移線のリンク・テーブル（５２５）に対応する。状態遷移（５２３）は、遷移線のリンク・テーブル（５２６）に対応する。
【００６８】
状態遷移（５２１）及び遷移線のリンク・テーブル（５２４）は、状態（Ｓ１）への入力遷移線（ｔ１−１、ｔ１−２）が２つ、状態（Ｓ１）からの出力遷移線（ｔ２−１、ｔ２−２）が２つある場合の例である。遷移線のリンク・テーブル（５２４）がないとした場合、コンピュータ・システムは、状態（Ｓ１）がインアクティブになったときに、入力遷移線（ｔ１−１、ｔ１−２）のそれぞれを出力遷移線（ｔ２−１、ｔ２−２）のどちらに結びつけて良いかを判断できない。そこで、ユーザは、遷移線のリンク・テーブル（５２４）に、入力遷移線と出力遷移線との組を設定する。
遷移線のリンク・テーブル（５２４）は、入力遷移線（ｔ１−１）と出力遷移線（ｔ２−１）とを結びつけており、及び入力遷移線（ｔ１−２）と出力遷移線（ｔ２−２）とを結びつけている。よって、状態遷移（５２１）では、入力遷移線（ｔ１−１）と出力遷移線（ｔ２−１）、及び、入力遷移線（ｔ１−２）と出力遷移線（ｔ２−２）が、それぞれ破線で結ばれている。
【００６９】
状態遷移（５２２）及び遷移線のリンク・テーブル（５２５）は、状態（Ｓ１）への入力遷移線（ｔ１−１、ｔ１−２）が２つ、状態（Ｓ１）からの出力遷移線（ｔ２）が１つある場合の例である。遷移線のリンク・テーブル（５２５）は、入力遷移線（ｔ１−１）と出力遷移線（ｔ２）とを結びつけており、及び入力遷移線（ｔ１−２）と出力遷移線（ｔ２）とを結びつけている。よって、状態遷移（５２２）では、２つの入力遷移線（ｔ１−１、ｔ１−２）がともに、１つの出力遷移線（ｔ２）と破線で結ばれている。
【００７０】
状態遷移（５２３）及び遷移線のリンク・テーブル（５２６）は、状態（Ｓ１）への入力遷移線（ｔ１−１、ｔ１−２）が２つ、状態（Ｓ１）からの出力遷移線（ｔ２）が１つある場合の例である。遷移線のリンク・テーブル（５２６）は、入力遷移線（ｔ１−１）と出力遷移線（ｔ２）とを結びつけている。しかし、遷移線のリンク・テーブル（５２６）は、入力遷移線（ｔ１−２）をどの出力遷移線とも結びつけていない。よって、状態遷移（５２３）では、入力遷移線（ｔ１−１）が出力遷移線（ｔ２）と破線で結ばれているが、入力遷移線（ｔ１−２）は状態（Ｓ１）に入力するのみである。
【００７１】
以下に、図５Ａ及び図５Ｂ並びに図２Ｂを用いて、制御が、状態（Ｓ１）、状態（Ｓ２）、状態（Ｓ４）の順で移る場合の処理の流れを説明する。
１．以下に、状態（Ｓ２）がインアクティブの場合を説明する。
コンピュータ・システムは、状態（Ｓ２）のプロパティの「リンク」の行を参照し、遷移線のリンク・テーブル（５１３）からリンクの情報を取得する。コンピュータ・システムは、該情報より入力遷移線（ｔ１−２）と出力遷移線（ｔ２）とをリンクで結ぶ。コンピュータ・システムは、状態（Ｓ２）のプロパティの「条件」の行に設定された条件式の結果が偽であるので、リンクを実線で表示する。状態（Ｓ１）のプロパティの「エグジット・アクション」の行に記載されたプログラム・コードは、コンパイルの対象になる。しかし、状態（Ｓ２）がインアクティブになっているので、状態（Ｓ２）のプロパティの「エントリー・アクション」の行に記載されたプログラム・コード及び「エグジット・アクション」の行に記載されたプログラム・コードはコンパイルの対象にならない。遷移線（ｔ１−２）のプロパティの「アクション」の行に記載されたプログラム・コードと遷移線（ｔ２）のプロパティの「アクション」の行に記載されたプログラム・コードのみがコンパイル対象となる。さらに、状態（Ｓ４）のプロパティの「エントリー・アクション」の行に記載されたプログラム・コードが、コンパイル対象となる。
２．以下に、状態（Ｓ２）がアクティブの場合を説明する。
コンピュータ・システムは、状態（Ｓ２）のプロパティの「リンク」の行を参照し、遷移線のリンク・テーブル（５１３）からリンクの情報を取得する。コンピュータ・システムは、該情報より入力遷移線（ｔ１−２）と出力遷移線（ｔ２）とをリンクで結ぶ。コンピュータ・システムは、状態（Ｓ２）のプロパティの「条件」の行に設定された条件式の結果が真であるので、リンクを破線で表示する。状態（Ｓ１）のプロパティの「エグジット・アクション」の行に記載されたプログラム・コードは、コンパイルの対象になる。さらに、状態（Ｓ２）がアクティブになっているため、状態（Ｓ２）のプロパティの「エントリー・アクション」及び「エグジット・アクション」の行に記載されたプログラム・コードがコンパイルの対象になる。遷移線（ｔ１−２）のプロパティの「アクション」の行に記載されたプログラム・コード、及び遷移線（ｔ２）のプロパティの「アクション」の行に記載されたプログラム・コード、並びに状態（Ｓ４）のプロパティの「エントリー・アクション」の行に記載されたプログラム・コードが、コンパイル対象となる。
【００７２】
図５Ｄは、本発明の実施態様である、パラレル状態を実装した場合における状態遷移の表示の例を示す。
状態遷移（５３１）は、１つの状態（Ｓ１）と、該状態（Ｓ１）への入力遷移線（ｔ０）と、該状態からの出力遷移線（ｔ１）とを含む。状態（Ｓ１）はパラレル状態とする。状態（５３２）は、状態（Ｓ１）の内部を表したものである。状態（５３２）は、内部に状態（Ｓ１−１、Ｓ１−２、Ｓ１−３）を持つ。状態（Ｓ１−１）に関連付けられた条件式は、「Ｔｙｐｅ  ｉｎ  （Ａ、Ｂ）」であるとする。状態（Ｓ１−２）に関連付けられた条件式は、「Ｔｙｐｅ  ｉｎ  （Ｃ）」であるとする。状態（Ｓ１−３）に関連付けられた条件式は、「ＯＴＨＥＲＳ」であるとする。型としてＡが有効であり、状態（Ｓ１−１）がアクティブであり、状態（Ｓ１−２、Ｓ１−３）がインアクティブであるとする。
該例では、状態（Ｓ１−１）は、実線で表示される。該例では、状態（Ｓ１−２、Ｓ１−３）は、破線で囲われ且つグレイで表示される。入力遷移線（ｔ０）は、状態（Ｓ１−１）の入力と結ばれる。出力遷移線（ｔ１）は、状態（Ｓ１−１）の出力と結ばれる。
【００７３】
図５Ｅは、本発明の実施態様である、状態（Ｓ１）をパラレル状態とした場合のプロパティを示す。
破線（５４４）で囲われた個所が、本発明の実施態様において追加される個所である。
表（５４１）５行目の「条件」は、状態に設定した条件式を表す。該例では、条件式として、真であることを意味する「ＴＲＵＥ」が設定されている。該例では、状態がＴｈｒｏｕｇｈ−ａｂｌｅ状態ではないので、遷移線のリンク・テーブルと関連付ける必要がない。よって、「リンク」には、ヌル値（ＮＵＬＬ）が設定されている。７行目の「状態」は、状態テーブル（５４３）と関連付けられる。状態テーブル（５４３）は、状態の名前と、該状態に関連付けられた条件式の組を持つテーブルである。「状態の名前」には、状態の名前が設定される。「条件」には、状態に関連付けられた条件式が設定される。状態テーブル（５４３）では、状態（Ｓ１−１、Ｓ１−２、Ｓ１−３）それぞれに対応する条件式が設定される。
パラレル状態（５３２）において、コンピュータ・システムは、指定された条件にあった状態だけをコンパイルする。該例では、型としてＡが有効であるので、状態（Ｓ１−1）のみがコンパイルの対象になり、残りの状態（Ｓ１−２、Ｓ１−３）はコンパイルの対象にならない。
【００７４】
図６Ａ〜図６Ｅでは、本発明の実施態様である状態遷移図を従来技術の状態遷移図と比較して説明する。
【実施例１】
【００７５】
図６Ａは、本発明の実施態様である、Ａ２及びＡ３という型をサポートする状態を追加する場合の例を示す。
図６Ａの例では、カプセル（６０１）に、Ａ２及びＡ３という型をサポートする状態を追加する。
カプセル（６０１）は、Ａ２及びＡ３という型をサポートする状態を追加する前の状態遷移図を示す。カプセル（６０２）は、従来技術を用いてＡ２及びＡ３という型をサポートする状態の追加を行った場合の状態遷移図を示す。一方、カプセル（６０３）は、本発明の実施態様である、Ａ２及びＡ３という型をサポートする状態の追加を行った場合の状態遷移図を示す。
従来技術を用いた場合では、カプセル（６０２）の破線で囲われた個所の追加が必要になる。従来技術を用いた場合は、状態（ｄｏ＿Ａ２＿Ａ３）を追加することに加えて、型がＡ２及びＡ３であることを判定し、状態（ｄｏ＿Ａ２＿Ａ３）を選択するための分岐処理の追加がまた必要である。さらに、従来技術を用いた場合は、状態（ｒｕｎｎｉｎｇ）への入力遷移線が増やされる必要がある。そのために、状態遷移図は、複雑な構造になる。
これに対して、本発明の実施態様では、修正は、Ａ２及びＡ３という型をサポートするＴｈｒｏｕｇｈ−ａｂｌｅ状態を１つ追加するだけである。従って、本発明の実施態様である状態遷移図は、単純な構造である。さらに、本発明の実施態様では、状態及び遷移線は、型の有効・無効に合わせて適した表示に切り替わるので、状態遷移図の可読性がよい。さらに、Ａ２及びＡ３が無効の場合、無効である状態はコンパイル対象にならないので、コンパイルで生成されるコードを含むファイルのサイズが小さくなる。
【実施例２】
【００７６】
図６Ｂは、本発明の実施態様である、Ｂ２という型をサポートする場合の例を示す。
該サポートに伴い、Ａ１、Ｂ１という型に共通の機能を与えていた状態（ｄｏ＿Ａ１＿Ｂ１）から、Ｂ２という型に必要な機能を切り出す必要があるとする。また、該切り出した機能は、Ａ１という型には必要ない機能であり、Ｂ１という型とは共通の機能であるとする。
カプセル（６１１）は、Ｂ２という型をサポートする前の状態遷移図を示す。カプセル（６１２）は、従来技術を用いて修正を行った場合の状態遷移図を示す。カプセル（６１３）は、本発明の実施態様である、Ｂ２という型をサポートする修正を行った場合の状態遷移図を示す。なお、状態遷移（６１２、６１３）において、Ａ１、Ｂ１という型に共通の機能を与えていた状態からＢ２という型に必要な機能が切り出された状態を、状態（ｄｏ＿Ａ１＿Ｂ１）とする。
従来技術を用いた場合では、状態（ｄｏ＿Ａ１＿Ｂ１）及び状態（ｄｏ＿Ｂ１＿Ｂ２）を選択するための分岐処理が複数必要であるので、状態遷移図（６１２）は遷移線の入り組んだ複雑な構造になる。
これに対して、本発明の実施態様では、従来技術と共通の対応である機能を切り出す対応を除けば、切り出し元の状態（ｄｏ＿Ａ１＿Ｂ１）及び切り出した状態（ｄｏ＿Ｂ１＿Ｂ２）をＴｈｒｏｕｇｈ−ａｂｌｅ状態に変更するだけである。従って、本発明の実施態様では、状態遷移図は、単純な直列の状態遷移で表すことができる。さらに、本発明の実施態様では、状態及び遷移線は、型の有効・無効に合わせて適した表示に切り替わるので、状態遷移図の可読性がよい。さらに、型が無効の場合、対応する状態がコンパイル対象にならないので、コンパイルで生成されるコードを含むファイルのサイズが小さくなる。
【実施例３】
【００７７】
図６Ｃ〜図６Ｅは、従来技術を用いて作成された複雑な構造の状態遷移図に対して修正を行う、本発明の実施態様に従う例を示す。
カプセル（６２１）は、従来技術を用いて作成された複雑な構造の状態遷移図を示す。また、カプセル（６２１）の破線（６２４Ａ、６２３Ａ）で囲われた個所は、修正対象の状態遷移を示す。カプセル（６２２）は、本発明の実施態様である状態遷移図を示す。
状態遷移（６２３Ｂ）は、破線（６２３Ａ）で囲われた個所を拡大して表示したものである。状態遷移（６２３Ｂ）には、状態（ｃｈｅｃｋ１、ｃｈｅｃｋ２）を型に応じて選択するための分岐処理が複数存在している。該分岐処理は、状態遷移（６２３Ｂ）を入り組んだ複雑なものにしている。本発明の実施態様では、状態（ｃｈｅｃｋ１、ｃｈｅｃｋ２）を型に応じて選択するための分岐が、状態の有する条件式で表すことができる。よって、状態（ｃｈｅｃｋ１、ｃｈｅｃｋ２）をＴｈｒｏｕｇｈ−ａｂｌｅ状態に変更し、型に応じて選択するための条件式を持たせることで、状態遷移（６２３Ｂ）は、状態遷移（６２３Ｃ）に示すように可読性に優れた単純な構造に変更される。
状態遷移（６２４Ｂ）は、破線（６２４Ａ）で囲われた個所をして表示したものである。状態遷移（６２４Ｂ）には、各状態（ｃｈｅｃｋ４〜６）を型に応じて選択するための分岐処理が複数存在している。該分岐処理は、状態遷移（６２４Ｂ）を入り組んだ複雑なものにしている。また、状態（ｃｈｅｃｋ６）が入力を２つ持っていることも、状態遷移（６２４Ｂ）を複雑なものにしている。本発明の実施態様では、状態（ｃｈｅｃｋ４〜６）を型に応じて選択するための分岐が、状態の有する条件式で表すことができる。よって、状態（ｃｈｅｃｋ４、ｃｈｅｃｋ５）をＴｈｒｏｕｇｈ−ａｂｌｅ状態に変更し、型に応じて選択するための条件式を持たせることで、状態遷移（６２４Ｂ）の構造は単純になる。また、本発明の実施態様では、状態（ｃｈｅｃｋ６）をパラレル状態（６２４Ｄ）に変更し、埋込状態（ｃｈｅｃｋ６＿１、ｃｈｅｃｋ６＿２）の条件式に、型に応じて選択するための条件式を持たせることで、状態（ｃｈｅｃｋ６）の入力は１つに共通化できる。該共通化により、状態遷移（６２４Ｂ）の構造は、さらに単純なものになる。よって、本発明の実施態様では、状態遷移（６２４Ｂ）は、状態遷移（６２４Ｃ）に示されるように可読性に優れた単純な構造に変更される。
以上の結果より、カプセル（６２１）は、上記修正を行うことにより、可読性に優れた単純な構造のカプセル（６２２）になる。さらに、本発明の実施態様では、カプセルに含まれる状態及び遷移線は、型の有効・無効に合わせて適した表示に切り替わるので、状態遷移図の可読性がよい。しかも、型が無効の場合は、対応する状態がコンパイル対象にならないので、コンパイルで生成されるコードを含むファイルのサイズが小さくなる。
【００７８】
図７は、本発明の実施態様である、システム構成の例を示す。
破線（７０８）で囲われた範囲は、本発明の実施態様であるコンピュータ・システムを示す。表示部（７０１）は、ユーザが状態遷移図の編集を行うために、状態遷移図を表示する装置である。入力部（７０４）は、ユーザが状態遷移図を編集する為に入力を行う装置である。該入力は、表示部（７０１）に表示された状態遷移図に反映される。設定部（７０５）は、状態をアクティブ設定し、又はインアクティブに設定する。該設定部は、状態が選択対象であることをコンパイラーに示すためのフラグを該状態に付与するフラグ付与部（図示せず）を含む。設定部（７０５）の機能は、入力部（７０４）のもつ機能の１つである。
記憶装置（７０２）は、状態遷移図を保存する装置である。既存の状態遷移図は、記憶装置（７０２）から読み出すことができる。該読み出した状態遷移図は、表示部（７０１）に表示される。
ライブラリ（７０３）は、状態遷移図を構成する各部品のコード、修正した各部品のコード、及び各部品の雛型のコードを保存する装置である。ここで部品とは、状態遷移図、状態及び遷移線を含む。部品のコードは、ライブラリ（７０３）から読み出すことができる。ライブラリ（７０３）は、記憶装置（７０２）と同じ装置とすることもできる。
コンパイラー（７０６）は、記憶装置（７０２）及びライブラリ（７０３）に保存された状態遷移図及び部品のコードを使用して、出力ファイル（７０７）を生成する。コンパイラー（７０６）は、出力ファイル（７０７）の生成時に、状態遷移図に基づくソースコードのうち、設定部（７０５）によってインアクティブに設定された状態に関連付けられた１以上のコードを出力ファイル（７０７）に含まれるコードの対象から外すことができる。また、コンパイラー（７０６）は、本発明の実施態様のコンピュータ・システムに含めてもよく、或いは別途のコンピュータ・システムに含めてもよい。
【００７９】
図８は、本発明の実施態様である、型を用いた開発の例を示す。
仕向け地Ａ社（８０１）、Ｂ社（８０２）、Ｃ社（８０３）の各仕向け地用のプログラムを開発する場合において、状態遷移図（８０７）の基本骨格は共通するが、それぞれの仕向け地用にそれぞれの処理を用意する必要があるとする。本発明の実施態様では、各仕向け地向けに型が定義される。図８の例では、Ａ社（８０１）向けの型がＡと定義され、Ｂ社（８０２）向けの型がＢと定義され、Ｃ社（８０３）向けの型がＣと定義される。ユーザは、各仕向け地に対応する型を指定することにより、開発するプログラムがどの仕向け地向けに開発されているのかを識別することができる。ユーザが状態（Ｓ１〜Ｓ３）を設計するときに、条件式を入力するポップアップ画面が表示される。ユーザは、状態（Ｓ１〜Ｓ３）が、どの仕向け地向けの処理を有するのかを型を用いてポップアップ画面の所定の入力欄に入力することができる。状態遷移図（８０７）は、ユーザが状態（Ｓ１〜Ｓ３）に、どの仕向け地向けの処理を有するのかを型を用いて入力した例を示す。状態（Ｓ１）には、条件式「Ｔｙｐｅ  ｉｎ  （Ａ，Ｂ）」が設定されている。これは、状態（Ｓ１）が、Ａ社及びＢ社向けの処理を有することを示す。状態（Ｓ２）には、条件式「Ｔｙｐｅ  ｉｎ  （Ａ，Ｂ，Ｃ）」が設定されている。これは、状態（Ｓ２）が、Ａ〜Ｃ社向けの処理を有することを示す。ただし、状態（Ｓ２）は埋込状態（Ｓ２−１、Ｓ２−２、Ｓ２−３）を持ち、該埋込状態は、Ａ〜Ｃ社それぞれに対応付けられているので、結局状態（Ｓ２）は、各社向けにカスタマイズされた処理を有する状態を示す。ここで、Ｓ２−３は、ＯＴＨＥＲＳに相当する。状態（Ｓ３）には、条件式「Ｔｙｐｅ  ｉｎ  （Ａ，Ｃ）」が設定されている。これは、状態（Ｓ３）が、Ａ社及びＣ社向けの処理を有することを示す。
条件式が設定されている状態を有する状態遷移図（８０７）において、ユーザは型を指定することにより、状態遷移図（８０７）の表示を該型に対応する仕向け地向けの設計に適した表示に切り替えることができる。またユーザは、該型に対応する仕向け地向けのプログラム・コードのみをコンパイルの対象とすることができる。
以下に、Ａ社向けの設計を進める場合を説明する。
最初に、ユーザは、型Ａを指定する。該指定によって、型Ａは有効になり、型Ａ以外の型は無効になる。型Ａを指定している条件式を有する状態（Ｓ１〜Ｓ３、Ｓ２−１）の表示は、ユーザがＡ社向けの設計を進めやすい表示に切り替わる。該状態（Ｓ１〜Ｓ３、Ｓ２−１）はアクティブになるので、該アクティブの状態は、実線で囲われて表示される。該アクティブの状態に接続されている遷移線についても、ユーザがＡ社向けの設計を進めやすい表示に切り替わる。型Ａを指定していない条件式をもつ状態（Ｓ２−２、Ｓ２−３）の表示は、ユーザがＡ社向けの設計を進める上で邪魔にならない表示に切り替わる。該状態（Ｓ２−２、Ｓ２−３）はインアクティブになるので、該インアクティブの状態は、破線で囲われ且つグレイで表示される。該インアクティブの状態に接続されている遷移線についても、ユーザがＡ社向けの設計を進めやすい表示に切り替わる。
次に、型Ａが指定された状態でコンパイルが実行されると、Ａ社向けのバイナリファイル（８０４）が生成される。該バイナリファイルには、状態（Ｓ２-２、Ｓ２−３）に含まれるプログラム・コード分の処理が含まれない。
次に、Ｂ社向けの設計を進める場合を説明する。
最初に、ユーザは、型Ｂを指定する。該指定によって、型Ｂは有効になり、型Ｂ以外の型は無効になる。型Ｂを指定している条件式を有する状態（Ｓ１、Ｓ２、Ｓ２−２）の表示は、ユーザがＢ社向けの設計を進めやすい表示に切り替わる。該状態（Ｓ１、Ｓ２、Ｓ２−２）はアクティブになるので、該アクティブの状態は、実線で囲われて表示される。該状態に接続されている遷移線についても、ユーザがＢ社向けの設計を進めやすい表示に切り替わる。型Ｂを指定していない条件式をもつ状態（Ｓ３、Ｓ２−１、Ｓ２−３）の表示は、ユーザがＢ社向けの設計を進める上で邪魔にならない表示に切り替わる。該状態（Ｓ３、Ｓ２−１、Ｓ２−３）はインアクティブになるので、該インアクティブの状態は、破線で囲われ且つグレイで表示される。該状態に接続されている遷移線についても、ユーザがＢ社向けの設計を進めやすい表示に切り替わる。
次に、型Ｂが指定された状態でコンパイルが実行されると、Ｂ社向けのバイナリファイル（８０５）が生成される。該バイナリファイルには、状態（Ｓ３、Ｓ２−１、Ｓ２−３）に含まれるプログラム・コード分の処理が含まれない。
次に、Ｃ社向けの設計を進める場合を説明する。
最初に、ユーザは、型Ｃを指定する。該指定によって、型Ｃは有効になり、型Ｃ以外の型は無効になる。型Ｃを指定している又は、型Ａ、ＢのＯＴＨＥＲＳである条件式を有する状態（Ｓ２、Ｓ３、Ｓ２−３）の表示は、ユーザがＣ社向けの設計を進めやすい表示に切り替わる。該状態（Ｓ２、Ｓ３、Ｓ２−３）はアクティブになるので、該アクティブの状態は、実線で囲われて表示される。該状態に接続されている遷移線についても、ユーザがＣ社向けの設計を進めやすい表示に切り替わる。型Ｃを指定していない条件式をもつ状態（Ｓ１、Ｓ２−１、Ｓ２−２）の表示は、ユーザがＣ社向けの設計を進める上で邪魔にならない表示に切り替わる。該状態（Ｓ１、Ｓ２−１、Ｓ２−２）はインアクティブになるので、該インアクティブの状態は、破線で囲われ且つグレイで表示される。該状態に接続されている遷移線についても、ユーザがＣ社向けの設計を進めやすい表示に切り替わる。
次に、型Ｃが指定された状態でコンパイルが実行されると、Ｃ社向けのバイナリファイル（８０６）が生成される。該バイナリファイルには、状態（Ｓ１、Ｓ２−１、Ｓ２−２）に含まれるプログラム・コード分の処理が含まれない。
【００８０】
本発明の実施態様において、コンピュータ・システムは、少なくとも１のコンピュータから構成される。本発明の実施態様のコンピュータは、ＣＰＵとメイン・メモリと含み、これらはバスに接続されている。ＣＰＵは好ましくは、３２ビットまたは６４ビットのアーキテクチャに基づくものであり、例えば、インテル社のＸｅｏｎ（商標）シリーズ、Ｃｏｒｅ（商標）シリーズ、Ｐｅｎｔｉｕｍ（商標）シリーズ、Ｃｅｌｅｒｏｎ（商標）シリーズ、ＡＭＤ社のＰｈｅｎｏｍ（商標）シリーズ、Ａｔｈｌｏｎ（商標）シリーズなどを使用することができる。バスには、ディスプレイ・コントローラを介して、ＬＣＤモニタなどのディスプレイが接続される。ディスプレイは、コンピュータ・システムの管理のために、通信回線を介してネットワークに接続されたコンピュータについての情報と、そのコンピュータ上で動作中のソフトウェアについての情報を、適当なグラフィック・インターフェースで表示するために使用される。バスにはまた、ＩＤＥ又はＳＡＴＡコントローラを介して、ハードディスク又はシリコン・ディスクと、ＣＤ−ＲＯＭ、ＤＶＤ又はＢｌｕ−ｒａｙドライブが接続される。
【００８１】
ハードディスクには、オペレーティング・システム、ＲｏｓｅＲＴ、Ｊ２ＥＥなどのＪａｖａ（商標）処理環境を提供するプログラム、その他のプログラム及びデータが、メイン・メモリにロード可能に記憶されている。
【００８２】
ＣＤ−ＲＯＭ、ＤＶＤ又はＢＤドライブは、必要に応じて、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ又はＢＤからプログラムをハードディスクに追加導入するために使用される。バスには更に、キーボード・マウスコントローラを介して、キーボード及びマウスが接続されている。
【００８３】
通信インタフェースは、例えばイーサネット（商標）・プロトコルに従うものであり、通信コントローラを介してバスに接続され、コンピュータ及び通信回線を物理的に接続する役割を担い、コンピュータのオペレーティング・システムの通信機能のＴＣＰ／ＩＰ通信プロトコルに対して、ネットワーク・インターフェース層を提供する。尚、通信回線は、有線ＬＡＮ環境、或いは例えばＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎなどの無線ＬＡＮ接続規格に基づく無線ＬＡＮ環境であってもよい。
【００８４】
なお、コンピュータ等のハードウェアを接続するためのネットワーク接続装置として使用できるものとして、上記のネットワーク・スイッチ以外に、これで尽きている訳ではないが、ルータ、ハードウェア管理コンソール等がある。要するに、ネットワーク運用管理用プログラムが導入されているコンピュータからの、所定のコマンドによる問い合わせに対して、それに接続されているコンピュータのＩＰアドレス、ＭＡＣアドレスなどの構成情報を返すことができる機能をもつものである。ネットワーク・スイッチ及びルータは、アドレス解決プロトコル（ＡＲＰ）のための、それに接続されているコンピュータのＩＰアドレス及び、それに対応するＭＡＣアドレスの対のリストを含むＡＲＰテーブルを含み、所定のコマンドによる問い合わせに対して、ＡＲＰテーブルの内容を返す機能をもつ。ハードウェア管理コンソールは、ＡＲＰテーブルよりも更に詳しい、コンピュータの構成情報を返すことができる。
【００８５】
以上、実施態様に基づき本発明を説明してきたが、本実施態様に記載されている内容は、本発明の一例であり、当業者なら、本発明の技術的範囲を逸脱することなく、さまざまな変形例に想到できることが明らかであろう。
【図面の簡単な説明】
【００８６】
【図１】Ｖｉｓｕａｌ  Ｔｏｏｌの画面（１０１）の例を示す。
【図２Ａ】状態遷移図の例を示す。
【図２Ｂ】状態遷移図に対応するプロパティの例を示す。
【図２Ｃ】カプセルの例を示す。
【図２Ｄ】イベントによる状態の遷移の例を示す。
【図２Ｅ】キーボード・イベントを取得する例を示す。
【図３Ａ】本発明の実施態様である、Ｔｈｒｏｕｇｈ−ａｂｌｅ状態の表示の例を示す。
【図３Ｂ】本発明の実施態様である、パラレル状態の表示の例を示す。
【図３Ｃ】本発明の実施態様である、ユーザ・インタフェースの例を示す。
【図４Ａ】本発明の実施態様である、状態をＴｈｒｏｕｇｈ−ａｂｌｅ状態に変更した場合の例を示す。
【図４Ｂ】本発明の実施態様である、状態をＴｈｒｏｕｇｈ−ａｂｌｅ状態に変更した場合の例を示す。
【図４Ｃ】本発明の実施態様である、状態をＴｈｒｏｕｇｈ−ａｂｌｅ状態に変更した場合の例を示す。
【図４Ｄ】本発明の実施態様である、状態をＴｈｒｏｕｇｈ−ａｂｌｅ状態に変更した場合の例を示す。
【図４Ｅ】本発明の実施態様である、状態をパラレル状態に変更した場合の例を示す。
【図４Ｆ】本発明の実施態様である、状態をパラレル状態に変更した場合の例を示す。
【図５Ａ】本発明の実施態様である、Ｔｈｒｏｕｇｈ−ａｂｌｅ状態を実装した場合における状態遷移の表示の例を示す。
【図５Ｂ】本発明の実施態様である、状態（Ｓ２）をＴｈｒｏｕｇｈ−ａｂｌｅ状態とした場合のプロパティを示す。
【図５Ｃ】本発明の実施態様である、遷移線のリンクの例を示す。
【図５Ｄ】本発明の実施態様である、パラレル状態を実装した場合における状態遷移の表示の例を示す。
【図５Ｅ】本発明の実施態様である、状態（Ｓ１）をパラレル状態とした場合のプロパティを示す。
【図６Ａ】本発明の実施態様である、Ａ２、Ａ３という型をサポートする場合の例を示す。
【図６Ｂ】本発明の実施態様である、Ｂ２という型をサポートする場合の例を示す。
【図６Ｃ】従来技術を用いて作成された複雑な構造の状態遷移図に対して修正を行う、本発明の実施態様に従う例を示す。
【図６Ｄ】従来技術を用いて作成された複雑な構造の状態遷移図に対して修正を行う、本発明の実施態様に従う例を示す。
【図６Ｅ】従来技術を用いて作成された複雑な構造の状態遷移図に対して修正を行う、本発明の実施態様に従う例を示す。
【図７】本発明の実施態様である、システム構成の例を示す。
【図８】本発明の実施態様である、型を用いた開発の例を示す。
【図１】
2010003160.tif 000003
【図２Ａ】
2010003160.tif 000004
【図２Ｂ】
2010003160.tif 000005
【図２Ｃ】
2010003160.tif 000006
【図２Ｄ】
2010003160.tif 000007
【図２Ｅ】
2010003160.tif 000008
【図３Ａ】
2010003160.tif 000009
【図３Ｂ】
2010003160.tif 000010
【図３Ｃ】
2010003160.tif 000011
【図４Ａ】
2010003160.tif 000012
【図４Ｂ】
2010003160.tif 000013
【図４Ｃ】
2010003160.tif 000014
【図４Ｄ】
2010003160.tif 000015
【図４Ｅ】
2010003160.tif 000016
【図４Ｆ】
2010003160.tif 000017
【図５Ａ】
2010003160.tif 000018
【図５Ｂ】
2010003160.tif 000019
【図５Ｃ】
2010003160.tif 000020
【図５Ｄ】
2010003160.tif 000021
【図５Ｅ】
2010003160.tif 000022
【図６Ａ】
2010003160.tif 000023
【図６Ｂ】
2010003160.tif 000024
【図６Ｃ】
2010003160.tif 000025
【図６Ｄ】
2010003160.tif 000026
【図６Ｅ】
2010003160.tif 000027
【図７】
2010003160.tif 000028
【図８】
2010003160.tif 000029