(57)【要約】【課題】実行時多態性を可能にすること。【解決手段】オブジェクトを被キャストオブジェクトにキャストするために使用可能なメタデータにより実行時多態性を可能にする。プロセッサ実行可能命令がランタイム環境にある間に少なくとも１つの型のオブジェクトを発見し、メタデータを使用してそのオブジェクトを被キャストオブジェクトにキャストすることによりそのオブジェクトから被キャストオブジェクトを作成する。装置の実施例では、プロセッサおよびそれと動作上の通信をする媒体を含み、その媒体は第１の型のオブジェクトと、ランタイム環境で未知のオブジェクトをキャストするために使用することのできるメタデータと、実行されると当該プロセッサに次の動作を行わせるプロセッサ実行可能命令とを含む。この動作は、ランタイム環境でメタデータを使用して第１の型のオブジェクトを第１の型とは異なる第２の型の被キャストオブジェクトにキャストする。【選択図】図１
2012099155.tif 000002
【特許請求の範囲】
【請求項１】
命令を実行するように構成されたプロセッサによってコンピューティングデバイスにおいて実施される方法であって、前記命令が前記プロセッサによって実行されたときに、前記コンピューティングデバイスが、
被キャストオブジェクトの作成のための機能レベルのマッピングを定義する少なくとも１つのマッピング記述を、実行時キャスティング記述から、取り出す動作と、
前記少なくとも１つのマッピング記述にしたがって機能をキャスティングするオペレーションを実行することで、ソース機能を有するソースオブジェクトから被キャストオブジェクトを作成する動作とを
実行し、
前記オペレーションの実行は、
前記少なくとも１つのマッピング記述にしたがって前記ソースオブジェクトの機能を前記被キャストオブジェクトにマッピングすることであって、前記マッピングは、前記被キャストオブジェクトの少なくとも１つの機能が前記ソースオブジェクトの対応する機能と異なる機能性を有することを示す、ことと、
前記少なくとも１つのマッピング記述にしたがって前記ソースオブジェクトの少なくとも１つのメソッドをフィルタリングすることと、
前記少なくとも１つのマッピング記述にしたがって前記ソースオブジェクトの少なくとも１つの予め定められた機能を前記被キャストオブジェクトの少なくとも１つの被キャスト機能にマッピングすることと、
前記ソースオブジェクトに含まれた機能とは異なる新しい機能を前記被キャストオブジェクトに含めることと
を含み、
前記少なくとも１つのマッピング記述は、前記ソースオブジェクトのプロパティ機能から前記被キャストオブジェクトのメソッド機能へのマッピング、および前記ソースオブジェクトのメソッド機能から前記被キャストオブジェクトのプロパティ機能へのマッピングを定義する、ことを特徴とするコンピュータにおいて実施する方法。
【請求項２】
プロセッサ実行可能命令を記憶したプロセッサアクセス可能記憶媒体であって、実行されると、
実行時キャスティング記述に基づいて異なる型の複数のソースオブジェクトを被キャスト型の単一のオブジェクトにキャストすることであって、前記複数のソースオブジェクトの各々は複数の機能を含み、前記複数の機能は少なくとも１つのメソッド機能および少なくとも１つのプロパティ機能を備え、前記複数のソースオブジェクトは少なくとも１つの第１の型の第１のソースオブジェクトおよび少なくとも１つの第２の型の第２のソースオブジェクトを備え、前記第１の型と前記第２の型は異なる、こと
を備えた動作であって、
前記キャストすることは、前記複数のソースオブジェクトの各々について、前記実行時キャスティング記述に基づいてソースオブジェクトの少なくとも１つの機能を前記単一のオブジェクトにキャストし、
前記第１のソースオブジェクトの第１の機能を前記単一のオブジェクトの第１の被キャスト機能にキャストし、
前記第２のソースオブジェクトの第１の機能を前記単一のオブジェクトの第２の被キャスト機能にキャストし、
前記第１のソースオブジェクトの機能および前記第２のソースオブジェクトの機能を前記単一のオブジェクト第１の被キャスト機能にキャストする
ことを備える、
前記動作を実行するようにコンピューティングデバイスに指示するプロセッサ実行可能命令を備えたことを特徴とするプロセッサアクセス可能記憶媒体。
【請求項３】
プロセッサ実行可能命令を記憶したプロセッサアクセス可能記憶媒体であって、実行されると、
複数のソースオブジェクトを、当該複数のソースオブジェクトの型を問わない被キャスト型の被キャストオブジェクトの１つまたは複数にキャストすること
を備えた動作であって、
当該キャストは、前記複数のソースオブジェクトの各々の機能に基づくものであり且つ各々の型に依存しないものであり、当該各々の機能はメソッド機能およびプロパティ機能を備え、
前記複数のソースオブジェクトは第１の型の第１のオブジェクトおよび第２の型の第２のオブジェクトを備え、
前記１つまたは複数の被キャストオブジェクトは、前記被キャスト型の第１の被キャストオブジェクトおよび前記被キャスト型の第２の被キャストオブジェクトを備え、
前記第１の型および前記第２の型は前記被キャスト型と異なり、
実行時キャスティング記述を用いて、前記被キャスト型の前記第１の被キャストオブジェクトに、前記第１の型の前記第１のオブジェクトの全機能よりも少数の機能がキャストされ、
前記実行時キャスティング記述を用いて、前記被キャスト型の前記第２の被キャストオブジェクトに、前記第２の型の前記第２のオブジェクトの全機能よりも少数の機能がキャストされ、
前記実行時キャスティング記述は、
前記複数のソースオブジェクトのうちのソースオブジェクトの第１のソース機能から、前記１つまたは複数の被キャストオブジェクトのうちの被キャストオブジェクトの被キャスト機能へのキャストオペレーション、
前記複数のソースオブジェクトのうちの前記ソースオブジェクトの第２のソース機能から、前記１つまたは複数の被キャストオブジェクトのうちの前記被キャストオブジェクトに何もキャストしないキャストオペレーション、
前記複数のソースオブジェクトのうちの前記ソースオブジェクトの複数のソース機能から、前記１つまたは複数の被キャストオブジェクトのうちの前記被キャストオブジェクトの単一の機能へのキャストオペレーション、および
前記１つまたは複数の被キャストオブジェクトのうちの前記被キャストオブジェクトに、前記複数のソースオブジェクトのうちの前記ソースオブジェクトの複数の機能のうちの機能または関数とは異なる新しい機能を定義することを可能にするキャストオペレーション
を備えたキャストオペレーションを備える、
前記動作を実行するようにコンピューティングデバイスに指示するプロセッサ実行可能命令を備えたことを特徴とするプロセッサアクセス可能記憶媒体。
【請求項４】
前記第１の被キャストオブジェクトは前記第２の被キャストオブジェクトと同一であることを特徴とする請求項３に記載のプロセッサアクセス可能記憶媒体。
【請求項５】
前記実行時キャスティング記述は、前記複数のソースオブジェクトのうちの前記ソースオブジェクトのプロパティ機能から前記１つまたは複数の被キャストオブジェクトのうちの前記被キャストオブジェクトのメソッド機能へのマッピングを定義することを特徴とする請求項３に記載のプロセッサアクセス可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、実行時多態性に関し、詳細には、限定ではなく例として、メタデータを使用して第１のオブジェクトを第２のオブジェクトにキャストすることによって、ランタイム環境で多態性を実現することに関する。
【背景技術】
【０００２】
プログラミングに対する従来の機能指向のアプローチが、オブジェクト指向のプログラミングパラダイムに取って代わられている。機能指向のプログラミングでは、コードは動作を中心に編成され、主として論理に基づいて書かれている。オブジェクト指向プログラミングでは、コードは「オブジェクト」を中心に編成され、主として基礎となるデータに応答して書かれている。
【０００３】
オブジェクト指向プログラミングは、再利用可能性、適応性、モジュール性など、多くの概念的前進およびコード関連の利点を提供している。これらの利点は、少なくとも部分的には、オブジェクト指向プログラミングの基本的教義およびそこから生じる原理に起因するものである。例えば、オブジェクト指向プログラミングは、普通、カプセル化（ｅｎｃａｐｓｕｌａｔｉｏｎ）、継承（ｉｎｈｅｒｉｔａｎｃｅ）、および多態性（ｐｏｌｙｍｏｒｐｈｉｓｍ）にこだわる。
【０００４】
カプセル化は、オブジェクトが、外部ソースからのそのデータへのアクセスを制限することによってそのデータを保護できる能力および傾向に関する。ある所与のオブジェクトは、そのデータのうちどれを公開するかを取り決めることができ、完全に制御するのではないにしても、そのデータをどのように操作できるかを制約することができる。
【０００５】
継承は、オブジェクトの１つのクラスの特性を別のクラスに拡張できるようにする。例えば、ある１つのスーパークラスの各サブクラスは、そのスーパークラスの特性すべてを継承する。さらに、プログラマは、各継承サブクラスについて、どの追加の特性を新たに含めるかを指定することができる。その結果得られる継承関係のセットがコンパイル時にコンパイラによって巧妙に作成される。既存のクラスの拡張を容易にする階層的枠組みが、その結果、継承により可能になる。
【０００６】
多態性は、少なくとも部分的には、オブジェクトが異なった刺激に対して異なった反応を示す能力と言うことができる。換言すると、多態性は、異なるコンテクストでは、同じ情報に別の使用法または意味を割り当てることができることに関係すると言うことができる。より具体的には、従来の多態性は、スーパークラスのプログラム済みプロシージャを、それらに対応するサブクラスのために再定義することができるようにする。しかし、この再定義能力は限られている。プログラム済みプロシージャのこのような再定義は、コンパイル時に固定される。事実、プログラマまたは設計者は、プログラム済みプロシージャのありそうな入力について、見込みおよび／または予測に基づいて可能性としての多態性を設定する。
【０００７】
さらに、従来の多態性は、スーパークラスおよびそのサブクラスの全体的な型にのみ基づいている。それらの型は、普通、サブクラスをそれらのスーパークラスにキャストすることができるように関連している。従来の多態性は、それゆえ、特定のソースの型（ｓｏｕｒｃｅ  ｔｙｐｅ）からキャストできるように事前設定されているデスティネーションの型（ｄｅｓｔｉｎａｔｉｏｎ  ｔｙｐｅ）を条件としている。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
したがって、さらなる予測可能性、柔軟性、および／または汎用性（ｖｅｒｓａｔｉｌｉｔｙ）を提供するオブジェクトのための多態性パラダイムが求められている。
【課題を解決するための手段】
【０００９】
実行時多態性は、オブジェクトを被キャストオブジェクトにキャストすることに使用できるメタデータを用いて可能にすることができる。例示的な媒体の実施例では、そのプロセッサ実行可能命令が、コンピューティングデバイスに、ランタイム環境にある間にある１つのオブジェクトの少なくとも１つの型を発見し、メタデータを使用してそのオブジェクトを被キャストオブジェクトにキャストすることによってそのオブジェクトから被キャストオブジェクトを作成することを含む操作を実行するように指示する。例示的なコンピューティングデバイスの実施例は、１つまたは複数のプロセッサ、およびその１つまたは複数のプロセッサと動作上の通信をしている１つまたは複数の媒体を含む。この１つまたは複数の媒体は、第１の型のオブジェクト、ランタイム環境で未知のオブジェクトをキャストするのに使用することのできるメタデータ、およびプロセッサ実行可能命令を含む。このプロセッサ実行可能命令は、実行されると、１つまたは複数のプロセッサにランタイム環境においてメタデータを使用して第１の型のオブジェクトを第２の型の被キャストオブジェクトにキャストすることを含む動作を実行させるプロセッサ実行可能命令を含む。ここで、第１の型は第２の型とは異なる。
【００１０】
本明細書では、他の方法、システム、装置、媒体、構成、デバイスなどの実施例について説明する。
【００１１】
図面全体を通して、同じ番号は、類似および／または対応する態様、特徴、および構成要素を指すために使用する。
【図面の簡単な説明】
【００１２】
【図１】実行時多態性に対する第１の例示的なアプローチを示すブロック図である。
【図２】実行時多態性のための第１の例示的な方法を示す流れ図である。
【図３】実行時多態性に対する第２の例示的なアプローチを示すブロック図である。
【図４】実行時多態性のための第２の例示的な方法を示す流れ図である。
【図５Ａ】実行時多態性に対する第３の例示的なアプローチを示すブロック図である。
【図５Ｂ】実行時多態性に対する第４の例示的なアプローチを示すブロック図である。
【図６Ａ】実行時多態性のための第３の例示的な方法を示す流れ図である。
【図６Ｂ】実行時多態性のための第４の例示的な方法を示す流れ図である。
【図７】実行時多態性に対する第５の例示的なアプローチを示すブロック図である。
【図８】実行時多態性のための第５の例示的な方法を示す流れ図である。
【図９】本明細書で述べる実行時多態性の少なくとも一態様において（全体的にまたは部分的に）実施することのできる例示的なコンピューティング動作環境（または汎用コンピューティングデバイス）を示す図である。
【発明を実施するための形態】
【００１３】
記載の一実施例では、実行時多態性は、拡張多態性スキームを使用して任意の型のオブジェクトを実行時にそのプロセスのメタデータ記述を用いて新しい型にキャストすることができる。多態性がコンパイル時に定義されるのではなく、以下で述べる少なくとも１つの実施例では、実行時に解釈されるメタデータ中で多態性が定義される。
【００１４】
オブジェクトを型だけに基づいて多態化するのではなく、以下で述べる少なくとも１つの実施例では、ソースオブジェクトの機能への参照を含めることによって多態性を拡張する。例えば、メタデータは、ソースオブジェクトのプロパティを、その型にかかわりなく特定の名前で記述することができる。さらに、ソースの型の情報とデスティネーションの型の情報の両方がコンパイル時に完全に定義されるのではなく、以下で述べる実行時多態性のための少なくとも１つの実施例では、未知のソースの型を使用することができ、ソースの型の情報が実行時に発見されるようにする。
【００１５】
また、特定の型が、各一意のソースの型について一意のデスティネーションの型を持つ別の特定の型に多態化される１対１のキャスティングに依拠するのではなく、以下で述べる少なくとも１つの実施例では、複数の任意のソースの型を、どのソースの型にも使用される同じ実行時キャスティング定義を持つデスティネーションの型へ多態化して、多対１のキャスティングを可能にする。このように、複数のソースオブジェクトを単一のデスティネーションオブジェクトに多態化することができる。さらに、以下で述べる少なくとも１つの実施例は、デスティネーションの型が実行時に発見されるソースの型とかかわりなく生成されるように、実行時に柔軟性を持っている。
【００１６】
図１は、実行時多態性の第１の例示的なアプローチを示すブロック図１００である。記載の一実施例では、ブロック図１００は、実線で区画されたランタイム環境（ＲＴＥ）１１０を含む。オブジェクト１０２は、第１のクラス型（例、「型１」）のような第１の型である。ランタイム環境１１０の実線から延びる破線によって示すように、オブジェクト１０２は、ランタイム環境１１０内でも、ランタイム環境１１０の初期設定前のようなランタイム環境１１０の外部でも定義することができる。
【００１７】
図示するように、ランタイム環境１１０は第２のクラス型（例、「型２」）のような第２の型である被キャストオブジェクト１０４を含む。ランタイム環境１１０は、キャスティングプロセス１０６およびメタデータ１０８も含む。ランタイム環境１１０にある間、第１の型のオブジェクト１０２は、メタデータ１０８を使用してキャスティングプロセス１０６を介して第２の型の被キャストオブジェクト１０４に多態化される。例えば、キャスティングプロセス１０６は、オブジェクト１０２から被キャストオブジェクト１０４を作成するためにメタデータ記述１０８を解釈することを伴う。
【００１８】
図２は、実行時多態性のための第１の例示的な方法を示す流れ図２００である。流れ図２００には３つのブロック２０２〜２０６が含まれる。ブロック２０２では、ランタイム環境に入る。例えば、（図１の）ランタイム環境１１０を開始することができる（またはすでに存在していることもある）。ブロック２０４では、オブジェクトのソースの型を発見する。例えば、ランタイム環境１１０内からオブジェクト１０２を調べることによって、オブジェクト１０２のクラス型またはそれに類似したものを発見することができる。
【００１９】
ブロック２０６では、メタデータを使用してそのオブジェクトからキャストすることによって被キャストオブジェクトを作成する。例えば、メタデータ１０８を使用してオブジェクト１０２を被キャストオブジェクト１０４にキャストすることができる。換言すると、ランタイム環境１１０にある間、コーディングによりオブジェクト１０２を被キャストオブジェクト１０４にキャストすることができる。さらに、ランタイム環境１１０を維持している間、例えば、アプリケーションに従って、あるいはユーザインターフェース入力に応答して、メタデータ１０８を変更することもできる。この変更されたメタデータをキャスティングプロセス１０６で使用して、（第１の型の）オブジェクト１０２、または他のオブジェクトから（第３の型の）被キャストオブジェクト１０４を作成することもできる。
【００２０】
多態性を用いることにより、１つの型を別の型として使用することを可能にすることができる。記載の例示的な一実施例では、実行時多態性のためのメタデータは、追加のキャスティング関数またはマッピングを定義して、ある型のキャスティングを、その型の個々の機能には基づくが全体的には必ずしもその型に基づかずにキャストすることを可能にする。結果として、コンパイル時に他の型の特定の知識なく、様々な型を様々な時にそれ自体定義することができ、しかも実行時にキャストバックする（およびオプションとして順方向にキャストする）こともできる。キャスティングのターゲットとすることのできる１つまたは複数の型の個々の機能は、例えば、ソースオブジェクトに含まれるプロパティの名前および型や、ソースオブジェクトに含まれるメソッドの名前および署名である。
【００２１】
記載の一実施例では、４つの例示的なキャスティング操作を使用して、ソースオブジェクトとデスティネーションオブジェクトとの間で機能をマッピングすることができる。
【００２２】
（１）メソッドおよびプロパティの１対１マッピング
このキャスティング操作は、ある特定の名前を持つソースのプロパティまたはメソッドから、ある特定の名前を持つデスティネーションのプロパティまたはメソッドへのマッピングを定義することができる。これらのプロパティは、同じ型または異なる型を有することができる。これは、特にそれらの型を強制的に前後させることができる場合そうである。また、ソースオブジェクト上でのメソッドの呼び出しをデスティネーションオブジェクト上でのプロパティとして公開することができ、その逆も可能である。
【００２３】
（２）メソッドおよびプロパティの１対無マッピング
このキャスティング操作は、ソースのプロパティまたはメソッドをデスティネーションオブジェクトの何にもマッピングしないことができる。換言すると、ソースのプロパティまたはメソッドがデスティネーションオブジェクト上では利用できない。
【００２４】
（３）メソッドおよびプロパティの多対１マッピング
このキャスティング操作は、プログラマまたは他のユーザが、デスティネーションのプロパティまたはメソッドの値を、１つまたは複数のソースのプロパティおよび／またはメソッドの呼び出しの関数として定義できるようにする。この関数は、ソースオブジェクトからデスティネーションオブジェクトへの一方向とすることも、双方向とすることもできる。双方向マッピングでは、デスティネーションオブジェクト上のプロパティまたはメソッドをセットすることができ、それはソースオブジェクト上でも同様に自動セットされる。上記（１）のように、ソースオブジェクト上でのメソッドの呼び出しをデスティネーションオブジェクト上のプロパティとして公開することができ、その逆も可能である。
【００２５】
（４）新規メソッドおよびプロパティ
このキャスティング操作は、ソースオブジェクトの機能でも関数でもない新規のプロパティまたはメソッドをデスティネーションオブジェクト上で定義できるようにする。その結果生じるデスティネーションオブジェクト上のプロパティは、「ｅｘｐａｎｄｏ」プロパティとみなすことができる。
【００２６】
図３は、実行時多態性への第２の例示的なアプローチを示すブロック図３００である。ブロック図３００には、オブジェクト１０２、被キャストオブジェクト１０４、および実行時キャスティング記述３０２が含まれる。実行時キャスティング記述３０２は、（図１の）メタデータ１０８の一例である。オブジェクト１０２および被キャストオブジェクト１０４は、それぞれ、メソッドまたはプロパティなど少なくとも１つの機能を含むか、そうでなければ関連付けることができる。記載の一実施例では、プロパティはオブジェクトによって所有され、その名前によって識別されるデータであり、メソッドはそのオブジェクトによって所有されるコードルーチンである。
【００２７】
より詳細には、オブジェクト１０２および被キャストオブジェクト１０４は、それぞれ、１つまたは複数のプロパティおよび／または１つまたは複数のメソッドを有することができる。図示するように、オブジェクト１０２は複数のプロパティ１０２Ｐ１、１０２Ｐ２、１０２Ｐ３、１０２Ｐ４、１０２Ｐ５．．．１０２Ｐｎならびに複数のメソッド１０２Ｍ１．．．１０２Ｍｎを含む。被キャストオブジェクト１０４は、複数のプロパティ１０４Ｐ１、１０４Ｐ２、１０４Ｐ３、１０４Ｐ４．．．１０４Ｐｎならびに複数のメソッド１０４Ｍ１．．．１０４Ｍｎを含む。
【００２８】
記載の一実施例では、実行時キャスティング記述３０２は１つまたは複数のマッピング記述３０２Ｍを含む。図示するように、実行時キャスティング記述３０２は、次の少なくとも７つの例示的マッピング記述３０２Ｍを含む。それらは、（プロパティ）反映マッピング記述３０２Ｍ１、変換マッピング記述３０２Ｍ２、名前変更マッピング記述３０２Ｍ３、関数マッピング記述３０２Ｍ４、（プロパティ）宣言マッピング記述３０２Ｍ５、（メソッド）反映マッピング記述３０２Ｍ６、および（メソッド）宣言マッピング記述３０２Ｍ７である。
【００２９】
また、実行時キャスティング記述３０２は、明示的または暗黙的にフィルタマッピング記述３０２Ｍｎを含むことができる。暗黙的フィルタマッピング記述３０２Ｍｎでは、例えば、実行時キャスティング記述３０２は、（被キャストオブジェクト１０４に）キャストされることない（オブジェクト１０２の）実際のまたは潜在的な機能へのいかなる参照も省略することができる。明示的フィルタマッピング記述３０２Ｍｎでは、例えば、実行時キャスティング記述３０２は、（オブジェクト１０２の）特定の列挙された機能および／または一般的な不指定の機能は（被キャストオブジェクト１０４に）キャストされないことを断定的に示すことができる。
【００３０】
７つのマッピング記述３０２Ｍ１．．．３０２Ｍ７のそれぞれは、それぞれのマッピングまたは機能のキャスティング操作３０４（１）．．．３０４（７）に対応している。具体的にはブロック図３００は、次の７つの例示的対応マッピング３０４を示している。それらは、（プロパティ）反映マッピング３０４（１）、変換マッピング３０４（２）、名前変更マッピング３０４（３）、関数マッピング３０４（４）、（プロパティ）宣言マッピング３０４（５）、（メソッド）反映マッピング３０４（６）、（メソッド）宣言マッピング３０４（７）である。実行時キャスティング記述３０２によって、プロパティまたはメソッド機能のどちらかまたは両方のフィルタリングマッピング３０４（ｎ）を実装することもできる。
【００３１】
それゆえ、１つまたは複数のマッピング記述３０２Ｍをキャスティング操作で使用してオブジェクト１０２を被キャストオブジェクト１０４にキャストすることができる。それぞれの個々の機能キャスティング操作３０４を実線矢印および破線矢印で表す。実線矢印はオブジェクト１０２から被キャストオブジェクト１０４への接続を示し、破線矢印は被キャストオブジェクト１０４からオブジェクト１０２への「逆方向」の接続を示す。実行時バインディングの態様を以下に説明する。
【００３２】
個々の機能キャスティング操作３０４は以下のように実現することができる。反映マッピング３０４（１）は、プロパティ１０２Ｐ１をプロパティ１０４Ｐ１に直接反映させる。変換マッピング３０４（２）は、プロパティ１０２Ｐ２の読取り、書込み、型などの１つまたは複数の属性をプロパティ１０４Ｐ２のために変換する。名前変更マッピング３０４（３）は、プロパティ１０２Ｐ３をプロパティ１０４Ｐ３として名前変更する。
【００３３】
関数マッピング３０４（４）は、被キャストオブジェクト１０４のプロパティ１０４Ｐ４をオブジェクト１０２の少なくとも１つのプロパティの関数としてキャストする。図示するように、プロパティ１０４Ｐ４は、マッピング記述３０２Ｍ４によるプロパティ１０２Ｐ４およびプロパティ１０２Ｐ５の関数である。宣言マッピング３０４（５）については、オブジェクト１０２への拡張および／またはオブジェクト１０２からの拡張として、被キャストオブジェクト１０４についてプロパティ１０４Ｐｎが新規に宣言される。オブジェクト１０２のフィルタマッピング３０４（ｎ）およびプロパティ１０２Ｐｎに関しては、プロパティ１０２Ｐｎが実行時キャスティング記述３０２を解釈した結果として、それに対応するプロパティが被キャストオブジェクト１０４についてキャストされないようにフィルタリングされる。
【００３４】
反映マッピング３０４（６）は、メソッド１０２Ｍ１をメソッド１０４Ｍ１に直接反映する。宣言マッピング３０４（７）については、宣言マッピング記述３０２Ｍ７に従って、オブジェクト１０２への拡張および／またはオブジェクト１０２からの拡張として、被キャストオブジェクト１０４にメソッド１０４Ｍｎが新規に宣言される。オブジェクト１０２のフィルタマッピング３０４（ｎ）およびメソッド１０２Ｍｎに関しては、メソッド１０２Ｍｎが実行時キャスティング記述３０２を解釈した結果として、それに対応するメソッドが被キャストオブジェクト１０４に含まれないようにフィルタリングされる。
【００３５】
ブロック図３００に、オブジェクト１０２から被キャストオブジェクト１０４を作成する例示的なキャスティング操作を示す。上述のように、このキャスティング操作は、破線矢印で示すように、被キャストオブジェクト１０４からオブジェクト１０２への逆方向の接続を維持することができる。それゆえ、オブジェクト１０２と被キャストオブジェクト１０４との間の接続は、順方向の態様と逆方向の態様を有するとみなすことができる。順方向の接続態様は、実線矢印で表すように、オブジェクト１０２と被キャストオブジェクト１０４との間の関係を確立する。逆方向の接続態様は、破線矢印で表すように、オブジェクト１０２と被キャストオブジェクト１０４の間の実行時のバインディングを確立する。順方向および逆方向の接続は、別々および／または相互に連携して、（ｉ）オブジェクト１０２を被キャストオブジェクト１０４に対して、（ｉｉ）被キャストオブジェクト１０４をオブジェクト１０２に対して、実行時バインディングを容易にする。
【００３６】
各個々の機能キャスティング操作３０４が関連する逆方向接続を持たないことがあることに留意すべきである。例えば、プロパティ宣言マッピング３０４（５）およびメソッド宣言マッピング３０４（７）の逆方向接続は不適切な場合がある。別の例として、ある特定の関数マッピング３０４（４）の逆方向接続を設定することが困難または不可能であることがある。
【００３７】
記載の一実施例では、実行時キャスティング記述３０２は、ある特定のマッピング記述３０２Ｍによって期待されるようにオブジェクト１０２に対応するソースの機能がない被キャストオブジェクト１０４に、デスティネーションの機能をキャストしようとすることがある。例えば、変換マッピング記述３０２Ｍ２は、プロパティ１０４Ｐ２へキャストするために所定のプロパティ１０２Ｐ２を探し出すことを期待している。しかし、ランタイム環境１１０で動作しているときに、そうした期待される所定の機能がオブジェクト１０２に存在しないことがある。そうした可能性および／または偶然性のために、ソースオブジェクトで所定の機能を探し出すことを期待するように定義された１つまたは複数（すべての場合を含む）のマッピング記述３０２Ｍは、ソースオブジェクトに期待される所定の機能がないときに、そのデスティネーションオブジェクトのために被キャスト機能を作成する際に使用するための１つまたは複数のデフォルトのパラメータを含むことができる。
【００３８】
図４は、実行時多態性のための第２の例示的な方法を示す流れ図４００である。流れ図４００には６つのブロック４０２〜４１２が含まれる。流れ図４００は、キャスティング操作中に期待される所定の機能をソースオブジェクトから取り出すことができない記載の一実施例に対応している。
【００３９】
ブロック４０２では、ランタイム環境に入る。例えば、（図１の）ランタイム環境１１０は、コード処理コンピューティングデバイスで開始することができる（またはすでに存在していることもある）。ブロック４０４では、オブジェクトの所定の機能のマッピング記述を実行時キャスティング記述から取り出す。例えば、実行時キャスティング記述３０２から、オブジェクト１０２の所定の機能（プロパティ１０２Ｐまたはメソッド１０２Ｍなど）の（図３の）ある特定のマッピング記述３０２Ｍを取り出すことができる。
【００４０】
ブロック４０６では、所定の機能がそのオブジェクトに存在するかどうか確認する。例えば、オブジェクト１０２の機能１０２Ｐおよび１０２Ｍを検査して、その特定のマッピング記述３０２Ｍによって期待される所定の機能がオブジェクト１０２内に存在するかどうか確認する。存在する場合は、ブロック４０８で、そのマッピング記述に従って、そのオブジェクトの所定の機能が被キャスト機能として被キャストオブジェクトにキャストされる。例えば、その特定のマッピング記述３０２Ｍに従って、オブジェクト１０２の期待される所定の機能１０２Ｐまたは１０２Ｍが、被キャスト機能１０４Ｐまたは１０４Ｍとして被キャストオブジェクト１０４にキャストする。
【００４１】
他方、ブロック４０６で、そのオブジェクトに期待される所定の機能が存在しないと確認された場合は、ブロック４１０で、実行時キャスティング記述から所定の機能（および／または被キャスト機能）のデフォルトのパラメータを決定する。そのようなデフォルトのパラメータは、具体的にマッピング記述の一部とすることもできるし、一般的に実行時キャスティング記述の一部とすることもできる。例えば、オブジェクト１０２の期待される所定の機能１０２Ｐまたは１０２Ｍ（および／または被キャストオブジェクト１０４の被キャスト候補の機能（ｗｏｕｌｄ−ｂｅ  ｃａｓｔｅｄ  ｆｅａｔｕｒｅ）１０４Ｐまたは１０４Ｍ）のデフォルトのパラメータを決定するために、実行時キャスティング記述３０２全体および／または特定のマッピング記述３０２Ｍを調べることができる。
【００４２】
ブロック４１２では、マッピング記述に従って、デフォルトのパラメータが被キャスト機能として被キャストオブジェクトにキャストされる。例えば、特定のマッピング記述３０２Ｍの指示を適用することおよび／またはデフォルトのパラメータを変更せずに直接被キャスト機能１０４Ｐまたは１０４Ｍに入れることによって、デフォルトのパラメータをオブジェクト１０４の被キャスト機能１０４Ｐまたは１０４Ｍにキャストすることができる。丸で囲んだＡおよびＢで示すように、ブロック４０８および４１２のどちらかの動作が実行された後で、流れはブロック４０４で継続して、その実行時キャスティング記述の別のマッピング記述を処理することができる。
【００４３】
図５Ａは実行時多態性への第３の例示的なアプローチを示すブロック図５００Ａである。ブロック図５００Ａには、２つのアプリケーション５０２および５０４、実行時キャスティング記述３０２、ならびに４つのオブジェクト１０２（Ａ）、１０２（Ｂ）、１０４（Ｃ１）および１０４（Ｃ２）が含まれる。記載の一実施例で示すように、アプリケーション５０２および５０４は、汎用アプリケーション５０４および（再利用可能な）サービスライブラリ５０２を表し、オプションとしてオペレーティングシステムの一部とすることもできる。
【００４４】
サービスライブラリ５０２およびアプリケーション５０４は、メッセージを介したリンク５０６または類似のメカニズムを使用して互いに通信することができる。アプリケーション５０４は、型「Ａ」のオブジェクト１０２（Ａ）および型「Ｂ」のオブジェクト１０２（Ｂ）の２つのオブジェクトを含み、そうでなければ関連付けられている。ここで型Ａは型Ｂとは異なる。この例では、アプリケーション５０４は、サービスライブラリ５０２が実行時キャスティング操作を実施して、オブジェクト１０２（Ａ）およびオブジェクト１０２（Ｂ）から同じ型を有する２つのオブジェクトを作成するよう要求する。アプリケーション５０４は、代替として、他のどんなアプリケーションを呼び出すことなく実行時キャスティング操作を実行することもできることに留意すべきである。
【００４５】
サービスライブラリ５０２は、実行時キャスティング記述３０２を使用して要求された実行時キャスティング操作を指揮する。実行時キャスティング記述３０２は、アプリケーション５０４、サービスライブラリ５０２、オペレーティングシステム（図５Ａには具体的に図示しない）、別のアプリケーションなどによって提供され得る。キャスティング操作３０４（ＡＣ）にて、ランタイム環境１１０で実行時キャスティング記述３０２を解釈することによって、オブジェクト１０２（Ａ）から型「Ｃ」の被キャストオブジェクト１０４（Ｃ１）が作成される。同様に、キャスティング操作３０４（ＢＣ）にて、ランタイム環境１１０で実行時キャスティング記述３０２を解釈することによって、オブジェクト１０２（Ｂ）からやはり型「Ｃ」の被キャストオブジェクト１０４（Ｃ２）が作成される。
【００４６】
このように、２つの異なる型Ａおよび型Ｂのオブジェクト１０２（Ａ）およびオブジェクト１０２（Ｂ）が、同じ型Ｃのオブジェクト１０４（Ｃｌ）およびオブジェクト１０４（Ｃ２）にそれぞれキャストされる。さらに、オブジェクト１０２（Ａ）およびオブジェクト１０２（Ｂ）は、同じ基本クラスから導出される必要はない。この異なる型のオブジェクトを同じ型のオブジェクトへキャストすることは、少なくとも一部には、フィルタマッピング記述３０２Ｍｎを使用して共通でない機能をフィルタリングすることによって、宣言マッピング記述３０２Ｍ５および／または３０２Ｍ７を使用することによって、そして／または実行時キャスティング記述３０２で規定される期待される所定の機能がソースオブジェクトにないときにはデフォルトのパラメータに依拠することによって、達成することができる。異なる型のオブジェクトを同じ型のオブジェクトにキャストするために他のマッピング記述３０２Ｍを実装することもできることが理解されるべきである。
【００４７】
図６Ａは、実行時多態性の第３の例示的な方法を示す流れ図６００Ａである。流れ図６００Ａには５つのブロック６０２〜６１０が含まれる。ブロック６０２で、アプリケーションはサービスライブラリコンポーネントを呼び出す。例えば、（図５Ａの）アプリケーション５０４はサービスライブラリ５０２を呼び出すことができる。ブロック６０４で、アプリケーションはサービスライブラリに、第１の型の第１のオブジェクトおよび第２の型の第２のオブジェクトを提供する。例えば、アプリケーション５０４は、リンク５０６を使用してサービスライブラリ５０２に、（直接、ポインタ参照などで）型Ａのオブジェクト１０２（Ａ）および型Ｂのオブジェクト１０２（Ｂ）を提供することができる。
【００４８】
ブロック６０６で、サービスライブラリは、実行時キャスティング記述を使用して、第１のオブジェクトを第３の型の第１の被キャストオブジェクトにキャストする。例えば、サービスライブラリ５０２は、実行時キャスティング記述３０２を使用して、キャスティング操作３０４（ＡＣ）にて、オブジェクト１０２（Ａ）を型Ｃの被キャストオブジェクト１０４（Ｃｌ）にキャストすることができる。ブロック６０８で、サービスライブラリは、実行時キャスティング記述を使用して、第２のオブジェクトを、第３の型の第２の被キャストオブジェクトにキャストする。例えば、サービスライブラリ５０２は、実行時キャスティング記述３０２を使用して、キャスティング操作３０４（ＢＣ）にて、オブジェクト１０２（Ｂ）を型Ｃの被キャストオブジェクト１０４（Ｃ２）にキャストすることができる。
【００４９】
ブロック６１０で、サービスライブラリは、キャスティング操作によって確立されたバインディングを維持する。これらのバインディングは、第１のオブジェクトと第１の被キャストオブジェクトの間、および第２のオブジェクトと第２の被キャストオブジェクトの間のものである。これらのバインディングは、第１の被キャストオブジェクトおよび／または第２の被キャストオブジェクトが終了するまで維持することができる。例として、サービスライブラリ５０２は、オブジェクト１０２（Ａ）と被キャストオブジェクト１０４（Ｃ１）との間、およびオブジェクト１０２（Ｂ）と被キャストオブジェクト１０４（Ｃ２）との間のバインディングを維持することができる。あるいは、アプリケーション５０４または他のコードは、オブジェクト１０２（Ａ）および１０２（Ｂ）と、被キャストオブジェクト１０４（Ｃ１）および１０４（Ｃ２）との間のバインディングをそれぞれ維持することができる。いずれにしても、これらのバインディングは実行時キャスティング記述３０２をそれ以上参照することなく維持することができる。
【００５０】
図５Ｂは、実行時多態性への第４の例示的アプローチを示すブロック図５００Ｂである。ブロック図５００Ｂには、複数のオブジェクト１０２（１、２．．．ｎ）、実行時キャスティング記述３０２、および被キャストオブジェクト１０４が含まれる。図示するように、オブジェクト＃１  １０２（１）、オブジェクト＃２  １０２（２）、およびオブジェクト＃ｎ１０２（ｎ）がキャスティング操作にかかわって、実行時キャスティング記述３０２を使用して被キャストオブジェクト１０４を作成する。このように、実行時キャスティング記述３０２を使用して２つ以上のオブジェクト１０２（１、２．．．ｎ）を被キャストオブジェクト１０４にキャストすることができる。
【００５１】
記載の一実施例では、実行時キャスティング記述３０２の１つまたは複数の機能マッピング記述３０２ＭＦを使用して、複数のオブジェクト１０２（１、２．．．ｎ）から被キャストオブジェクト１０４が作成される。実行時キャスティング記述３０２は、マッピング記述３０２ＭＦ１およびマッピング記述３０２ＭＦ２を含む。複数のオブジェクト１０２（１、２．．．ｎ）のそれぞれは、ソースの機能など、少なくとも１つの機能１０２Ｆ（１，２．．．ｎ）を含む。ブロック図５００Ｂに示すように、被キャストオブジェクト１０４は、デスティネーションの機能など少なくとも２つの被キャスト機能１０４Ｆ（ｌ、２）を含む。
【００５２】
マッピング記述３０２ＭＦ１は、機能マッピング３０４（１１１）を用いて、１つのオブジェクトからの１つの機能を、被キャストオブジェクトの１つの被キャスト機能にマッピングする。具体的には、機能キャスティング操作３０４（１１１）は、オブジェクト＃１  １０２（１）の機能１０２Ｆ１を被キャストオブジェクト１０４の被キャスト機能１０４Ｆ１にキャストする。マッピング記述３０２ＭＦ２は、機能マッピング３０４（２２２）／３０４（ｎ２２）／３０４（２ｎ２２）を用いて、複数の（異なる）オブジェクトからの複数の機能を、被キャストオブジェクトの１つの被キャスト機能にキャストする。具体的には、機能キャスティング操作３０４（２２２）／３０４（ｎ２２）／３０４（２ｎ２２）は、オブジェクト＃２  １０２（２）の機能１０２Ｆ２およびオブジェクト＃ｎ  １０２（ｎ）の機能１０２Ｆｎを被キャストオブジェクト１０４の被キャスト機能１０４Ｆ２にキャストする。
【００５３】
図５Ｂはそのように示されているが、機能マッピング３０４（１１１）も機能マッピング３０４（２２２）／３０４（ｎ２２）／３０４（２ｎ２２）も、必ずしも何らかの単一のキャスティング操作で行われる必要はないことが理解されるべきである。さらに、例示的一実施例の図７よび図８の下記の説明を参照すると、オブジェクト＃１  １０２（１）は文字列表オブジェクトに対応し、オブジェクト＃２  １０２（２）はイメージオブジェクトに対応し、オブジェクト＃３  １０２（３）（ｎ＝３の場合）はファイルオブジェクト対応することができる。そのような例示的一実施例では、実行時キャスティング記述３０２に異なるマッピング記述３０２ＭＦを含むこともできることに留意すべきである。
【００５４】
図６Ｂは、実行時多態性の第４の例示的な方法を示す流れ図６００Ｂである。流れ図６００Ｂには２つのブロック６１２および６１４が含まれる。ブロック６１２では、第１のマッピング記述を使用して、第１のオブジェクトの第１の機能を被キャストオブジェクトの第１の被キャスト機能にキャストする。例えば、オブジェクト＃１  １０２（１）の（図５Ｂの）機能１０２Ｆ１を、被キャストオブジェクト１０４の被キャスト機能１０４Ｆ１にキャストすることができる。
【００５５】
ブロック６１４では、第２のマッピング記述を使用して、第２のオブジェクトの第２の機能および第３のオブジェクトの第３の機能を、被キャストオブジェクトの第２の被キャスト機能にキャストする。例えば、オブジェクト＃２  １０２（２）の機能１０２Ｆ２およびオブジェクト＃ｎ  １０２（ｎ）の機能１０２Ｆｎを、被キャストオブジェクト１０４の被キャスト機能１０４Ｆ２にキャストすることができる。第１および第２の（機能）マッピング記述は、実行時キャスティング記述３０２などの同じ実行時キャスティング記述からのものとすることができる。ブロック６１４の動作は、代替として、第３のオブジェクトの第３の機能を除外して、第２のマッピング記述がその関数でないように（オプションとして関数型のマッピング記述でないように）することもできる。
【００５６】
図７は、実行時多態性のための第５の例示的なアプローチを示すブロック図７００である。ブロック図７００には、２つのキャスティングオブジェクト７０２Ｖおよび７０２Ａ、規則７０４、グラフィカルユーザインターフェース（ＧＵＩ）ブロック７０６、ＧＵＩブロック７０６を介して提示されるビューブロック７０８、アプリケーション７１０、およびユーザ７１２が含まれる。キャスティングオブジェクト７０２Ｖは、ビューオブジェクト１０２Ｖ、実行時キャスティング記述３０２、および被キャストオブジェクト１０４Ｖを含む。ビューオブジェクト１０２Ｖは、ビュー指向ファイル関連情報を含む。キャスティングオブジェクト７０２Ａは、アプリケーションオブジェクト１０２Ａ、実行時キャスティング記述３０２、および被キャストオブジェクト１０４Ａを含む。アプリケーションオブジェクト１０２Ａは、アプリケーション指向のファイル関連情報を含む。
【００５７】
記載の一実施例では、キャスティングオブジェクト７０２Ｖおよび７０２Ａは、プログラマチックに１つのオブジェクトを表す拡張オブジェクトとして働く。このプログラマチックなオブジェクトの表現は、その拡張オブジェクトが公開するプロパティおよびメソッドのセットなどのそれ自体についての情報を、より大きなシステムおよび／または環境に提供することができる。拡張オブジェクトは、実行時に、正しいマッピングを適用するために実行時キャスティング記述を使用して、ソースオブジェクトとデスティネーションオブジェクトとの間で多態的な機能レベルのキャスティング操作を実行する。
【００５８】
そのような拡張オブジェクトは、デスティネーションオブジェクトの機能を実装することができ、ソースオブジェクトへの内部参照を保持することによってソースオブジェクトを含むことができる。この拡張オブジェクトは実行時キャスティング記述を使用して、実行時バインディングを作成し、実行時バインディングは、その中で定義される機能キャスティング操作を有効に実行する。各種類の機能キャスティング操作について１種類のバインディングがあり得る。機能キャスティング操作自体が、各バインディングの内部で、便宜的に評価されることもある。例えば、１対１のプロパティマッピングでは、デスティネーションのプロパティ値が更新されるときにソースのプロパティ値も更新することができ、その逆も可能である。この更新は、拡張オブジェクトによってオプションとして処理することもできる。
【００５９】
記載の一実施形態についてブロック図７００で示すように、キャスティングオブジェクト７０２Ｖは、実行時キャスティング記述３０２を使用するキャスティング操作で、ビューオブジェクト１０２Ｖから被キャストオブジェクト１０４Ｖを作成する。キャスティングオブジェクト７０２Ｖは、ビューオブジェクト１０２Ｖと被キャストオブジェクト１０４Ｖとの間のバインディングを、どちらかのオブジェクトに対する変更を監視し、可能性としてそれらの間の個々の機能キャスティング操作に従って、応答的に更新を行うことによって維持することができる。
【００６０】
同様に、キャスティングオブジェクト７０２Ａは、実行時キャスティング記述３０２を使用するキャスティング操作にて、アプリケーションオブジェクト１０２Ａから被キャストオブジェクト１０４Ａを作成する。キャスティングオブジェクト７０２Ａは、アプリケーションオブジェクト１０２Ａと被キャストオブジェクト１０４Ａとの間のバインディングを、どちらかのオブジェクトに対する変更を監視し、おそらくそれらの間の個々の機能キャスティング操作に従って、応答的に更新を行うことによって維持することができる。
【００６１】
図にはそのように示されていないが、キャスティングオブジェクト７０２Ｖおよび７０２Ａのどちらかまたは両方の実行時キャスティング記述３０２は、単に、それらに関連付けることもでき、必ずしもそれらの一部として含まれるとは限らない。さらに、キャスティングオブジェクト７０２Ｖおよび７０２Ａは、ある１つの実行時キャスティング記述３０２を共用することもできる。例えば、ビューオブジェクト１０２Ｖは、アプリケーションオブジェクト１０２Ａとビューオブジェクト１０２Ｖとの間の整合性を維持するのに役立つように、実行時キャスティング記述３０２を使用して被キャストオブジェクト１０４Ｖから作成することもできることに留意すべきである。
【００６２】
被キャストオブジェクト１０４Ｖおよび被キャストオブジェクト１０４Ａは、同じ（同一の、または実質的に類似の）実行時キャスティング記述３０２を使用して作成されたときに同じ型のものになることがある。事実、同じ実行時キャスティング記述３０２を使用することにより、被キャストオブジェクト１０４Ｖおよび１０４Ａの整合性に関してさらなる確実性および等価性が保証される。その結果得られる、被キャストオブジェクト１０４Ｖおよび１０４Ａの機能セットに関する予測可能性は、規則７０４の形成およびその後の適用を容易にする。
【００６３】
換言すると、規則７０４は、（ｉ）誤り検査を行う必要がなく、（ｉｉ）規則が実行されることになる被キャストオブジェクトの機能セットが、それらが実行時キャスティング記述３０２を使用してキャストされた結果として保証されるので、コードサイズおよび動作の複雑さの点でより効率的であり得る。例えば、被キャストオブジェクト１０４Ｖおよび１０４Ａの整合性に関しては、これが事実上保証されているので、規則７０４については、実行時に予期せぬ出来事や発見への適応を必要としない。
【００６４】
動作中には、キャスティングオブジェクト７０２Ｖおよび７０２Ａおよび規則７０４は、それらがそれぞれビューブロック７０８／ＧＵＩ７０６およびアプリケーション７１０によって変更される際に、ビューオブジェクト１０２Ｖとアプリケーションオブジェクト１０２Ａの間の整合性を維持するように働く。アプリケーション７１０がアプリケーションオブジェクト１０２Ａに変更を加えると、キャスティングオブジェクト７０２Ａは、アプリケーションオブジェクト１０２Ａと被キャストオブジェクト１０４Ａの間のバインディングを介してその変更を被キャストオブジェクト１０４Ａに伝搬する。規則７０４が被キャストオブジェクト１０４Ａに対して実行されると、被キャストオブジェクト１０４Ａに対する変更が検出される。規則７０４はこの変更を被キャストオブジェクト１０４Ｖに伝搬する。
【００６５】
規則７０４による被キャストオブジェクト１０４Ｖに対する被キャストオブジェクト１０４Ａの変更の伝搬は、それらの機能セットの等価性が確かなものであることによって容易になる。キャスティングオブジェクト７０２Ｖは、被キャストオブジェクト１０４Ｖの変更をビューオブジェクト１０２Ｖに、それらの間のバインディングを介して伝搬する。ＧＵＩ７０６は、ビュー７０８に関しては、ユーザ７１２に明らかな態様でビューオブジェクト１０２Ｖの変更を反映することができる。
【００６６】
ビューオブジェクト１０２Ｖとアプリケーションオブジェクト１０２Ａの間の整合性を維持するための方式／プロセスは、逆方向で行うこともできる。そのため、ユーザ７１２がビュー７０８／ＧＵＩ７０６を介してビューオブジェクト１０２Ｖに変更を加える場合、そのような変更は、被キャストオブジェクト１０４Ｖ、規則７０４、被キャストオブジェクト１０４Ａなどによって、アプリケーションオブジェクト１０２に伝搬することができる。ビューオブジェクト１０２Ｖとアプリケーションオブジェクト１０２Ａの間の整合性を維持するプロセスは、キャスティングオブジェクト７０２Ｖおよび７０２Ａのプログラマチックなオブジェクトの表現を使用することなく達成することもできることに留意されたい。
【００６７】
図８は実行時多態性のための第５の例示的な方法を示す流れ図８００である。流れ図８００には５つのブロック８０２〜８１０が含まれる。（図７の）ブロック図７００には、オブジェクトを管理するための例示的なアプローチの少なくとも一部が示され、流れ図８００には、オブジェクトを管理する例示的な方法の少なくとも一部が示されている。
【００６８】
ブロック８０２で、実行時キャスティング記述を使用して、第１の型の第１のオブジェクトが第３の型の第１の被キャストオブジェクトにキャストされる。例えば、実行時キャスティング記述３０２を使用して、（図７の）アプリケーションオブジェクト１０２Ａを被キャストオブジェクト１０４Ａにキャストすることができる。被キャストオブジェクト１０４Ａの型は、実行時キャスティング記述３０２によって決定される。このキャスティングは、オプションとして、キャスティングオブジェクト７０２Ａなどの拡張オブジェクトの一部とすることもできる。
【００６９】
ブロック８０４では、実行時キャスティング記述を使用して、第２の型の第２のオブジェクトが第３の型の第２の被キャストオブジェクトにキャストされる。例えば、実行時キャスティング記述３０２を使用してビューオブジェクト１０２Ｖを被キャストオブジェクト１０４Ｖにキャストすることができ、その逆も可能である。被キャストオブジェクト１０４Ｖの型も実行時キャスティング記述３０２によって決定され、それはこの記載の実施例では、被キャストオブジェクト１０４Ａの型と同じである。このキャスティングは、オプションとして、キャスティングオブジェクト７０２Ｖなどの拡張オブジェクトの一部とすることもできる。
【００７０】
ブロック８０６では、第１の被キャストオブジェクトおよび第２の被キャストオブジェクトにアルゴリズムが適用される。例えば、そのようなアルゴリズムの一例である規則７０４を被キャストオブジェクト１０４Ａおよび被キャストオブジェクト１０４Ｖに対して実行して、それらのオブジェクトを監視すると共にそれらへの変更があれば検出することができる。さらに、規則７０４を使用して、被キャストオブジェクト１０４Ａで検出された変更を被キャストオブジェクト１０４Ｖに伝搬することができ、その逆も可能である。
【００７１】
１つまたは複数のアルゴリズムの適用によって第１の被キャストオブジェクトが変更される場合（例えば、それらのアルゴリズムが第２の被キャストオブジェクトで検出された変更を第１の被キャストオブジェクトに伝搬したために）、ブロック８０８で、第１の被キャストオブジェクトへのアルゴリズムベースの変更に応答して、第１のオブジェクトが変更される。例えば、規則７０４を実行することによってなされた被キャストオブジェクト１０４Ａに対する変更を、実行時キャスティング記述３０２に従って確立されたアプリケーションオブジェクト１０２Ａと被キャストオブジェクト１０４Ａの間のバインディングによって、アプリケーションオブジェクト１０２Ａに伝搬することができる。
【００７２】
同様に、１つまたは複数のアルゴリズムの適用によって第２の被キャストオブジェクトが変更される場合（例えば、それらのアルゴリズムが、第１の被キャストオブジェクトで検出された変更を第２の被キャストオブジェクトに伝搬したために）、ブロック８１０で、第２の被キャストオブジェクトへのアルゴリズムベースの変更に応答して、第２のオブジェクトが変更される。例えば、規則７０４を実行することによってなされた被キャストオブジェクト１０４Ｖに対する変更を、実行時キャスティング記述３０２に従って確立されたビューオブジェクト１０２Ｖと被キャストオブジェクト１０４Ｖの間のバインディングによってビューオブジェクト１０２Ｖに伝搬することができる。丸で囲んだ「Ａ」および「Ｂ」で示すように、ブロック８０８と８１０のどちらかの動作が行われた後で、流れはブロック８０６で継続して、アルゴリズムの適用を続行することができる。
【００７３】
図１〜図８のアプローチおよび方法は、複数のブロックに分けられた図として示されている。しかし、これらアプローチおよび方法の説明および／または図示の順序および／または配置は、限定として解釈されるべきものではなく、任意の数のブロックを任意の順序で組み合わせ、増やし、削除し、そして／または再配置して、実行時多態性のための１つまたは複数のシステム、方法、媒体、装置、構成などを実施することができる。さらに、本明細書の説明は、図５Ａ、５Ｂ、および７の実施例（ならびに図９のシステム環境の例）などの具体的な実施例への参照を含むが、これらのアプローチおよび方法は、任意の適当なハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せで、そして任意の適当なデータモデリング、プログラミング言語、コーディングメカニズムなどを使用して実装することができる。
【００７４】
図９に、本明細書に記載の実行時多態性のための少なくとも１つのシステム、デバイス、媒体、コンポーネント、アプローチ、方法、プロセス、それらの何らかの組合せなどを（完全にまたは部分的に）実装することのできる例示的なコンピューティング動作環境９００（または汎用コンピューティングデバイス）を示す。コンピューティング環境９００は、以下で述べるコンピュータおよびネットワークアーキテクチャ、または独立した状況で利用することができる。
【００７５】
例示的なコンピューティングデバイス動作環境９００は、環境の一例にすぎず、適用可能なコンピューティングデバイスアーキテクチャ（コンピュータ、民生用電子機器、ゲームコンソール、セットトップボックス、モバイル機器などを含む）の使用または機能の範囲についていかなる限定を示唆するためのものではない。さらに、コンピューティングデバイス環境９００は、図９に示す構成要素の任意の１つまたはそれらの任意の組合せに関連するどのような依存性または要件を有するものとして解釈されるべきである。さらに、適用可能なコンピューティングデバイスは、その中で使用されるプロセッサ／処理メカニズムによって限定されるものではない。例えば、そのようなプロセッサ／処理メカニズムには、それらに限られないが、電子集積回路（ＩＣ）、量子コンピューティング、光コンピューティング、機械式コンピューティング（例えば、ナノテクノロジを使用したもの）などを含むことができる。
【００７６】
さらに、実行時多態性は、数多くの他の汎用または特定用途の（電子式を含む）コンピューティングデバイス環境または構成と共に実装することができる。使用に適していると考えられる周知のコンピューティング（デバイス）システム、環境、および／または構成の例には、それらに限られないが、パーソナルコンピュータ、サーバコンピュータ、シンクライアント（ｔｈｉｎ  ｃｌｉｅｎｔ）、シッククライアント（ｔｈｉｃｋ  ｃｌｉｅｎｔ）、携帯情報端末（ＰＤＡ）または携帯電話、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラム可能な民生用電子機器、ビデオゲーム機、ゲームコンソール、ポータブルまたはハンドヘルドのゲームユニット、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、任意の上記システムまたはデバイスか、それらの何らかの組合せを含む分散コンピュータ環境などが含まれる。
【００７７】
実行時多態性の実施例は、プロセッサ実行可能命令の一般的な関連で説明することができる。一般に、プロセッサ実行可能命令には、特定のタスクを実行し、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造、他のコードなどが含まれる。ランタイム環境での多態性のオブジェクトキャスティングは、本明細書の特定の実施例で説明したように、通信リンクおよび／またはネットワークを通して接続される遠隔的にリンクされた処理デバイスによってタスクが実行される分散コンピューティング環境で実施することもできる。特に分散コンピューティング環境では、プロセッサ実行可能命令は、別個の記憶媒体に配置し、様々なプロセッサによって実行し、そして／または伝送媒体上に存在し、またはそれを介して伝搬することができる。
【００７８】
コンピューティングデバイス環境９００は、コンピュータ９０２の形態で汎用コンピューティングデバイスを含み、これはコンピューティングおよび／または処理機能を備える任意のコンピューティングデバイスを含むことができる。コンピュータ９０２の構成要素は、それらに限られないが、１つまたは複数のプロセッサまたは処理ユニット９０４、システムメモリ９０６、およびプロセッサ９０４からシステムメモリ９０６までを含む様々なシステムコンポーネントを結合するシステムバス９０８を含むことができる。
【００７９】
システムバス９０８は、メモリバスもしくはメモリコントローラ、周辺バス、ＡＧＰ（アクセラレーテッドグラフィックスポート）、および様々なバスアーキテクチャのいずれかを使用するプロセッサもしくはローカルバスを含む、任意のいくつかのタイプの有線または無線のバス構造のいずれかの１つまたは複数を代表する。例として、そのようなアーキテクチャには、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、メザニン（Ｍｅｚｚａｎｉｎｅ）バスとも呼ばれるＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔｓ）バス、それらの何らかの組合せなどが含まれ得る。
【００８０】
コンピュータ９０２は、通常、様々なプロセッサアクセス可能媒体を含む。そのような媒体は、コンピュータ９０２または別のコンピューティングデバイスからアクセス可能な任意の利用可能な媒体とすることができ、それには揮発性および不揮発性の両媒体、取り外し可能および取り外し不可の媒体、ならびに記憶および伝送媒体が含まれる。
【００８１】
システムメモリ９０６は、ランダムアクセスメモリ（ＲＡＭ）９１０などの揮発性メモリ、および／または読取り専用メモリ（ＲＯＭ）９１２などの不揮発性メモリの形態のプロセッサアクセス可能記憶媒体を含む。始動時などにコンピュータ９０２内の各要素間での情報の転送を助ける基本ルーチンが入っている基本入出力システム（ＢＩＯＳ）９１４は、通常、ＲＯＭ９１２に格納される。ＲＡＭ９１０は、通常、処理ユニット９０４にとって直接アクセス可能、そして／またはそれによって現在操作されているデータおよび／またはプログラムモジュール／命令を収容する。
【００８２】
コンピュータ９０２は、他の取り外し可能／取り外し不可および／または揮発性／不揮発性記憶媒体を含むこともできる。例として、図９に、（通常は）取り外し不可の不揮発性磁気媒体（別個に図示せず）との読出しおよび書込みのためのハードディスクドライブまたはディスクドライブアレイ９１６、（通常は）取り外し可能な不揮発性磁気ディスク９２０（例、「フロッピー（登録商標）ディスク」）との読出しおよび書込みのための磁気ディスクドライブ９１８、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光媒体などの（通常は）取り外し可能な不揮発性光ディスク９２４との読出しおよび／または書込みのための光ディスクドライブ９２２を示す。ハードディスクドライブ９１６、磁気ディスクドライブ９１８、および光ディスクドライブ９２２は、それぞれ、１つまたは複数の記憶媒体インターフェース９２６によってシステムバス９０８に接続される。あるいは、ハードディスクドライブ９１６、磁気ディスクドライブ９１８、および光ディスクドライブ９２２は、１つまたは複数の他の別個のまたは組み合わされたインターフェース（図示せず）によって、システムバス９０８に接続することもできる。
【００８３】
ディスクドライブおよび関連のプロセッサアクセス可能媒体は、コンピュータ９０２のデータ構造、プログラムモジュール、および他のデータなどのプロセッサ実行可能命令の不揮発性記憶を提供する。例示的なコンピュータ９０２にはハードディスク９１６、取り外し可能な磁気ディスク９２０、および取り外し可能か光ディスク９２４が示されているが、磁気カセットもしくは他の磁気記憶装置、フラッシュメモリ、ＣＤ−ＲＯＭ、ＤＶＤ（ディジタル多用途ディスク）もしくは他の光記憶装置、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭなど、他のタイプのプロセッサアクセス可能媒体が、コンピューティングデバイスによってアクセス可能な命令を格納することができることが認識されるべきである。そのような媒体には、いわゆる特定用途またはハードワイヤードの集積回路（ＩＣ）チップを含むこともできる。換言すると、任意のプロセッサアクセス可能媒体を利用して、この例示的なコンピューティングシステムおよび環境９００の記憶媒体を実現することができる。
【００８４】
一般的な例として、オペレーティングシステム９２８、１つまたは複数のアプリケーションプログラム９３０、他のプログラムモジュール９３２、およびプログラムデータ９３４を含む、任意の数のプログラムモジュール（または他のプロセッサ実行可能命令のユニットまたはセット）を、ハードディスク９１６、磁気ディスク９２０、光ディスク９２４、ＲＯＭ９１２、および／またはＲＡＭ９１０に格納することができる。限定ではなく、具体例として、（図１、３、５Ａ、５Ｂ、７の）オブジェクト１０２、被キャストオブジェクト１０４、実行時キャスティング記述３０２、アプリケーション５０４／７１０、サービスライブラリ５０２、キャスティングオブジェクト７０２、規則７０４などを、そのようなプログラムモジュール９２８、９３０、９３２および９３４の１つまたは複数の一部とすることができる。
【００８５】
ＧＵＩ７０６を介してビューオブジェクト１０２Ｖを変更する（図７の）ユーザ７１２は、例えば、キーボード９３６やポインティング装置９３８（例、マウス）といった入力装置を介してコンピュータ９０２にコマンドおよび／または情報を入力することができる。他の入力装置９４０（具体的には図示せず）には、マイク、ジョイスティック、ゲームパッド、衛星アンテナ、シリアルポート、スキャナなどが含まれ得る。上記およびその他の入力装置は、システムバス９０８に結合される入出力インターフェース９４２を介して処理装置９０４に接続される。しかし、代わりに、それらをパラレルポート、ゲームポート、ＵＳＢ（ユニバーサルシリアルバス）ポート、ＩＥＥＥ１３９４（「ファイアウォール」）インターフェース、ＩＥＥＥ８０２．１１無線インターフェース、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線インターフェースなど、他のインターフェースおよびバス構造によって接続することができる。
【００８６】
ビデオアダプタ９４６などのインターフェースを介して、システムバス９０８にモニタ／ビュースクリーン９４４または他のタイプの表示デバイスを接続することもできる。ビデオアダプタ９４６（または別の構成要素）は、グラフィックス集約的な計算を処理すると共に要求の厳しい表示要件を取り扱うためのグラフィックスカードとするか、または含むことができる。通常、グラフィックスカードは、グラフィックス操作の迅速な実行を容易にするためにグラフィックス処理ユニット（ＧＰＵ）、ビデオＲＡＭ（ＶＲＡＭ）などを含む。モニタ９４４以外の他の出力周辺装置には、スピーカ（図示せず）およびプリンタ９４８などの構成要素が含まれ、それらは、入出力インターフェース９４２を介してコンピュータ９０２に接続することができる。
【００８７】
コンピュータ９０２は、リモートコンピューティングデバイス９５０など１つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク化された環境で動作することができる。例として、リモートコンピューティングデバイス９５０は、パーソナルコンピュータ、ポータブルコンピュータ（例、ラップトップコンピュータ、タブレットコンピュータ、ＰＤＡ、移動局）、手のひらサイズまたはポケットサイズのコンピュータ、ゲーム機、サーバ、ルータ、ネットワークコンピュータ、ピアデバイス、その他の共通ネットワークノード、または上記の別のコンピュータタイプなどとすることができる。しかし、リモートコンピューティングデバイス９５０は、コンピュータ９０２に関して本明細書に記載した要素および機能の多くまたはすべてを含むことのできるポータブルコンピュータとして示されている。
【００８８】
コンピュータ９０２とリモートコンピュータ９５０の間の論理接続は、ローカルエリアネットワーク（ＬＡＮ）９５２および一般の広域ネットワーク（ＷＡＮ）９５４として示されている。そのようなネットワーク環境はオフィス、企業規模のコンピュータネットワーク、イントラネット、インターネット、固定または携帯電話ネットワーク、他の無線ネットワーク、ゲームネットワーク、それらの何らかの組合せなどでは一般的なものである。
【００８９】
ＬＡＮネットワーク環境で実装されるとき、コンピュータ９０２は、普通、ネットワークインターフェースまたはアダプタ９５６を介してＬＡＮ９５２に接続される。ＷＡＮネットワーク環境で実装されるときは、コンピュータ９０２は、通常、モデム９５８またはＷＡＮ９５４を介して通信を確立するための他の手段を含む。モデム９５８は、コンピュータ９０２に内蔵でも外付けでもよく、入出力インターフェース９４２または他の任意の適当な方式でシステムバス９０８に接続することができる。図示したネットワーク接続は例示的なものであり、コンピュータ９０２と９５０の間で通信リンクを確立する他の手段を用いることもできることが理解されるべきである。
【００９０】
コンピューティングデバイス環境９００で示すように、ネットワーク化された環境では、コンピュータ９０２に関連して示すプログラムモジュールや他の命令、あるいはその一部は、完全にまたは部分的に、リモートの記憶装置に格納することができる。例として、リモートアプリケーションプログラム９６０はリモートコンピュータ９５０のメモリコンポーネント上にあるが、コンピュータ９０２を介して使用可能であり、そうでなければアクセス可能とすることができる。また、例示のために、アプリケーションプログラム９３０、およびオペレーティングシステム９２８などの他のプロセッサ実行可能命令を本明細書では個別のブロックとして示してあるが、そのようなプログラム、コンポーネント、および他の命令は、様々なときに、コンピューティングデバイス９０２（および／またはリモートコンピューティングデバイス９５０）の異なる記憶構成要素に存在し、コンピュータ９０２のデータプロセッサ９０４（および／またはリモートコンピューティングデバイス９５０のデータプロセッサ）によって実行されることが認められる。
【００９１】
前述のように、従来の多態性のモデルは単に型に基づくものであり、必然的にコンパイル時に多態性を定義することになる。ソースの型の情報もデスティネーションの型の情報もコンパイル時に完全に定義される。さらに、従来の多態性では、特定の型が別の特定の型に多態化され、それには各一意のソースの型ごとに一意のデスティネーションの型を持つ必要がある（１対１キャスティング）。
【００９２】
これに対して、本明細書で説明した特定の実施例では、そのプロセスのメタデータを使用して、実行時に拡張多態性スキームを使用して任意の型のオブジェクトを新しい型にキャストできるようにする多態性パラダイムを提供する。記載の特定の実施例では、この拡張多態性パラダイムには、（ｉ）ソースの機能を含めることによる多態性の拡張、（ｉｉ）実行時に解釈されるメタデータを用いた多態性の定義、（ｉｉｉ）ソースの型の情報を実行時に発見できる、ソースの型の独立性、（ｉｖ）どのソースの型にも使用される同じ実行時キャスティング定義を用いて任意のソースの型をデスティネーションの型に多態化する多対１キャスティング、および（ｖ）実行時に発見されるソースの型とは関係なくデスティネーションの型がキャストされる、実行時適応性のうちの１つまたは複数が関係する。
【００９３】
以上、システム、媒体、方法、アプローチ、プロセス、構成、装置、デバイス、その他の実施例を、コンポーネント、アルゴリズム、および機能的特徴および／または図表に特有の言葉で説明してきたが、添付の特許請求の範囲に定義される本発明は、必ずしも、記載の具体的特徴や図表に限られるものではないことが理解されるべきである。それらの具体的特徴および図表は、むしろ特許請求の範囲に記載の本発明を実装する例示的形態として開示されている。
【符号の説明】
【００９４】
１０２  オブジェクト
１０４  被キャストオブジェクト
１０６  キャスティングプロセス
１０８  メタデータ
１１０  ランタイム環境
３０２  実行時キャスティング記述
１０２Ｐ１〜Ｐｎ  プロパティ
１０２Ｍ１〜Ｍｎ  メソッド
１０４Ｐ１〜Ｐｎ  プロパティ
１０４Ｍ１〜Ｍｎ  メソッド
３０２Ｍ  マッピング記述
３０２Ｍ１  （プロパティ）反映マッピング記述
３０２Ｍ２  変換マッピング記述
３０２Ｍ３  名前変更マッピング記述
３０２Ｍ４  関数マッピング記述
３０２Ｍ５  （プロパティ）宣言マッピング記述
３０２Ｍ６  （メソッド）反映マッピング記述
３０２Ｍ７  （メソッド）宣言マッピング記述
３０２Ｍｎ  フィルタマッピング記述
３０４  機能キャスティング操作
３０４（１）  （プロパティ）反映マッピング
３０４（２）  変換マッピング
３０４（３）  名前変更マッピング
３０４（４）  関数マッピング
３０４（５）  （プロパティ）宣言マッピング
３０４（６）  （メソッド）反映マッピング
３０４（７）  （メソッド）宣言マッピング
３０４（ｎ）  フィルタリングマッピング
５０２  サービスライブラリ
５０４  汎用アプリケーション
１０２（Ａ）  オブジェクト
１０２（Ｂ）  オブジェクト
１０４（Ｃ１）  オブジェクト
１０４（Ｃ２）  オブジェクト
５０６  リンク
３０４（ＡＣ）  キャスティング操作
３０４（ＢＣ）  キャスティング操作
１０２（１）  オブジェクト＃１
１０２（２）  オブジェクト＃２
１０２（ｎ）  オブジェクト＃ｎ
３０２ＭＦ  機能マッピング記述
１０２Ｆ  機能
１０４Ｆ  被キャスト機能
３０４（１１１）  機能マッピング
３０４（２２２）  機能マッピング
３０４（２ｎ２２）  機能マッピング
３０４（ｎ２２）  機能マッピング
７０２Ｖ  キャスティングオブジェクト
７０２Ａ  キャスティングオブジェクト
７０４  規則
７０６  ＧＵＩブロック
７０８  ビューブロック
７１０  アプリケーション
７１２  ユーザ
１０２Ａ  アプリケーションオブジェクト
１０４Ａ  被キャストオブジェクト
１０２Ｖ  ビューオブジェクト
１０４Ｖ  被キャストオブジェクト
９００  コンピューティング動作環境
９０２  コンピュータ
９０４  処理ユニット
９０６  システムメモリ
９０８  システムバス
９１０  ＲＡＭ
９１２  ＲＯＭ
９１４  ＢＩＯＳ
９１６  ディスクドライブ
９１８  磁気ディスクドライブ
９２０  不揮発性磁気ディスク
９２２  光ディスクドライブ
９２４  不揮発性光ディスク
９２６  記憶媒体インターフェース
９２８  オペレーティングシステム
９３０  アプリケーションプログラム
９３２  プログラムモジュール
９３４  プログラムデータ
９３６  キーボード
９３８  ポインティング装置
９４０  その他の入力装置
９４２  入出力インターフェース
９４４  モニタ
９４６  ビデオアダプタ
９４８  プリンタ
９５０  リモートコンピューティングデバイス
９５２  ＬＡＮ
９５４  ＷＡＮ
９５６  ネットワークインターフェース／アダプタ
９５８  モデム
９６０  リモートアプリケーションプログラム
【図１】
2012099155.tif 000003
【図２】
2012099155.tif 000004
【図３】
2012099155.tif 000005
【図４】
2012099155.tif 000006
【図５Ａ】
2012099155.tif 000007
【図５Ｂ】
2012099155.tif 000008
【図６Ａ】
2012099155.tif 000009
【図６Ｂ】
2012099155.tif 000010
【図７】
2012099155.tif 000011
【図８】
2012099155.tif 000012
【図９】
2012099155.tif 000013