(57)【特許請求の範囲】
【請求項１】
関係する操作に従って複数のオブジェクトがクラスに分類されており、メモリを含むデータ・プロセッサ上のオブジェクト指向プログラミング環境でインターフェース継承を伴うオブジェクト上の操作を呼出すために、コンピュータで実施される方法であって、
オブジェクト用のアパレント・インタフェースのｍテーブルを作り出すステップであって、そのｍテーブルは前記アパレント・インタフェースの関数を指す複数のポインタと付加的なｍテーブルを指す複数のポインタとを含み、前記付加的なｍテーブルは前記オブジェクトの複数の継承インタフェース用であって、前記アパレント・インタフェース用の前記ｍテーブルと同じテーブル構造を有する、ステップと、；
前記ｍテーブル内に収容された前記ｍテーブル用の識別子情報を含む識別子フィールドを与えるステップと、
前記ｍテーブル内に収容された関数を指す複数のポインタのカウント数を含む第１のカウント・フィールドを与えるステップと、
前記ｍテーブル内に収容された付加的なｍテーブルを指す前記複数のポインタのカウント数を含む第２のカウント・フィールドを与えるステップと、
ポインタを使用して前記オブジェクト用のデータへポインティングするステップであって、そのポインタはオブジェクト・レファレンスの一部であり、前記オブジェクト用のデータは前記オブジェクト・レファレンスとは別のものである、ステップと、
ポインタを使用して前記アパレント・インタフェース用の前記ｍテーブルへポインティングするステップであって、そのポインタは前記オブジェクト・レファレンスの一部であり、データへの前記ポインティングと前記ｍテーブルへの前記ポインティングが別々のポインタを使用して前記オブジェクト・レファレンスによって容易になされる、ステップと、；そして
前記オブジェクト・レファレンスによってポイントされた前記データと前記ｍテーブル上の複数の操作とを呼び出すステップと、
を含むことを特徴とする前記方法。
【請求項２】
インターフェースごとに操作へのｍテーブルを表示するステップであって、前記ｍテーブルは前記操作を指すポインタとベース・ｍテーブルを指すポインタとを有し、前記ポインタはインターフェース継承を表示する、ステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項３】
ｍテーブルの集合体によって前記オブジェクト上の前記操作を表示するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項４】
関数を指す前記複数のポインタが、前記インターフェースにおいて宣言された操作を実施する関数をポイントするステップとをさらに含むことを特徴とする請求項１に記載の方法。
【請求項５】
異なる操作の実施のためにｍテーブルの別々のグラフを表示するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項６】
共通の操作の実施のためにクラス間でｍテーブルを共用するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項７】
操作の実施が、インターフェース継承をサポートするインターフェース定義言語を使用する分散オブジェクト指向システムにおける遠隔プロシージャ呼び出しスタブである場合に、すべてのｍテーブルを共用するステップを、さらに含むことを特徴とする請求項１に記載の方法。
【請求項８】
関係する操作に従って複数のオブジェクトがクラスに分類されており、メモリを含むデータ・プロセッサ上のオブジェクト指向プログラミング環境でインターフェース継承を伴うオブジェクト上の操作を呼出すための装置であって、
複数のｍテーブルであって、その１つはオブジェクトのアパレント・インタフェース用であり、そのｍテーブルは前記アパレント・インタフェースの関数を指す複数のポインタと付加的なｍテーブルを指す複数のポインタとを含み、前記付加的なｍテーブルは前記オブジェクトの複数の継承インタフェース用であって、前記アパレント・インタフェース用の前記ｍテーブルと同じテーブル構造を有し、前記別々のポインタと前記テーブル構造は前記複数のインタフェース継承を伴う前記オブジェクト上の操作の呼び出しのより効率的な取り扱いを可能にしている、前記複数のｍテーブルと、
前記ｍテーブル内に収容された前記ｍテーブル用の識別子情報を含んでいる識別子フィールドと、
前記ｍテーブル内に収容された関数を指す複数のポインタのカウント数を含む第１のカウント・フィールドと、
前記ｍテーブル内に収容された付加的なｍテーブルを指す前記複数のポインタのカウント数を含む第２のカウント・フィールドと、
前記オブジェクトのデータを指すポインタであって、そのポインタはオブジェクト・レファレンスの一部であり、前記オブジェクトのデータは前記オブジェクト・レファレンスとは別のものである、前記オブジェクトのデータを指すポインタと、
前記オブジェクト用の前記ｍテーブルを指すポインタであって、そのポインタは前記オブジェクト・レファレンスの一部であり、前記オブジェクトのデータへのポインティングと前記ｍテーブルへのポインティングは前記別々のポインタを使用して前記オブジェクト・レファレンスによって容易になされる、前記ｍテーブルを指すポインタと、そして
前記オブジェクト・レファレンスによってポイントされた前記データ上の複数の操作と前記複数のｍテーブルとを呼び出す回路と、
を含むことを特徴とする装置
【請求項９】
前記オブジェクト上の前記操作を呼び出すためのｍテーブルの集合体の表示をさらに含むことを特徴とする請求項８に記載の装置。
【請求項１０】
前記関数は前記インターフェースにおいて宣言された操作を実施することを特徴とする請求項８に記載の装置。
【請求項１１】
複数のｍテーブルの表示をさらに含み、オブジェクトのクラスごとに１つのｍテーブルがあり、前記ｍテーブルは操作を指すポインタとｍテーブルを指すポインタとを有し、前記別々のポインタはインターフェース継承を表示している、ことを特徴とする請求項８に記載の装置。
【請求項１２】
異なる操作の実施のためにｍテーブルの別々のグラフの表示をさらに含む請求項１１に記載の装置。
【請求項１３】
共通の操作の実施のためのクラス間で共用される共用ｍテーブルをさらに含む請求項１１に記載の装置。
【請求項１４】
前記共用ｍテーブルは、前記実施がインターフェース継承をサポートしインターフェース定義言語を使用する分散オブジェクト指向システムにおける遠隔プロシージャ呼び出しスタブである場合に、共用されることを特徴とする請求項１３に記載の装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、オブジェクト指向プログラミングの分野に関する。より詳細には、インターフェース継承を伴うオブジェクトの呼出しに関する。
【０００２】
【従来の技術】
オブジェクト指向プログラミングは、プログラムがオブジェクトの協調的集合体として編成されるソフトウェア設計実施の方法である。オブジェクトは、プログラム内の記憶領域であり、状態、動作および識別を備えている。各オブジェクトは、何らかのクラスのインスタンスを表す。クラスとは、共通の構造および共通の動作を共有するオブジェクトのセットである。Ｃ＋＋などのオブジェクト指向プログラミング言語においては、クラスはユーザ定義タイプである。クラス宣言は、そのクラスのオブジェクトに適用できる操作のセットを指定する。
【０００３】
継承関係は、所与のプログラムのクラスの階層を一体化する。クラスは他のクラスから派生することもでき、他のクラスを派生させたクラスは、派生クラスのベース・クラスと呼ばれる。さらに、クラスは、複数のクラスから派生することもあり、派生元の各ベース・クラスの操作および表示を継承する。
【０００４】
あるクラスのオブジェクトが与えられている場合、継承クラスのメソッドへのディスパッチ（検索）を行う方法を決定し選択することは困難である。「メソッド」とは、オブジェクト指向プログラミング言語であるＳｍａｌｌｔａｌｋに由来する用語であり、Ｃ＋＋言語における「メンバ関数」と同義である。「メソッド」は、クラスのメンバとして宣言された操作を表す。
【０００５】
インターフェース継承においては、インターフェースは、他のインターフェースからの操作の定義を継承するのみである。実施継承においては、インターフェースは、操作の定義および操作の実施を、ベース・クラス定義から継承する。Ｃ＋＋では実施継承を使用する。ほとんどの市販Ｃ＋＋製品（コンパイラ）は、ｖテーブルの概念を使用している。ｖテーブルは、オブジェクトが作成されると定義され、可能な継承実施へのディスパッチを必要とする各オブジェクトごとに各メソッド用のエントリを有する。ｖテーブルは通常、メソッドを指すポインタのリストから成っている。ｖテーブルはまた、通常その各ベース・クラスのｖテーブルを指すポインタも含んでいる。
【０００６】
図１は、１つのｖテーブル実施態様を示している。このｖテーブル実施態様は、ＢＭＷ部３２およびそのｖテーブル３４、３５、３６を含んでいる。ＢＭＷ部３２は、Ｖｐｔｒ  ＭＷ部３０、Ｖｐｔｒ  ＢＷ部３１およびＶｐｔｒ  Ｗ部３３から派生している。Ｖｐｔｒ  ＭＷ部３０およびＢＷ部３１は、Ｖｐｔｒ  Ｗ部３３から派生している。（Ｍａｒｇａｒｅｔ  Ａ．ＥｌｌｉｓおよびＢｊａｒｎｅ  Ｓｔｒｏｕｐｓｔｒｕｐ共著、「Ｔｈｅ  Ａｎｎｏｔａｔｅｄ  Ｃ＋＋  Ｒｅｆｅｒｅｎｃｅ  Ｍａｎｕａｌ」、Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ  Ｐｕｂｌｉｓｈｉｎｇ  Ｃｏ．、Ｍａｓｓａｃｈｕｓｅｔｔｓ、ｐ．２３５、§１０．１０ｃ．参照）
【０００７】
【発明が解決しようとする課題】
ｖテーブルの使用により生じる欠点には様々なものがある。実施継承を行うために、ベース・メソッドのｖテーブルは記入されていなければならない。さらに、ベース・クラスのｖテーブルは、ｖテーブルが実際に属する派生クラスおよびｖテーブルが参照するベース・クラスに特有のものである。新しい各派生クラスごとに、各ベース・クラス用のｖテーブルを別々に作成しなければならない。したがって、ｖテーブルの実施には多くのｖテーブルが必要となる。
【０００８】
さらに、ｖテーブルを指すポインタは、通常、クラス自体のインスタンス値変数のデータと混合されてしまう。通常のｖテーブル実施態様では、ポインタは、メソッドおよびベース・オブジェクト・インスタンス自体を指してしまい、そのためデータ構造を１つのアドレス・スペースから別のアドレス・スペースへ移動させることが困難になる。このように、アドレス・スペース間でオブジェクト・インスタンスをマップする能力に欠けることおよびｖテーブル・エントリの数と複雑さが、ｖテーブルの制約要因となっている。
【０００９】
【課題を解決するための手段】
本発明は、インターフェース継承を伴うオブジェクトの呼出しのための方法および装置を提供する。より詳細には、本発明は、インターフェース継承のみをサポートするオブジェクト・リファレンスのためのディスパッチ機構としてのｍテーブルを提供する。ｍテーブルを使用するオブジェクト・リファレンスは２つの部分、具体的には、オブジェクトのデータを指すポインタとオブジェクト上のメソッドを指すポインタとを含んでいる。オブジェクト上のメソッドは、ｍテーブルの集合体によって表される。
【００１０】
所与のインターフェースのｍテーブルは、継承インターフェースのｍテーブルを指すポインタとインターフェースにおいて宣言された操作を実施する関数を指すポインタから成っている。オブジェクト・リファレンス内のｍテーブル・ポインタは、オブジェクト・リファレンスのアパレント・インターフェース用のｍテーブルを指す。継承インターフェース用のｍテーブルには、好ましい実施の形態においては、アパレント・インターフェース用のｍテーブルから、間接参照によって到達することができる。
【００１１】
ｖテーブルとは異なり、ｍテーブルの構造は単純であり、基本的にはどのプログラミング言語でも実施可能である。オブジェクト・リファレンスは周知の構造を備えているので、修正なしにある言語から別の言語に渡すことができる。さらに、オブジェクトのデータが、ｍテーブル内のオブジェクト上のメソッドを指すポインタから分離されている。この分離によって、あるアドレス・スペースから別のアドレス・スペースへの、あるインスタンスのデータのポテンシャル・マッピングが可能になる。
【００１２】
ｍテーブル・オブジェクト・リファレンスの操作を呼び出すためには、オブジェクト・リファレンスからインターフェースのｍテーブルへの１回の間接参照、およびｍテーブル内の関数ポインタを通しての１回の間接呼出しが必要となる。本発明の実施の形態においては、追加間接参照を使用して、継承インターフェースからメソッドの呼び出しを行う。追加間接参照は、アパレント・タイプのｍテーブルから、操作を宣言したタイプのｍテーブルへ向けてのものである。
【００１３】
拡大とは、派生度の高いオブジェクト・リファレンスから、派生度の低いオブジェクト・リファレンスを作成するプロセスであり、元の表示ポインタと拡大インターフェースのｍテーブルを指すポインタから成る、新たなオブジェクト・リファレンスを構成することにより実施される。縮小は、派生度の低いオブジェクト・リファレンスから、派生度の高いオブジェクト・リファレンスを作成するプロセスであり、元の表示ポインタと縮小インターフェースのｍテーブルを指すポインタから成る、新たなオブジェクト・リファレンスを構成することにより実行される。
【００１４】
従来技術のオブジェクト・リファレンス実施態様にｍテーブルを使用することの利点は、ｍテーブルが代替実施態様をサポートし、ｍテーブルが他の言語で使用可能であり、またｍテーブルが小型で迅速なことである。さらに、本発明の方法により、データのマッピングが可能になる。その上、拡大または縮小のためにデータを改変する必要がないので、拡大インターフェースのインスタンスとして拡大オブジェクト・リファレンスをコピーする場合に、データの拡大ビューだけがコピーされる可能性はなくなる。
【００１５】
【発明の実施の形態】
インターフェース継承のみをサポートする、オブジェクト・リファレンス用ディスパッチ機構としてのｍテーブルのための装置および方法を開示する。ｍテーブル（メソッド・テーブル）は、関数ポインタと追加ｍテーブルを指すポインタのテーブルであり、ベース・クラスごとに１つのｍテーブルがあり、それぞれそのベース・クラスに見えるメソッドの適切なサブセットを指すポインタを含んでいる。
【００１６】
図２は、本発明を示すシステム・ブロック図である。コンピュータ１は、メモリ３に接続されたＣＰＵ２を備えている。本発明によるｍテーブル４はメモリ３内に常駐している。
【００１７】
図３は、本発明によるｍテーブルの例示的実施の形態を示す図である。オブジェクト・リファレンス１０は、一対のポインタによって表され、１つのポインタ１１はオブジェクト・リファレンスによって表されるオブジェクトの表示１３を指し、もう１つのポインタ１２はｍテーブル１６、関数ポインタのテーブルおよびベース・ｍテーブルを指す。
【００１８】
ｍテーブル１６は、アパレント・インターフェースのメソッド用コード２２を指すポインタ２０と継承インターフェースのｍテーブル２４を指すポインタ２１を有する。ｍテーブル１６はまた、フィールド、すなわち、識別子１７と、関数を指すポインタ２０の数を示すカウント１８と、ｍテーブルを指すポインタ２１の数を示すカウント１９とを有する。ｍテーブル２４は、そのインターフェースの関数を指すポインタ２８とベース・ｍテーブルを指すポインタ２９を有する。ｍテーブル２４はまた、フィールド２５−２７を含む。したがって、本発明の方法は、あるオブジェクトのメソッドを指すポインタから、そのオブジェクトのデータを分離するオブジェクト表示をもたらす。さらに、メソッド・テーブルおよび関数を指すアドレス空間固有ポインタを分離することにより、データ・メンバ自体がポインタまたは他のアドレス空間固有情報を含まない場合、そのオブジェクトは、位置独立オブジェクトと呼ぶことができる。
【００１９】
ｍテーブルはまた、総称トラバーサル方法によってナビゲートされるフィールドも含んでいる。これらのフィールドは、図３において１７−１９および２５−２７として識別されており、ｍテーブル・タイプの識別子と、メソッド・ポインタのカウント数と、ｍテーブル内のベース・ｍテーブル・ポインタのカウント数とを含んでいる。これらのフィールドを使用すると、たとえばインターフェース定義言語によるインターフェース宣言を調べることなしに、ｍテーブルのグラフに表された継承階層を実行時に決定することができる。これらのフィールドはまた、メソッド・ポインタおよびｍテーブルのメソッド・ポインタとベース・ｍテーブル・ポインタにアクセスするコードの範囲検査を行う場合にも使用できる。さらに、識別子は、同じｍテーブル内にあるか、またはｍテーブル内のフィールドによって指されるかのいずれである。
【００２０】
ｍテーブル・オブジェクト・リファレンス上の操作を呼び出すためには、オブジェクト・リファレンスからインターフェースのｍテーブルへの１回の間接参照、およびｍテーブル内の関数ポインタを通じての１回の間接参照が必要となる。本発明のこの実施の形態においては、追加間接参照を使用して、継承インターフェースからメソッドを呼び出す。追加間接参照は、アパレント・タイプのｍテーブルから、操作を宣言したタイプのｍテーブルへ向けてのものである。
【００２１】
図４は、本発明によるｍテーブルを使用したオブジェクト表示の例示的継承構造を示す図である。オブジェクト・タイプＡ  ４０およびＢ  ４２は、他のオブジェクト・タイプを継承していない。オブジェクト・タイプＣ  ４４は、Ａ  ４０およびＢ  ４２を継承し、オブジェクト・タイプＤ  ４６は、オブジェクト・タイプＢ  ４２を継承している。さらに、オブジェクト・タイプＥ  ４８は、オブジェクト・タイプＡ  ４０、Ｃ  ４４およびＤ  ４６を継承している。図４の構造図は、ベース・クラスが多重に継承される多重継承を示している。一つのオブジェクトの各ベース・クラスには、メソッド・テーブルが１つだけ必要であり、そのメソッド・テーブルを継承したすべてのクラスがそのメソッド・テーブルを指すことができる。オブジェクト・タイプＡ  ４０およびＢ  ４２は、残りのオブジェクト・タイプのベース・クラスである。オブジェクト・タイプＥ  ４８は、図４に示した継承構造内で最も派生度の高いものである。
【００２２】
オブジェクトＥ  ４８上で操作ＸＸが呼び出されたと仮定すると、クライアント・アプリケーション実行中に、次の３つのシナリオが有り得る。すなわち、操作ＸＸは、インターフェースＥ内で定義される、またはＥのベース・インターフェース内で定義される、またはインターフェース階層において定義されない。インターフェース・コンパイラは、ＸＸ操作がＥインターフェース内で直接定義される場合、オブジェクト・リファレンスが指すｍテーブルのＸＸスロットを呼出しが通過するように、コードを生成する。ＸＸ操作がベース・インターフェース内で定義される場合、インターフェース・コンパイラは、オブジェクト・リファレンスが指す適切なｍテーブルのベース・ｍテーブル・ポインタを通じて間接参照するコードを生成する。操作が階層内で定義されない場合、インターフェース・コンパイラは、何のコードも生成せず、操作を呼び出そうとするクライアント・アプリケーションはコンパイルしない。
【００２３】
この実施の形態においては、１回の間接参照で、アパレント・ｍテーブルからどんなベース・ｍテーブルに達することも可能である。継承階層を異なる方法で表すことのできる代替実施の形態においては、操作を定義するｍテーブルに達するために、１つまたは複数の間接参照が必要となることもある。クライアント・コードは、操作がオブジェクト・リファレンスのアパレント・インターフェース上で定義されるか、ベース・インターフェース上で定義されるかに拘らず、同一である。すなわち、クライアント・コードは、オブジェクト・リファレンスを有し、オブジェクト・リファレンス上でＸＸメソッドを呼び出す。インターフェース・コンパイラのタスクは、ｍテーブル階層内でＸＸメソッドを指すポインタを探す場所を知ることにある。
【００２４】
図５は、図４に示した例示的インターフェース階層のｍテーブルのＣ＋＋タイプ宣言１２０である。派生インターフェースのｍテーブルは、ベース・インターフェースのｍテーブルを指すポインタを含んでいる。インターフェース・コンパイラは、派生インターフェースのｍテーブルを構成するとき、ベース・ｍテーブルを指すポインタをｍテーブルに組み込む。そのため、インターフェース・コンパイラは自らベース・ｍテーブルを構成する必要はない。派生インターフェースのインターフェース・コンパイラは、少なくともインターフェース・コンパイラがベース・ｍテーブルのアドレスを獲得することのできる時点まで、すでに構成されているベース・ｍテーブルに依存する。
【００２５】
ＣまたはＣ＋＋において、ｍテーブルの宣言は、ベース・ｍテーブルを外部記号として参照することにより、またリンカに派生ｍテーブルのスロットを記入させることにより、行われる。ｍテーブルは、メソッドのカウントとアドレス、ベース・ｍテーブルのアドレス、タイプ識別子のアドレスから構成されるので、すべて「コンパイル時」定数である。
【００２６】
図６は、図５に示したｍテーブルの例示的コンストラクタ１３０を示す。図６は、１つの実施態様のｍテーブルのインスタンスを示す。ローカル実施などの代替実施態様においては、ローカル実施を指すポインタを有する各ｍテーブルとベース・インターフェースのローカル・ｍテーブルの並列インスタンスが使用される。
【００２７】
図７は、本発明によるｍテーブルを使用した、多重継承を伴うオブジェクト・リファレンスの実施の形態を示す。図７の実施の形態は、図４の継承構造に対応している。Ｅ＿ｆｐ  ５０は、タイプＥのオブジェクトのオブジェクト・リファレンスを表す。Ｅ＿ｍｔｂｌ  ５２は、Ｅオブジェクトのメソッド・テーブルであり、Ｃ＿ｍｔｂｌ  ５４は、Ｃオブジェクトのメソッド・テーブル、Ｄ＿ｍｔｂｌ  ５６はＤオブジェクトのメソッド・テーブル、Ａ＿ｍｔｂｌ  ５８はＡオブジェクトのメソッド・テーブル、Ｂ＿ｍｔｂｌ  ６０はＢオブジェクトのメソッド・テーブルである。表示５１はオブジェクトの表示である。Ａ＿ｍｔｂｌ  ５８、Ｂ＿ｍｔｂｌ  ６０のいずれもベース・ｍテーブルを参照していない。Ａ＿ｍｔｂｌｅ  ５８は、オブジェクト・タイプＡのメソッドを指す関数ポインタを含む。Ｂ＿ｍｔｂｌ  ６０は、オブジェクト・タイプＢのメソッドを指す関数ポインタを含んでいる。
【００２８】
オブジェクト・タイプＣはオブジェクト・タイプＡおよびＢを継承する。Ｃ＿ｍｔｂｌ  ５４は、オブジェクト・タイプＣのメソッドの関数ポインタとオブジェクト・タイプＡおよびＢのメソッド・テーブルを指すポインタを含んでいる。Ｄ＿ｍｔｂｌ  ５６は、オブジェクト・タイプＢを継承し、オブジェクト・タイプＤで定義されたメソッドの関数ポインタとＢ＿ｍｔｂｌ  ６０を含んでいる。Ｅ＿ｍｔｂｌ  ５２は、オブジェクト・タイプＡ、Ｂ、Ｃ、Ｄを継承し、オブジェクト・タイプＥで定義されたメソッドの関数ポインタとオブジェクト・タイプＡ、Ｂ、Ｃ、Ｄのメソッド・テーブルを指すポインタを含んでいる。インターフェース上で宣言されたメソッドは、そのインターフェースのメソッド・テーブルを通じてアクセス可能であり、継承インターフェース上で宣言されたメソッドは、そのそれぞれのメソッド・テーブル・ポインタを通じて間接参照によりアクセス可能である。各メソッド・テーブルの上部空白は、関数ポインタを含むメソッド・テーブル部分を表している。
【００２９】
ある継承がインターフェース継承である場合、ベース・クラスのメソッド・シグネチャのみが、そのベース・クラスから派生した任意のクラスにより継承される。したがって、ベース・クラスの実施は継承されない。これは、ベース・クラスのメンバの実施が、そのクラスから派生した任意のクラスにより継承される、従来技術におけるＣ＋＋のｖテーブルとは対照的である。
【００３０】
図８は図７に示したオブジェクト・リファレンスの拡大の効果を表している。拡大は、同じ表示を指すポインタを、別のｍテーブル、すなわち適当なベース・クラスのｍテーブルを指すポインタと組み合わせることによって、行うことができる。このようにして、元の表示ポインタと拡大インターフェースのｍテーブルを指すポインタから成る、新たなオブジェクト・リファレンスが構成される。拡大インターフェースのｍテーブルは、派生インターフェースのｍテーブルにインデックス、ベース・インターフェースのｍテーブルを取り出すことにより、検索することができる。その結果得られるオブジェクト・リファレンスはＥ＿ａｓ＿Ｃ＿ｆｐ  ７０で示されている。
【００３１】
Ｅ＿ａｓ＿ｃ＿ｆｐ  ７０は、図７のオブジェクト・リファレンスと同じ表示を指すが、Ｃ＿ｍｔｂｌ  ５４をも指す拡大オブジェクト・リファレンスである。内部的には、Ｅ＿ａｓ＿Ｃ＿ｆｐ  ７０は、表示およびオブジェクト・タイプＣのための適切なメソッドのサブセットを指す。縮小は、拡大と同様に、表示を指す元のポインタと縮小インターフェースのｍテーブルを指すポインタから成る、新たなオブジェクト・リファレンスを構成することにより実施される。
【００３２】
ｍテーブルの利点は、ｍテーブルが言語に依存しないことである。ｍテーブル・オブジェクト・リファレンスは、オブジェクト・リファレンス上での変換を必要とせずに言語間でやり取りすることができる。たとえば、オブジェクト・リファレンスのアパレント・タイプのインターフェース内で定義された操作の呼出しは、Ｃプログラミング言語では、(*(objref.mtable->operation))(objref.representation)と記述することができる。さらに、呼出しのための実際のパラメータを表示ポインタの後に渡すことができる。
【００３３】
継承インターフェース内で定義された操作の呼出しは、Ｃプログラミング言語では、(*(objref.mtable->inherited->operation))(objref.representation)と記述される。継承ラティス内の操作は、コンパイル時にはわかっている。したがって、ｍテーブルにおける操作および継承ｍテーブルのオフセットは、コンパイル時定数である。
【００３４】
ｍテーブルの必要スペースは、たとえば、実質的に各ベース・クラスを継承するクラスごとに別々のｖテーブル・インスタンスを必要とする、Ｃ＋＋のｖテーブルに比べて小さくてすむ。インターフェースの、クライアントに見える実施ごとに、そのインターフェイスの操作および継承ｍテーブルを指すｍテーブルが１つあるだけである。これは、ｍテーブルがそこで見つかったオブジェクト・リファレンスのアパレント・インターフェースに関わりない。さらに、ｍテーブルの操作は迅速である。ｍテーブル操作ポインタは、静的メソッドを指し、ｍテーブル・ポインタは、他の静的に定義されたｍテーブルを指す。したがって、ｍテーブルは、オブジェクト・インスタンス化の際、初期化を必要としない。
【００３５】
さらにもう１つの、ｍテーブルの利点は、ｍテーブルが、インターフェース上に継承のあるプログラムミング言語をサポートすることである。このようなプログラミング言語タイプの一例は、米国マサチューセッツ州フラミンガムのＯｂｊｅｃｔ  Ｍａｎａｇｅｍｅｎｔ  Ｇｒｏｕｐ、Ｉｎｃ．製のインターフェース定義言語（ＩＤＬ）である。ＩＤＬと他の言語の相違点は、たとえば、ＩＤＬがインターフェース継承だけを定義するということである。ｍテーブルを使用することにより、オブジェクト・リファレンス引数の変換の必要なく、実施言語間でＩＤＬ呼出しが可能になる。
【００３６】
本発明の利点の１つは、ｍテーブルがインターフェース上での操作の代替実施をサポートすることである。インターフェースの代替ｍテーブルは、希望に応じて、オブジェクト・リファレンス内で使用できるように設けられる。たとえばクライアント側スタブ・メソッドを呼び出すｍテーブル、またはローカル実施を指すｍテーブルなど、別のｍテーブルも設けられる。ｍテーブルは、インターフェース継承およびディスパッチを実施する。インターフェース上の操作は、ｍテーブルから呼び出された関数により実施される。表示は、必要な状態を保持するために使用される。メソッドの実施が、インターフェース継承をサポートするインターフェース定義言語を使用した、分散オブジェクト指向システムにおける遠隔プロシージャ呼び出しスタブのためのものである場合、すべてのｍテーブルは共用される。
【００３７】
以上、インターフェース継承を伴うオブジェクト上での呼び出しのための方法および機構について説明した。本発明のｍテーブルを使用するオブジェクト・リファレンスは、オブジェクトのデータを指すポインタとオブジェクトのメソッドを指すポインタを提供する。オブジェクト上のメソッドは、ｍテーブルの集合体によって表される。オブジェクト・リファレンスのアパレント・インターフェース内で定義されたメソッドは、これらのメソッドの実施を指すポインタによって表され、オブジェクト・リファレンスのベース・インターフェース内で定義されたメソッドは、これらのメソッドの実施を指すポインタを含むベース・インターフェースのｍテーブルを指すポインタによって表される。本発明によるｍテーブルを使用するオブジェクト・リファレンスは、インターフェースの継承があるプログラミング言語をサポートする。さらに、ｍテーブルは、代替実施をサポートし、多重言語で使用することができる。その上、ｍテーブルは、Ｃ＋＋のｖテーブルなどのオブジェクト・リファレンスを実施するための、従来技術による方法および装置に比べて、小型で迅速である。
【００３８】
いくつかの例示的実施の形態について詳細にわたって説明し、添付の図に示したが、このような実施の形態は例示的なものであって広義の発明を制限するものではなく、また本発明は、当業者なら様々な変更例を思いつくことができるので、特定の配置および構造に限定されるものではないことを理解されたい。
【図面の簡単な説明】
【図１】  例示的なｖテーブル実施態様を示す図。
【図２】  本発明を示すシステム・ブロック図。
【図３】  本発明によるｍテーブルの例示的実施態様を示す図。
【図４】  本発明によるｍテーブルの実施態様のためのオブジェクト・タイプのセットの継承関係を示す図。
【図５】  図４に示した例示的インターフェース階層の、ｍテーブル用Ｃ＋＋言語タイプの例示的宣言を示す図。
【図６】  図５に示したｍテーブルの例示的コンストラクタを示す図。
【図７】  本発明によるｍテーブルの例示的実施態様を示す図。
【図８】  図５の実施態様の拡大の影響を示す図。
【符号の説明】
１０  オブジェクト・リファレンス、  １１  表示を指すポインタ、
１２  ｍテーブルを指すポインタ、  １３  表示、  １４  オブジェクトのデータ、  １６  アパレント・インターフェースのｍテーブル、
１７  インターフェースの識別子、  １８  関数を指すポインタ数、
１９  ｍテーブルを指すポインタ数、  ２０  関数を指すポインタ、
２１  ｍテーブルを指すポインタ、  ２２  操作のコード、  ２３  実施、
２４  継承インターフェースのｍテーブル、
２５  インターフェースの識別子、  ２６  関数を指すポインタ数、
２７  ｍテーブルを指すポインタ数、  ２８  関数を指すポインタ、
２９  ｍテーブルを指すポインタ
【図１】
0003844801.tif 000002
【図２】
0003844801.tif 000003
【図３】
0003844801.tif 000004
【図４】
0003844801.tif 000005
【図５】
0003844801.tif 000006
【図６】
0003844801.tif 000007
【図７】
0003844801.tif 000008
【図８】
0003844801.tif 000009