(57)【要約】【課題】オブジェクトの新しい機能を、オブジェクトがそこから派生するクラスに組み込まれないプロパティとして表すことができる機構を提供すること。【解決手段】第１のプロパティセット内のあるプロパティを有するオブジェクトを含むコンピュータ可読媒体は、第２のプロパティセットのそれぞれの定義、および少なくとも１つの静的メソッドを含むデータ構造を含む。静的メソッドは、第２のプロパティセット内の１つのプロパティに関連付けられ、第１のパラメータを含む。第１のパラメータは、１つのプロパティを一意に識別する。静的メソッドは、オブジェクト内の１つのプロパティへの明示的参照を指定することなく、そのプロパティをオブジェクトに関連付けるように動作する。【選択図】　　　　図３
2004038958.tif 000002
【特許請求の範囲】
【請求項１】
第１のプロパティセット内のあるプロパティを有するオブジェクトを含むコンピュータ可読媒体であって、
第２のプロパティセットのそれぞれの定義、および、該第２のプロパティセット内の１つのプロパティに関連付けられた少なくとも１つの静的メソッドを含むデータ構造をさらに含み、
前記少なくとも１つの静的メソッドは、前記１つのプロパティを一意に識別する第１のパラメータを有し、
前記静的メソッドは、前記オブジェクトの前記１つのプロパティへの明示的参照を指定することなく前記１つのプロパティを前記オブジェクトに関連付けるように動作させることを特徴とするコンピュータ可読媒体。
【請求項２】
前記静的メソッドは、強く型付けされた構文をサポートすることを特徴とする請求項１記載のコンピュータ可読媒体。
【請求項３】
前記１つのプロパティを前記オブジェクトに関連付けるように動作させる前記静的メソッドは、前記値を前記オブジェクトにローカルに格納することなく前記オブジェクトの値を取り出すステップを含むことを特徴とする請求項１記載のコンピュータ可読媒体。
【請求項４】
前記値を取り出すステップは、複数の段階のうちどの段階が前記１つのプロパティに関連付けられた前記値を保持するかを決定するステップを具えたことを特徴とする請求項３記載のコンピュータ可読媒体。
【請求項５】
１つの段階は、前記オブジェクトの親オブジェクトを含むことを特徴とする請求項４記載のコンピュータ可読媒体。
【請求項６】
１つの段階は、プロパティシートを含むことを特徴とする請求項４記載のコンピュータ可読媒体。
【請求項７】
前記静的メソッドは、前記１つのプロパティの所与の値に対応する第２のパラメータをさらに含み、
前記１つのプロパティを前記オブジェクトに関連付けるように動作させる前記静的メソッドは、前記オブジェクトのローカル記憶域にある前記所与の値を設定するステップを具えたことを特徴とする請求項１記載のコンピュータ可読媒体。
【請求項８】
前記第１のプロパティセットは、前記オブジェクトの挙動に対応し、
前記第２のプロパティセットは、前記オブジェクトの外観に対応することを特徴とする請求項１記載のコンピュータ可読媒体。
【請求項９】
コンピュータで実行可能な構成要素を有するコンピュータ可読媒体であって、
複数のプロパティを含む基底クラスと、
複数の付加プロパティを含む付加クラスと
を具え、
前記各付加プロパティは、前記基底クラスから派生したオブジェクトのインスタンスに関連付けられ、
前記付加クラスは、前記複数の付加プロパティの１つを前記オブジェクトの前記インスタンスに関連付けるための静的メソッドをさらに含むことを特徴とするコンピュータ可読媒体。
【請求項１０】
前記基底クラスから派生する前記オブジェクトは、ノードクラスから少なくとも１つのメソッドを継承し、
該１つのメソッドは、前記１つの付加プロパティを前記オブジェクトの前記インスタンスに関連付けたときに前記静的メソッドによって呼び出されることを特徴とする請求項９記載のコンピュータ可読媒体。
【請求項１１】
前記静的メソッドおよび前記１つのメソッドはそれぞれ、前記オブジェクトの前記インスタンスに関連付けられている前記１つの付加プロパティの一意の識別子を渡す第１のパラメータを含むことを特徴とする請求項１０記載のコンピュータ可読媒体。
【請求項１２】
前記一意の識別子は、ランタイム時に前記１つの付加プロパティを登録した後で入手されることを特徴とする請求項１１記載のコンピュータ可読媒体。
【請求項１３】
前記１つのメソッドは、緩く型付けされた構文をサポートすることを特徴とする請求項１０記載のコンピュータ可読媒体。
【請求項１４】
前記静的メソッドは、強く型付けされた構文をサポートすることを特徴とする請求項９記載のコンピュータ可読媒体。
【請求項１５】
前記１つの付加プロパティを関連付けるステップは、前記オブジェクトの親オブジェクトから前記オブジェクトの値を取り出すステップを備えることを特徴とする請求項９記載のコンピュータ可読媒体。
【請求項１６】
前記１つの付加プロパティを関連付けるステップは、プロパティシートから前記オブジェクトの値を取り出すステップを具えたことを特徴とする請求項９記載のコンピュータ可読媒体。
【請求項１７】
第１のプロパティセットを含む、第１のクラスから派生する第１のオブジェクトと、
第２のプロパティセットを前記第１のオブジェクトに提供する第２のクラスとを具え、
該第２のクラスは、前記第１のオブジェクトに関連付けられた動作に応答して前記第２のプロパティセットの１つを前記第１のオブジェクトに付加するように動作する静的メソッドを含むことを特徴とするオブジェクトを使用するコンピュータシステム。
【請求項１８】
前記静的メソッドは、前記第２のプロパティセットにあるプロパティのうち、前記動作が要求しているのはどれであるかを一意に識別する第１のパラメータを含むことを特徴とする請求項１７記載のコンピュータシステム。
【請求項１９】
前記１つのプロパティが登録された後で、前記第１のパラメータが前記１つのプロパティを一意に識別できるようになることを特徴とする請求項１８記載のコンピュータシステム。
【請求項２０】
プロパティの状態を設定するためのコンピュータで実施する方法であって、
第１のプロパティセットを有する第１のオブジェクトを宣言するステップと、
前記第１のオブジェクトに関連付けられた１つまたは複数の動的プロパティを登録するステップと
を具え、
前記動的プロパティは、前記第１のオブジェクトに第２のプロパティセットを提供し、前記第２のプロパティセットの記憶域は前記第１のオブジェクト内には存在しないことを特徴とするコンピュータで実施する方法。
【請求項２１】
前記１つまたは複数の動的プロパティを登録するステップは、前記１つまたは複数の動的プロパティのそれぞれに一意の識別子を割り当てるステップを含むことを特徴とする請求項２０記載のコンピュータで実施する方法。
【請求項２２】
前記一意の識別子を参照する第１のパラメータを有する、静的メソッドを呼び出すステップをさらに具えたことを特徴とする請求項２１に記載のコンピュータで実施する方法。
【請求項２３】
前記静的メソッドは、強く型付けされていることを特徴とする請求項２２記載のコンピュータで実施する方法。
【請求項２４】
前記第１のオブジェクトは１つまたは複数の関連付けられた子オブジェクトを有し、各子オブジェクトはそれによって前記第２のプロパティセットに関連付けられることを特徴とする請求項２０記載のコンピュータで実施する方法。
【請求項２５】
少なくとも１つのコンピュータ実行可能命令を有するコンピュータ可読媒体であって、
付加プロパティクラスの静的メソッドで別のクラスから派生したオブジェクトのインスタンスに付加プロパティを関連付ける命令手段
を具えたことを特徴とするコンピュータ可読媒体。
【請求項２６】
前記命令手段は、プログラム言語の強く型付けされた構文をサポートすることを特徴とする請求項２５記載のコンピュータ可読媒体。
【請求項２７】
前記命令手段は、プログラム言語の緩く型付けされた構文をサポートすることを特徴とする請求項２５記載のコンピュータ可読媒体。
【請求項２８】
前記命令手段は、マークアップドキュメント中にステートメントを具えたことを特徴とする請求項２５記載のコンピュータ可読媒体。
【請求項２９】
前記命令手段は、プロパティシート中にステートメントを具えたことを特徴とする請求項２５記載のコンピュータ可読媒体。
【請求項３０】
コンピュータでコード化された少なくとも１つの命令を有するコンピュータ可読媒体であって、
付加プロパティクラスを識別するクラス識別子と、
ターゲットオブジェクトに関連付けられた付加プロパティに影響を与える前記付加プロパティクラス内にあるメソッドを識別するメソッド識別子と、
前記付加プロパティを識別するプロパティ識別子を備えるパラメータリストとを具えたことを特徴とするコンピュータ可読媒体。
【請求項３１】
コンピュータでコード化された少なくとも１つの命令を有するコンピュータ可読媒体であって、
ターゲットオブジェクトを識別するオブジェクト識別子と、
前記ターゲットオブジェクトに関連付けられた付加プロパティに影響を与える前記付加プロパティクラス内にあるメソッドを識別するメソッド識別子と、
パラメータリストと
を具え、
該パラメータリストは、前記付加プロパティクラスを識別するクラス識別子と、前記付加プロパティクラス内にある前記付加プロパティの名前を識別するプロパティ識別子とを含むことを特徴とするコンピュータ可読媒体。
【請求項３２】
コンピュータでコード化された少なくとも１つの命令を有するコンピュータ可読媒体であって、
ターゲットオブジェクトを表すタグと、
付加プロパティ識別子と
を具え、
前記付加プロパティ識別子は、前記付加プロパティクラスを識別するプロバイダ指定子と、前記付加プロパティクラス内にある前記付加プロパティの名前を識別するプロパティ識別子とを有することを特徴とするコンピュータ可読媒体。
【請求項３３】
コンピュータでコード化された少なくとも１つの命令を有するコンピュータ可読媒体であって、
ターゲットオブジェクトの付加プロパティへの明示的参照なしに、前記付加プロパティが前記ターゲットオブジェクトに関連付けられるように、前記ターゲットオブジェクト、付加プロパティクラス、および前記付加プロパティクラス内にある前記付加プロパティを定義するＸＭＬスキーマ
を具えたことを特徴とするコンピュータ可読媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ソフトウェアアプリケーションに関し、より詳細には、ソフトウェアアプリケーション内のオブジェクトのプロパティを管理するための機構を提供可能な、プロパティをオブジェクトに関連付けするためのコンピュータ可読媒体、システム、および、方法に関する。
【０００２】
【従来の技術】
今日、ほとんどのプログラミングモデルは、クラスの概念をサポートしている。こうしたクラスは一般に、クラス階層内の異なるクラスを表すブランチを有する階層ツリーの構造をしている。２つのブランチのレベルが異なるときは、下位ブランチが子クラスに相当する。子クラスは、上位ブランチ（すなわち親クラス）に関連付けられているクラスから情報を継承する。２つのブランチのレベルが同じであるときは、それらのクラスを兄弟クラスと呼ぶ。
【０００３】
以下の説明上、親クラスとの関係で子クラスに言及するとき、下位クラスおよび上位クラスという用語で、それぞれ子クラスおよび親クラスを指すことがある。階層の最上位のブランチは、階層クラスツリーの基底クラスに相当する。一般に、各クラスの情報には、プロパティ、メソッド、イベントなどがある。プロパティは、クラスに関連付けられた特性を表す。例えば、ボタンクラスは、幅、背景色、フォントタイプ、可視状態、押下げ状態などのプロパティを有することができる。これらのクラスの１つをインスタンス化すると、そのクラスのオブジェクトが作成される。そのオブジェクトの各プロパティは、ランタイム作業中にクエリまたは設定できる関連値を有する。構文が強く型付けされている（ｓｔｒｏｎｇｌｙ　ｔｙｐｅｄ）場合、クエリまたは設定される値は、特定のデータ型に一致すると期待することができる。ランタイム作業前にソフトウェアアプリケーション内でエラーを検出することができるため、強く型付けされた構文を有することが望ましい。
【０００４】
【発明が解決しようとする課題】
クラス階層がいったん適切な位置に配置された後、クラス階層内のオブジェクトに新しい機能を追加することによって問題が生じる。あるプログラミングモデルでは、新しい機能は、強制的に基底クラスに入れられる。この場合、基底クラスが非常に大きくなり（例えば、１００のメソッド、５０のプロパティ、２０のイベントなど）、オブジェクト階層がほぼ管理不可能になる。このプログラミングモデルでは、望ましくないことに、基底クラス内のプロパティ、メソッド、およびイベントの数が多くなりすぎて、開発者は、作成するオブジェクトに、完全に理解した上で所望の機能を実装することができなくなる。
【０００５】
さらにもう１つの望ましくない結果として、このプログラミングモデルでは、プロパティの値がローカルに格納されるため、メモリ要件が非常に大きくなってしまう。値がローカルに格納されるため、このプログラミングモデルで作成されたアプリケーションのサイズが適切に調整されない（ｓｃａｌｅ　ｗｅｌｌ）。
【０００６】
また、このプログラミングモデルによって、サードパーティの開発者は、他の問題も被る。新しい機能の追加を望むサードパーティの開発者は、階層の最下位に子クラスを追加する必要がある。新しい子クラスは、その階層の最下位にあるので、その階層内の他の子クラスからは新しい機能を使用することができない。したがってサードパーティの開発者は、新しい機能をいくつかの子クラスに追加しなければならないことがある。これによってコードが重複し、オブジェクト階層の保守性に影響を与える。以上の理由から、上記従来のプログラミングモデルは望ましくない。
【０００７】
そこで、本発明の目的は、新しい機能を、基底クラスに強制的に入れるのではなく、すなわち、あるクラスに追加してそのクラスの永久部分にすることなく、既存のクラス階層内の任意のクラスに入れることが可能な、コンピュータ可読媒体、システム、および、方法を提供することにある。
【０００８】
また、本発明の他の目的は、新しい機能を、クラスに組み込まれないプロパティとして表すことが可能な、コンピュータ可読媒体、システム、および、方法を提供することにある。
【０００９】
さらに、本発明の他の目的は、あるクラス内のプロパティを別のクラスに関連付ける機構を得ることが可能な、コンピュータ可読媒体、システム、および、方法を提供することにある。この場合、該機構の関連付けは、容易に変更可能であり、他のプロパティセット（ｓｅｔ　ｏｆ　ｐｒｏｐｅｒｔｉｅｓ）をそのクラスと関連付けることができる。
【００１０】
【課題を解決するための手段】
一実施形態では、第１のプロパティセット内のあるプロパティを有するオブジェクトを含むコンピュータ可読媒体は、さらにデータ構造を含む。データ構造は、第２のプロパティセットのそれぞれの定義、および少なくとも１つの静的メソッドを含む。静的メソッドは、第２のプロパティセット内の１つのプロパティに関連付けられ、第１のパラメータを含む。第１のパラメータは、１つのプロパティを一意に識別する。静的メソッドは、そのオブジェクト内の１つのプロパティへの明示的参照を指定することなく、そのプロパティをオブジェクトに関連付けるように動作可能である。
【００１１】
本発明の第１の態様では、静的メソッドは、強く型付けされた構文をサポートする。
【００１２】
本発明の別の態様では、静的メソッドは、値をオブジェクトにローカルに格納することなく、オブジェクトの値を取り出すことを含む。この値は、親オブジェクト、プロパティシートなどいくつかの段階から取り出すことができる。
【００１３】
【発明の実施の形態】
簡潔に述べると、本発明は、新しい機能を、あるクラスの永久部分にすることなくそのクラスに提供できるようにするプログラミングモデルを提供する。さらに、本発明によって、新しい機能を、クラスに組み込まれないプロパティとして表すことができるようにする。本発明は一般に、あるクラス内のプロパティを別のクラスに関連付ける機構を提供する。以下の詳細な説明を読めば明らかになるように、本発明のプログラミングモデルは、プロパティをオブジェクトに組み込むことなく、オブジェクトに動的なプロパティを提供する。
【００１４】
図１を参照すると、本発明を実施するためのシステムの一例が、演算装置１００などの演算装置を含んでいる。極めて基本的な構成では、演算装置１００は一般に、少なくとも１つの処理ユニット１０２、およびシステムメモリ１０４を含む。システムメモリ１０４は、演算装置の正確な構成およびタイプに応じて、揮発性（ＲＡＭなど）、不揮発性（ＲＯＭ、フラッシュメモリなど）、またはその２つの何らかの組合せでもよい。システムメモリ１０４は一般に、オペレーティングシステム１０５、１つまたは複数のプログラムモジュール１０６を含んでおり、またプログラムデータ１０７を含んでいてもよい。プログラムモジュール１０６の例には、ワシントン州レドモンドにあるＭｉｃｒｏｓｏｆｔ　ＣｏｒｐｏｒａｔｉｏｎのＶｉｓｕａｌ　Ｓｔｕｄｉｏ　ＩｎｔｅｌｌｉＳｅｎｓｅ、オブジェクトライブラリを使用する他のソフトウェアプログラミング環境などがある。さらに、プログラムモジュール１０６は、ソフトウェアプログラミング環境を使用して作成されたソフトウェアアプリケーションを含む。これらのソフトウェアアプリケーションが処理ユニット１０２上で実行されると、プロパティエンジンは、本発明のプログラミングモジュールに従ってソフトウェアアプリケーションを処理する。プロパティエンジンは、オペレーティングシステム１０５の一部、あるいは別のプログラムモジュール１０６であってもよい。図１に、演算装置１００のこの基本的な構成を、破線１０８内の構成要素で示している。
【００１５】
演算装置１００は、追加の特徴または機能を備えることができる。例えば、演算装置１００は、磁気ディスク、光ディスク、テープなど、追加のデータ記憶装置（取外し可能および／または取外し不能）を含んでいてもよい。こうした追加の記憶装置を、図１に取外し可能記憶装置１０９および取外し不能記憶装置１１０で示している。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、その他のデータなど、情報を記憶するための任意の方法または技術で実施される揮発性および不揮発性の、取外し可能および取外し不能な媒体がある。システムメモリ１０４、取外し可能記憶装置１０９、および取外し不能記憶装置１１０は、すべてコンピュータ記憶媒体の例である。コンピュータ記憶媒体には、それだけには限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多目的ディスク（ＤＶＤ）、または他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、または他の磁気記憶装置、または所望の情報を格納するために使用でき、演算装置１００からアクセスできる他の任意の媒体などがある。こうしたコンピュータ記憶媒体が装置１００の一部であってもよい。また演算装置１００が、キーボード、マウス、ペン、音声入力装置、タッチ入力装置などの入力装置１１２を備えていてもよい。ディスプレイ、スピーカ、プリンタなどの出力装置１１４を含むこともできる。これらの装置は、当技術分野ではよく知られており、ここでは詳しく説明する必要はない。
【００１６】
また演算装置１００は、ネットワークなどを介してこの装置が他の演算装置１１８と通信できるようにする通信接続１１６を含んでいてもよい。通信接続１１６は、通信媒体の一例である。通信媒体は一般に、コンピュータ可読命令、データ構造、プログラムモジュール、または搬送波や他の移送機構などの変調されたデータ信号の形の他のデータで具現化することができ、これには任意の情報配布媒体（ｉｎｆｏｒｍａｔｉｏｎ　ｄｅｌｉｖｅｒｙ　ｍｅｄｉａ）がある。「変調されたデータ信号」という用語は、信号内の情報をコード化するように設定または変更された１つまたは複数のその特性を有する信号を意味する。通信媒体には、それだけには限定されないが、一例として、有線ネットワーク、直接配線された通信（ｄｉｒｅｃｔ−ｗｉｒｅｄ　ｃｏｎｎｅｃｔｉｏｎ）などの有線媒体、音響、ＲＦ、赤外線、その他の無線媒体などの無線媒体などがある。コンピュータ可読媒体という用語は、本明細書で使用する場合、記憶媒体および通信媒体の両方を含む。
【００１７】
図２は、図１のプログラミング環境内で、あるアプリケーションで作成できる表示画面の一例である。本発明のプログラミングモデルは、様々な環境で使用でき、それだけには限定されないが、一例として、図２にユーザインターフェース環境内でのプログラミングモデルの使用を示している。したがってこの例では、図１のアプリケーションの１つが、図２で示す表示画面２００を作成する。表示画面２００は、ダイアログボックス２０２を含む。ダイアログボックス２０２は、他のいくつかのコントロール（すなわちオブジェクト）を含むことができる。この例では、ダイアログボックス２０２は、リストボックス２０４、編集ボックス２０６、および２つのボタンオブジェクト（ＯＫボタン２１０、ＣＡＮＣＥＬボタン２１２など）を有するコンテナオブジェクト２０８を含む。図３に関連して以下で詳述するように、従来のプログラミング技術を使用すると、これらの各オブジェクト（２０２〜２１２など）は、ベースオブジェクト（エレメントクラスなど）から派生する子オブジェクトである。さらに、本発明の一実施形態によれば、各子オブジェクトは、ノードクラスから派生していてもよい。後述するように、このノードクラスは、付加プロパティに「付加」機能を提供する。
【００１８】
表示画面２００の外観は、以前のプログラミングモデルを使用して作成した表示画面と同じように見えるかもしれないが、表示画面２００を作成する機構はかなり異なる。以前のプログラミングモデルでは、表示画面２００を実施するソフトウェアコードは、オブジェクトの挙動、および各オブジェクト自体または親オブジェクトの１つに組み込まれたオブジェクトの外観を有していた。しかし、以下で詳しく説明するように、本発明によれば、個別のクラスは、２つのクラスの間の明示的参照を頼ることなくオブジェクト２０２〜２１２にアクションおよび外観を提供する。
【００１９】
これによって開発者は、オブジェクト全体を変更することなく、アクション部分または外観部分のいずれかを変更することができる。したがって、このユーザインターフェースの例では、各オブジェクトが２つの部分に要素の１つとして組み込まれる。１方の部分は、オブジェクトに関連付けられるアクション（すなわち挙動）に関連し、もう一方の部分は、オブジェクトの外観（すなわちレンダリング）に関連する。レンダリングがオブジェクトの挙動から分離されるため、オブジェクトの外観を容易に変更してオブジェクトの表示方法を変えることができる。
【００２０】
上記のユーザインターフェースの例では、オブジェクトのプロパティを挙動グループおよび外観グループに都合のよいように要素の１つとして組み込んでいるが、発明者は、様々な環境の多くのオブジェクトのプロパティを、２つ以上の関連のあるグループに都合のよいように分けることができることを決定している。したがって、本発明によれば、こうした関連のあるグループを互いに「暗示的に」関連付けて、オブジェクトを完全に実装することができる。この「暗示の」関連付けによって、以前のプログラミングモデルにまさるいくつかの利点がもたらされる。利点の１つは、サードパーティの開発者が、他のグループに影響を与えずにそのアプリケーションに関する関連のあるグループを都合のよいように変更できることである。これによって、オブジェクトの機能を変更するために開発者が知る必要のある情報量が大幅に簡素化される。さらに、オブジェクト階層がより管理しやすくなる。別の利点は、各オブジェクトがローカル値を必ずしも現在の状態で維持する必要はないので、その記憶域が減ることである。代わりに、図６に関連して詳しく説明するように、必要なときに様々なソースから状態を取り出すことができる。
【００２１】
図３は、本発明に従ってあるクラスのプロパティの関連のあるグループを別のクラスと「暗示的に」関連付ける機構を提供するプログラミングモデル３００を示す図である。他のプログラミングモデルと同様に、本発明は、基底クラス３０２をサポートしている。基底クラス３０２は、基底クラス３０２と関連付けられている第１のプロパティセット３０４を含む。さらに、基底クラス３０２は、１組のメソッド３０６および１組のイベント３０８を含む。しかし本発明によれば、基底クラスは、ノードクラス３０１から派生する。ノードクラス３０１は、ＳｅｔＶａｌｕｅ（）メソッド３０７およびＧｅｔＶａｌｕｅ（）メソッド３０９を提供する。
【００２２】
第２のプロパティセット３２４は、付加クラス３２２内に含まれる。付加クラス３２２もまた、第２のプロパティセット３２４のそれぞれに関連付けられている少なくとも２つの静的メソッド（例えばＳｅｔＦｏｎｔ（）３２６、ＧｅｔＦｏｎｔ（）３３０）を含む。これらの静的メソッドは、静的メソッドに関連付けられているプロパティを登録しているオブジェクトにアクセス可能なグローバルメソッドと考えることができる。付加クラス３２２を提供する開発者は、これらの静的メソッド３２６および３３０のそれぞれにコードを書く責任を負う。コードは、ノードクラス３０１が提供するメソッドの１つへの呼出しを含む。例えば、ＳｅｔＦｏｎｔ（）３２６を呼び出して特定の識別子ＰｒｏｐｅｒｔｙｌＤおよび所与のフォントＶａｌｕｅを得るアプリケーションは、最終的にノードクラス３０１のＳｅｔＶａｌｕｅ（）３０７への呼出しを実行する。ＳｅｔＦｏｎｔ（）３２６がＳｅｔＶａｌｕｅ（）３０７への呼出しに渡すパラメータは、ＳｅｔＦｏｎｔ（）３２６の呼出しで得られた特定の識別子ＰｒｏｐｅｒｔｙｌＤおよび所与のフォントＶａｌｕｅを含む。ＳｅｔＦｏｎｔ（）関数の例を、以下のように表すことができる。
ＳｅｔＦｏｎｔ（ＰｒｏｐｅｒｔｙＩＤ，ｗｈｉｔｅ）
｛　ＰｒｏｐｅｒｔｙＩＤ−＞ＳｅｔＶａｌｕｅ（ＰｒｏｐｅｒｔｙＩＤ，ｗｈｉｔｅ）；
｝．
【００２３】
したがって、付加クラスが任意の付加プロパティに強い型付けを提供することを、当分野の技術者であれば理解されよう。本発明は、ＳｅｔＶａｌｕｅ（）３０７を直接呼び出すアプリケーションをサポートしているが、これによって、コンパイル時間中に強い型付けを提供する利点が利用できなくなってしまう。上述したように、強い型付けによって、ランタイム作業前にエラーを検出することができる。別の実施形態では、付加クラス３２２が、付加プロパティ３２４のそれぞれに追加の静的メソッド（ＧｅｔＦｏｎｔＩＤ（）３２８など）を提供する。この追加の静的メソッドは、要求された付加プロパティが登録されているかどうかをテストするように動作可能である。したがって、この追加の静的メソッド３２８を使用して、アプリケーションが、付加プロパティに対してｓｅｔおよびｇｅｔの静的メソッドを実行しようとする前に、確実に付加プロトコルを必ず適切に登録するようにする。例えば、ＧｅｔＦｏｎｔｌＤ（）３２８は、Ｃｏｌｏｒ付加プロパティが登録されていないことを検出した場合、エラーを知らせる、要求側オブジェクトのＣｏｌｏｒ付加プロパティを自動的に登録する、などを行うことができる。
【００２４】
次は、遅延登録を提供する実施形態の一例である。
ｃｌａｓｓ　ＦｏｎｔＰｒｏｖｉｄｅｒ
｛　　　ｐｕｂｌｉｃ　ｓｔａｔｉｃ　Ｆｏｎｔ　ＧｅｔＦｏｎｔ（Ｎｏｄｅ　ｎ）
｛　　　ｒｅｔｕｒｎ　ｎ．ＧｅｔＶａｌｕｅ（ＧｅｔＦｏｎｔＩＤ（））；　　｝
ｐｕｂｌｉｃ　ｓｔａｔｉｃ　ｖｏｉｄ　ＳｅｔＦｏｎｔ（Ｎｏｄｅ　ｎ，　Ｆｏｎｔ　ｎｅｗＦｏｎｔ）
｛　　　ｎ．ＳｅｔＶａｌｕｅ（ＧｅｔＦｏｎｔＩＤ（），　ｎｅｗＦｏｎｔ）；　　｝
ｐｕｂｌｉｃ　ｓｔａｔｉｃ　ＤｙｎａｍｉｃＰｒｏｐｅｒｔｙ　ＧｅｔＦｏｎｔＩＤ（）
｛　　　／／Ｄｅｌａｙ　ｒｅｇｉｓｔｅｒ　Ｆｏｎｔ　ｐｒｏｐｅｒｔｙ　ｉｆ　ｎｅｃｅｓｓａｒｙ
ｉｆ（ＦｏｎｔＩＤ　＝＝　ｎｕｌｌ）
｛　　　ＦｏｎｔＩＤ　＝　ＲｅｇｉｓｔｅｒＰｒｏｐｅｒｔｙ（”Ｆｏｎｔ”，　ｔｙｐｅｏｆ（Ｆｏｎｔ），　”Ａｒｉａｌ”，　．．．）；
｝
｝
ｐｒｉｖａｔｅ　ｓｔａｔｉｃ　ＤｙｎａｍｉｃＰｒｏｐｅｒｔｙ　ＦｏｎｔＩＤ　＝　ｎｕｌｌ；
｝
【００２５】
他のプログラミングモデルと同様に、本発明は、基底クラス３０２の子クラス（図示せず）をサポートしている。説明を簡単にするために、図３には、基底クラス３０２および他の付加クラスの子クラスを示していない。したがって、子クラスが別の付加クラスに関連付けられているのを示していない。しかし、以下の説明を読めば、他の付加クラスを参照する子クラスを有するアプリケーションを容易に設計できることを、当分野の技術者であれば理解できよう。一般に、クラスが付加プロパティに必要な静的メソッドを提供する限り、どんなクラスでも付加プロパティの「プロバイダ」となることができる。
【００２６】
付加クラス３２２によって、サードパーティの開発者は、基底クラス３０２を変更することなく、アプリケーションにプロパティおよび機能を動的に追加する能力を得ることができる。基底クラス３０２内のプロパティの変更と同様、追加されたプロパティ（第２のプロパティセット３２４など）が、階層オブジェクトツリー３９０全体の中にあるオブジェクトに影響を与える。付加クラス３２２は、アプリケーションの実行中はインスタンス化されない。したがって、基底クラス３０２からインスタンス化されたオブジェクトごとに、同じ付加クラス（付加クラス３２２）は、第２のプロパティセット３２４をこれらのオブジェクトのそれぞれに提供することができる。
【００２７】
アプリケーションのランタイム中、ベースオブジェクト３１２がインスタンス化される。さらに、１つまたは複数の子オブジェクト（子オブジェクト３４０〜３５０など）がインスタンス化される。オブジェクトツリー３９０にあるオブジェクトは、プログラム制御（Ｃ＃など）、マークアップ言語（ＸＭＬなど）、または他の手段でインスタンス化することができる。オブジェクトツリー３９０をプログラム制御で作成すると、一般にコンパイラは、付加クラス３２２を実施する命令に不当な名前やデータ型などのエラーがあるかどうかを識別する。上述したように、付加クラス３２２は、強い型付けを提供する。したがって、ランタイム前にエラーを見つけることができる。さらに、ソフトウェア開発ツールは、アプリケーションの開発中にエラーを検出することができる。オブジェクトツリー３９０をマークアップ言語で作成すると、構文解析プログラムがマークアップステートメントを解釈する。一般に、マークアップ言語のタグの名前は、対応するクラスの名前である。
【００２８】
これらの子オブジェクト３４０〜３５０のそれぞれは、子オブジェクト（子オブジェクト３４０など）内に１つまたは複数の子プロパティ（子プロパティ３４１など）を含むことができる。子プロパティの値を、関連付けられた子オブジェクトに格納することができる。しかし、本発明によれば、子オブジェクトが必ずしも値を格納するためのローカルの記憶域を有している必要はない。さらに、これらの子オブジェクト３４０〜３５０のそれぞれは、子オブジェクトに関連付けられた１つまたは複数の付加プロパティ（点線のボックス内に示した付加プロパティ３５２など）を含むことができる。図６に関連して詳しく説明するように、付加プロパティ３５２は、その値を子オブジェクト３５０に関連付けられたローカルの記憶域から取得でき、その値を、継承（ベースオブジェクト３１２など）を介して、プロパティシート（図示せず）を介して、プログラムのメソッド（静的メソッド３３０をメソッド３０９と併用するなど）を介して、本発明による他の手段を介して取得することができる。付加プロパティのこれらの値は、子オブジェクトに関連付けられるが、これらの値の記憶域は、一般に子オブジェクトの一部ではない。
【００２９】
再度図３を参照すると、ユーザインターフェース環境におけるプログラミングモデルを示している。したがって、ベースオブジェクト３１２および子オブジェクト３４０〜３５０内のプロパティは、オブジェクトの挙動に関連することに気づくであろう。ベースオブジェクト３１２はダイアログオブジェクトに相当し、子オブジェクト３４０はボタンオブジェクトに、子オブジェクト３５０は編集ボックスに、子オブジェクト３４２は、それぞれリストボックスおよびツリーを表す２つの子オブジェクト３４６および３４８を有するセレクタオブジェクトに相当する。これらの子オブジェクト３４０〜３５０のそれぞれは、ボタンオブジェクトの押下げプロパティ、ツリーオブジェクトの展開プロパティなど、１つまたは複数の子プロパティ（子プロパティ３４１など）を含む。
【００３０】
一方、付加クラス３２２内のプロパティは、オブジェクトの外観に関連する。例えば、第２のプロパティセットは、フォントタイプ、色などのプロパティおよびデフォルトの値を含むことができる。このプログラミングモデルは、ランタイム時に子オブジェクトにプロパティを設定するように構成される。その程度まで、各子オブジェクトの付加プロパティ（付加プロパティ３５２など）は、付加クラスから値を受け取るように構成される。
【００３１】
図４は、図３に示したプログラミングモデルを実装できる様々な操作環境のための構文の例をいくつか示している。各構文の例の中の「Ｐｒｏｖｉｄｅｒ」という用語の使用は、構文に記載した静的メソッドが、「Ｐｒｏｖｉｄｅｒ」という名前を有する付加クラスに関連付けられることを意味する。したがって、これらの各構文によって付加クラスに名前を付けることができるため、異なる２つの付加クラス内にあるまったく同じ名前のプロパティは、互いに競合することがない。これによって、開発者は、名前が競合する可能性を心配することなく付加プロパティクラスを開発することができる。
【００３２】
次に構文の例を参照すると、プログラミング環境がＶｉｓｕａｌ　Ｂａｓｉｃ、Ｃ＃などのプログラム言語である場合、擬似言語は、プログラム構文４０１で示すように表すことができる。プログラム構文４０１は、クラスを、付加プロパティを含むものと識別するクラス識別子４０２を含む。プログラム構文４０１は、メソッド識別子４０４、およびプロパティに名前を指定する第１の識別子４０６および第１の識別子４０６で指定されたプロパティに関連付けられる値を指定する第２の識別子４０８を有するパラメータリストをさらに含む。パラメータリストは括弧で囲まれ、クラス識別子４０２とメソッド識別子４０４とがピリオドで分離されている。図３に示した付加クラス３２２の付加プロパティ「ＦＯＮＴ」を参照すると、プログラム構文４０１は以下のとおりである。
Ａｔｔａｃｈｅｄ　Ｃｌａｓｓ．ＳｅｔＦｏｎｔ（ＰｒｏｐｅｒｔｙｌＤ，　ｖａｌｕｅ）
【００３３】
おもしろいことに、この構文は、以前のプログラミングモデルの構文と似ているように思われる。しかし、この構文はまったく同じではなく、プログラム構文４０１は、以前の構文と異なる。例えば、プログラム構文４０１では、メソッド識別子４０４は、Ｐｒｏｖｉｄｅｒクラス（すなわち図３の付加クラス３２２）にある静的メソッドを識別する。以前のプログラミングモデルでは、メソッド識別子は、Ｐｒｏｖｉｄｅｒインスタンスにあるインスタンスメソッドを識別していた。本発明は、Ｐｒｏｖｉｄｅｒクラス（すなわち図３の付加クラス３２２）を利用するため、プログラミングモデルは、Ｐｒｏｖｉｄｅｒインスタンスの寿命を追跡する必要がなく、そのためマークアップおよびプロパティシートにおいてエクステンダプロパティ（ｅｘｔｅｎｄｅｒ　ｐｒｏｐｅｒｔｙ）をサポートすることができる。プログラム構文４０１の別の特徴は、構文が強く型付けされることである。上述したように、強く型付けされた構文によって、綴り間違った名前や不正なデータ型などの起こり得るエラーを、ランタイム時ではなくコンパイル時に検出することができるため、適切なツールサポートが可能になる。
【００３４】
さらに、Ｖｉｓｕａｌ　Ｂａｓｉｃ、Ｃ＃などのプログラミング環境の場合、プログラミングモデルでは、緩く型付けされた（ｌｏｏｓｅｌｙ　ｔｙｐｅｄ）構文（すなわちプログラム構文４１１）も許容する。プログラム構文４１１は、ターゲットオブジェクトを識別するオブジェクト識別子４１２、付加プロパティクラス内で静的メソッドを識別するメソッド識別子４１４、付加プロパティ識別子を含むパラメータリスト、および値４１９を含む。付加プロパティ識別子は、クラス識別子４１６、および関連付けられた付加クラス内で付加プロパティを識別するプロパティ識別子４１８を含む。
【００３５】
別の実施形態では、プログラミングモデルを、マークアップ構文４２１などのマークアップ言語構文を使用して実装することができる。マークアップ構文４２１は、タグ４２２、プロバイダ指名子４２４およびプロパティ識別子４２６を有する付加プロパティ、および値４２８を含む。一実施形態では、タグ４２２は、ターゲットオブジェクトの名前（例えば図３のボタンオブジェクト３４０）である。一般にマークアップ構文４２１は、それぞれ開記号および閉記号、すなわち「＜」および「＞」で開始し、終了する。この場合もまた、構文解析プログラムは、付加プロパティがどこに存在しているかを探すための処理を実行する。というのは、付加プロパティは、そのクラスに直接には存在していないからである。
【００３６】
さらに別の実施形態では、拡張可能マークアップ言語（ＸＭＬ）を、図４に示したスタイルシート構文４３１などのスタイルシートと共に使用してプログラミングモデルを実装することができる。この実施形態の場合、スタイルシート構文４３１は、「タグ」属性４３２を含む。タグ属性４３２は、処理を要求しているクラスに相当する。ＸＭＬでの付加プロパティの一例は、以下のとおりである。＜Ｂｕｔｔｏｎ　ｘｍｌｎｓ：ａｐ＝”ｅｘｐａｎｄｏＮａｍｅＳｐａｃｅ”　Ｐｒｅｓｓｅｄ＝”ｆａｌｓｅ”
ａｐ：Ｅｘｐａｎｄｏｓ．Ｓｔｒｉｎｇ＝”ｓｔｒｉｎｇ”／＞
【００３７】
本発明に従って付加プロパティを実装しているアプリケーションを実行するとき、アプリケーションは、オブジェクトツリーにあるオブジェクトをインスタンス化する。次いで、アプリケーションは、プロパティエンジンと共に、オブジェクトの値を取り出し、設定するステップを含むランタイム作業を処理する。図５および図６は、アプリケーションがプロパティエンジンと共に実行する処理を示す。
【００３８】
ただし、図５および図６に示すＳｅｔＶａｌｕｅ（）プロセスまたはＧｅｔＶａｌｕｅ（）プロセスのいずれかを実行する前に、これら２つのプロセスのいずれかの中で指定された付加プロパティを登録する必要がある。上述したように、一実施形態は、プロパティが登録されたかどうかを判断するためのチェックを行うことができる。このチェック（ＧｅｔＦｏｎｔｌＤ（）３２８など）は、付加プロパティに対応する任意の静的メソッド（すなわちＳｅｔＦｏｎｔ（）３２６およびＧｅｔＦｏｎｔ（）３３０）内で行うことができる。このチェックは、任意の静的メソッドが呼び出されるたびに行う必要があるので、この実施形態は、パフォーマンスの代償を払う。アプリケーションに登録を行うよう要求するなど、本発明から逸脱することなくプロパティの登録を最適化する他の実施形態を実施できることは、当分野の技術者であれば理解できよう。
【００３９】
付加プロパティの登録は、付加プロパティの一意のＰｒｏｐｅｒｔｙＩＤを戻す。プロパティを登録するための呼出しを、一例として、以下の形とすることができる。
ＢａｒＤＰ＝ＲｅｇｉｓｔｅｒＰｒｏｐｅｒｔｙ（”Ｂａｒ”，Ｏ，ｔｙｐｅｏｆ（ｓｔｒｉｎｇ），ｔｙｐｅｏｆ（Ｂｕｔｔｏｎ），０ｘ３）；
【００４０】
この実施形態では、ＢａｒＤＰ変数は、この場合、付加プロパティの一意の識別子を含む。この一意の識別子は、この場合、ＳｅｔＶａｌｕｅ（）関数およびＧｅｔＶａｌｕｅ（）関数の呼出しで使用される。一実施形態では、ＲｅｇｉｓｔｅｒＰｒｏｐｅｒｔｙがオーナの静的コンストラクタから直接的または間接的に呼び出される。オーナは、付加プロパティを付加するクラスを参照する。付加プロパティが登録されると、付加プロパティに関連付けられたＧｅｔおよびＳｅｔの静的メソッドを呼び出すことによって、付加プロパティのターゲットタイプに一致する任意のインスタンスがプロパティを「暗示的に」付加することができる。
【００４１】
プロパティを登録するための呼出しの例で上記に示したように、「Ｂａｒ」は、付加プロパティの名前を指定する。プロパティエンジンは、一般にこの名前を使用しない。しかし、構文解析プログラムは、この名前を使用して、プロパティがすでにオーナに登録されているのと同じ名前をもつかどうかを判断する。ターゲットタイプはＢｕｔｔｏｎである。付加プロパティの場合、オーナとターゲットは同じではない。デフォルトの値は「０」である。図６に関連して詳しく説明するように、プロパティエンジンは、付加プロパティの値を取り出す場所を決定する。したがって、ＲｅｇｉｓｔｅｒＰｒｏｐｅｒｔｙの呼出しは、継承、プロパティシートなど、プロパティの値が検索される段階を識別する挙動ビット（ｂｅｈａｖｉｏｒ　ｂｉｔ）を含む。上記の呼出しの例では、挙動ビット「０×３」は、付加プロトコルの値を決定するために、ローカル値、プロパティシート、および継承が検索されることを示す。したがって一実施形態では、こうした挙動ビットの解釈を、ＧｅｔＶａｌｕｅ（）静的メソッド内でコード化することができる。あるいは、こうした段階は、正規のやり方でプロパティ間の関係を形に表す式によって決定することができる。
【００４２】
一実施形態では、付加クラスのコードを、表１に示した形とすることができる。
ｃｌａｓｓ　ＢａｒＰｒｏｖｉｄｅｒ：　Ｏｂｊｅｃｔ　｛
ｐｕｂｌｉｃ　ｓｔａｔｉｃ　ＤｙｎａｍｉｃＰｒｏｐｅｒｔｙ　ＢａｒＤＰ　＝　ＲｅｇｉｓｔｅｒＰｒｏｐｅｒｔｙ（
”Ｂａｒ”，　０，　ｔｙｐｅｏｆ（ｓｔｒｉｎｇ），　ｔｙｐｅｏｆ（Ｂｕｔｔｏｎ））；
ｐｕｂｌｉｃ　ｓｔａｔｉｃ　ｓｔｒｉｎｇ　ＧｅｔＢａｒ（Ｂｕｔｔｏｎ　ｂｕｔｔｏｎ）　｛
ｒｅｔｕｒｎ　（ｓｔｒｉｎｇ）　ｂｕｔｔｏｎ．ＧｅｔＶａｌｕｅ（ＢａｒＤＰ）；　｝
ｐｕｂｌｉｃ　ｓｔａｔｉｃ　ｖｏｉｄ　ＳｅｔＢａｒ（Ｂｕｔｔｏｎ　ｂｕｔｔｏｎ，　ｓｔｒｉｎｇ　ｖａｌｕｅ）｛
ｂｕｔｔｏｎ．ＳｅｔＶａｌｕｅ（ＢａｒＤＰ，　ｖａｌｕｅ）；　｝
｝．
Ｔａｂｌｅ　１．
【００４３】
上記のコードでは、「Ｂａｒ」という名前の付加プロパティは、付加クラス「ＢａｒＰｒｏｖｉｄｅｒ」内で定義される。付加プロパティ名「Ｂａｒ」は、データ型で文字列と定義され、Ｂｕｔｔｏｎオブジェクトに付加することしかできない。静的メソッドは、強く型付けされ、プロパティへのアクセスおよびプロパティの設定を可能にする。
【００４４】
付加プロパティが登録されると、ＳｅｔＶａｌｕｅ（）関数およびＧｅｔＶａｌｕｅ（）関数を実行することができる。図５は、本発明に従って値を設定するプロセスを示す論理流れ図である。ブロック５０１で処理が開始し、ｓｅｔ関数が開始され、あるプロパティに関連付けられた値が変更される。一般に、ＳｅｔＶａｌｕｅプロセス５００では、関与するプロパティ（以下、関与するプロパティと呼ぶ）の値がローカルに格納される。処理が決定ブロック５０２に進む。
【００４５】
決定ブロック５０２で、関与するプロパティのローカルの記憶域が存在するかどうかを決定する。本発明は、自動的にはオブジェクトの各インスタンスのプロパティごとに記憶域をもたないため、関与するプロパティが以前その値を格納していなかった場合は、記憶域が割り振られる（ブロック５０４）。記憶域が割り振られると、決定ブロック５０２でローカル記憶域を検出した場合と同様に、処理がブロック５０６に進む。
【００４６】
ブロック５０６で、値が、関与するプロパティに関連付けられている記憶域にコピーされる。関与するプロパティの状態が変わったら、状態変更の通知が送信される（ブロック５０８）。一実施形態では、この通知は、その状態はもはや有効ではない可能性があることを従属プロパティに知らせるようダーティビット（ｄｉｒｔｙ　ｂｉｔ）を設定することを含むことができる。あるいは、通知は、上記の特許出願に記載したように、ソースが変わったことを各従属に報告することを含むことができる。処理が決定ブロック５１０に進む。
【００４７】
決定ブロック５１０で、関与するプロパティのキャッシュに値が格納されているかどうかを判断する。この関与するプロパティのキャッシュに値がない場合、プロセスは終了する。しかし、キャッシュに値がある場合、この値はもはや有効ではないので、キャッシュはクリアされる（ブロック５１２）。次いでプロセスが終了する。
【００４８】
図６は、本発明に従って値を取り出すプロセスを示した論理流れ図である。処理はブロック６０１で開始し、クエリが開始される。処理がブロック６０２に進む。
【００４９】
ブロック６０２で、アプリケーションは、関与するプロパティ（以下、関与するプロパティと呼ぶ）の１つが更新の必要があることを知らせる。これは一般に、オブジェクトがプロパティの現在の状態をクエリしているときに行われる可能性がある。プロセス６００は、様々な段階をチェックすることによってプロパティの値を決定する。こうした段階は、プロパティの登録時に定義される。決定ブロック６０６〜６１０は、段階の例を表しているが、本発明から逸脱することがなければ、他の段階を追加することができる。処理が決定ブロック６０４に進む。
【００５０】
決定ブロック６０４で、プロセスは、キャッシュをチェックして、関与するプロパティが前にキャッシュされているかどうかを判断する。一般に、関与するプロパティは、取出しを最適化するためにキャッシュされる。プロパティが前にキャッシュされている場合は、プロセスがブロック６１２に進み、値がキャッシュから取り出される。あるいは、プロセスが決定ブロック６０６に進む。決定ブロック６０６で、関与するプロパティの値がローカルかどうかを判断する。図５で説明したように、ＳｅｔＶａｌｕｅ（）が実行されてプロパティの値をローカルに設定した場合、値はローカルである。値がローカルの場合、プロセスがブロック６１２に進み、値がローカル記憶域から取り出される。値がローカルではない場合、プロセスが決定ブロック６０８に進む。
【００５１】
決定ブロック６０８で、関与するプロパティの値がプロパティシートで入手可能かどうかを決定する。基底クラスが関連付けられたプロパティシートを有している場合、プロパティシートは、基底クラスの各子がインスタンス化されるとどのようにレンダリングされるかを指定する。関与するプロパティがプロパティシートで入手可能な場合、処理がブロック６１２に進み、値がプロパティシートから取り出される。しかし、値がプロパティシートにない場合、処理は決定ブロック６１０に進む。
【００５２】
決定ブロック６１０で、関与するプロパティの値が、継承（すなわち継承値）を介して取得できるかどうかを判断する。継承値は、その子オブジェクトの親オブジェクトから派生する。親オブジェクトの１つが関与するプロパティを有している場合、処理がブロック６１２に進み、値が親オブジェクトから取り出される。しかし、値が継承されていない場合、付加プロパティに関連付けられた付加クラスからデフォルトの値が取り出される（ブロック６１４）。処理がブロック６１６に進む。
【００５３】
ブロック６１６で、アプリケーションは、値を受け取った段階に基づいてウェイトメトリック（ｗｅｉｇｈｔ　ｍｅｔｒｉｃ）を算出する。ウェイトメトリックが格納され、それを使用して、その後の取出しを最適化するために、関与するプロパティのうちのどれをキャッシュするかを経験に基づいて決定する。次いで処理が終了する。
【００５４】
上記のＳｅｔＶａｌｕｅプロセスおよびＧｅｔＶａｌｕｅプロセスに加えて、本発明のプログラミングモデルは、グループクエリ、グループ通知などの強化機能を提供する。したがって、上述したように、本発明は、付加クラスの使用によって、プロパティ間の複雑な関係をサポートする、依存関係に基づくプロパティシステムを提供するプログラミングモデルを提供する。このプログラミングモデルを使用して構築されたアプリケーションでは、プロパティ管理手法が過度にローカルの、インスタンスごと（ｐｅｒｉｎｓｔａｎｃｅ　ｂａｓｅｄ）の記憶域を必要としないため、そのサイズが非常に適切に調整される。代わりに、プログラミングモデルは、基底クラスレベルでのプロパティシートおよび継承の使用などによって、プロパティ値の再利用を促進する。上述したように、本発明は、オブジェクト階層内のオブジェクトが付加を介してプロパティ値を格納するプロパティ管理機構を提供する。
【００５５】
上記の詳細、例、およびデータは、本発明の構成の作成および使用を完全に説明している。本発明の多くの実施形態は、本発明の主旨および範囲から逸脱することなく実施することができるため、本発明は、頭記の特許請求の範囲に帰する。
【００５６】
（まとめ）
以上の説明により、オブジェクトの新しい機能を、オブジェクトがそこから派生するクラスに組み込まれないプロパティとして表すことができる機構を得ることができる。この機構は、１つのクラス内にあるプロパティを別のクラスに関連付ける。
【００５７】
第１のプロパティセット内のあるプロパティを有するオブジェクトを含むコンピュータ可読媒体は、さらにデータ構造を含む。このデータ構造は、第２のプロパティセットのそれぞれの定義と、少なくとも１つの静的メソッドとを含む。
この静的メソッドは、第２のプロパティセット内の１つのプロパティに関連付けられ、第１のパラメータを含む。この第１のパラメータは、１つのプロパティを一意に識別する。
【００５８】
これにより、静的メソッドは、オブジェクト内の１つのプロパティへの明示的参照を指定することなく、そのプロパティをオブジェクトに関連付けるように動作することが可能となる。プロパティは、一意の識別子を受け取るためにランタイム中に登録される。
【００５９】
以下の利点が挙げられる。
【００６０】
本発明の１つの利点は、プロパティを１つまたは複数のサブセットに分けることによって、プロパティの各サブセットがより簡単に保守できるようになることである。本発明の別の利点は、オブジェクト階層の拡張性がより高く、開発者が基底クラスおよびすべての下位クラスに影響を与えるオブジェクト階層に機能を追加することができることである。
【００６１】
本発明の別の利点は、オブジェクト内にあるプロパティの記憶域の管理がより効率的かつ便利になることである。
【００６２】
本発明のさらに別の利点は、プログラミングモデルが、プログラム環境またはマークアップ環境内で動作することである。さらに、プログラミングモデルが、Ｃ＋＋、Ｃ＃など強く型付けされたプログラミング言語で動作する。さらに、プログラミングモデルは、プロパティシート、変更通知、および値の継承をサポートしている。
【００６３】
本発明の別の利点は、付加クラス（ａｔｔａｃｈｅｄ　ｃｌａｓｓ）の名前が有効にそのプロパティ名の一部になるため名前が競合する可能性がほとんどなく、そのため独立ライブラリが並存できることである。したがって、異なる２人の開発者がそれぞれ「ｃｏｌｏｒ」という名前のプロパティを有する付加プロパティを作成した場合、２つの付加プロパティは競合しない。
【００６４】
【発明の効果】
以上発明したように、本発明によれば、新しい機能を、あるクラスに追加してそのクラスの永久部分にすることなく、既存のクラス階層内の任意のクラスに追加することができる。
【００６５】
また、本発明によれば、新しい機能を、クラスに組み込まれないプロパティとして表すことが可能となり、さらに、あるクラス内のプロパティを別のクラスに関連付ける機構を得ることができる。
【図面の簡単な説明】
【図１】本発明の実施形態の一例で使用できる演算装置の例を示す図である。
【図２】図１の演算装置で作成できる表示画面の例を示す図である。
【図３】本発明に従って１つのクラスのプロパティを別のクラスに付加できるようにするプログラミングモデルを示す図である。
【図４】図３に示すプログラミングモデルを実装するための構文の例をいくつか示す図である。
【図５】本発明に従って値を設定するプロセスを示す論理流れ図である。
【図６】本発明に従って値を取り出すプロセスを示す論理流れ図である。
【符号の説明】
１００　演算装置
１０２　処理ユニット
１０４　システムメモリ
１０５　オペレーティングシステム
１０６　プログラムモジュール
１０７　プログラムデータ
１０８　破線
１０９　取外し可能記憶装置
１１０　取外し不能記憶装置
１１２　入力装置
１１４　出力装置
１１６　通信接続
１１８　他の演算装置
２００　表示画面
２０２　ダイアログボックス
２０４　リストボックス
２０６　編集ボックス
２０８　コンテナオブジェクト
２１０　ＯＫボタン
２１２　ＣＡＮＣＥＬボタン
３００　プログラミングモデル
３０１　ノードクラス
３０２　基底クラス
３０４　第１の組のプロパティ
３０６　メソッド
３０７　ＳｅｔＶａｌｕｅ（）メソッド
３０８　イベント
３０９　ＧｅｔＶａｌｕｅ（）メソッド
３１２　ベースオブジェクト
３２２　付加クラス
３２４　第２の組のプロパティ
３２６　ＳｅｔＦｏｎｔ（）
３２８　ＧｅｔＦｏｎｔＩＤ（）
３３０　ＧｅｔＦｏｎｔ（）
３４０〜３５０　子オブジェクト
３４１　子プロパティ
３５２　付加プロパティ
３９０　階層オブジェクトツリー
４０１　プログラム構文
４０２　クラス識別子
４０４　メソッド識別子
４０６　第１の識別子
４０８　第２の識別子
４１１　プログラム構文
４１２　オブジェクト識別子
４１４　メソッド識別子
４１６　クラス識別子
４１８　プロパティ識別子
４１９　値
４２１　マークアップ構文
４２２　タグ
４２４　プロバイダ指名子
４２６　プロパティ識別子
４２８　値
４３１　スタイルシート構文
４３２　タグ属性
５００　ＳｅｔＶａｌｕｅプロセス
６００　プロセス
【図１】
2004038958.tif 000003
【図２】
2004038958.tif 000004
【図３】
2004038958.tif 000005
【図４】
2004038958.tif 000006
【図５】
2004038958.tif 000007
【図６】
2004038958.tif 000008