(57)【要約】データオブジェクトが一方の処理オブジェクトから別の処理オブジェクトへ、各処理オブジェクトに対応したキューを用いて転送されるパイプラインシステム用のソフトウェアアーキテキチャである。本発明において、データオブジェクト用の宛先キューは、データオブジェクトに対応したポインタオブジェクトを現在処理オブジェクト内にプログラミングするのではなく、現在処理オブジェクトに、データオブジェクトに対応したポインタオブジェクトを問い合わせさせることによって決定される。このようにして、データオブジェクトは、専用のコマンドパスを決定する。宛先処理オブジェクトは、現在処理オブジェクトによるデータオブジェクトの処理後の結果状態に応じて決定される。たとえば、現在処理オブジェクトの処理結果が正常である場合、パスオブジェクトが一つの宛先処理オブジェクトを指示し、異常である場合、別の宛先処理オブジェクトを指示する。
2004516573.tif 000002
【特許請求の範囲】
【請求項１】
一方のプロセッシングオブジェクトから別のプロセッシングオブジェクトへデータを系統的に転送するためキューを使用してソフトウェアアーキテクチャ内のデータオブジェクトのフローを決定する方法であって、
キュー識別子をコマンドパスオブジェクトに格納する手順と、
第１のプロセッシングオブジェクトにおいてデータオブジェクトを受け取り、処理する手順と、
該データオブジェクト中の識別子に応答して第２のプロセッシングオブジェクトに対応したキューを識別する手順と、
該データオブジェクトを該識別する手順において識別されたキューに入れる手順と、
を有する方法。
【請求項２】
該識別する手順は、該処理する手順の結果を判定する手順を含む、請求項１記載の方法。
【請求項３】
該識別する手順は、該処理する手順の結果を判定し、該結果を該キューに対応付ける手順を含む、請求項２記載の方法。
【請求項４】
一方のプロセスから別のプロセスへデータを系統的に転送するためキューが使用されるソフトウェアアーキテクチャにおけるデータのフローを決定する方法であって、
第１のプロセッシングオブジェクトによって、第１のデータオブジェクトのデータ部分にプロセスを実行する手順と、
該第１のデータオブジェクトの標識部分から該第１のデータオブジェクトが転送されるべき第１のキューを識別する手順と、
第２のデータオブジェクトを生成するため該第１のデータオブジェクトの該標識部分を変更する手順と、
該第２のデータオブジェクトに該プロセスを実行する手順と、
該第２のデータオブジェクトが転送されるべき第２のキューを識別する手順と、
を有する方法。
【請求項５】
該プロセスを実行する手順の結果を判定する手順を更に有し、
該キューを識別する手順は、該判定する手順に応じて該第２のキューを識別する、
請求項４記載の方法。
【請求項６】
第１のプロセッシングオブジェクトから第２のプロセッシングオブジェクトと第３のプロセッシングオブジェクトのうちの選択された一方へのデータオブジェクトの転送がデータオブジェクトを選択された一方のプロセッシングオブジェクトのキューへ入れることによって行われる、パイプライン型ソフトウェアであって、
各データオブジェクトに対応するコマンドパスオブジェクトが定義され、
該コマンドパスオブジェクトのうちの少なくとも一つは、該第２のプロセッシングオブジェクトと該第３のプロセッシングオブジェクトのうちの少なくとも一方の標識を収容し、
該第１のプロセッシングオブジェクトは、該第１のプロセッシングオブジェクトによって処理された第１のデータオブジェクトが、該第１のデータオブジェクトに対応する該コマンドパスのうちの一つに応じて、該第２のプロセッシングオブジェクトと該第３のプロセッシングオブジェクトのうちの該少なくとも一方のキューに入れられることを保証する結果を生ずるプロセスを定義する、
ソフトウェア。
【請求項７】
該プロセスは、該第１のプロセッシングオブジェクトのサブプロセスの結果の指標を生成し、
該第１のプロセッシングオブジェクトによって処理された該第１のデータオブジェクトは、該第１のデータオブジェクトに対応した該コマンドパスオブジェクトの一方、及び、該指標に応じて、該第２のプロセッシングオブジェクトと該第３のプロセッシングオブジェクトのうちの該少なくとも一方の該キューに入れられる、
請求項６記載のソフトウェア。
【発明の詳細な説明】
【０００１】
〔発明の背景〕
−発明の分野
本発明は、ソフトウェア設計に係り、特に、データオブジェクト毎の特殊処理要求とは独立に処理ノードを定義できるようにさせるパスオブジェクトを含むデータオブジェクトを与えることにより、決定論的な振る舞いを容易に行わせる実時間組み込みシステム用のソフトウェア設計用のメカニズムに関する。
【０００２】
−背景
オブジェクト指向設計は、
（１）オブジェクトに関して問題を分解し、
（２）システムの静的（オブジェクト構造）設計と動的（処理アーキテクチャ）設計に対して別々のモデルを利用する、
設計方法である。オブジェクトモデルの文脈において、「オブジェクト」は、状態、振る舞い、及び、アイデンティティを保有するプログラムの実体（エンティティ）である。用語「クラス」は、あるタイプのオブジェクトの組の共通の構造及び振る舞いを定義するため適用される。
【０００３】
オブジェクトモデルは、抽象化、カプセル化、モジュール化及び階層化の４個の主要な要素を含む．抽象化は、オブジェクトの基本的な振る舞いを、その実現形態から分離することができる。カプセル化は、オブジェクトの基本的特性に寄与しないオブジェクトの細部を隠蔽することができる。モジュール化は、論理的に関連性のある抽象概念をクラスタリングすることができ、これにより、再利用を促進する。階層化は、別のオブジェクトの振る舞いを継承することによって、或いは、望ましい振る舞いを実現するため他のオブジェクトを包含することによって、オブジェクトの共通性を利用することが可能である。
【０００４】
オブジェクト指向システム内の各オブジェクトは、インタフェース及びそのインプリメンテーション（実装）とによって規定される。オブジェクトの外部のソフトウェアクライアントは、完全にオブジェクトのインタフェースに依存し、オブジェクトのインプリメンテーションの細部には依存しない。オブジェクトのインプリメンテーションは、オブジェクトの振る舞いを定義するメカニズム及び細部を与える。オブジェクト指向プログラムは、インタフェースを介して相互に関連するオブジェクトの集まりである。
【０００５】
ある意味で、各オブジェクトは、ブラックボックスである。オブジェクトのインタフェースは、ブラックボックスが送受信するメッセージにより構成される。オブジェクトは、実際には、コード（コンピュータ命令の系列）と、データ（命令が作用する情報）とを含む。従来、コード及びデータは区別されていた。たとえば、Ｃ言語の場合に、コードの単位は、関数と呼ばれ、データの単位は構造体と呼ばれる。関数及び構造体は、Ｃ言語において形式的には関連していない。Ｃ関数は、二つ以上の型の構造体に基づいて作用し、二つ以上の関数が同じ構造体に作用し得る。しかし、オブジェクト指向ソフトウェアの場合には事情が異なる。オブジェクト指向プログラミングにおいて、コード及びデータは、単一の不可視的なもの、オブジェクトに統合される。オブジェクトを使用するプログラマは、オブジェクトが定義された後には、オブジェクトの内部を調べる必要がない。オブジェクトの内部プログラミングとの全ての連絡は、メッセージ、すなわち、オブジェクトのインタフェースを介して行われる。
【０００６】
コンピュータは、典型的に、数個のプロセス、すなわち、スレッドを同時に実行させる。各スレッドは、固有のコンピュータ命令のストリームを保有し、他のスレッドとは無関係に動作する。コンピュータ命令のストリームは、典型的に、「プロセッシングオブジェクト」と呼ばれる一つ以上のオブジェクトにカプセル化される。オペレーティングシステムは、ＣＰＵ（中央制御ユニット）時間を、優先度及びその他の規準に基づいて、各スレッドに割り当てる役目を果たす。
【０００７】
プロセスアーキテクチャを定義する際に、一部のオブジェクト指向プログラムは、パイプライン方式と称されるアプローチを使用する。パイプライン方式は、プロセッシングオブジェクト間でデータオブジェクトの転送を仲介するためキューを使用する。幾つかの処理スレッドが生成され、入力キューと関連付けられる。パイプライン方式システムの場合、スレッドは、入力キューからデータオブジェクトを取得し、データオブジェクトを処理し、処理されたデータオブジェクトを別のキュー（他のスレッドの入力キュー）に入れる。
【０００８】
プロセッシングオブジェクトによる処理の途中でデータオブジェクトに対して生じる事象は、プロセッシングオブジェクトによって処理された後にデータオブジェクトへ送られるべきキューを決定する。すなわち、プロセッシングオブジェクトは、データオブジェクトの処理が終了した後に、データオブジェクトを収容すべきキューがどのプロセッシングオブジェクトのキューであるかを知るためには、ロジックを構築しておく必要がある。
【０００９】
オブジェクト指向設計及び設計パターンは、機器用の制御メカニズムのような現実世界アプリケーションのため開発されたシステムである実時間組み込みシステムに適用可能である。このような実時間システムは、厳密なタイミング期限を満たすように要求され、予測可能な応答時間をもち、過負荷状態でも安定でなければならない。このようなシステムは、どのような事象が発生してもある一定の時間までに応答することが保証され得るならば、決定論的である、と言われる。しかし、コマンド（データオブジェクト）毎に複雑な処理が要求されるので、大量の決定論的処理は困難である。各コマンドは、構文解析、解釈、外挿、実行、状態更新、及び、データメッセージ若しくはデータオブジェクトをキューに入れたオブジェクトへのフィードバックを要求する。１ステップ内でこれらの全ての実行しようとすると、厳格なタイミング期限を満たすことが難しい。大規模タスクをより小さい処理しやすいタスクに分割すると、システム内を移動するコマンドを追跡することが困難になる。そのため、タスクをオブジェクト指向システム内のタスクとしてきれいに分割することができ、かつ、システムのあちらこちらを動き回るデータオブジェクトを追跡することができるアーキテクチャを提供する設計が必要になる。
【００１０】
〔発明の概要〕
本発明は、プロセッシングオブジェクトをシステム内で局所的に接続するためパスオブジェクトの生成を可能にする。任意の個数のパスオブジェクトを生成できる。この設計は、コマンドオブジェクト及びプロセッシングオブジェクトを、システムを通るコマンドオブジェクトのパスについての知識から切り離す。パスオブジェクト自体は、システム内で利用可能なキューの編成である。各ステップで、正常パス用の１個のキューと、エラーパス用の１個のキューと、他の処理結果用の任意の数の他のキューが存在する。
【００１１】
パス内の各プロセッシングには入力キューが関連付けられる。各コマンドオブジェクトは、パスオブジェクトが関連付けられる。コマンドがプロセッシングオブジェクトの入力キューから取得されたとき、そのコマンドは処理され、パス（たとえば、正常パス若しくはエラーパス）内の次のキューへ送られる。これは、各プロセッシングオブジェクトが、コマンドの細部或いはシステム内のタスクによって妨げられることなく、そのタスクに集中することを可能にさせる。これは、特に、大量の決定論的コマンドをアドレッシングする際に有効である。なぜならば、重大なプロセッシングオブジェクトのスケジュール及び実行時間を厳格に制御できるからである。コマンドパス内のその他のステップは、より低い優先順位で処理してもよい。
【００１２】
本質的に、データがキューを用いてスレッド間で転送されるオブジェクト指向システムの環境において、本発明は、所定のデータオブジェクト用の宛先キューが当該データオブジェクトに対し定義されたパスオブジェクトに依存するようにさせる。一実施例において、データオブジェクトの各インスタンスはパスオブジェクトに対応する。プロセッシングオブジェクトがデータオブジェクトを処理し終えたとき、プロセッシングオブジェクトは、データオブジェクトを収容するキューを決定するためパスオブジェクトに問い合わせをする。かくして、コマンドパスに変更を加える必要がある場合、それは、データオブジェクトを処理するプロセッシングオブジェクトに変更を加えるのではなく、パスオブジェクトに定義される。
【００１３】
以下では、本発明がよりよく理解されるように、幾つかの好ましい実施例に関して、添付図面を参照して、本発明を説明する。図面に関しては、図示されている詳細は、一例であり、本発明の好ましい実施例を例示的に説明するためのものであり、本発明の原理及び概念的な局面の最も有効で、かつ、容易に理解されるであろうと考えられる記述を提供するために提示されている。この点に関して、本発明の基本的な理解のために必要以上に詳細に本発明の構成上の細部を説明しようとしていないが、当業者は、添付図面を参照して以下の説明を読むことによって、本発明の幾つかの実施形態がはっきりと理解できるであろう。
【００１４】
〔好ましい実施例の詳細な説明〕
図１を参照するに、プログラム内のプロセッシングオブジェクトは、最初のステップＳ１００において、キューからデータを取得する。プロセッシングオブジェクトは、ステップＳ１１０において、データに関してデータ操作を実行する。プロセッシングオブジェクトは、データオブジェクトの処理に関係する状態、たとえば、ステップＳ１１０における処理が正常に完了したか、又は、異常終了したかを判定する。データオブジェクトを収容すべき宛先キューを決定するため、プロセッシングオブジェクトは、ステップＳ１２０において、データオブジェクトのパスオブジェクト中のデータを調べるか、又は、使用する。次に、プロセッシングオブジェクトは、ステップＳ１３０において、データオブジェクトを参照先キューに入れる。
【００１５】
ステップＳ１１０における、データオブジェクトに関連した状態を判定するステップは、本発明に不可欠なステップではない。一実施例によれば、状態は、処理の正常結果及び異常結果を含む。
【００１６】
図２を参照するに、本発明の一実施例によれば、Ｎ番目のデータオブジェクト１１０が、第１プロセッシングオブジェクト１００のためのキュー１４１に収容される。第１プロセッシングオブジェクト１００は、Ｎ番目のデータオブジェクト１１０を処理し、Ｎ番目のデータオブジェクトのパスオブジェクト１１５を問い合わせる。パスオブジェクト１１５は、キュー標識のテーブルを格納する。第１プロセッシングオブジェクト１００が内部処理の結果を判定したとき、この結果の標識は、Ｎ番目のデータオブジェクトのパスオブジェクト１１５に保持されたインジケータ１８１、１８２を指示する。インジケータは、Ｎ番目のデータオブジェクト１１０が次に収容されるべき特定のキューを参照する。本例の場合に、状態は正常（ノーマル）であり、選択されたインジケータ１８１が指定するキュー１４２は、第２プロセッシングオブジェクト１２０に対するキューである。第１プロセッシングオブジェクト１００は、その旨を示すメッセージの受け取りに応じて、Ｎ番目のデータオブジェクト１１０をキュー１４２に入れる。
【００１７】
上記のパイプライン方式の構造の結果として、このシステム内のデータオブジェクトは、パスオブジェクトとの関連性を用いて固有の運命を決定する。その結果として、経路決定（ルーティング）問題は、プロセッシングオブジェクト内に経路決定問題を職説的にプログラミングするのではなく、パスオブジェクト毎に定義され、調節され得る。各プロセッシングオブジェクトは、パスオブジェクトが処理の終了後にデータオブジェクトの宛先を決定するため問い合わせされることを保証する。プログラマが情報のパッケージを選択する方法に応じて、単独のパスオブジェクトは多数のデータオブジェクトのために利用され、逆に多数のデータオブジェクトが単独のパスオブジェクトのために利用される、ことに注意する必要がある。
【００１８】
たとえば、プロセッシングオブジェクトがその処理を正常終了したか、又は、異常終了したかの条件は、与えられない場合がある。パスオブジェクトは、宛先キューを指定する現在プロセッシングオブジェクトのポインタだけを伝搬する場合がある。また、宛先キューは、単なる静的ポインタではなく、式から導出してもよい。さらに、Ｎ番目のデータオブジェクトのパスオブジェクト１１５内のパスデータは、データオブジェクト自体にそのまま組み込んでもよい。
【００１９】
図３は、システム内のオブジェクトの構造及びオブジェクト間の関係を示すＵＭＬクラス（静的モデル）の説明図である。各矩形状のボックス、たとえば、パスクラス２１０は、クラスを表現する（一つ以上のオブジェクトである可能性がある。）。ボックスは、水平方向に３個のセクション、たとえば、セクション２１１、２１２及び２１３に分割される。上部セクション、たとえば、セクション２１１は、クラス名を含む。中間セクション、たとえば、セクション２１２は、［＋−］［ｎａｍｅ］：［ｔｙｐｅ］の記法によって表現されるクラスデータを収容する。ここで、”＋”及び”−”は、それぞれ、公開データ及び非公開データを示し、”ｎａｍｅ”は所与の型のデータの固有インスタンスに対する識別子を表わし、”ｔｙｐｅ”はデータの型を表わす（別のクラスを表わす場合もある）。下部セクション、たとえば、セクション２１３は、クラス関数（計算コード）を収容する。クラス関数は、
［＋−］［ｆｕｎｃ＿ｎａｍｅ」（［ａｒｇ＿Ｎ＿ｎａｍｅ］：［ｔｙｐｅ＿Ｎ］）：［ｆｕｎｃ＿ｔｙｐｅ］
の記法によって表現され、”＋”及び”−”は、それぞれ、公開関数及び非公開関数を表わし、”ｆｕｎｃ＿ｎａｍｅ”は関数名を表わし、”ａｒｇ＿Ｎ＿ｎａｍｅ”は関数へ渡されたＮ番目の引数を示し、”ｔｙｐｅ＿Ｎ”はＮ番目の引数の型を表わし、”ｆｕｎｃ＿ｔｙｐｅ”はこの関数による返値の型である。
【００２０】
図３において、プロセッサクラス２４０はプロセッシングオブジェクトを表現する。プロセッサクラス２４０は、入力キューと、コマンドデータを処理するための関数とを含む。キュークラス２２０は、コマンドのキューを表わす。キュークラスは、キュー内の次のコマンドオブジェクトを返す関数、及び、コマンドオブジェクトをキューに追加する関数を含む。コマンドクラス２３０は、プロセッサクラス２４０のプロセッシングオブジェクトインスタンスが処理するであろうデータを表現する。コマンドクラスは、ステップ変数を用いて、コマンドパス内の位置を追跡する。コマンドクラスは、一つのパスと、次のキューを返すための補助関数と、を含む。パスクラス２１０は、システムを通る固有パスを表現する。固有パスは、図３に示されたキュー構造体２００のアレイとして定義してもよい。
【００２１】
図４は、クラスの説明図に定義されたオブジェクトのインスタンス間で考えられる相互作用の一例を表わすＵＭＬシーケンス（動的モデル）の説明図である。同図の上部に水平に並べて配置されたボックスは、オブジェクト（図３の同じクラスのインスタンス）を表現する。表記は、［ｎａｍｅ］：［ｔｙｐｅ］であり、”ｎａｍｅ”は、”ｔｙｐｅ”がクラス型のインスタンスを固有に識別する。各オブジェクトから下へ延びる破線は、オブジェクトのライフラインである。ライフラインの上に重ねられたボックスは、夫々のオブジェクトの行動を表現する。行動ボックス間の水平線は、オブジェクト間のメッセージを表現し、矢印はメッセージのフロー方向を表わしている。各メッセージの上のテキストは、メッセージに属する関数呼び出しの名前である。時間は図の上から下の方向へ進む。
【００２２】
図４において、図示されていないイベントが第１ノード２４１を活性化する。次に、第１ノード２４１は、第１キュー２２１へ発呼（メッセージを送信）する。具体的には、ＧｅｔＮｅｘｔＣｏｍｍａｎｄを送信する。第１キュー２２１は、次の利用可能なコマンドオブジェクト（データオブジェクト）である第Ｎコマンド２３１『システム内の任意のコマンドの汎用表現）を返す。次に、第１ノード２４１は、コマンドオブジェクトに関して必要な処理を実行する。処理が終了したとき、第１ノード２４１は、第Ｎコマンド２３１上のＧｅｔＮｅｘｔＮｏｒｍａｌＱｕｅｕｅコマンドを呼び出す。第Ｎコマンド２３１は、呼び出しをパス、すなわち、第Ｎパス２５１（第Ｎコマンド２３１のパスオブジェクトの汎用表現）上のＮｅｘｔＮｏｒｍａｌＳｔｅｐに任せ、そのステップを引数として渡す。第Ｎパス２５１は、本例では、次の正常キューである、要求されたキューオブジェクト（本例の場合、第２キュー２２２）を返す。最後に、第１ノード２４１は、第２キュー２２２上のＡｄｄＴｏＱｕｅｕｅを呼び出し、現在コマンドオブジェクト２３１を引数として渡す。これにより、図４に示されたイベントのシーケンスが終了する。典型的に、シーケンスは続いて繰り返される。
【００２３】
上述の実施例において、パスオブジェクトは、パスオブジェクトが関係するデータオブジェクトとは別のオブジェクトとして説明されているが、パスオブジェクトは、当然に、データオブジェクト内に組み込んでもよいことに注意する必要がある。
【００２４】
当業者にとって明らかであるように、本発明は、上述の説明用の実施例の詳細に限定されることはなく、本発明は、本発明の精神若しくは基本的属性を失うことなく、他の特定の形態で実施される。したがって、本発明の実施例は、全ての局面において、例示であると解されるべきであり、限定的に解釈されるべきではなく。本発明の範囲は、上述の説明によって定められるのではなく、請求項の記載によって示されるものであり、請求項に記載された事項と等価な意味と範囲に含まれるすべての変更は、本発明の範囲に包含されることが意図されている。
【図面の簡単な説明】
【図１】
本発明の一実施例によるデータオブジェクトに応じて宛先キューを決定するためプロセッシングオブジェクトの処理を説明するフローチャートである。
【図２】
本発明の一実施例によるオブジェクト間の情報フローを説明するブロック図である。
【図３】
本発明の一実施例によるクラスを例示するＵＭＬ（統一モデリング言語）の説明図である。
【図４】
本発明の一実施例のための実行パスの一例を示すＵＭＬシーケンスの説明図である。
【図２】
2004516573.tif 000003
【図３】
2004516573.tif 000004
【図４】
2004516573.tif 000005
【国際公開パンフレット】
2004516573.tif 000006
2004516573.tif 000007
2004516573.tif 000008
2004516573.tif 000009
2004516573.tif 000010
2004516573.tif 000011
2004516573.tif 000012
2004516573.tif 000013
2004516573.tif 000014
2004516573.tif 000015
2004516573.tif 000016
2004516573.tif 000017
【国際公開パンフレット（コレクトバージョン）】
2004516573.tif 000018
【国際調査報告】
2004516573.tif 000019
2004516573.tif 000020
2004516573.tif 000021