(57)【要約】  本発明は、フェージングシステム、およびソフトウェアシステムの方法を含む。本発明のいくつかの実施形態では、フェージングシステムは、多層フェージング空間を含み、そこでは、ソフトウェアシステム内のオペレーションは、フェーズまたはサブフェーズに制約される。オペレーションは、指定されたフェーズにおいてのみ実行される。したがって、大規模で複雑なソフトウェアシステムでは、不適切な結果に至りうるオペレーションは同時に実行されず、特定の順序に従う。本発明は、さらに、ソフトウェア属性としてフェーズ制約をソフトウェアコードに導入するデータ構造体も実現する。
2008539516.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンポーネントを有するコンピュータシステム用の複数の命令からなるコンピュータプログラムを符号化するコンピュータプログラム製品であって、前記コンポーネントは、
ソフトウェアコンポーネントの２つまたはそれ以上の集合を形成する複数のソフトウェアコンポーネントと、
第１のフェーズ空間により特徴付けられる第１のフェーズドメインに制約されたソフトウェアコンポーネントの第１の集合と、
第２のフェーズ空間により特徴付けられる第２のフェーズドメインに制約されたソフトウェアコンポーネントの第２の集合とを含むことを特徴とするコンピュータプログラム製品。
【請求項２】
前記第１のフェーズ空間は、マスタフェーズ空間であることを特徴とする請求項１に記載のコンピュータプログラム製品。
【請求項３】
前記第２のフェーズドメインは、前記第１のフェーズドメインのサブフェーズドメインであり、サブフェーズ空間により特徴付けられることを特徴とする請求項１に記載のコンピュータプログラム製品。
【請求項４】
前記サブフェーズドメインは、さらに、１つまたは複数の他のサブフェーズ空間により特徴付けられる１つまたは複数の他のサブフェーズドメインを含むことを特徴とする請求項３に記載のコンピュータプログラム製品。
【請求項５】
前記第１のフェーズドメインおよび前記第２のフェーズドメインは、直交していることを特徴とする請求項１に記載のコンピュータプログラム製品。
【請求項６】
さらに、第１のフェーズドメインを制御するマスタディレクタを備えることを特徴とする請求項１に記載のコンピュータプログラム製品。
【請求項７】
さらに、
前記第１のフェーズドメインの下で１つまたは複数のサブフェーズ空間を制御する１つまたは複数のサブディレクタと、
前記１つまたは複数のソフトウェアコンポーネントの実行を前記サブディレクタにより制御される前記サブフェーズのうちの１つまたは複数に制約する前記サブディレクタのうちの１つに登録された１つまたは複数のソフトウェアコンポーネントとを含むことを特徴とする請求項６に記載のコンピュータプログラム製品。
【請求項８】
さらに、前記１つまたは複数のソフトウェアコンポーネントの実行を前記マスタディレクタにより制御される前記フェーズのうちの１つまたは複数に制約する前記マスタディレクタに登録された１つまたは複数のソフトウェアコンポーネントを含むことを特徴とする請求項６に記載のコンピュータプログラム製品。
【請求項９】
前記１つまたは複数のサブディレクタは、前記マスタディレクタに登録され、前記マスタディレクタにより制御されることを特徴とする請求項６に記載のコンピュータプログラム製品。
【請求項１０】
前記第１のフェーズに制約されたすべてのメソッドが完了し、前記第２のフェーズに制約されたすべてのメソッドが完了した結果、コンピュータオペレーションが完了することを特徴とする請求項１に記載のコンピュータプログラム製品。
【請求項１１】
ソフトウェアシステム内の複数のメソッドの実行を構造化するコンピュータにより実装された方法を実行するための複数の命令からなるコンピュータプログラムを符号化するコンピュータプログラム製品であって、前記方法は、
第１のフェーズに遷移することと、
第１のメソッドの実行を前記第１のフェーズに制約することと、
１つまたは複数の他のフェーズに遷移することと、
１つまたは複数の他のメソッドの実行を前記１つまたは複数の他のフェーズに制約することとを含むことを特徴とするコンピュータプログラム製品。
【請求項１２】
前記第１のフェーズは、要求フェーズ、更新フェーズ、または再有効化フェーズのうちの１つであることを特徴とする請求項１１に記載のコンピュータプログラム製品。
【請求項１３】
前記第１のフェーズは、２つまたはそれ以上サブフェーズを有することを特徴とする請求項１１に記載のコンピュータプログラム製品。
【請求項１４】
前記２つまたはそれ以上の他のサブフェーズは、同意サブフェーズおよびコミットまたはアボートサブフェーズを含むことを特徴とする請求項１３に記載のコンピュータプログラム製品。
【請求項１５】
前記２つまたはそれ以上のサブフェーズは、マークサブフェーズおよび最終マークサブフェーズを含むことを特徴とする請求項１３に記載のコンピュータプログラム製品。
【請求項１６】
前記２つまたはそれ以上のサブフェーズは、プラグサブフェーズおよびプレイサブフェーズを含むことを特徴とする請求項１３に記載のコンピュータプログラム製品。
【請求項１７】
前記プラグサブフェーズは、さらに、コンストラクトサブフェーズ、構成サブフェーズ、および初期化サブフェーズを含むことを特徴とする請求項１６に記載のコンピュータプログラム製品。
【請求項１８】
前記第１のメソッドは、前記メソッド内のフェーズ制約属性により前記第１のフェーズに制約されることを特徴とする請求項１１に記載のコンピュータプログラム製品。
【請求項１９】
データ構造体を格納したコンピュータプログラム製品であって、前記データ構造体に関連するオペレーションを指定されたフェーズに制限するフェーズ制約属性を含むデータフィールドを含むことを特徴とするデータ構造体を格納したコンピュータプログラム製品。
【請求項２０】
前記フェーズ制約属性は、呼び出し制約、コンストラクタ制約、または参照制約のうちの１つを含むことを特徴とする請求項１９に記載のコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションフレームワークのフェージングモデルに関する。
【背景技術】
【０００２】
一般に、ソフトウェアシステムは、コンピュータ内のプロセスを実行することによりオペレーションを完了する。多くの場合、単一のプロセスに、複数の単純なタスクまたはメソッドが含まれうる。プロセスを正常に完了するために、これらの単純メソッドが特定の順序で完了されなければならないが、それは、１つの単純メソッドから得られた結果は、他方の単純メソッドへの入力であってよいからである。これらのメソッドで、適切な入力を受け取る前に実行しようとする場合、またはメソッドからタイムリーでない結果が得られる場合、プロセス全体が失敗する可能性がある。そのため、ソフトウェアシステム内でのメソッドの実行順序は、非常に重要なものである。
【０００３】
ソフトウェア開発者の場合、メソッドの実行順序は、ソフトウェアコードを開発する際に大きな問題となる。一般的に、ソフトウェアシステムにおけるメソッドは、他のメソッドを呼び出して、それらの他のメソッドが何らかのオペレーションの実行および提供を行うようにすることができる。ソフトウェア開発者は、メソッドの呼び出し順序に注意し、呼び出しの順序に関係なくどのような状況でも動作するコードを作成しなければならない。しかし、残念なことに、どのような条件でも動作する適応性の高い複雑なコードを開発することは、極めて困難である。ソフトウェアアプリケーションが大規模化し、複雑度を増すと、呼び出しの可能な順序付けが爆発的に増大し、メソッドの呼び出しの順序付けを正しく実装することが非常に困難になる。ソフトウェア開発者にのしかかる負担は、プロセスが適切に実行されるために返される結果が特定の順序で到来しなければならない複数の異なるメソッドを呼び出す複数のメソッドがある場合に、無視できないくらいの規模になりうる。同様に、ソフトウェア開発者は、メソッドでさまざまな動作シナリオにおいてさまざまな呼び出しを行う適応性の高いコードをテストすることが困難である。
【０００４】
本発明がなされたのは、以上の考慮事項および他の考慮事項に関してである。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
この「発明の開示」では、以下の「発明を実施するための最良の形態」でさらに説明される簡素化された形式の概念の選択を導入する。この「発明の開示」は、請求対象の鍵となる特徴または本質的特徴を明示することを意図しておらず、また請求対象の範囲を確定する補助として使用されることも意図していない。
【０００６】
本発明は、コンピュータシステム全体を通してソフトウェアメソッドの実行を制約するようにするものである。一般的に、本発明は、ソフトウェアメソッドの実行を２つまたはそれ以上のフェーズに制約する多層フェージングモデル（ｍｕｌｔｉ−ｔｉｅｒｅｄ  ｐｈａｓｉｎｇ  ｍｏｄｅｌ）を構成するものであり、それぞれのフェーズは場合によっては２つまたはそれ以上のサブフェーズを有する。フェーズは、ソフトウェアシステムのメソッドをパーティション分割する動作状態である。１つのパーティション内のすべてのメソッドは、特定のフェーズでの実行のみに制約される。フェーズドメイン（ｐｈａｓｅ  ｄｏｍａｉｎ）は、ソフトウェアコンポーネントの集合に対しフェーズ空間（ｐｈａｓｅ  ｓｐａｃｅ）内の共通フェージング（ｃｏｍｍｏｎ  ｐｈａｓｉｎｇ）に関する同意が得られている場合に作成される。フェーズ空間により、フェーズの有効なシーケンスが決定される。本発明のいくつかの実施形態では、フェーズ空間は、ソフトウェアコンポーネントに関して有効なフェーズおよび有効なフェーズ遷移を決定する有限有向グラフである。
【課題を解決するための手段】
【０００７】
本発明のいくつかの実施形態では、ソフトウェアコンポーネントは、フェーズ制約（ｐｈａｓｅ  ｃｏｎｓｔｒａｉｎｔ）に左右される。フェーズ制約は、特定のソフトウェアプログラムのコンテキストにおいて有効なフェーズを制限する静的制約である。フェーズ制約は、ソフトウェアプログラムセクションに適用され、これにより、そのソフトウェアプログラムセクションが実行される場合に、実行スレッドは必ず、制約を受け入れるフェーズにあることになる。フェーズ制約を適用するために、ソフトウェアコンポーネントは、フェーズ制約属性を形成するデータ構造体を備えることができる。フェーズ制約属性は、ソフトウェアコンポーネントのランタイムメタデータの一部であってよい。
【０００８】
本発明のいくつかの実施形態では、コンピュータ可読媒体は、第１のフェーズドメインを占有する複数のコンポーネントを含む。いくつかの実施形態では、ソフトウェアコンポーネントの第１の部分集合は、第１のサブフェーズドメインを占有し、ソフトウェアコンポーネントの第２の部分集合は、第２のサブフェーズドメインを占有する。本発明のいくつかの実施形態では、サブフェーズとは、親フェーズの下でグループ分けされたフェーズのことである。
【０００９】
本発明は、一実施形態において、ソフトウェアシステム内で複数のメソッドの実行を複数のフェーズにパーティション分割する方法を提示する。メソッドは、まず、場合によっては２つまたはそれ以上のサブフェーズを有する第１のフェーズに遷移する。メソッドの第１の集合の実行は、第１のフェーズに制約される。次いで、コンピュータシステムは、１つまたは複数の他のフェーズに遷移し、そこで、メソッドの１つまたは複数の他の集合の実行が１つまたは複数の他のフェーズに制約される。最後に、コンピュータシステムは、１つまたは複数の他のフェーズに遷移する。
【００１０】
本発明のいくつかの実施形態では、ソフトウェアシステムも提示される。ソフトウェアシステムは、ソフトウェアシステム全体に対するフェーズの集合を制御するマスタディレクタコンポーネント（ｍａｓｔｅｒ  ｄｉｒｅｃｔｏｒ  ｃｏｍｐｏｎｅｎｔ）を備える。ディレクタは、フェーズ空間内のフェーズの遷移を制御するソフトウェア構成要素である。いくつかの実施形態では、１つまたは複数のサブディレクタが、マスタディレクタに登録され、サブフェーズの１つまたは複数の集合を制御する。１つまたは複数のコンポーネントが、１つまたは複数のディレクタに登録され、１つまたは複数のフェーズにおいてのみメソッドを実行するよう制約される。
【００１１】
本発明は、コンピュータプロセス、コンピューティングシステム、またはコンピュータプログラム製品などの製造品として実装されうる。コンピュータプログラム製品は、コンピュータシステムにより、またコンピュータプロセスを実行する命令からなるコンピュータプログラムを符号化することにより、読み取り可能なコンピュータ記憶媒体であってよい。コンピュータプログラム製品は、さらに、コンピューティングシステムにより、またコンピュータプロセスを実行する命令からなるコンピュータプログラムを符号化することにより、読み取り可能な搬送波上の伝搬信号であってもよい。
【００１２】
本発明およびその改善をより完全に理解するには、以下で簡単に説明した付属の図面、本発明の実施形態の以下の詳細な説明、および付属の請求項を参照するとよい。
【発明を実施するための最良の形態】
【００１３】
そこで、本発明の例示的な実施形態が示されている、付属の図面を参照しつつ、本発明についてさらに詳しく説明する。しかし、本発明は、多くの異なる形態で具現化することができ、本明細書で述べられている実施形態に限定されると解釈すべきではない。むしろ、これらの実施形態は、本開示が徹底して完全なものとなるように、また当業者に本発明の範囲が全部伝達されるように用意されている。
【００１４】
一般に、フェージングは、ソフトウェアコンポーネントに多層フェージングモデルを適用することによりコンピュータシステム内のソフトウェアメソッドの実行を制約する。ソフトウェアコンポーネントは、クラス、オブジェクト、メソッド、またはコンピュータシステム内にある他のソフトウェアコード構成要素とすることができる。フェーズは、ソフトウェアコンポーネントの集合により同時に、また集合的に共有される動作状態である。コンピュータシステムは、マスタフェージングモデルとも呼ばれる、最上位フェージングモデルを実行し、１つまたは複数のサブフェーズはマスタフェージングモデルのフェーズのうちの１つまたは複数において生じる。コンピュータシステム内のオペレーションは、フェーズまたはサブフェーズの集合に制約される。
【００１５】
多層フェージングモデル１００の例示的な一実施形態は、図１に示されている。多層フェージングモデルは、３つのフェーズ１０２、１０４、および１０６を含む第１またはマスタフェーズモデルを有する。マスタフェーズは、矢印１１６により示される順序で生じる。２つのサブフェーズ、サブフェーズ１  １０８とサブフェーズ２  １１０は、フェーズ１  １０２において生じる。それに加えて、さらに２つのサブフェーズ、サブフェーズ２ａとサブフェーズ２ｂは、フェーズ２において生じる。そのため、フェージングモデル１００は、サブフェーズが他のフェーズまたはサブフェーズにおいて生じるフェーズの多層集合を表す。これ以降、フェーズの説明は、サブフェーズにもあてはめることができる。
【００１６】
それぞれのソフトウェアコンポーネントは、特定のフェーズ内で動作するように制約される。制約は、ソフトウェアメソッドが制約されるフェーズにおいてのみ、実行または呼び出されるソフトウェアメソッドのそれぞれに課される。コンフリクトまたは相反する結果を生じうるソフトウェアメソッドは、異なるフェーズに制約され、そこでは、ソフトウェアメソッドは、現在のフェーズから正規に呼び出されることはできない。そのようなものとして、それぞれのソフトウェアメソッドは、相反するタスクを遂行するメソッド間でコンフリクトを起こすことなく知られている様式で実行される。すべてのメソッドは、ソフトウェアシステムが現在のフェーズ制約に適合する状態であることが知られるように特定のフェーズ制約の下で実行される。
【００１７】
本発明を実装できる好適なコンピューティングシステム環境２００の一実施例が図２に示されている。コンピューティングシステム環境２００は、好適なコンピューティング環境の一例にすぎず、本発明の用途または機能性の範囲に関する制限を示唆する意図はない。コンピューティング環境２００は、典型的な動作環境２００に例示されている１つのコンポーネントまたはその組み合わせに関係する何らかの依存関係または要求条件がその環境にあるものと解釈すべきでない。
【００１８】
本発明は、他の数多くの汎用または専用コンピューティングシステム環境または構成で動作する。本発明とともに使用するのに適していると思われるよく知られているコンピューティングシステム、環境、および／または構成の例として、限定はしないが、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な家電製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記システムまたはデバイスを含む分散コンピューティング環境などがある。
【００１９】
本発明は、コンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的背景状況において説明することができる。一般に、プログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。また、本発明は、通信ネットワークを通じてリンクされているリモート処理デバイスによりタスクが実行される分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールをメモリ記憶デバイスなどのローカルとリモートの両方のコンピュータ記憶媒体に配置できる。
【００２０】
図２を参照すると、本発明を実装する例示的なコンピュータシステム２００は、コンピュータ２１０の形態の汎用コンピューティングデバイスを備えている。コンピュータ２１０が備えるコンポーネントとしては、限定はしないが、演算処理装置２２０、システムメモリ２３０、およびシステムメモリ２３０を備えるさまざまなシステムコンポーネントを演算処理装置２２０に結合するシステムバス２２１などがある。システムバス２２１は、メモリバスまたはメモリコントローラ、周辺機器バス、およびさまざまなバスアーキテクチャを使用するローカルバスを含む数種類のバス構造のうちのいずれでもよい。例えば、限定はしないが、このようなアーキテクチャとしては、Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）バス、Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、Ｅｎｈａｎｃｅｄ  ＩＳＡ（ＥＩＳＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカルバス、およびＭｅｚｚａｎｉｎｅバスとも呼ばれるＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バスがある。
【００２１】
コンピュータ２１０は、典型的には、さまざまなコンピュータ可読媒体を備える。コンピュータ可読媒体は、コンピュータ２１０によってアクセスできる入手可能な媒体であればどのような媒体でもよく、揮発性および不揮発性媒体、取り外し可能および取り外し不可能媒体を含む。例えば、限定はしないが、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造体、プログラムモジュール、またはその他のデータなどの情報を格納する方法または技術で実装される揮発性、不揮発性、取り外し可能、および取り外し不可能な媒体を含む。コンピュータ記憶媒体としては、限定はしないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたはその他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多目的ディスク（ＤＶＤ）またはその他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置またはその他の磁気記憶デバイス、または所望の情報を格納するために使用することができ、しかもコンピュータ２１０によりアクセスできるその他の媒体がある。通信媒体は、典型的には、コンピュータ可読命令、データ構造体、プログラムモジュール、または搬送波もしくはその他のトランスポートメカニズムなどの変調データ信号によるその他のデータを具現するものであり、任意の情報配信媒体を含む。「変調データ信号」という用語は、信号内に情報を符号化するような方法で特性のうちの１つまたは複数が設定または変更された信号を意味する。例えば、限定はしないが、通信媒体としては、有線ネットワークまたは直接配線接続などの有線媒体、および、音響、ＲＦ、赤外線、およびその他の無線媒体などの無線媒体がある。上記のいずれの組み合わせもコンピュータ可読媒体の範囲に収まらなければならない。
【００２２】
システムメモリ２３０は、読み取り専用メモリ（ＲＯＭ）２３１およびランダムアクセスメモリ（ＲＡＭ）２３２などの揮発性および／または不揮発性メモリの形態のコンピュータ記憶媒体を含む。起動時などにコンピュータ２１０内の要素間の情報伝送を助ける基本ルーチンを含む基本入出力システム２３３（ＢＩＯＳ）は、典型的には、ＲＯＭ２３１に格納される。ＲＡＭ２３２は、典型的には、演算処理装置２２０に直接アクセス可能な、および／または演算処理装置２２０によって現在操作されている、フェージングモジュール１００などの、データおよび／またはプログラムモジュールを格納する。例えば、限定はしないが、図２は、オペレーティングシステム２３４、アプリケーションプログラム２３５、その他のプログラムモジュール２３６、およびプログラムデータ２３７を例示しており、フェージングモデル１００などのフェージングモデルであれば、ＲＡＭ２３２に格納されるか、またはＲＡＭ２３２から実行されるすべてのソフトウェアの実行の順序を決めるように動作する。
【００２３】
コンピュータ２１０はさらに、その他の取り外し可能／取り外し不可能な揮発性／不揮発性コンピュータ記憶媒体を備えることもできる。一例にすぎないが、図２は、ハードドライブなどの取り外し不可能な不揮発性磁気媒体２４１に対して読み書きをする取り外し不可能な不揮発性メモリインターフェイス２４０を備えるコンピュータ２１０を例示している。コンピュータ２１０は、さらに、磁気ディスクなどの取り外し可能な不揮発性媒体２５２に読み書きする、ディスクドライブなどのデバイス２５１に読み書きする不揮発性メモリインターフェイス２５０も備えることができる。それに加えて、コンピュータ２１０は、ＣＤ−ＲＯＭまたは他の光媒体などの取り外し可能な不揮発性光ディスク２５６に読み書きする光ディスクドライブ２５５を備えることができる。例示的な動作環境において使用できる他の取り外し可能／取り外し不可能な揮発性／不揮発性コンピュータ記憶媒体としては、限定はしないが、磁気テープカセット、フラッシュメモリカード、デジタル多目的ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどがある。ハードディスクドライブ２４１は、典型的には、インターフェイス２４０などの取り外し不可能メモリインターフェイスを介してシステムバス２２１に接続され、磁気ディスクドライブ２５１および光ディスクドライブ２５５は、典型的には、インターフェイス２５０などの取り外し可能メモリインターフェイスによりシステムバス２２１に接続される。
【００２４】
図２に例示されている上記のドライブおよび関連コンピュータ記憶媒体は、コンピュータ２１０用のコンピュータ可読命令、データ構造体、プログラムモジュール、およびその他のデータを格納する機能を備える。例えば、ハードディスクドライブ２４１は、オペレーティングシステム２４４、アプリケーションプログラム２４５、その他のプログラムモジュール２４６、およびプログラムデータ２４７を格納するものとして例示されているが、これらは、オペレーティングシステム２３４、アプリケーションプログラム２３５、その他のプログラマモジュール２３６、およびプログラムデータ２３７と同じであっても異なっていてもよい。オペレーティングシステム２４４、アプリケーションプログラム２４５、その他のプログラムモジュール２４６、およびプログラムデータ２４７に対しては、ここで、異なる番号を割り当てて、最低でも、それらが異なるコピーであることを示している。ユーザは、キーボード２６２、およびマウス、トラックボール、またはタッチパッドと一般に呼ばれるポインティングデバイス２６１などのユーザ入力デバイスに接続されているユーザ入力インターフェイス２６０を介してコンピュータ２１０にコマンドおよび情報を入力できる。他の入力デバイス（図に示されていない）としては、マイク、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどがある。これらの入力デバイスおよびその他の入力デバイスは、システムバス２２１に結合されているユーザ入力インターフェイス２６０を通じて演算処理装置２２０に接続されることが多いが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェイスおよびバス構造により接続されることも可能である。
【００２５】
モニタ２９１またはその他の種類の表示デバイスも、ビデオインターフェイス２９０などのインターフェイスを介してシステムバス２２１に接続される。モニタ２９１に加えて、コンピュータ２１０は、さらに、スピーカ２９７およびプリンタ２９６などの他の周辺出力デバイスも備えることができ、これらは出力周辺機器インターフェイス２９５を介して接続することができる。
【００２６】
コンピュータ２１０は、リモートコンピュータ２８０などの１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク接続環境で動作することができる。リモートコンピュータ２８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、またはその他の共通ネットワークノードでもよく、典型的には、コンピュータ２１０に関係する上述の要素の多くまたはすべてを含むが、メモリ記憶デバイス２８１だけが図２に例示されている。図２に示されている論理接続は、ローカルエリアネットワーク（ＬＡＮ）２７１およびワイドエリアネットワーク（ＷＡＮ）２７３を含むが、無線ネットワークなどの他のネットワークを含むこともできる。このようなネットワーキング環境は、オフィス、企業全体にわたるコンピュータネットワーク、イントラネット、およびインターネットでは一般的である。
【００２７】
ＬＡＮネットワーキング環境で使用される場合、コンピュータ２１０は、ネットワークインターフェイスまたはアダプタ２７０を介してＬＡＮ２７１に接続される。ＷＡＮネットワーキング環境で使用される場合、コンピュータ２１０は、典型的には、インターネットなどのＷＡＮ２７３上で通信を確立するためモデム２７２またはその他の手段を備える。モデム２７２は、内蔵でも外付けでもよいが、ユーザ入力インターフェイス２６０またはその他の適切なメカニズムを介してシステムバス２２１に接続されうる。ネットワーク接続環境では、コンピュータ２１０またはその一部に関して示されているプログラムモジュールは、リモートメモリ記憶デバイス２８１に格納されうる。例えば、限定はしないが、リモートアプリケーションプログラム２８５は、メモリデバイス２８１に置かれている。図に示されているネットワーク接続は例示的であり、コンピュータ間の通信リンクを確立するのに他の手段が使用可能であることは理解されるであろう。
【００２８】
図１を再び参照すると、フェーズ１  １０２は、サブフェーズ１  １０８およびサブフェーズ２  １１０の上位フェーズであるスーパーフェーズである。さらに２つのサブフェーズ、サブフェーズ２ａ  １１２とサブフェーズ２ｂ  １１４は、フェーズ２  １１０において生じる。同様に、サブフェーズ２  １１０は、サブフェーズ２ａ  １１２およびサブフェーズ２ｂ  １１４のスーパーフェーズである。フェーズまたはサブフェーズは、サブフェーズを持つことができる。多層フェージングモデルにおいては、サブフェーズのレベル数には制限がない。それに加えて、フェーズ空間内には少なくとも２つのフェーズがなければならないが、２つのフェーズよりも上のフェーズの数に関しては制限はない。それに加えて、スーパーフェーズ内にサブフェーズがある場合、少なくとも２つのサブフェーズがなければならないが、２つのサブフェーズよりも上にあるスーパーフェーズにおいて生じるサブフェーズの数に制限はない。サブフェーズのどのような集合も、スーパーフェーズにおいて１回または複数回、循環して辿ることができる。
【００２９】
フェーズモデル１００は、フェーズ空間を例示している。フェーズ空間は、有効なフェーズ（グラフの節点）および有効なフェーズ遷移（グラフの辺）を決定する有限有向グラフである。したがって、フェーズ空間は、フェーズの有効なシーケンスを決定する。フェーズ空間１００は、フェーズ集合フェーズ１  １０２、フェーズ２  １０４、およびフェーズ３  １０６に関して定義される。フェーズ空間１００は、さらに、３つのフェーズ遷移１１８ａ、１１８ｂ、および１１８ｃも有する。フェーズ遷移は、遷移前フェーズを共有するすべてのソフトウェアコンポーネントによりフェーズの同時変化が生じる場合を表す。
【００３０】
ソフトウェアコンポーネントがフェーズ空間を共有する場合、それらのソフトウェアコンポーネントは、フェーズドメインの一部である。フェーズドメインは、特定のフェーズ空間により定義される共通フェージングモデルに関する同意が得られているソフトウェアコンポーネントの集合である。例えば、マスタフェーズ１０２、１０４、および１０６を有するマスタフェーズ空間により制約されることが同意されているすべてのソフトウェアコンポーネントは、マスタフェーズドメインの一部である。そのため、マスタフェーズドメイン内のソフトウェアコンポーネントに関連するすべてのソフトウェアコンポーネントは、マスタフェーズ１０２、１０４、および１０６のうちの少なくとも１つに関連するフェーズ制約を含む。
【００３１】
フェーズ制約は、特定のプログラムのコンテキストにおいて有効なフェーズを制限する静的制約である。特に、制約は、プログラムセクションに適用することができ、これにより、そのプログラムセクションが制約を受け入れるフェーズにおいてのみ実行されることを主張する。一実施形態では、フェーズ制約は、［フェーズ１］などと、属性を角括弧で囲んで書かれる。このデータ構造体について、以下で詳述する。
【００３２】
１つまたは複数のフェーズドメインを占有する１つまたは複数のコンポーネントを有するコンピュータ環境３００が、図３に示されている。マスタディレクタ３０２は、マスタフェーズ空間の遷移動作および確定（establishment）を制御する。コンピュータ環境内のすべてのコンポーネントは、マスタフェーズドメイン３００の一部であるが、１つまたは複数のサブフェーズドメインを占有しうる。フェーズドメイン３００の作成を有効にするために、プログラム作成者は、フェーズ空間、フェーズ空間上のフェーズ遷移を実行するためのポリシー、およびフェーズドメインの境界をまたがるメッセージを処理するためのポリシーを選択する必要がある。
【００３３】
フェーズドメイン３００は、多層フェーズ空間により特徴付けられる。本発明の実施形態では、コンポーネント１  ３０４などの１つまたは複数のコンポーネントがマスタディレクタ３０２に登録される。コンポーネント１  ３０４は、ソフトウェアコンポーネントまたはメソッドを含む、任意の種類のソフトウェア構成要素を表す。ソフトウェアコンポーネント３０４は、マスタフェーズ空間内のフェーズの１つに制約される。
【００３４】
他の実施形態では、サブディレクタ１  ３０６およびサブディレクタ２  ３０８などの１つまたは複数のサブディレクタが、マスタディレクタ３０２に登録される。サブディレクタは、１つまたは複数の異なるフェーズ空間を備える１つまたは複数の他のフェーズドメインを制御する。そのため、フェーズドメイン３００は、１つまたは複数の入れ子のフェーズドメインを有する。サブディレクタ１  ３０６に登録されたコンポーネント２  ３１０などのすべてのコンポーネントは、サブフェーズ空間内、およびマスタフェーズ空間の１または複数のマスタフェーズ内の、１つまたは複数のサブフェーズのうちの１つまたは複数に制約される。一実施形態では、サブディレクタにより制御されるサブフェーズドメインは、単一のマスタフェーズ内で動作する。サブフェーズのオペレーションは、単一のマスタフェーズにおいて繰り返し実行できる。
【００３５】
本発明のいくつかの実施形態では、サブディレクタ２などのサブディレクタは、サブディレクタ３などの他のサブディレクタを登録し、さらに入れ子になったサブフェーズドメインを生成する。いくつかの実施形態では、サブディレクタ２  ３０８は、コンポーネント３  ３１２およびサブディレクタ３  ３１４のオペレーションを制御する。さらに他の実施形態では、サブディレクタ３  ３１４などのディレクタは、コンポーネント４  ３１６およびコンポーネント５  ３１８などの複数のコンポーネントを制御する。それぞれのサブディレクタは、独自のフェーズを有するフェーズ空間を制御することができる。したがって、サブディレクタ１  ３０６は、第１のサブフェーズ空間を操作するが、サブディレクタ３  ３１４は、第２のサブフェーズ空間を操作する。２つのフェーズ空間が相互作用しない場合、それらのフェーズ空間は、直交空間と呼ばれる。直交フェーズ空間を組み合わせることで、カーテシアン（Cartesian）フェーズ空間を形成することができ、これを使用して単一の積に対するフェーズドメインを形成することができる。基礎となるフェーズ集合は、直交フェーズ集合のデカルト積（Cartesian product）であり、有効なフェーズ遷移は、直交フェーズ集合に対する有効な遷移のデカルト積でもある。
【００３６】
本発明の実施形態におけるディレクタは、論理クロックである。ディレクタは、ハードウェアシステムのクロックと似た複数のフェーズを循環して辿る。それぞれのフェーズ遷移において、ディレクタは、フェーズドメイン内のすべてのソフトウェアコンポーネントについてフェーズを同時に変更する。一実施形態では、サブディレクタは、サブフェーズドメイン内のサブフェーズを同時に変更することができる。論理クロックは、フェーズ、またはそのフェーズに制約されたサブフェーズ内で実行しているオペレーションに制約されているオペレーションの完了を待つ。
【００３７】
マスタフェーズドメインに使用することができるフェーズ空間４００の例示的な一実施形態が、図４に示されている。フェーズ空間４００は、３つのフェーズを有する。読み取り要求フェーズ４０２において、データの読み書きの要求、またはソフトウェアシステムにおける他のソフトウェアコマンドまたは要求は、次のフェーズに入るまでキュー内に置かれる。一実施形態では、要求された特定のコンフリクトしていないメソッドのみが、次のフェーズで実行されるが、他のコマンドは、他のフェーズまたはフェーズの次のサイクルを待つ。
【００３８】
更新フェーズ４０４では、コマンドおよび要求を、該当するソフトウェアコンポーネントに送る。本発明のいくつかの実施形態では、ソフトウェアコンポーネントは、更新フェーズ４０４において、コマンドもしくは要求を履行する。一実施形態では、更新フェーズ４０４は、更新フェーズ４０４において生じるサブフェーズ空間５００を有する。例示的なサブフェーズ５００が図５に示されており、これについて以下で説明する。一実施形態では、更新フェーズ４０４は、データ層に対するサブフェーズをトリガする。言い換えると、データへの書き込みの要求は、更新フェーズ４０４のサブフェーズにおいて実行される（accomplish）。
【００３９】
第３のフェーズである、再有効化フェーズ４０６は、更新フェーズ４０４において処理されない他のメソッドの送り先を決め、実行する。一実施形態では、データを取り出すすべての要求は、再有効化フェーズ４０６において完了する。例えば、データが更新フェーズ４０４において更新された後、すべてのソフトウェアコンポーネントに、データ変更が発生したことが通知され、通知を受けたソフトウェアコンポーネントは、その更新されたデータを取り出す。一実施形態では、再有効化フェーズ４０６は、サブフェーズ６００を操作する。サブフェーズ空間６００の例示的な一実施形態が図６に示されており、これについて以下で説明する。
【００４０】
フェーズを変更するために、フェーズ空間４００は、フェーズ遷移に進む。例示的な実施形態では、３つのフェーズ４０２、４０４、および４０６の間の遷移を表す３つのフェーズ遷移４０８ａ、４０８ｂ、および４０８ｃがある。上で説明されているように、フェーズ遷移は、ディレクタ３０２などのディレクタが、フェーズクロックを変更する時点であり、フェーズドメイン内のすべてのソフトウェアコンポーネントに対するフェーズは同時に変わる。
【００４１】
フェーズドメイン内で、現在のフェーズまたは新しいフェーズへの遷移をソフトウェアコンポーネントに警告または通知する動作が行われることがある。一実施形態では、ディレクタは、すべてのソフトウェアコンポーネントにフェーズを通知する。他の実施形態では、要求側メソッドは、ディレクタにフェーズを要求する。本発明のいくつかの実施形態では、遷移通知が、フェーズドメイン内の１つまたは複数のコンポーネントに送られる。一実施形態では、遷移通知は、現在のフェーズにある間、または次のフェーズの開始時に生じる。他の実施形態では、通知プロセスに別のフェーズが使用される。例えば、フェーズ空間４００であれば、遷移４０８ａ、４０８ｂ、および４０８ｃに位置する３つの通知フェーズを有し、これらは、フェーズドメイン内のソフトウェアコンポーネントに通知を行う。
【００４２】
更新フェーズ４０４の例示的なサブフェーズ空間５００が、図５に示されている。サブフェーズ５００は、いくつかの実施形態では、データ層に使用される。言い換えると、データを共有データ構造体に書き込むメソッドは、データサブフェーズ空間５００のサブフェーズの１つに制約される。一実施形態では、そのデータを共有するすべてのソフトウェアコンポーネントは、同意フェーズ５０２における変更をコミットすること、またはアボートすることに同意する。変更は、コミットまたはアボートフェーズ５０４においてコミットまたはアボートされる。
【００４３】
他の実施形態では、同意フェーズおよびコミットまたはアボートフェーズは、両方とも、「コミットまたはアボート」サブフェーズ５０４のサブフェーズであり、サブフェーズ空間５００は、同意サブフェーズ５０２の代わりにマークフェーズ５０２を有する。ここでは、データ変更は、コミットまたはアボートフェーズ５０４において行われ、そのデータを使用するすべてのソフトウェアコンポーネントは、マークフェーズ５０２において更新対象としてマークされる。ソフトウェアコンポーネントをマークするというのは、適切な後のフェーズにおいて更新されたデータを取り出すようにソフトウェアコンポーネントに合図するソフトウェアコンポーネントにフラグをたてることである。一実施形態では、マークされたソフトウェアコンポーネントは、再有効化フェーズ４０６においてデータを取り出す。他の実施形態では、マークフェーズ５０２は、マークサブフェーズと最終マークサブフェーズの２つのサブフェーズを有する。ここで、そのデータを使用するソフトウェアコンポーネントは、マークサブフェーズにおいてマークされ、最終マークサブフェーズにおいてデータを取り出す。
【００４４】
再有効化フェーズ４０６において生じる、他の例示的なサブフェーズ空間６００が、図６Ａに示されている。サブフェーズ空間６００に制約されている、ソフトウェア構成の例示的な変更は、図６Ｂに示されている。サブフェーズ空間６００は、プラグ＆プレイオペレーション用のサブフェーズを備えている。プラグ＆プレイサブフェーズ空間６００は、プレイサブフェーズ６０４とプラグサブフェーズ６０２の２つのフェーズを有する。一般に、プラグサブフェーズ６０２において、ソフトウェアコンポーネントの合成および構成の確定、変更、または削除が行われるが、プレイタイム機能は実行されない。同様に、プレイサブフェーズ６０４において、ソフトウェアコンポーネントの確定された合成または構成が、通常の機能に使用されるが、合成または構成の態様は、いっさい、確定、変更、または削除されない。
【００４５】
モジュール再構成の例示的な一実施形態が、図６Ｂに示されている。この実施形態では、ソフトウェアモジュールは、第１の構成６０６を有する。ユーザ入力要求などの何らかのアクションが実行された後、ソフトウェアモジュールは、第２の構成６０８に変わる。当業者であれば理解するように、ソフトウェアモジュールは、第２の構成６０８と比較して第１の構成６０６においては異なる動作をする。そのため、プレイフェーズで実行されるメソッドがソフトウェアモジュールとやり取りすることなく、再構成が実行されなければならない。本発明のいくつかの実施形態では、ソフトウェアインスタンスは、プラグサブフェーズ６０２において、初期化されるか、接続されるか、または切断され、プロパティが設定される。いくつかの実施形態では、他のサブフェーズが、プラグサブフェーズ６０２で実行されるオペレーションの順序を決めるのを助ける。
【００４６】
一実施形態では、プラグサブフェーズ６０２は、さらに複数のサブフェーズを有する。コンストラクトサブフェーズ６１０は、知られているクラスをインスタンス化するか、ソフトウェアコンポーネントを呼び出すか、または既存のインスタンス上のインターフェイスを使用してクローンまたは特殊化された派生インスタンスを取得することにより新しいソフトウェアインスタンスを作成する。構成サブフェーズ６１２は、インスタンス間の接続の追加または削除を行う。最後に、初期化サブフェーズ６１４は、プロパティを設定し、適切に接続されたインスタンス間のネゴシエーションを要求する。プラグサブフェーズ６０２のサブフェーズは、ここで示されたものから逸脱する場合がある。それに加えて、プレイサブフェーズ６０４も、複数のサブフェーズを含みうる。
【００４７】
他のフェージング空間が考えられる。例えば、ユーザインターフェイス変更用のサブフェーズ空間が考えられる。ユーザインターフェイスサブフェーズ空間では、無効化サブフェーズが構造体を構築するメソッドの実行を許可することができる。次いで、描画サブフェーズにおいて、組み立てられた構造が描画される。他のフェーズ空間は、当業者であれば理解するように他の種類のオペレーションに使用することができる。それに加えて、当業者であれば、上に示した例示的なフェーズ空間が、フェーズまたはサブフェーズの数、層またはレベルの数、およびフェーズまたはサブフェーズの種類に関して変更されうることを理解するであろう。そのようなものとして、本発明は拡張可能である。一実施形態では、新しいスーパーフェーズは、既存のフェーズ空間上に重ねられる。他の実施形態では、新しいフェーズが、既存のフェーズ空間に加えられる。さらに他の実施形態では、サブフェーズ空間のさらに多くのサブフェーズまたは新しい層が、既存のフェーズ空間に加えられる。
【００４８】
コードのアイテムの実行を制約するフェーズ制約を有するデータ構造体７００の例示的な一実施形態が、図７に示されている。データ構造体７００は、コード要素である。どのような種類のコードも、フェーズ制約を持つことができる。フェーズ制約７０２は、メソッド７０４の上のほうに示されている。フェーズ制約７０２は、メソッド７０４のオペレーションを、フェーズ制約で指定されたフェーズ、この実施形態ではフェーズ「実行」に制約する。そのため、メソッド７０４は、「実行」フェーズまたは「実行」サブフェーズにおいてのみ実行される。
【００４９】
本発明のいくつかの実施形態では、データ構造体は、ソフトウェアコンポーネントおよび実行されるオペレーションの種類に依存する形式の制約を含む。一実施形態では、制約は、呼び出し制約である。呼び出し制約は、メソッドの呼び出しを、指定されたフェーズに制約する。したがって、他のソフトウェアコンポーネントまたは同じソフトウェアコンポーネントにおけるメソッドの実行は、それらのメソッドが指定されたフェーズのみにおいて起動されるように制限することにより制約される。他の実施形態では、制約は、コンストラクタ制約である。コンストラクタは、ソフトウェアコンポーネントをインスタンス化する特別な形式のメソッドである。したがって、ソフトウェアコンポーネントのインスタンス化は、図６Ａのコンストラクトサブフェーズ６１０で説明されているような指定されたフェーズに制約される。他の実施形態では、制約は、参照制約である。参照制約は、ソフトウェアコンポーネントのクラス全体およびそのクラスのすべてのプリミティブオペレーションを制約する。例えば、インターフェイスに課される参照制約は、図６Ａで接続サブフェーズ６１２とともに説明されているようなソフトウェアモジュール間の接続を制限する。
【００５０】
この制約は、ターゲットソフトウェアコンポーネントに割り当てることが可能なソフトウェアコード内のフェーズ制約属性により表される。本発明のいくつかの実施形態では、フェーズ制約属性は、クラス全体に割り当てられ、継承可能である。したがって、子コンポーネントは、親コンポーネントから制約を継承する。いくつかの実施形態では、フェージングスキームは、複数のフェーズ制約属性を同じターゲットに付与する。したがって、ソフトウェアターゲットは、複数のフェーズ制約の結合により制約される。
【００５１】
それぞれの制約は、指定されたフェーズのレベルに関連する「タイプ」に対する制約である。そのようなものとして、スーパーフェーズを指定する制約は、「スーパーフェーズ」に対する制約である。サブフェーズを指定する制約は、「サブフェーズ」に対する制約である。サブフェーズであるタイプに対する制約は、「スーパータイプ」に対するすべての制約の合併に対する制約である。タイプに対する制約間の関係は、コンパイラによって使用されるか、または実行時に、異なるソフトウェアコンポーネント間の制約関係の有効性をチェックするために使用される。
【００５２】
制約の強制は、実行時またはコンパイル時に行うことができる。コンパイル時には、タイプに対する制約をチェックすることができる。コンパイラは、タイプに対する制約およびサブタイプに対する制約を、サブタイプに対する制約を持つメソッドを呼び出すタイプに対する制約を有するメソッドの健全性規則の集合と突き合わせてチェックすることができる。制約スキームは、サブタイプに対する制約がタイプに対する制約と同じか、または弱い場合、例えば、タイプに対する制約がプラグフェーズ６０２を指定し、サブタイプに対する制約が初期化サブフェーズ６１４を指定する場合に有効である。この実施形態では、初期化サブフェーズ制約６１４は、プラグサブフェーズ６０２内で実行され、したがって、弱い制約である。制約スキームは、サブタイプに対する制約がタイプに対する制約と互いに素である場合、例えば、タイプに対する制約がプレイサブフェーズ６０４を指定し、サブタイプに対する制約が反対のプラグサブフェーズ６０２を指定する場合に無効である。制約スキームは、サブタイプに対する制約がタイプに対する制約よりも強いか、またはその制約と重なる場合、例えば、タイプに対する制約がプラグフェーズ６０２を指定し、サブタイプに対する制約が初期化サブフェーズ６１４を指定する場合、有効であるが、何らかの動的チェックを受けなければならない。この実施形態では、フェーズドメインがプラグサブフェーズ６０２と初期化サブフェーズ６１４の両方において現在動作している場合、呼び出しスキームは有効である。しかし、ドメインが２つのフェーズのうちの一方に含まれない場合、スキームは無効である。他の健全性規則も考えられ、本発明に組み込まれる。
【００５３】
多層フェージングドメイン内のコンピュータ環境を動作させるためのメソッド８００の例示的な一実施形態が、図８Ａおよび図８Ｂに示されている。立ち上げ後、遷移オペレーション８０２は、要求フェーズ４０２などの第１のフェーズに遷移する。一実施形態では、マスタディレクタ３０２などのマスタディレクタが開始される。一実施形態では、マスタフェーズのうちの１つに制約されている、コンポーネント３０４などのコンポーネントは、マスタディレクタに登録される。マスタディレクタは、フェーズクロックを開始し、論理時間を循環させてフェーズ空間４００などのフェーズ空間内の複数のフェーズを辿る。
【００５４】
判定オペレーション８０４は、コンポーネント３０４などのソフトウェアコンポーネントがマスタフェーズの第１のフェーズに制約されるかどうかを判定する。ソフトウェアコンポーネントが第１のフェーズに制約される場合、実行オペレーション８０６は、第１のフェーズにおいてソフトウェアコンポーネントを実行する。実行すべきソフトウェアコンポーネントがない場合、またはソフトウェアコンポーネントの実行中に、判定オペレーション８０８は、第１のフェーズで生じる、サブフェーズ空間５００などのサブフェーズ空間があるかどうかを判定する。第１のフェーズで生じるサブフェーズ空間がない場合、このプロセスは、コネクタ１を通り、図８Ｂに示されている遷移オペレーション８２２に進む。
【００５５】
第１のフェーズで生じるサブフェーズ空間がある場合、識別オペレーション８１０は、サブフェーズ空間および適用可能なサブフェーズを識別する。一実施形態では、サブディレクタ３０６などのサブディレクタが開始され、マスタフェーズ空間を制御するマスタディレクタに登録される。サブディレクタは、サブフェーズ論理クロック起動し、サブフェーズ空間内の複数のサブフェーズを循環して辿る。判定オペレーション８１２は、現在のサブフェーズに制約される、コンポーネント３１２などのソフトウェアコンポーネントがあるかどうかを判定する。一実施形態では、サブフェーズ空間に制約されたソフトウェアコンポーネントは、サブディレクタに登録される。したがって、入れ子になったサブフェーズドメインは、マスタフェーズドメインの下に作成される。現在のサブフェーズに制約されたサブフェーズドメイン内にソフトウェアコンポーネントがある場合、実行オペレーション８１４は、現在のサブフェーズにおいてそれらのソフトウェアコンポーネントを実行する。判定オペレーション８１６は、現在のサブフェーズ内で生じる、サブフェーズ６１０、６１２、および６１４などのサブフェーズ空間がさらにあるかどうかを判定する。さらにサブフェーズがある場合、プロセスは戻り、オペレーション８１０を識別し、さらにあるサブフェーズを識別する。
【００５６】
識別すべきサブフェーズ空間がもうない場合、判定オペレーション８１８は、現在のサブフェーズ空間内に生じる他のサブフェーズが残っているかどうかを判定する。現在のフェーズ空間内で生じる他のサブフェーズ空間がある場合、遷移オペレーション８２０は、サブフェーズ空間内の次のサブフェーズに遷移する。一実施形態では、サブディレクタは、現在のサブフェーズ内のすべてのスレッドが実行されるまで待ち、それから次のサブフェーズに遷移する。次いで、プロセスは、判定オペレーション８１２に再び進む。現在のサブフェーズ空間内に残されているサブフェーズがない場合、判定オペレーション８１８は、スーパーフェーズ空間内で遷移すべき他のスーパーフェーズがあるかどうかを判定する。他のスーパーフェーズがある場合、遷移オペレーション８２０は、次のスーパーフェーズに遷移する。プロセス（スーパーフェーズ内のサブフェーズを判定し、サブフェーズ内のソフトウェアコンポーネントを実行し、すべてのサブフェーズが完了するまで次のサブフェーズに遷移し、次いで次のスーパーフェーズに遷移する）は、すべてのサブフェーズ空間が一巡りするまで繰り返され、次のマスタフェーズへの遷移が必要になる。第１のマスタフェーズで、サブフェーズループが終了すると、プロセスは、コネクタ１を通り図８Ｂに示されている遷移オペレーション８２２に進む。
【００５７】
遷移オペレーション８２２は、更新フェーズ４０４などの次のマスタフェーズに遷移する。一実施形態では、マスタディレクタは、第１のフェーズで実行しているすべてのスレッドが終了するのを待つ。次いで、マスタディレクタは、論理フェーズクロックを次のフェーズに変える。いくつかの実施形態では、マスタディレクタは、図３を参照しつつ上で概要を述べた遷移規則に従う。次いで、プロセスは、サブフェーズを識別する第１のフェーズが生じるのと似たオペレーションに従う。そのようなものとして、サブフェーズプロセスに関する詳細な説明は再び繰り返さないが、当業者であれば、次のフェーズに制約される後続のプロセスに入る第１のフェーズで説明されている詳細を実装する方法を理解するであろう。
【００５８】
判定オペレーション８２４は、ソフトウェアコンポーネントが現在のマスタフェーズに制約されているかどうかを判定する。次のマスタフェーズに制約されたソフトウェアコンポーネントがある場合、実行オペレーション８２６は、ソフトウェアコンポーネントを実行する。いくつかの実施形態では、ソフトウェアコンポーネントは、すでに、マスタディレクタに登録されている。ソフトウェアコンポーネントは、マスタディレクタに問い合わせて現在のフェーズをチェックし続ける。フェーズが遷移し、ドメインが現在次のマスタフェーズにあるとマスタディレクタが報告した場合、次のマスタフェーズに制約されたソフトウェアコンポーネントは、実行を開始する。
【００５９】
次のマスタフェーズに制約されたソフトウェアコンポーネントがない場合、または制約されたソフトウェアコンポーネントの実行中に、判定オペレーション８２８は、現在のマスタフェーズ内にサブフェーズ空間があるかどうかを判定する。サブフェーズ空間がある場合、識別オペレーション８３０は、サブフェーズ空間を識別し、第１のサブフェーズに遷移する。判定オペレーション８３２は、ソフトウェアコンポーネントが現在のサブフェーズに制約されているかどうかを判定する。現在のマスタフェーズに制約されたソフトウェアコンポーネントがある場合、実行オペレーション８３４は、ソフトウェアコンポーネントを実行する。
【００６０】
現在のサブフェーズに制約されたソフトウェアコンポーネントがない場合、またはこれらのソフトウェアコンポーネントの実行中に、判定オペレーション８３６は、現在のサブフェーズ内にさらにサブフェーズ空間があるかどうかを判定する。さらにサブフェーズ空間がある場合、プロセスは戻り、オペレーション８３０を識別する。現在のサブフェーズ内にさらにサブフェーズ空間がない場合、判定オペレーション８３８は、現在のサブフェーズ空間内に次のサブフェーズがあるかどうか、またはスーパーフェーズ空間内に次のスーパーフェーズがあるかどうかを判定する。次のサブフェーズまたはスーパーフェーズがある場合、遷移オペレーション８４０は、次のサブフェーズまたはスーパーフェーズに遷移する。現在のマスタフェーズの下に次のサブフェーズまたはスーパーフェーズがない場合、判定オペレーション８４２は、再有効化フェーズ４０６など次のマスタフェーズがあるかどうかを判定する。次のマスタフェーズがある場合、プロセスは遷移オペレーション８２２に戻る。マスタフェーズ空間内に他のマスタフェーズがない場合、プロセスは、コネクタ２を通して、遷移オペレーション８０２に戻り、第１のフェーズに遷移することによりフェーズを何回もやり直す。
【００６１】
本発明を詳述するために、多層フェージングドメイン内で動作する例示的なコンピュータシステムについて、図９を参照しつつ以下で説明する。例示的なコンピュータシステムは、Ｍｉｃｒｏｓｏｆｔ（登録商標）Ｏｕｔｌｏｏｋ（登録商標）メッセージングおよびコラボレーションクライアントプログラムなどのパーソナルコンタクトアプリケーションを動作させる。ここで、ユーザインターフェイスには、アドレス帳内の１つまたは複数の連絡先が表示される。このユーザインターフェイスには、マスタビューウィンドウ９０２が備えられている。マスタビュー９０２は、すべての連絡先を表示し、これにより、ユーザは、連絡先に関するより詳しい情報を表示するために連絡先を選択することができる。
【００６２】
コンピュータ環境９００は、フェーズ空間の下で動作する。説明のため、限定はしないが、システム全体９００は、図４に示されているフェーズ空間４００の下で動作するものとする。それに加えて、説明のために、コンピュータシステム９００は、現在、要求フェーズ４０２にある。そのようなものとして、コンピュータシステム９００では、要求またはコマンドを受け取った場合に何らかのオペレーションを実行することができる。したがって、連絡先の詳細ビュー９０４を表示するユーザコマンド９１６は、受け取られると、キューに入れられる。それに加えて、要求された詳細情報を取り出すために、コマンド９１８がアドレス帳モジュール９０８に送られる。データ要求９１８もキューに入れられる。
【００６３】
マスタディレクタ３０２は、コンピュータシステムドメイン９００内のフェーズを更新フェーズ４０４に変更する。ここで、コマンド９１６および９１８が、選択状態モジュール９０６およびアドレス帳９０８にそれぞれ送られる。更新フェーズ４０４において、図６を参照しつつ上で説明されているような、ユーザインターフェイスへの変更のためのユーザインターフェイスサブフェーズ空間の遷移が生じる。無効化サブフェーズが開始する。詳細ビュー９０４に対するコマンド９１６が処理を開始する。マスタビュー９０２のビューが無効化される。例えば、詳細ビュー９０４に対する選択は、非アクティブに設定される。それに加えて、マスタビュー９０２は、非アクティブウィンドウに設定される。詳細ビュー９０４は、適切なフィールドおよびユーザインターフェイスアイテムとともに作成される。次いで、ユーザインターフェイスサブディレクタは、描画サブフェーズに遷移する。連絡先に対するマスタビュー９０２内の選択は、非アクティブに見えるように描画され、例えば、ハイライト表示の選択の色を変える。マスタビュー９０２は、非アクティブとして描画される。例えば、マスタビュー９０２のウィンドウペインは、色を変化させ、それが非アクティブであることを知らせる。詳細ビュー９０４は、ユーザインターフェイス要素とともに描画される。フィールドは、アドレス帳モジュール９０８からデータを受け取れるように開いたままである。
【００６４】
マスタディレクタ３０２は、ユーザインターフェイスサブフェーズ空間内ですべての無効化および描画制約オペレーションが完了した後に再有効化フェーズ４０６に遷移する。データ取り出しオペレーションは、再有効化フェーズ４０６のときに実行される。データ取り出しオペレーションは、一実施形態では、データ取り出しサブフェーズ空間に制約される。データ取り出しサブフェーズ空間は、図６を参照しつつ説明されているように、マークと最終マークの２つのサブフェーズを有する。マークサブフェーズが開始される。アドレス帳では、データの更新を要求するソフトウェアモジュールを検索する。詳細ビュー９０４がマークされる。データ取り出しサブフェーズ空間に対するサブディレクタが、最終マークサブフェーズに遷移する。最終マークサブフェーズでは、アドレス帳９０８は、Ｅｘｃｈａｎｇｅ  Ｓｅｒｖｅｒアドレス帳９１０、クライアントアドレス帳９１２、またはＭＳＮアドレス帳の３つのデータストアのうちの１つから必要な連絡先情報を取り出す。連絡先情報を取り出した後、アドレス帳９０８は、連絡先情報を詳細ビュー９０４に書き込む。
【００６５】
再有効化フェーズ４０６に制約されているすべてオペレーションを完了した後、マスタディレクタ３０２は、要求フェーズ４０２に遷移して戻る。ここで、ユーザインターフェイスは、再び、ユーザ入力デバイスからコマンドおよび要求を受け入れる。ユーザは、詳細ビュー９０４内で変更を連絡先情報に入力する。例えば、ユーザは、連絡先の住所を変更する。コマンド９２０が、詳細ビュー９０４からアドレス帳９０４に送られ、データを変更する。それに加えて、コマンド９２２が、選択状態９０６に送られ、マスタビュー９０２および詳細ビュー９０４のビューを更新する。この実施形態では、コマンドは、キューに入れられ、マスタディレクタ３０２は、更新フェーズ４０４に遷移する。更新フェーズ４０４は、サブフェーズ空間５００などのデータ書き込みサブフェーズ空間を開始する。
【００６６】
同意サブフェーズ５０２では、アドレス帳が、データ変更要求を複数のデータストア９１０、９１２、および９１４に送る。データストアの１つまたは複数は、詳細ビュー９０４内で変更されたデータのコピーを格納することができる。したがって、データを保持するそれぞれのデータストアは、データの変更に同意しなければならない。そのため、同意サブフェーズ５０２では、投票プロシージャが実行される。すべてのデータストアが変更のコミットに同意した場合、この同意は、アドレス帳９０８に送り返される。サブディレクタは、このフェーズをコミットまたはアボートフェーズ５０４に変更する。ここで、データ変更が、データストアに送られ、データの更新に使用される。
【００６７】
一方更新フェーズ４０４では、ユーザインターフェイスサブフェーズ空間が出現する。選択状態９０６は、無効化サブフェーズのときに古いデータを含むマスタビュー９０２および詳細ビュー９０４のセクションを無効化する。描画サブフェーズにおいて、マスタビュー９０２および詳細ビュー９０４は、再描画され、変更されたデータ用の領域を確保する。更新フェーズ４０４においてすべてのサブフェーズが完了した後、フェーズドメイン９００は、再有効化フェーズ４０６に遷移する。
【００６８】
再有効化フェーズ４０６では、他のサブフェーズ空間は、マークおよび最終マークに対するサブフェーズを含む。マークフェーズに遷移すると、アドレス帳９０８は、マスタビュー９０２および詳細ビュー９０４に、変更データを必要とするというマークを付ける。最終マークサブフェーズで、変更データがマスタビュー９０２および詳細ビュー９０４に書き込まれる。これらの変更は、ごく短時間のうちに、細かい精度で行われうる。例えば、フェーズは、ユーザが文字を入力する毎に、また数分の１秒という短い間に、循環される。そのため、変更は瞬時に生じるように見える。
【００６９】
本発明の実施例は、多層フェージングがシステム内のメソッドの実行をどのように制約するかを明らかにしている。コマンドおよび変更が、フェージングなしで発生した場合、マスタビュー９０２および詳細ビュー９０４は、すべてのデータストアがデータを変更する前に更新されうる。したがって、ユーザは、データを変更しようとする、またユーザインターフェイスビューを更新しようとするメソッドの順序に応じて、詳細ビュー９０４またはマスタビュー９０２に混合結果を表示することができる。
【００７０】
本発明は構造的機能、方法論的活動、およびそのような活動を収めたコンピュータ可読媒体に固有の言語で説明されているが、付属の請求項で定められている発明は、説明されている特定の構造、活動、または媒体に必ずしも限られないことは理解されるであろう。当業者であれば、本発明の範囲および精神から逸脱しない他の実施形態または改善を理解するであろう。したがって、特定の構造、活動、または媒体は、請求されている発明を実施するための複数の例示的な実施形態として開示される。本発明は、付属の請求項により定められる。
【図面の簡単な説明】
【００７１】
【図１】本発明によるソフトウェアメソッドの実行の順序を決めるようにコンピュータ環境において動作可能な多層フェージングモデルの一実施形態の図である。
【図２】本発明によりフェージングモデルを動作させるコンピューティング環境およびコンピューティングデバイスを例示する機能図である。
【図３】本発明によるフェーズモデルにおけるソフトウェアメソッドの実行の順序を決めるソフトウェアコンポーネントを備えるモジュール型ソフトウェアシステムの一実施形態の図である。
【図４】本発明によるシステム内のソフトウェアメソッドの実行の順序を決めるようにコンピュータシステム全体にわたって動作する第１または最上位フェーズモデルもしくは空間の一実施形態の図である。
【図５】本発明によりデータの取り出しおよび書き込みの順序を決める、図４のマスタフェーズ空間などのマスタフェーズ空間のフェーズのうちの１つまたは複数において動作可能なサブフェーズ空間の一実施形態の図である。
【図６Ａ】本発明によるプラグ＆プレイシステムの構成およびオペレーションの順序を決める、図４のマスタフェーズ空間などのマスタフェーズ空間のフェーズのうちの１つまたは複数において動作可能なサブフェーズ空間の一実施形態の図である。
【図６Ｂ】本発明によるプラグ＆プレイシステムの構成およびオペレーションの順序を決める、図４のマスタフェーズ空間などのマスタフェーズ空間のフェーズのうちの１つまたは複数において動作可能なサブフェーズ空間の一実施形態の図である。
【図７】本発明により特定のフェーズへのソフトウェアメソッドの実行に関する制約を宣言するフェーズ制約属性を含むデータ構造体または言語属性の一実施形態を示す図である。
【図８Ａ】本発明によるコンピュータシステムのオペレーションを複数のフェーズに分ける方法の一実施形態を示す図である。
【図８Ｂ】本発明によるコンピュータシステムのオペレーションを複数のフェーズに分ける方法の一実施形態を示す図である。
【図９】本発明によるフェーズドメインにおいて作用するユーザ連絡先情報の提供および格納を行うように動作する例示的なコンピュータシステムの図である。
【図１】
2008539516.tif 000003
【図２】
2008539516.tif 000004
【図３】
2008539516.tif 000005
【図４】
2008539516.tif 000006
【図５】
2008539516.tif 000007
【図６Ａ】
2008539516.tif 000008
【図６Ｂ】
2008539516.tif 000009
【図７】
2008539516.tif 000010
【図８Ａ】
2008539516.tif 000011
【図８Ｂ】
2008539516.tif 000012
【図９】
2008539516.tif 000013
【国際調査報告】
2008539516.tif 000014