(57)【要約】【課題】  制約関係のある複数のアプリケーションプログラムを組み合わせたシステムの構築を容易にする。【解決手段】  ユーザインターフェース３１０はユーザとのやりとりを行う。イベントディスパッチャ３２０は外部からの要求に応じてイベントの送出を行う。アプリケーションプログラム群３３０はハードウェア資源３４０を利用して所望のシステムを実現する。制約条件マトリックス３６０はアプリケーションプログラム群３３０の状態遷移に関する制約条件を保持する。アスペクト３５０は制約条件マトリックス３６０を参照して制約条件を判断する。イベントキュー３７０はアプリケーションプログラム群３３０の各アプリケーションプログラムの有限状態機械のオブジェクトに対するイベントを保持する。イベントメモリ３８０は再度送出すべきイベントを保持する。【選択図】      図１
2005275546.tif 000002
【特許請求の範囲】
【請求項１】
それぞれ内部状態を有してコンピュータ上で実行される複数のプログラムと、
これら複数のプログラムに対して前記内部状態を遷移させるイベントを送出するイベント送出手段と、
前記プログラムにおける前記内部状態の遷移に関する制約条件を保持する制約条件保持手段と、
前記プログラムにおける前記内部状態の遷移に先立って前記制約条件を満たすか否かを判断する状態制御手段とを具備し、
前記複数のプログラムの各々は、前記送出されたイベントを受信すると前記状態制御手段に前記制約条件を満たすか否かを問い合わせ、前記制約条件を満たさない場合には前記内部状態の遷移を行わず、前記制約条件を満たす場合には前記内部状態の遷移を行った上で前記状態制御手段にその遷移が行われた旨を報告する
ことを特徴とするプログラム実行制御装置。
【請求項２】
前記制約条件保持手段は、前記内部状態の遷移が行われようとするプログラムの遷移先状態の各々について、他のプログラムの現在の内部状態の各々に対応する制約条件を保持することを特徴とする請求項１記載のプログラム実行制御装置。
【請求項３】
前記状態制御手段は、前記制約条件を満たすか否かを判断してそれを問い合わせたプログラムにその結果を報告し、前記制約条件に応じて所定のイベントを前記他のプログラムに送出することを特徴とする請求項２記載のプログラム実行制御装置。
【請求項４】
前記制約条件は、前記複数のプログラムの組合せにより得られるシステムの関数として表現されることを特徴とする請求項２記載のプログラム実行制御装置。
【請求項５】
前記制約条件は、指定されたイベントを伴う同期条件を含み、
前記状態制御手段は、前記同期条件が指定されているときに前記内部状態の遷移報告を受けると前記指定されたイベントを前記他のプログラムに送出する
ことを特徴とする請求項２記載のプログラム実行制御装置。
【請求項６】
前記状態制御手段に前記制約条件を満たすか否かを問い合わせたプログラムおよびそのプログラムに送出されたイベントを保持するイベントメモリをさらに具備することを特徴とする請求項２記載のプログラム実行制御装置。
【請求項７】
前記制約条件は、指定されたイベントを伴う後優先条件を含み、
前記状態制御手段は、前記後優先条件が指定されているときには前記指定されたイベントを前記他のプログラムに送出するとともに前記制約条件を満たすか否かを問い合わせたプログラムおよびそのプログラムに送出されたイベントを前記イベントメモリに保持し、前記他のプログラムの内部状態の遷移報告を受けると前記イベントメモリに保持されたプログラムに対して前記イベントメモリに保持されたイベントを送出することを特徴とする請求項６記載のプログラム実行制御装置。
【請求項８】
前記制約条件は、指定された第１および第２のイベントを伴う保留条件を含み、
前記状態制御手段は、前記保留条件が指定されているときには前記指定された第１のイベントを前記他のプログラムに送出するとともに前記制約条件を満たすか否かを問い合わせたプログラムおよびそのプログラムに送出されたイベントを前記イベントメモリに保持し、前記他のプログラムの内部状態の遷移報告を受けると前記イベントメモリに保持されたプログラムに対して前記イベントメモリに保持されたイベントを送出し、前記制約条件を満たすか否かを問い合わせたプログラムの内部状態の復帰報告を受けると前記指定された第２のイベントを前記他のプログラムに送出することを特徴とする請求項６記載のプログラム実行制御装置。
【請求項９】
前記制約条件は、予約条件を含み、
前記状態制御手段は、前記予約条件が指定されているときには前記制約条件を満たすか否かを問い合わせたプログラムおよびそのプログラムに送出されたイベントを前記イベントメモリに保持し、前記他のプログラムの内部状態の遷移報告を受けると前記イベントメモリに保持されたプログラムに対して前記イベントメモリに保持されたイベントを送出することを特徴とする請求項６記載のプログラム実行制御装置。
【請求項１０】
それぞれ内部状態を有してコンピュータ上で実行される複数のプログラムと、前記内部状態の遷移が行われようとするプログラムの遷移先状態の各々について他のプログラムの現在の内部状態の各々に対応する制約条件を判断する状態制御手段とを備えるプログラム実行制御装置におけるプログラム実行制御方法であって、
前記複数のプログラムの何れかに対して前記内部状態を遷移させるイベントが送出されると当該プログラムにおける前記制約条件を満たすか否かを当該プログラムから前記状態制御手段に問い合せる手順と、
前記制約条件を満たすか否かを前記状態制御手段が判断する手順と、
前記状態制御手段が前記判断の結果を前記プログラムに報告する手順と、
前記制約条件を満たす場合には前記プログラムがその内部状態を遷移させるとともに前記状態制御手段にその遷移が行われた旨を報告する手順と
を具備することを特徴とするプログラム実行制御方法。
【請求項１１】
それぞれ内部状態を有してコンピュータ上で実行される複数のアプリケーションプログラムと、前記内部状態の遷移が行われようとするアプリケーションプログラムの遷移先状態の各々について他のアプリケーションプログラムの現在の内部状態の各々に対応する制約条件を判断する状態制御プログラムとを備え、
前記複数のアプリケーションプログラムの何れかに対して前記内部状態を遷移させるイベントが送出されると当該アプリケーションプログラムにおける前記制約条件を満たすか否かを当該アプリケーションプログラムが前記状態制御プログラムに問い合わせる手順と、
前記制約条件を満たすか否かを前記状態制御プログラムが判断する手順と、
前記状態制御プログラムが前記判断の結果を前記アプリケーションプログラムに報告する手順と、
前記制約条件を満たす場合には前記アプリケーションプログラムがその内部状態を遷移させるとともに前記状態制御プログラムにその遷移が行われた旨を報告する手順と
コンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム実行制御装置に関し、特に内部状態を有するプログラムについてその内部状態の遷移に関する制約条件に従って実行の制御を行うプログラム実行制御装置、および、プログラム実行制御方法ならびに当該方法をコンピュータに実行させるプログラムに関する。
【背景技術】
【０００２】
システムを構築するに際して、所定の機能を有するアプリケーションプログラムを複数組み合わせることにより所望の機能を実現する場合がある。このような場合、各アプリケーションプログラムは元々個別に作成されたものであり、共通するハードウェア資源を利用する可能性がある。そのため、各アプリケーションプログラム同士が互いに制約関係を生じる場合がある。このような制約関係を表現するために、アプリケーションプログラムに内部状態を割り当て、その内部状態を有限状態機械（ＦＳＭ：Finite State Machine）のオブジェクトとして制御することが考えられる。
【０００３】
ここで、オブジェクトとは、状態と振る舞いとがカプセル化されているクラスのインスタンスである。また、有限状態機械は、オン状態（ＯＮ）またはオフ状態（ＯＦＦ）の何れかの状態を有し、外部から送出されたイベントを受信するとそのイベントに応じた振る舞いならびに状態の遷移を行う。そのようなオブジェクトの状態を遷移させるイベントとして、例えば、物理的なキーまたはボタン等の入力の発生や、タイマーによる割込みの発生等を契機とすることができる。
【０００４】
このような有限状態機械モデルにおいて、イベントに応じた振る舞いや状態遷移を行えるか否かの条件は、ガード条件と呼ばれる。上述のアプリケーションプログラム間の制約関係は、このガード条件として表現することができる。例えば、一方のアプリケーションプログラムの状態がオン状態である場合に他のアプリケーションプログラムの状態をオン状態に遷移させることを禁じることにより、アプリケーションプログラムの排他制御を実現することができる。
【０００５】
このような排他制御を実現するものとして、例えば、タスク間の排他制御を行うために、各タスク毎に同時に動作させたくないタスクのタスクＩＤを登録しておいて、要求されたジョブに必要となるタスクが現在実行中のジョブを処理しているタスクの排他条件に合致しているか否かを判断する装置が提案されている（例えば、特許文献１参照。）。
【特許文献１】特開平８−３０５５８９号公報（図１）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述の従来技術では、タスクを同時に動作させないことに主眼が置かれており、一方のタスクが実行中の場合に他方のタスクの実行を禁止することにより排他制御を実現している。
【０００７】
しかしながら、実際にシステムを構築するためには、アプリケーションプログラム間の制約関係として単純な排他制御だけではなく、所定の動作を伴う複雑な処理が要求されることが少なくない。例えば、後続のアプリケーションプログラムを優先的にさせたり、アプリケーションプログラム間で同期をとる必要が生じる場合もある。そのような複雑な処理に複数のアプリケーションプログラムが係わる場合、その処理に関与する全てのアプリケーションプログラムにその処理内容を分散して記述してしまうと、プログラムの保守性を悪化させる要因となる。
【０００８】
そこで、本発明は、アプリケーションプログラム間の制約関係に伴う処理を各アプリケーションプログラムから独立させ、複数のアプリケーションプログラムを組み合わせたシステムの構築を容易にすることを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために本発明の請求項１記載のプログラム実行制御装置は、それぞれ内部状態を有してコンピュータ上で実行される複数のプログラムと、これら複数のプログラムに対して上記内部状態を遷移させるイベントを送出するイベント送出手段と、上記プログラムにおける上記内部状態の遷移に関する制約条件を保持する制約条件保持手段と、上記プログラムにおける上記内部状態の遷移に先立って上記制約条件を満たすか否かを判断する状態制御手段とを具備し、上記複数のプログラムの各々は、上記送出されたイベントを受信すると上記状態制御手段に上記制約条件を満たすか否かを問い合わせ、上記制約条件を満たさない場合には上記内部状態の遷移を行わず、上記制約条件を満たす場合には上記内部状態の遷移を行った上で上記状態制御手段にその遷移が行われた旨を報告する。これにより、複数のプログラムの内部状態の遷移の際に、上記プログラムとは別個の状態制御手段によって制約条件が判断され、その遷移の結果が状態制御手段に報告されるという作用をもたらす。
【００１０】
また、本発明の請求項２記載のプログラム実行制御装置は、請求項１記載のプログラム実行制御装置において、上記制約条件保持手段が、上記内部状態の遷移が行われようとするプログラムの遷移先状態の各々について、他のプログラムの現在の内部状態の各々に対応する制約条件を保持するものである。これにより、プログラムの内部状態の遷移に関する制約条件がマトリックス状にまとめられるという作用をもたらす。
【００１１】
また、本発明の請求項３記載のプログラム実行制御装置は、請求項２記載のプログラム実行制御装置において、上記状態制御手段が、上記制約条件を満たすか否かを判断してそれを問い合わせたプログラムにその結果を報告し、上記制約条件に応じて所定のイベントを上記他のプログラムに送出するものである。これにより、プログラムの内部状態遷移後にさらなる動作を促すという作用をもたらす。
【００１２】
また、本発明の請求項４記載のプログラム実行制御装置は、請求項２記載のプログラム実行制御装置において、上記制約条件が上記複数のプログラムの組合せにより得られるシステムの関数として表現されるものである。これにより、システム毎に異なる制約条件として解釈させるという作用をもたらす。
【００１３】
また、本発明の請求項５記載のプログラム実行制御装置は、請求項２記載のプログラム実行制御装置において、上記制約条件が指定されたイベントを伴う同期条件を含み、上記状態制御手段が「上記同期条件が指定されているときに上記内部状態の遷移報告を受けると上記指定されたイベントを上記他のプログラムに送出する」ものである。これにより、プログラム間で同期をとらせるという作用をもたらす。
【００１４】
また、本発明の請求項６記載のプログラム実行制御装置は、請求項２記載のプログラム実行制御装置において、上記状態制御手段に上記制約条件を満たすか否かを問い合わせたプログラムおよびそのプログラムに送出されたイベントを保持するイベントメモリをさらに具備する。これにより、制約条件を満たすか否かを問い合わせたプログラムに対して送出すべきイベントをイベントメモリに保持させるという作用をもたらす。
【００１５】
また、本発明の請求項７記載のプログラム実行制御装置は、請求項６記載のプログラム実行制御装置において、上記制約条件が指定されたイベントを伴う後優先条件を含み、上記状態制御手段が「上記後優先条件が指定されているときには上記指定されたイベントを上記他のプログラムに送出するとともに上記制約条件を満たすか否かを問い合わせたプログラムおよびそのプログラムに送出されたイベントを上記イベントメモリに保持し、上記他のプログラムの内部状態の遷移報告を受けると上記イベントメモリに保持されたプログラムに対して上記イベントメモリに保持されたイベントを送出する」ものである。これにより、後から内部状態を遷移しようとするプログラムを優先させるという作用をもたらす。
【００１６】
また、本発明の請求項８記載のプログラム実行制御装置は、請求項６記載のプログラム実行制御装置において、上記制約条件が指定された第１および第２のイベントを伴う保留条件を含み、上記状態制御手段が「上記保留条件が指定されているときには上記指定された第１のイベントを上記他のプログラムに送出するとともに上記制約条件を満たすか否かを問い合わせたプログラムおよびそのプログラムに送出されたイベントを上記イベントメモリに保持し、上記他のプログラムの内部状態の遷移報告を受けると上記イベントメモリに保持されたプログラムに対して上記イベントメモリに保持されたイベントを送出し、上記制約条件を満たすか否かを問い合わせたプログラムの内部状態の復帰報告を受けると上記指定された第２のイベントを上記他のプログラムに送出する」ものである。これにより、後から状態遷移をしようとするプログラムを優先させ、他のプログラムを保留させるという作用をもたらす。
【００１７】
また、本発明の請求項９記載のプログラム実行制御装置は、請求項６記載のプログラム実行制御装置において、上記制約条件が予約条件を含み、上記状態制御手段が「上記予約条件が指定されているときには上記制約条件を満たすか否かを問い合わせたプログラムおよびそのプログラムに送出されたイベントを上記イベントメモリに保持し、上記他のプログラムの内部状態の遷移報告を受けると上記イベントメモリに保持されたプログラムに対して上記イベントメモリに保持されたイベントを送出する」ものである。これにより、他方のオブジェクトの状態遷移を待って状態遷移を行わせるという作用をもたらす。
【００１８】
また、本発明の請求項１０記載のプログラム実行制御方法は、それぞれ内部状態を有してコンピュータ上で実行される複数のプログラムと、上記内部状態の遷移が行われようとするプログラムの遷移先状態の各々について他のプログラムの現在の内部状態の各々に対応する制約条件を判断する状態制御手段とを備えるプログラム実行制御装置におけるプログラム実行制御方法であって、上記複数のプログラムの何れかに対して上記内部状態を遷移させるイベントが送出されると当該プログラムにおける上記制約条件を満たすか否かを当該プログラムから上記状態制御手段に問い合せる手順と、上記制約条件を満たすか否かを上記状態制御手段が判断する手順と、上記状態制御手段が上記判断の結果を上記プログラムに報告する手順と、上記制約条件を満たす場合には上記プログラムがその内部状態を遷移させるとともに上記状態制御手段にその遷移が行われた旨を報告する手順とを具備する。これにより、複数のプログラムの内部状態の遷移の際に、上記プログラムとは別個の状態制御手段によって制約条件が判断され、その遷移の結果が状態制御手段に報告されるという作用をもたらす。
【００１９】
また、本発明の請求項１１記載のプログラムは、それぞれ内部状態を有してコンピュータ上で実行される複数のアプリケーションプログラムと、上記内部状態の遷移が行われようとするアプリケーションプログラムの遷移先状態の各々について他のアプリケーションプログラムの現在の内部状態の各々に対応する制約条件を判断する状態制御プログラムとを備え、上記複数のアプリケーションプログラムの何れかに対して上記内部状態を遷移させるイベントが送出されると当該アプリケーションプログラムにおける上記制約条件を満たすか否かを当該アプリケーションプログラムが上記状態制御プログラムに問い合わせる手順と、上記制約条件を満たすか否かを上記状態制御プログラムが判断する手順と、上記状態制御プログラムが上記判断の結果を上記アプリケーションプログラムに報告する手順と、上記制約条件を満たす場合には上記アプリケーションプログラムがその内部状態を遷移させるとともに上記状態制御プログラムにその遷移が行われた旨を報告する手順とコンピュータに実行させるものである。これにより、複数のアプリケーションプログラムの内部状態の遷移の際に、上記アプリケーションプログラムとは別個の状態制御プログラムによって制約条件が判断され、その遷移の結果が状態制御プログラムに報告されるという作用をもたらす。
【発明の効果】
【００２０】
本発明によれば、複数のアプリケーションプログラムを組み合わせたシステムの構築が容易になり、また、既存のシステムに新たなアプリケーションプログラムを追加実装することが容易になるという優れた効果を奏し得る。
【発明を実施するための最良の形態】
【００２１】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００２２】
図１は、本発明の実施の形態におけるプログラム実行制御装置の一構成例を示す図である。このプログラム実行制御装置は、ユーザとのやりとりを行うユーザインターフェース３１０と、外部からの要求に応じてイベントの送出を行うイベントディスパッチャ３２０と、所望のシステムを実現するアプリケーションプログラム群３３０と、アプリケーションプログラム群３３０により利用されるハードウェア資源３４０と、アプリケーションプログラム群３３０からの要求に応じて制約条件を判断するアスペクト３５０と、制約条件を保持する制約条件マトリックス３６０と、アプリケーションプログラム群３３０の各アプリケーションプログラムの有限状態機械オブジェクトに対するイベントを保持するイベントキュー３７０と、再度送出すべきイベントを保持するイベントメモリ３８０とを備える。
【００２３】
ユーザインターフェース３１０は、ユーザからの入力を受けて、これに対応するイベントをイベントディスパッチャ３２０に送出する。また、ユーザインターフェース３１０は、イベントディスパッチャ３２０からのイベントを受けて、必要に応じてユーザに対する出力を行う。
【００２４】
イベントディスパッチャ３２０は、発生したイベントに対して必要なメソッドを呼び出すモジュールである。例えば、イベントディスパッチャ３２０は、有限状態機械のオブジェクトＸをオン状態にするイベントを受けると、そのオブジェクトＸに対してオン状態にするイベントを送出する。また、イベントディスパッチャ３２０にはイベントキュー３７０が接続される。このイベントキュー３７０は、各オブジェクトに対して送出されたイベントをそれぞれ待ち行列（キュー）として保持する。
【００２５】
アプリケーションプログラム群３３０は、所望のシステムを実現するアプリケーションプログラムの集合である。各アプリケーションプログラムには、アプリケーションプログラム間の制約関係を制御するために内部状態が割り当てられる。この内部状態は有限状態機械のオブジェクトとして表現される。これにより、アプリケーションプログラムの内部状態は、イベントディスパッチャ３２０からのイベントに応じて遷移することになる。
【００２６】
各アプリケーションプログラムは、ハードウェア資源３４０を操作対象とする。ここで、ハードウェア資源３４０とは、アプリケーションプログラム間で制約関係を生じさせるものであり、例えばビデオカードのように物理的に独立した物であってもよく、また、ハードウェアやソフトウェアにより実現される所定の機能であってもよい。また、このハードウェア資源３４０は、例えばタイマーのように、イベントディスパッチャ３２０に対して何らかのイベントを送出する可能性がある。
【００２７】
アスペクト３５０は、アプリケーションプログラムにおける内部状態の遷移に先立って、アプリケーションプログラム間の制約関係においてその遷移が許されるか否かを判断する。そのような制約関係を満たす条件を制約条件という。各アプリケーションプログラムは、内部状態を遷移させる際、アスペクト３５０に制約条件を満たすか否かを問い合わせる。アスペクト３５０には制約条件マトリックス３６０が接続される。この制約条件マトリックス３６０には、各アプリケーションプログラムにおける内部状態の遷移に関する制約条件が保持されている。アスペクト３５０は、この制約条件マトリックス３６０を参照して制約条件を満たすか否かを判断して、その結果を問い合わせ元のアプリケーションプログラムに報告する。
【００２８】
また、アスペクト３５０にはイベントメモリ３８０が接続される。このイベントメモリ３８０には、制約条件を満たすか否かを問い合わせたアプリケーションプログラムのオブジェクト識別子およびそのアプリケーションプログラムのオブジェクトに送出されたイベントを保持する。これらの情報はイベントキュー３７０に保持されており、アスペクト３５０は、イベントディスパッチャ３２０に問い合わせることによりそれらの情報を取得してイベントメモリ３８０に保持させる。
【００２９】
図２は、本発明の実施の形態におけるアプリケーションプログラムの内部状態を表現する有限状態機械モデルを示す図である。この有限状態機械モデルでは、オフ状態（ＳＴＡＴＥ＿ＯＦＦ）５５１またはオン状態（ＳＴＡＴＥ＿ＯＮ）５５２の何れかの状態をとる。図中、黒丸５５９は初期状態を表す。すなわち、初期状態はオフ状態５５１となる。
【００３０】
この有限状態機械モデルのオブジェクトは、オフ状態５５１においてイベントＥＶＥＮＴ＿ＯＮを受けると、オン状態５５２に移行しようとする。その際、ガード条件ＧＵＡＲＤ＿０を満たすか否かが判断される。このガード条件とは、状態遷移に必要な条件であり、特にそのような条件がない場合にはこのガード条件に真値（ｔｒｕｅ）を設定しておくことができる。このガード条件が満たされていれば所定の動作ＡＣＴＩＯＮ＿０が実行され、オン状態５５２に移行する。
【００３１】
また、この有限状態機械モデルのオブジェクトは、オン状態５５２においてイベントＥＶＥＮＴ＿ＯＦＦを受けると、オフ状態５５１に移行しようとする。その際、ガード条件ＧＵＡＲＤ＿１を満たすか否かが判断される。このガード条件が満たされていれば所定の動作ＡＣＴＩＯＮ＿１が実行され、オフ状態５５１に移行する。
【００３２】
さらに、この図２の有限状態機械モデルでは、オフ状態５５１に入る際には所定の動作ＡＣＴＩＯＮ＿２が実行され、オフ状態５５１から離れる際には所定の動作ＡＣＴＩＯＮ＿３が実行される。同様に、オン状態５５２に入る際には所定の動作ＡＣＴＩＯＮ＿４が実行され、オン状態５５２から離れる際には所定の動作ＡＣＴＩＯＮ＿５が実行される。
【００３３】
このような有限状態機械モデルにおいて、オン状態５５２のときにハードウェア資源Ｘ（３４１）を占有すると仮定すれば、アプリケーションプログラムの内部状態としてこの有限状態機械モデルを利用して複雑な排他制御を実現することができる。
【００３４】
なお、以下では、有限状態機械モデルのオブジェクトの状態（すなわち、アプリケーションプログラムの内部状態）について、現在の状態をアクティブ状態といい、遷移しようとする状態をターゲット状態という。
【００３５】
図３は、本発明の実施の形態におけるアプリケーションプログラムの内部状態を表現する有限状態機械クラスの構造を示す図である。有限状態機械クラスのＣｌａｓｓＡ５２０は、ＣｌａｓｓＦｓｍ５１０を基底クラスとして、その派生から作成される。すなわち、ＣｌａｓｓＦｓｍ５１０はスーパクラスであり、ＣｌａｓｓＡ５２０はそのサブクラスになる。オブジェクトＡはＣｌａｓｓＡ５２０のオブジェクトとして作成される。他のオブジェクトＢを作成するためには、同様にＣｌａｓｓＦｓｍ５１０から派生したＣｌａｓｓＢを作成して、そのオブジェクトを作成することになる。
【００３６】
ＣｌａｓｓＦｓｍ５１０には、クラス名５１１と、属性５１２と、操作５１３とが表されている。クラス名５１１はそのクラスの名称であり、ここでは有限状態機械クラスの名称として「ＣｌａｓｓＦｓｍ」が記されている。属性５１２はそのクラスが有する固有の属性であり、ここでは「ＩＤ」、「ａｃｔｉｖｅＳｔａｔｅ」、「ａｓｐｅｃｔ」の３つが記されている。「ＩＤ」はそのクラスのオブジェクトを識別するための識別子である。「ａｃｔｉｖｅＳｔａｔｅ」はそのクラスのオブジェクトの現在の状態を表すものである。また、「ａｓｐｅｃｔ」はアスペクト３５０に対するポインタであり、これによりアスペクト３５０のメソッドを呼び出すことが可能となる。
【００３７】
操作５１３はそのクラスに定義されたメソッドであり、ここでは「ＶＲｅｃｅｉｖｅ」、「ＶＡｃｔｉｏｎ」、「ＶＧｕａｒｄ」の３つのメソッドが記されている。ＶＲｅｃｅｉｖｅメソッドは所定のイベントを受信するためのメソッドであり、外部からそのクラスにイベントを送信する際に用いられる。ＶＡｃｔｉｏｎメソッドは所定の動作を行うためのメソッドである。また、ＶＧｕａｒｄメソッドは所定のガード条件を判断するためのメソッドである。
【００３８】
ＣｌａｓｓＡ５２０には、クラス名５２１および操作５２３が表されている。属性については、スーパクラスであるＣｌａｓｓＦｓｍ５１０の属性５１２を承継するため、特に記されていない。また、メソッドについては、ＣｌａｓｓＦｓｍ５１０において操作５１３が抽象関数として定義されているため、ＣｌａｓｓＡ５２０の操作５２３において定義のやり直しをしている。
【００３９】
図４は、本発明の実施の形態において図２の有限状態機械モデルを適用した場合の動作例を示すシーケンス図である。ユーザインターフェース３１０は、例えば、アプリケーションプログラムの内部状態を表す有限状態機械のオブジェクトＡをオン状態にするためのボタンがユーザにより押下されると、割込み処理メソッド８１０を介してオブジェクトＡをオン状態にするイベントを送出する。そのために、ユーザインターフェース３１０は、イベントディスパッチャ３２０のＳｅｎｄＥｖｅｎｔメソッド８１１を呼び出す。このＳｅｎｄＥｖｅｎｔメソッド８１１のパラメータとしては、オブジェクトＡに割り振られた識別子およびそのオブジェクトＡをオン状態にするイベントＥＶＥＮＴ＿ＯＮが用いられる。
【００４０】
ユーザインターフェース３１０からＳｅｎｄＥｖｅｎｔメソッド８１１を呼び出されたイベントディスパッチャ３２０は、パラメータに基づいてオブジェクトＡを識別し、そのオブジェクトＡ（３３１）に対してオン状態にするイベントを送出する。そのために、イベントディスパッチャ３２０は、ＳｅｎｄＥｖｅｎｔメソッドのパラメータとして受けた識別子に基づいてオブジェクトＡ（３３１）を選択し、そのオブジェクトＡ（３３１）の受信メソッドＶＲｅｃｅｉｖｅ８１２を呼び出す。このＶＲｅｃｅｉｖｅメソッド８１２のパラメータとしては、そのオブジェクトＡ（３３１）をオン状態にするイベントＥＶＥＮＴ＿ＯＮが用いられる。
【００４１】
イベントディスパッチャ３２０からＶＲｅｃｅｉｖｅメソッド８１２を呼び出されたオブジェクトＡ（３３１）は、内部関数の発火メソッドＦｉｒｅ８１３を呼び出す。このＦｉｒｅメソッド８１３のパラメータとしては、図２のようにガード条件ＧＵＡＲＤ＿０と、動作ＡＣＴＩＯＮ＿０と、ターゲット状態ＳＴＡＴＥ＿ＯＮとが用いられる。
【００４２】
Ｆｉｒｅメソッド８１３は、まず、他のアプリケーションプログラムとの間の制約条件を満たすか否かを調べるために、アスペクト３５０のＶＧｕａｒｄメソッド８１４を呼び出す。このＶＧｕａｒｄメソッド８１４のパラメータとしては、オブジェクトＡに割り振られた識別子および遷移しようとする状態ＳＴＡＴＥ＿ＯＮが用いられる。アスペクト３５０は、後述する制約条件マトリックス３６０を参照して制約条件を満たすか否かを判断して、その結果を問い合わせ元のオブジェクトＡに返す。この結果、制約条件を満たすものであれば、オブジェクトＡはさらに自身のＶＧｕａｒｄメソッド８１５を呼び出す。このＶＧｕａｒｄメソッド８１５のパラメータとしては、ガード条件ＧＵＡＲＤ＿０が用いられる。この結果、ガード条件を満たすものであればさらに以下の処理を行う。
【００４３】
すなわち、オブジェクトＡはオフ状態５５１から離れるために自身のＶＥｘｉｔメソッド８１６を呼び出す。このＶＥｘｉｔメソッド８１６のパラメータとしては、動作ＡＣＴＩＯＮ＿３が用いられる。また、オブジェクトＡは状態遷移に伴う動作行うために自身のＶＡｃｔｉｏｎメソッド８１７を呼び出す。このＶＡｃｔｉｏｎメソッド８１７のパラメータとしては、動作ＡＣＴＩＯＮ＿０が用いられる。新たな現在の状態として、状態ＳＴＡＴＥ＿ＯＮが設定される。さらに、オブジェクトＡはオン状態５５２に入るために自身のＶＥｎｔｒｙメソッド８１８を呼び出す。このＶＥｎｔｒｙメソッド８１８のパラメータとしては、動作ＡＣＴＩＯＮ＿４が用いられる。
【００４４】
そして、これらの処理が完了すると、オブジェクトＡは状態遷移をアスペクト３５０に報告するためにアスペクト３５０のＶＥｎｔｒｙメソッド８１９を呼び出す。このＶＥｎｔｒｙメソッド８１９のパラメータとしては、オブジェクトＡに割り振られた識別子および遷移した状態ＳＴＡＴＥ＿ＯＮが用いられる。
【００４５】
図５は、本発明の実施の形態における受信メソッドＶＲｅｃｅｉｖｅの処理手順を示す図である。アプリケーションプログラムのオブジェクトのアクティブ状態がオフ状態のときに（ステップＳ９２１）、オン状態にするためのイベントを受信すると（ステップＳ９２２）、ターゲット状態をオン状態として発火メソッドを呼び出す（ステップＳ９２３）。一方、アプリケーションプログラムのオブジェクトのアクティブ状態がオン状態のときに（ステップＳ９２１）、オフ状態にするためのイベントを受信すると（ステップＳ９２２）、ターゲット状態をオフ状態として発火メソッドを呼び出す（ステップＳ９２３）。これ以外の場合は、アクティブ状態とターゲット状態とが一致し、発火メソッドを呼び出す必要はないため、そのまま処理を終了する。
【００４６】
図６は、本発明の実施の形態における発火メソッドＦｉｒｅの処理手順を示す図である。まず、パラメータにおいてターゲット状態として「状態不変」が指定されているときには（ステップＳ９３１）、パラメータで指定された（有限状態機械クラスの）ガード条件をチェックし（ステップＳ９３２）、ガード条件が満たされていればパラメータで指定されたアクション動作を行って（ステップＳ９３３）、処理が成功した旨を関数値として返す（ステップＳ９３４、Ｓ９４９）。一方、ステップＳ９３２においてガード条件が満たされていないと判断されれば、処理が失敗した旨を関数値として返す（ステップＳ９３５、Ｓ９４９）。
【００４７】
また、パラメータにおいてターゲット状態としてオン状態またはオフ状態が指定されているときには（ステップＳ９３１）、アスペクト３５０へのポインタが有効に存在するかを判断する（ステップＳ９３６）。アスペクト３５０が存在すれば、制約条件を満たすか否かをアスペクト３５０に問い合わせるとともに、パラメータで指定された（有限状態機械クラスの）ガード条件をチェックする（ステップＳ９３７）。一方、ステップＳ９３６においてアスペクト３５０が存在しないと判断された場合には、アスペクト３５０への問い合わせは行わず、パラメータで指定された（有限状態機械クラスの）ガード条件をチェックする（ステップＳ９４４）。
【００４８】
ステップＳ９３７においてアスペクト３５０による制約条件およびパラメータで指定されたガード条件の何れも満たしていると判断された場合には、パラメータで指定されたアクション動作を行って（ステップＳ９３８）、パラメータで指定されたターゲット状態への遷移を行うとともに（ステップＳ９３９）、アスペクト３５０への状態遷移報告を行う（ステップＳ９４１）。そして、処理が成功した旨を関数値として返す（ステップＳ９４２、Ｓ９４９）。一方、ステップＳ９３７において制約条件またはガード条件の何れかが満たされていないと判断されれば、処理が失敗した旨を関数値として返す（ステップＳ９４３、Ｓ９４９）。
【００４９】
ステップＳ９４４においてパラメータで指定されたガード条件を満たしていると判断された場合には、パラメータで指定されたアクション動作を行って（ステップＳ９４５）、パラメータで指定されたターゲット状態への遷移を行うとともに（ステップＳ９４６）、処理が成功した旨を関数値として返す（ステップＳ９４７、Ｓ９４９）。一方、ステップＳ９４４においてガード条件が満たされていないと判断されれば、処理が失敗した旨を関数値として返す（ステップＳ９４８、Ｓ９４９）。
【００５０】
図７は、本発明の実施の形態におけるイベントキュー３７０の構成例を示す図である。このイベントキュー３７０は、各オブジェクト毎に、オブジェクト識別子３７１と、オブジェクトへのオブジェクトポインタ３７２と、イベントの待ち行列３７４と、イベントの待ち行列３７４へのイベントポインタ３７３とを保持する。
【００５１】
オブジェクト識別子３７１はオブジェクトを識別するための識別子であり、例えば、上述の有限状態機械のオブジェクトＡ等を識別する。オブジェクトポインタ３７２は対応するオブジェクトを指し示すポインタである。このオブジェクトポインタ３７２を辿ることによりアプリケーションプログラム３３０の内部状態を表現する有限状態機械クラスのオブジェクトにアクセスすることができる。図３により説明したように、各オブジェクトは属性として「ＩＤ」、「ａｃｔｉｖｅＳｔａｔｅ」、「ａｓｐｅｃｔ」の３つを備えており、各オブジェクトの現在の状態を把握することや、アスペクト３５０のメソッドを呼び出すことができるようになっている。なお、この図７の例では、オブジェクトＡおよびＢについては制約条件があると想定してアスペクト３５０へのポインタを有効にしているが、オブジェクトＣについては制約条件がないものと想定してアスペクト３５０へのポインタを無効にしている。
【００５２】
イベントの待ち行列３７４には各オブジェクトに対して送出されたイベントが時系列に並べられる。最も新しく送出されたイベントはその待ち行列３７４の先頭に位置する。その先頭アドレスを指し示すのがイベントポインタ３７３である。
【００５３】
これにより、イベントディスパッチャ３２０は各オブジェクトについてそのオブジェクトに対して送出されたイベントを取得することができる。アスペクト３５０はイベントディスパッチャ３２０に問い合わせることにより、制約条件を満たすか否かを問い合わせたアプリケーションプログラムのオブジェクトに送出されたイベントを取得して、オブジェクト識別子とともにイベントメモリ３８０に保持させることができる。
【００５４】
図８は、本発明の実施の形態における制約条件マトリックス３６０の表示例を示す図である。図８（ａ）は３つのアプリケーションプログラム（その内部状態をそれぞれオブジェクトＡ、ＢおよびＣで表す）を有するシステムにおける制約条件マトリックス３６０１の一例であり、横方向にターゲット状態の項目、そして縦方向にアクティブ状態の項目がそれぞれ対称に列挙されている。これら各項目において、２つのコロンで区切られた前の部分がオブジェクト名で、後ろの部分が状態を表す。また、それら項目の横に付されている数字はその項目を識別するための項目識別子である。項目の内容が同じものには同一の項目識別子が付されている。
【００５５】
ターゲット状態とアクティブ状態との交点にはその状態遷移に関する制約条件が記されている。例えば、オブジェクトＡをオン状態に遷移させる際には、ターゲット状態が「Ａ：：ＯＮ」の列を参照する。この図８（ａ）の例では、アクティブ状態「Ｂ：：ＯＮ」について「×」が、アクティブ状態「Ｃ：：ＯＮ」について「○」がそれぞれ記されている。ここで、「×」は状態遷移が禁止されていることを意味し、「○」は状態遷移が禁止されていないことを意味する。従って、この例では、オブジェクトＢがオン状態である限りはオブジェクトＡをオン状態に遷移させることはできないことがわかる。
【００５６】
なお、この制約条件マトリックスにおいては、オブジェクトが同じもの同士の組合せは制約条件として意味がないため、特に定義されない。この図８（ａ）の例では、同一の項目同士には「＼」が、それ以外でオブジェクトが同じもの同士には「・」がそれぞれ記されている。また、他のオブジェクトに影響されない独立したオブジェクトについては、この制約条件マトリックスに記す必要はない。
【００５７】
図８（ｂ）は図８（ａ）のシステムにさらに１つのアプリケーションプログラム（その内部状態をオブジェクトＤで表す）が加わった場合の制約条件マトリックスの一例である。この場合、図８（ａ）で用いられた制約条件マトリックス３６０１に対してオブジェクトＤに関する部分的な制約条件マトリックス３６０２を加えたものが、新たな制約条件マトリックスとなる。
【００５８】
すなわち、システムに新たなアプリケーションプログラムを追加する際に、他のアプリケーションプログラムとの間で制約関係が生じる場合であっても、新たなアプリケーションプログラムを追加するとともに制約条件マトリックスの差分のみを追加するだけでよい。その際、他のアプリケーションプログラムを書き換える必要はなく、また、アスペクト３５０も変更する必要はない。
【００５９】
図９は、本発明の実施の形態における制約条件マトリックス３６０の構成例を示す図である。この制約条件マトリックス３６０は、各オブジェクトに関するターゲット状態およびアクティブ状態の項目のそれぞれについて、項目識別子３６１と、オブジェクト識別子３６２と、状態３６３と、先頭アドレス３６４とを有している。項目識別子３６１はオブジェクト識別子３６２および状態３６３の対により構成される項目を識別するものであり、ここではターゲット状態の項目を表す。オブジェクト識別子３６２および状態３６３はその項目のオブジェクト識別子および状態を表す。また、先頭アドレス３６４は、各ターゲット状態に対応する制約条件の内容を保持する領域の先頭アドレスを表す。
【００６０】
制約条件の内容を保持する領域は、ターゲット状態毎に、項目識別子３６５と、記号３６６と、イベントα３６７と、イベントβ３６８とをそれぞれ保持する。項目識別子３６５は項目識別子３６１と同様のものであり、ここではアクティブ状態の項目を表す。そして、記号３６６は、ターゲット状態の項目識別子３６１とアクティブ状態の項目識別子３６５との交点に相当する制約条件を表す。なお、この記号３６６は、説明上、「○」「×」等で表しているが、実際には所定幅のビット値として保持される。
【００６１】
このような制約条件マトリックス３６０において、例えば、状態「Ｂ：：ＯＮ」をターゲット状態として、状態「Ａ：：ＯＮ」をアクティブ状態とする場合には、項目識別子３６１が「１」で項目識別子３６５が「０」である記号３６６を参照し、「×」を取得することができる。
【００６２】
なお、記号３６６には上述のように「○」や「×」などの制約条件が記されるが、「○」や「×」に限られず、後述のように幾つかのイベントを伴う様々な制約条件を記すことができる。そのようなイベントを記述できるよう、イベントα３６７およびβ３６８を指定できるようになっている。但し、これらイベントα３６７およびβ３６８は、記号３６６が「○」や「×」などの場合には特に指定する必要はない。イベントα３６７またはβ３６８を指定しない場合には「−１」などの表示がなされる。
【００６３】
図１０は、本発明の実施の形態における制約条件マトリックス３６０の他の表示例を示す図である。図１０（ａ）は制約条件マトリックスのマクロ記述の例であり、ターゲット状態「Ａ：：ＯＮ」に関するアクティブ状態「Ｂ：：ＯＮ」にはマクロ「Ｆ０」が、アクティブ状態「Ｃ：：ＯＮ」にはマクロ「Ｆ１」がそれぞれ表されている。すなわち、このマクロ記述によって、制約条件がシステムの関数として表現されることになる。このようなマクロ記述を行う場合には、システム毎にマクロの内容を表したマクロテーブル３６９を別途用意しておく必要がある。
【００６４】
図１０（ｂ）はマクロテーブル３６９の構成例である。このマクロテーブル３６９では、各マクロについて、システム毎の解釈が示されている。また、システムが不明な場合に使用すべき解釈が「省略時」として記されている。これにより、システム毎に異なる制約条件を有する場合であっても、制約条件マトリックス３６０を別々に設ける必要がなくなり、制約条件マトリックス３６０を動的に切り替えることが可能となる。
【００６５】
次に本発明の実施の形態における制約条件の具体例について説明する。図４で説明した有限状態機械モデルのシーケンスにおけるアスペクト３５０のＶＧｕａｒｄメソッドおよびＶＥｎｔｒｙメソッドを利用することにより、次のような高度な制御を実現することができる。
【００６６】
図１１は、本発明の実施の形態における制約条件の例として後優先条件を指定する場合の表示例を示す図である。この図において、ターゲット状態「Ａ：：ＯＮ」に関するアクティブ状態「Ｂ：：ＯＮ」には後優先条件「●」が指定されている。この場合、オブジェクトＡとＢとは排他関係にあり、オブジェクトＡの状態をオン状態にする際にオブジェクトＢの状態がオン状態である場合には、下段に記されたイベントをオブジェクトＢに送出する。この下段に記されたイベントは、オブジェクトＢの状態をオフ状態にするものであり、結果として後から状態遷移をしようとするオブジェクトＡが優先し、その状態がオン状態に遷移することになる。
【００６７】
図１２は、本発明の実施の形態における制約条件の例として後優先条件が指定された場合の動作を示すシーケンス図である。なお、この図においては、簡略化のために、ユーザインターフェース３１０およびイベントディスパッチャ３２０は省略されている。また、各メソッドのパラメータも一部を除き省略されている。
【００６８】
オブジェクトＡ（３３１）がオフ状態で、オブジェクトＢ（３３２）がオン状態の場合に、オブジェクトＡ（３３１）をオン状態に遷移させるイベントＢＵＴＴＯＮ＿ＯＮが送出されると、オブジェクトＡ（３３１）はそのイベントをＶＲｅｃｅｉｖｅ８２０により受信する。オブジェクトＡ（３３１）はＦｉｒｅメソッド８２１を呼び出し、ターゲット状態をオン状態としてアスペクト３５０のＶＧｕａｒｄメソッド８２２を呼び出す。その結果、制約条件マトリックス３６０における制約条件に後優先条件が指定されているため、アスペクト３５０は制約条件を満たさない旨をオブジェクトＡ（３３１）に一旦報告する。そして、アスペクト３５０は後優先条件の下段に記されたイベントＥＶＥＮＴ＿ＯＦＦをオブジェクトＢ（３３２）に送出する。また、アスペクト３５０はイベントディスパッチャ３２０に問い合わせることによりオブジェクトＡ（３３１）に送出されたイベントＢＵＴＴＯＮ＿ＯＮを取得して、オブジェクトＡ（３３１）のオブジェクト識別子とともにイベントメモリ３８０に保持させる。
【００６９】
一方、オブジェクトＢ（３３２）はそのイベントをＶＲｅｃｅｉｖｅ８２３により受信する。オブジェクトＢ（３３２）はＦｉｒｅメソッド８２４を呼び出し、ターゲット状態をオフ状態としてアスペクト３５０のＶＧｕａｒｄメソッド８２５を呼び出す。その結果、制約条件マトリックス３６０における制約条件に定義されていないため、アスペクト３５０は制約条件を満たす旨をオブジェクトＢ（３３２）に報告する。これにより、オブジェクトＢ（３３２）はアクティブ状態をオフ状態に遷移させて、その状態遷移をアスペクト３５０に報告する。その際、アスペクト３５０のＶＥｎｔｒｙメソッド８２６が呼び出される。
【００７０】
アスペクト３５０は、ＶＥｎｔｒｙメソッド８２６によりオブジェクトＢ（３３２）から状態遷移の報告を受けると、制約条件マトリックス３６０を参照して、後優先条件が指定されていることを知ると、イベントメモリ３８０に保持されていたイベントＢＵＴＴＯＮ＿ＯＮをオブジェクトＡ（３３１）に送出する。そして、アスペクト３５０は、イベントメモリ３８０からそのイベントＢＵＴＴＯＮ＿ＯＮに関する情報を削除する。オブジェクトＡ（３３１）はそのイベントＢＵＴＴＯＮ＿ＯＮをＶＲｅｃｅｉｖｅ８２７により受信する。オブジェクトＡ（３３１）はＦｉｒｅメソッド８２８を呼び出し、ターゲット状態をオン状態として再びアスペクト３５０のＶＧｕａｒｄメソッド８２９を呼び出す。その結果、オブジェクトＢ（３３２）がオフ状態に遷移しているため、アスペクト３５０は制約条件を満たす旨をオブジェクトＡ（３３１）に報告する。これにより、オブジェクトＡ（３３１）はアクティブ状態をオン状態に遷移させて、その状態遷移をアスペクト３５０に報告する。その際、アスペクト３５０のＶＥｎｔｒｙメソッド８３０が呼び出される。
【００７１】
このように、制約条件として後優先条件を指定することにより、後から状態遷移をしようとするオブジェクトを優先させることができる。
【００７２】
図１３は、本発明の実施の形態における制約条件の例として保留条件を指定する場合の表示例を示す図である。この図において、ターゲット状態「Ａ：：ＯＮ」に関するアクティブ状態「Ｂ：：ＯＮ」には保留条件「◇」が指定されている。この場合、オブジェクトＡとＢとは排他関係にあり、オブジェクトＡの状態をオン状態にする際にオブジェクトＢの状態がオン状態である場合には、下段に記されたイベントをオブジェクトＢに送出し、さらにオブジェクトＡがオン状態からオフ状態に戻った場合には上段に記されたイベントをオブジェクトＢに送出する。
【００７３】
ここで、下段に記されたイベントはオブジェクトＢの状態をオフ状態にするものであり、上段に記されたイベントはオブジェクトＢの状態をオン状態に復帰させるものである。結果として後から状態遷移をしようとするオブジェクトＡが優先し、オブジェクトＢの状態が保留され、オブジェクトＡの状態が戻った際にオブジェクトＢの状態が復帰することになる。
【００７４】
本発明の実施の形態における制約条件の例として保留条件が指定された場合、最初の動作は図１２の後優先条件の場合と同様になる。すなわち、オブジェクトＡ（３３１）がオフ状態で、オブジェクトＢ（３３２）がオン状態の場合に、オブジェクトＡ（３３１）をオン状態に遷移させるイベントＢＵＴＴＯＮ＿ＯＮが送出されると、オブジェクトＢ（３３２）がオフ状態に遷移し、オブジェクトＡ（３３１）がオン状態に遷移する。そして、その後、オブジェクトＡ（３３１）をオフ状態に遷移させるイベントＢＵＴＴＯＮ＿ＯＦＦが送出されると、次のような動作を行う。
【００７５】
図１４は、本発明の実施の形態における制約条件の例として保留条件が指定された場合の動作の後半を示すシーケンス図である。なお、この図においては、図１２と同様に、ユーザインターフェース３１０およびイベントディスパッチャ３２０は省略されている。また、各メソッドのパラメータも一部を除き省略されている。
【００７６】
オブジェクトＡ（３３１）がオン状態で、オブジェクトＢ（３３２）がオフ状態の場合に、オブジェクトＡ（３３１）をオフ状態に遷移させるイベントＢＵＴＴＯＮ＿ＯＦＦが送出されると、オブジェクトＡ（３３１）はそのイベントをＶＲｅｃｅｉｖｅ８３１により受信する。オブジェクトＡ（３３１）はＦｉｒｅメソッド８３２を呼び出し、ターゲット状態をオフ状態としてアスペクト３５０のＶＧｕａｒｄメソッド８３３を呼び出す。その結果、制約条件マトリックス３６０における制約条件に定義されていないため、アスペクト３５０は制約条件を満たす旨をオブジェクトＡ（３３１）に報告する。これにより、オブジェクトＡ（３３１）はアクティブ状態をオフ状態に遷移させて、その状態遷移をアスペクト３５０に報告する。その際、アスペクト３５０のＶＥｎｔｒｙメソッド８３４が呼び出される。
【００７７】
アスペクト３５０は、ＶＥｎｔｒｙメソッド８３４によりオブジェクトＡ（３３１）から状態遷移の報告を受けると、制約条件マトリックス３６０を参照して、保留条件が指定されていることを知ると、その保留条件の上段に記されたイベントＥＶＥＮＴ＿ＯＦＦをオブジェクトＢ（３３２）に送出する。オブジェクトＢ（３３２）はそのイベントＥＶＥＮＴ＿ＯＦＦをＶＲｅｃｅｉｖｅ８３５により受信する。オブジェクトＢ（３３２）はＦｉｒｅメソッド８３６を呼び出し、ターゲット状態をオン状態としてアスペクト３５０のＶＧｕａｒｄメソッド８３７を呼び出す。その結果、制約条件マトリックス３６０における制約条件に定義されていないため、アスペクト３５０は制約条件を満たす旨をオブジェクトＢ（３３２）に報告する。これにより、オブジェクトＢ（３３２）はアクティブ状態をオン状態に遷移させて、その状態遷移をアスペクト３５０に報告する。その際、アスペクト３５０のＶＥｎｔｒｙメソッド８３８が呼び出される。
【００７８】
このように、制約条件として保留条件を指定することにより、後から状態遷移をしようとするオブジェクトを優先させ、他のオブジェクトを保留させることができる。
【００７９】
図１５は、本発明の実施の形態における制約条件の例として予約条件を指定する場合の表示例を示す図である。この図において、ターゲット状態「Ａ：：ＯＮ」に関するアクティブ状態「Ｂ：：ＯＮ」には予約条件「☆」が指定されている。この場合、オブジェクトＡとＢとは排他関係にあり、オブジェクトＡの状態をオン状態にする際にオブジェクトＢの状態がオン状態である場合には、オブジェクトＢの状態がオフ状態に遷移するまでオブジェクトＡの状態遷移が行われず、オブジェクトＢの状態がオン状態から離れてオフ状態に遷移した後でオブジェクトＡの状態がオン状態に遷移する。
【００８０】
図１６は、本発明の実施の形態における制約条件の例として予約条件が指定された場合の動作を示すシーケンス図である。なお、この図においては、図１２と同様に、ユーザインターフェース３１０およびイベントディスパッチャ３２０は省略されている。また、各メソッドのパラメータも一部を除き省略されている。
【００８１】
オブジェクトＡ（３３１）がオフ状態で、オブジェクトＢ（３３２）がオン状態の場合に、オブジェクトＡ（３３１）をオン状態に遷移させるイベントＢＵＴＴＯＮ＿ＯＮが送出されると、オブジェクトＡ（３３１）はそのイベントをＶＲｅｃｅｉｖｅ８４０により受信する。オブジェクトＡ（３３１）はＦｉｒｅメソッド８４１を呼び出し、ターゲット状態をオン状態としてアスペクト３５０のＶＧｕａｒｄメソッド８４２を呼び出す。その結果、制約条件マトリックス３６０における制約条件に予約条件が指定されているため、アスペクト３５０は制約条件を満たさない旨をオブジェクトＡ（３３１）に一旦報告する。そして、アスペクト３５０はイベントディスパッチャ３２０に問い合わせることによりオブジェクトＡ（３３１）に送出されたイベントＢＵＴＴＯＮ＿ＯＮを取得して、オブジェクトＡ（３３１）のオブジェクト識別子とともにイベントメモリ３８０に保持させる。
【００８２】
その後、オブジェクトＢ（３３２）をオフ状態に遷移させるイベントＢＵＴＴＯＮ＿ＯＦＦが送出されると、オブジェクトＢ（３３２）はそのイベントをＶＲｅｃｅｉｖｅ８４３により受信する。オブジェクトＢ（３３２）はＦｉｒｅメソッド８４４を呼び出し、ターゲット状態をオフ状態としてアスペクト３５０のＶＧｕａｒｄメソッド８４５を呼び出す。その結果、制約条件マトリックス３６０における制約条件に定義されていないため、アスペクト３５０は制約条件を満たす旨をオブジェクトＢ（３３２）に報告する。これにより、オブジェクトＢ（３３２）はアクティブ状態をオフ状態に遷移させて、その状態遷移をアスペクト３５０に報告する。その際、アスペクト３５０のＶＥｎｔｒｙメソッド８４６が呼び出される。
【００８３】
アスペクト３５０は、ＶＥｎｔｒｙメソッド８４６によりオブジェクトＢ（３３２）から状態遷移の報告を受けると、制約条件マトリックス３６０を参照して、予約条件が指定されていることを知ると、イベントメモリ３８０に保持されていたイベントＢＵＴＴＯＮ＿ＯＮをオブジェクトＡ（３３１）に送出する。そして、アスペクト３５０は、イベントメモリ３８０からそのイベントＢＵＴＴＯＮ＿ＯＮに関する情報を削除する。オブジェクトＡ（３３１）はそのイベントＢＵＴＴＯＮ＿ＯＮをＶＲｅｃｅｉｖｅ８４７により受信する。オブジェクトＡ（３３１）はＦｉｒｅメソッド８４８を呼び出し、ターゲット状態をオン状態として再びアスペクト３５０のＶＧｕａｒｄメソッド８４９を呼び出す。その結果、オブジェクトＢ（３３２）がオフ状態に遷移しているため、アスペクト３５０は制約条件を満たす旨をオブジェクトＡ（３３１）に報告する。これにより、オブジェクトＡ（３３１）はアクティブ状態をオン状態に遷移させて、その状態遷移をアスペクト３５０に報告する。その際、アスペクト３５０のＶＥｎｔｒｙメソッド８５０が呼び出される。
【００８４】
このように、制約条件として予約条件を指定することにより、他方のオブジェクトの状態遷移を待って状態遷移を行うことができる。
【００８５】
図１７は、本発明の実施の形態における制約条件の例として同期条件を指定する場合の表示例を示す図である。この図において、ターゲット状態「Ａ：：ＯＮ」に関するアクティブ状態「Ｂ：：ＯＮ」には同期条件「←」が指定されている。この場合、オブジェクトＡとＢとは厳密な排他関係にあるわけではなく、オブジェクトＡの状態遷移は行われる。但し、オブジェクトＡの状態遷移が完了すると、下段に記されたイベントがオブジェクトＢに送出される。この下段に記されたイベントは、オブジェクトＢの状態をオフ状態にするものであり、結果としてオブジェクトＡの状態遷移が発生すると、オブジェクトＢの状態遷移が促されることになる。これは、アプリケーションプログラム間で同期をとる際に用いることができる。
【００８６】
図１８は、本発明の実施の形態における制約条件の例として同期条件が指定された場合の動作を示すシーケンス図である。なお、この図においては、図１２と同様に、ユーザインターフェース３１０およびイベントディスパッチャ３２０は省略されている。また、各メソッドのパラメータも一部を除き省略されている。
【００８７】
オブジェクトＡ（３３１）がオフ状態で、オブジェクトＢ（３３２）がオン状態の場合に、オブジェクトＡ（３３１）をオン状態に遷移させるイベントＢＵＴＴＯＮ＿ＯＮが送出されると、オブジェクトＡ（３３１）はそのイベントをＶＲｅｃｅｉｖｅ８６０により受信する。オブジェクトＡ（３３１）はＦｉｒｅメソッド８６１を呼び出し、ターゲット状態をオン状態としてアスペクト３５０のＶＧｕａｒｄメソッド８４２を呼び出す。その結果、制約条件マトリックス３６０における制約条件に同期条件が指定されているため、アスペクト３５０は制約条件を満たす旨をオブジェクトＡ（３３１）に報告する。これにより、オブジェクトＡ（３３１）はアクティブ状態をオン状態に遷移させて、その状態遷移をアスペクト３５０に報告する。その際、アスペクト３５０のＶＥｎｔｒｙメソッド８６３が呼び出される。
【００８８】
アスペクト３５０は、ＶＥｎｔｒｙメソッド８６３によりオブジェクトＡ（３３１）から状態遷移の報告を受けると、制約条件マトリックス３６０を参照して、同期条件が指定されていることを知ると、その同期条件の下段に記されたイベントＥＶＥＮＴ＿ＯＦＦをオブジェクトＢ（３３２）に送出する。オブジェクトＢ（３３２）はそのイベントＥＶＥＮＴ＿ＯＦＦをＶＲｅｃｅｉｖｅ８６４により受信する。オブジェクトＢ（３３２）はＦｉｒｅメソッド８６５を呼び出し、ターゲット状態をオフ状態としてアスペクト３５０のＶＧｕａｒｄメソッド８６６を呼び出す。その結果、制約条件マトリックス３６０における制約条件に定義されていないため、アスペクト３５０は制約条件を満たす旨をオブジェクトＢ（３３２）に報告する。これにより、オブジェクトＢ（３３２）はアクティブ状態をオフ状態に遷移させて、その状態遷移をアスペクト３５０に報告する。その際、アスペクト３５０のＶＥｎｔｒｙメソッド８６７が呼び出される。
【００８９】
このように、制約条件として同期条件を指定することにより、オブジェクトの状態遷移が完了した際に他のオブジェクトに所定のイベントを送出して、同期を実現することができる。
【００９０】
ここで説明した本発明の実施の形態は、複数のアプリケーションプログラム間でハードウェア資源を使用するシステムに広く適用可能である。上述のように、ハードウェア資源は、アプリケーションプログラム間で制約関係を生じさせるものであり、例えばビデオカードのように物理的に独立した物であってもよく、また、ハードウェアやソフトウェアにより実現される所定の機能であってもよい。ここでは、一例として、映像記録装置への適用例を説明する。
【００９１】
図１９は、本発明の実施の形態の適用例としての映像記録装置１００の構成を示す図である。この映像記録装置１００は、カメラ部１０と、記録再生処理部２０と、制御部３０とを備えている。
【００９２】
カメラ部１０は、光学ブロック１１と、カメラ制御部１２と、信号変換器１３と、撮像信号処理部１４と、音声入力部１５と、音声信号処理部１６とを備える。光学ブロック１１は、内部に、被写体を撮像するためのレンズ群、絞り調整機構、フォーカス調整機構、ズーム機構、シャッター機構、フラッシュ機構、および、手ぶれ補正機構などを備える。カメラ制御部１２は、制御部３０から制御信号を受けて、光学ブロック１１に供給する制御信号を生成する。そして、生成した制御信号を光学ブロック１１に供給して、ズーム制御、シャッター制御、および、露出制御などの制御を行なう。
【００９３】
信号変換器１３は、例えばＣＣＤ（Charge Coupled Device）などの撮像素子により構成され、その結像面に、光学ブロック１１を通じた像が結像される。この信号変換器１３は、シャッター操作に応じて制御部３０から供給される画像取り込みタイミング信号を受けて、結像面に結像されている被写体像を撮像信号に変換し、撮像信号処理部１４に供給する。
【００９４】
撮像信号処理部１４は、制御部３０からの制御信号に基づいて、撮像信号についてのガンマ補正やＡＧＣ（Auto Gain Control）などの処理を行なうとともに、撮像信号をデジタル信号としての画像信号に変換する処理も行なう。音声入力部１５は、撮影時の被写体周辺の音声を収集する。この音声入力部１５からの音声信号は音声信号処理部１６に供給される。音声信号処理部１６は、制御部３０からの制御信号に基づいて、音声信号についての補正やＡＧＣなどの処理を行なうとともに、音声信号をデジタル信号に変換する処理も行なう。
【００９５】
記録再生処理部２０は、符号化／復号回路２１と、ディスクインターフェース２３と、出力処理部２４と、バッファメモリ２５とを備える。
【００９６】
符号化／復号回路２１は、カメラ部１０からの画像信号および音声信号や追加記録情報を符号化し多重化して圧縮データに変換する符号化機能を有する。一方、符号化／復号回路２１は、圧縮データから画像信号および音声信号や追加記録情報を分離して復号する復号機能を有する。また、符号化／復号回路２１は、制御部３０からの制御信号に基づき、撮像信号処理部１４からの画像信号に対して、自動ホワイトバランス制御、露出補正制御、デジタルズーム倍率に応じた拡大制御などをさらに行なう。
【００９７】
ディスクインターフェース２３は、符号化／復号回路２１から圧縮データを受けてディスク４９に書き込む。また、ディスクインターフェース２３は、ディスク４９から圧縮データを読み出して符号化／復号回路２１に供給する。出力処理部２４は、制御部３０からの制御により、符号化／復号回路２１からの圧縮データを制御部３０や出力端子２７乃至２９に供給する。バッファメモリ２５は、例えばＳＤＲＡＭなどにより構成され、符号化／復号回路２１における符号化または復号のための作業領域として利用される。
【００９８】
制御部３０は、処理装置３１と、ＲＯＭ（Read Only Memory）３３と、ＲＡＭ（Random Access Memory）３４と、操作入力部４１を接続するための操作入力インターフェース３５と、表示部４２を接続するための表示制御部３６と、メモリカード４３を装填するためのメモリカードインターフェース３７と、手ぶれ補正のために角速度を検出する角速度検出器３８と、撮影時刻を記録するための時計回路３９とがシステムバス３２を介して接続されることにより構成される。
【００９９】
処理装置３１は制御部３０全体の処理を司るものであり、作業領域としてＲＡＭ３４を使用する。ＲＯＭ３３には、カメラ部１０を制御するためのプログラムや、画像信号や音声信号の記録制御および再生制御などを実行するためのプログラムが書き込まれている。
【０１００】
操作入力インターフェース３５に接続される操作入力部４１には、撮影モードと再生モードなどの他のモードとを切り換えるモード切り換えキー、ズーム調整キー、露出調整のためのキー、シャッターキー、動画撮影用キー、表示部４２における表示調整キーなどの複数のキーが設けられている。操作入力インターフェース３５は、操作入力部４１からの操作信号を処理装置３１に伝える。処理装置３１は、操作入力部４１においていずれのキーが操作されたかを判別し、その判別結果に応じた制御処理を行なう。
【０１０１】
表示制御部３６に接続される表示部４２は、例えばＬＣＤ（Liquid Crystal Display）などにより構成され、処理装置３１の制御の下に、カメラ部１０からの画像信号や、ディスク４９から読み出された画像信号を表示する。
【０１０２】
メモリカードインターフェース３７は、符号化／復号回路２１からの圧縮データをメモリカード４３に書き込む。また、メモリカードインターフェース３７は、メモリカード４３から圧縮データを読み出して符号化／復号回路２１に供給する。時計回路３９は、年、月、日、時間、分、秒などを表わす時間情報を生成する。
【０１０３】
角速度検出器３８は、映像記録装置１００に対して外部から加わる角速度を検出するジャイロスコープである。この角速度検出器３８からの角速度情報は、所定間隔毎に処理装置３１に報告されて、手ぶれ補正に利用される。
【０１０４】
このような映像記録装置１００において、各部の制御は処理装置３１上で動作するアプリケーションプログラムにより行われる。また、映像記録装置１００は、一部の機能を変えていくつかのモデルが用意されるのが通例である。例えば、信号変換器１３のＣＣＤのサイズや表示部４２のＬＣＤのサイズを選択できるようにしたり、露出補正制御の機能に差異を設けるようにすることがある。このように異なる機能を有するモデルについて、モデル毎に別々にアプリケーションプログラムを開発するのは効率が良くない。一方、アプリケーションプログラムを共通化しようとすると、各機能を実現するアプリケーションプログラム間の制約関係を調整するためにプログラムの構造が複雑になるという問題がある。本発明の実施の形態によれば、制約関係に起因する状態遷移の際の制約条件を制約条件マトリックス３６０に保持し、アプリケーションプログラム群３３０から独立したアスペクト３５０により制約条件を管理することにより、異なるモデル間でアプリケーションプログラムを容易に流用することができる。
【０１０５】
映像記録装置１００における具体例として、例えば、静止画機能を有効にしてしまうと手振れ補正機能を有効にできなくなる場合がある。記録画素数を所定数以上に高く設定してしまうと、補正のための余裕がなくなってしまい手振れ補正が行えなくなるからである。但し、モデルによっては記録画素数を抑えることにより両者を同時に有効にすることも可能である。このように、静止画機能と手振れ補正機能との間で、モデル（システム）によって排他関係を生じる場合と生じない場合が存在する。このような場合、本発明の実施の形態のように制約条件マトリックス３６０のみを変更することによりアプリケーションプログラムを別個に開発する必要はなくなる。また、この場合、図１０により説明したように、マクロテーブル３６９を利用することも可能である。
【０１０６】
また、映像記録装置１００における他の具体例として、例えば、明るさ調整の制御について、シャッタースピードを切り替えながら明るさを調整するプログラムＡＥ（programmed automatic exposure）機能と、夜間に明るさを一定にする夜間用機能は、共に明るさ調整を制御するものであるため同時に有効にすることができない。この場合、プログラムＡＥモードの状態から夜間用モードに遷移した後、その夜間用モードが解除されたときには、再びプログラムＡＥモードに遷移させる方法や、プログラムＡＥモードに遷移させずに明るさ調整に関連するモードを全て解除させる方法などが考えられる。また、プログラムＡＥモードの状態から夜間用モードへの遷移を一切許さないという方法もある。何れの方法を採用するかは製品の性質などにより随意に決定されるべきものである。本発明の実施の形態によれば、制約条件マトリックス３６０の設定を変更することにより、複雑な制御についても柔軟に対応することができる。
【０１０７】
このように、本発明の実施の形態によれば、制約関係に起因する状態遷移の際の制約条件を制約条件マトリックス３６０に保持し、アプリケーションプログラム群３３０から独立したアスペクト３５０により制約条件を管理することにより、複数のアプリケーションプログラムを組み合わせたシステムの構築が容易になり、また、既存のシステムに新たなアプリケーションプログラムを追加実装することが容易になる。
【０１０８】
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、以下に示すように特許請求の範囲における発明特定事項とそれぞれ対応関係を有するが、これに限定されるものではなく本発明の要旨を逸脱しない範囲において種々の変形を施すことができる。
【０１０９】
すなわち、請求項１において、複数のプログラムは例えばアプリケーションプログラム群３３０に対応する。また、イベント送出手段は例えばイベントディスパッチャ３２０に対応する。また、制約条件保持手段は例えば制約条件マトリックスに対応する。また、状態制御手段は例えばアスペクト３５０に対応する。また、プログラムの内部状態は例えば有限状態機械のオブジェクトに対応する。
【０１１０】
また、請求項３において、制約条件に応じて所定のイベントを他のプログラムに送出する点は例えばアスペクト３５０におけるＶＥｎｔｒｙメソッドの動作に対応する。
【０１１１】
また、請求項４において、システムの関数は例えばマクロ記述に対応する。
【０１１２】
また、請求項６において、イベントメモリは例えばイベントメモリ３８０に対応する。
【０１１３】
また、請求項１０において、複数のプログラムの何れかに対して内部状態を遷移させるイベントが送出されると当該プログラムにおける制約条件を満たすか否かを当該プログラムから状態制御手段に問い合せる手順は例えばステップＳ９３７に対応する。また、制約条件を満たすか否かを状態制御手段が判断する手順は例えばアスペクト３５０におけるＶＧｕａｒｄメソッドに対応する。また、状態制御手段が判断の結果をプログラムに報告するとともに制約条件に応じて所定のイベントを他のプログラムに送出する手順は例えばアスペクト３５０におけるＶＧｕａｒｄメソッドおよびＶＥｎｔｒｙメソッドの動作に対応する。また、制約条件を満たす場合にはプログラムがその内部状態を遷移させるとともに状態制御手段にその遷移が行われた旨を報告する手順は例えばステップＳ９４１に対応する。
【０１１４】
また、請求項１１において、複数のアプリケーションプログラムの何れかに対して内部状態を遷移させるイベントが送出されると当該アプリケーションプログラムにおける制約条件を満たすか否かを当該アプリケーションプログラムが状態制御プログラムに問い合わせる手順は例えばステップＳ９３７に対応する。また、制約条件を満たすか否かを状態制御プログラムが判断する手順は例えばアスペクト３５０におけるＶＧｕａｒｄメソッドに対応する。また、状態制御プログラムが前記判断の結果を前記アプリケーションプログラムに報告するとともに前記制約条件に応じて所定のイベントを前記他のアプリケーションプログラムに送出する手順は例えばアスペクト３５０におけるＶＧｕａｒｄメソッドおよびＶＥｎｔｒｙメソッドの動作に対応する。また、制約条件を満たす場合にはアプリケーションプログラムがその内部状態を遷移させるとともに状態制御プログラムにその遷移が行われた旨を報告する手順は例えばステップＳ９４１に対応する。
【０１１５】
なお、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。
【産業上の利用可能性】
【０１１６】
本発明の活用例として、例えば複数のアプリケーションプログラムを組み合わせて異なるシステムを複数種類開発する際に本発明を適用することができる。
【図面の簡単な説明】
【０１１７】
【図１】本発明の実施の形態におけるプログラム実行制御装置の一構成例を示す図である。
【図２】本発明の実施の形態におけるアプリケーションプログラムの内部状態を表現する有限状態機械モデルを示す図である。
【図３】本発明の実施の形態におけるアプリケーションプログラムの内部状態を表現する有限状態機械クラスの構造を示す図である。
【図４】本発明の実施の形態において図２の有限状態機械モデルを適用した場合の動作例を示すシーケンス図である。
【図５】本発明の実施の形態における受信メソッドＶＲｅｃｅｉｖｅの処理手順を示す図である。
【図６】本発明の実施の形態における発火メソッドＦｉｒｅの処理手順を示す図である。
【図７】本発明の実施の形態におけるイベントキュー３７０の構成例を示す図である。
【図８】本発明の実施の形態における制約条件マトリックス３６０の表示例を示す図である。
【図９】本発明の実施の形態における制約条件マトリックス３６０の構成例を示す図である。
【図１０】本発明の実施の形態における制約条件マトリックス３６０の他の表示例を示す図である。
【図１１】本発明の実施の形態における制約条件の例として後優先条件を指定する場合の表示例を示す図である。
【図１２】本発明の実施の形態における制約条件の例として後優先条件が指定された場合の動作または保留条件が指定された場合の動作の後半を示すシーケンス図である。
【図１３】本発明の実施の形態における制約条件の例として保留条件を指定する場合の表示例を示す図である。
【図１４】本発明の実施の形態における制約条件の例として保留条件が指定された場合の動作の後半を示すシーケンス図である。
【図１５】本発明の実施の形態における制約条件の例として予約条件を指定する場合の表示例を示す図である。
【図１６】本発明の実施の形態における制約条件の例として予約条件が指定された場合の動作を示すシーケンス図である。
【図１７】本発明の実施の形態における制約条件の例として同期条件を指定する場合の表示例を示す図である。
【図１８】本発明の実施の形態における制約条件の例として同期条件が指定された場合の動作を示すシーケンス図である。
【図１９】本発明の実施の形態の適用例としての映像記録装置１００の構成を示す図である。
【符号の説明】
【０１１８】
１０  カメラ部
１１  光学ブロック
１２  カメラ制御部
１３  信号変換器
１４  撮像信号処理部
１５  音声入力部
１６  音声信号処理部
２０  記録再生処理部
２１  符号化／復号回路
２３  ディスクインターフェース
２４  出力処理部
２５  バッファメモリ
２７〜２９  出力端子
３０  制御部
３１  処理装置
３２  システムバス
３３  ＲＯＭ
３４  ＲＡＭ
３５  操作入力インターフェース
３６  表示制御部
３７  メモリカードインターフェース
３８  角速度検出器
３９  時計回路
４１  操作入力部
４２  表示部
４３  メモリカード
４９  ディスク
１００  映像記録装置
３１０  ユーザインターフェース
３２０  イベントディスパッチャ
３３０  アプリケーションプログラム群
３４０  ハードウェア資源
３５０  アスペクト
３６０  制約条件マトリックス
３６９  マクロテーブル
３７０  イベントキュー
３８０  イベントメモリ
【図１】
2005275546.tif 000003
【図２】
2005275546.tif 000004
【図３】
2005275546.tif 000005
【図４】
2005275546.tif 000006
【図５】
2005275546.tif 000007
【図６】
2005275546.tif 000008
【図７】
2005275546.tif 000009
【図８】
2005275546.tif 000010
【図９】
2005275546.tif 000011
【図１０】
2005275546.tif 000012
【図１１】
2005275546.tif 000013
【図１２】
2005275546.tif 000014
【図１３】
2005275546.tif 000015
【図１４】
2005275546.tif 000016
【図１５】
2005275546.tif 000017
【図１６】
2005275546.tif 000018
【図１７】
2005275546.tif 000019
【図１８】
2005275546.tif 000020
【図１９】
2005275546.tif 000021