JP3844801B2 - インターフェース継承を伴うオブジェクト上での呼出しのための方法および機構 - Google Patents
インターフェース継承を伴うオブジェクト上での呼出しのための方法および機構 Download PDFInfo
- Publication number
- JP3844801B2 JP3844801B2 JP26365695A JP26365695A JP3844801B2 JP 3844801 B2 JP3844801 B2 JP 3844801B2 JP 26365695 A JP26365695 A JP 26365695A JP 26365695 A JP26365695 A JP 26365695A JP 3844801 B2 JP3844801 B2 JP 3844801B2
- Authority
- JP
- Japan
- Prior art keywords
- interface
- pointer
- tables
- pointing
- inheritance
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は、オブジェクト指向プログラミングの分野に関する。より詳細には、インターフェース継承を伴うオブジェクトの呼出しに関する。
【0002】
【従来の技術】
オブジェクト指向プログラミングは、プログラムがオブジェクトの協調的集合体として編成されるソフトウェア設計実施の方法である。オブジェクトは、プログラム内の記憶領域であり、状態、動作および識別を備えている。各オブジェクトは、何らかのクラスのインスタンスを表す。クラスとは、共通の構造および共通の動作を共有するオブジェクトのセットである。C++などのオブジェクト指向プログラミング言語においては、クラスはユーザ定義タイプである。クラス宣言は、そのクラスのオブジェクトに適用できる操作のセットを指定する。
【0003】
継承関係は、所与のプログラムのクラスの階層を一体化する。クラスは他のクラスから派生することもでき、他のクラスを派生させたクラスは、派生クラスのベース・クラスと呼ばれる。さらに、クラスは、複数のクラスから派生することもあり、派生元の各ベース・クラスの操作および表示を継承する。
【0004】
あるクラスのオブジェクトが与えられている場合、継承クラスのメソッドへのディスパッチ(検索)を行う方法を決定し選択することは困難である。「メソッド」とは、オブジェクト指向プログラミング言語であるSmalltalkに由来する用語であり、C++言語における「メンバ関数」と同義である。「メソッド」は、クラスのメンバとして宣言された操作を表す。
【0005】
インターフェース継承においては、インターフェースは、他のインターフェースからの操作の定義を継承するのみである。実施継承においては、インターフェースは、操作の定義および操作の実施を、ベース・クラス定義から継承する。C++では実施継承を使用する。ほとんどの市販C++製品(コンパイラ)は、vテーブルの概念を使用している。vテーブルは、オブジェクトが作成されると定義され、可能な継承実施へのディスパッチを必要とする各オブジェクトごとに各メソッド用のエントリを有する。vテーブルは通常、メソッドを指すポインタのリストから成っている。vテーブルはまた、通常その各ベース・クラスのvテーブルを指すポインタも含んでいる。
【0006】
図1は、1つのvテーブル実施態様を示している。このvテーブル実施態様は、BMW部32およびそのvテーブル34、35、36を含んでいる。BMW部32は、Vptr MW部30、Vptr BW部31およびVptr W部33から派生している。Vptr MW部30およびBW部31は、Vptr W部33から派生している。(Margaret A.EllisおよびBjarne Stroupstrup共著、「The Annotated C++ Reference Manual」、Addison−Wesley Publishing Co.、Massachusetts、p.235、§10.10c.参照)
【0007】
【発明が解決しようとする課題】
vテーブルの使用により生じる欠点には様々なものがある。実施継承を行うために、ベース・メソッドのvテーブルは記入されていなければならない。さらに、ベース・クラスのvテーブルは、vテーブルが実際に属する派生クラスおよびvテーブルが参照するベース・クラスに特有のものである。新しい各派生クラスごとに、各ベース・クラス用のvテーブルを別々に作成しなければならない。したがって、vテーブルの実施には多くのvテーブルが必要となる。
【0008】
さらに、vテーブルを指すポインタは、通常、クラス自体のインスタンス値変数のデータと混合されてしまう。通常のvテーブル実施態様では、ポインタは、メソッドおよびベース・オブジェクト・インスタンス自体を指してしまい、そのためデータ構造を1つのアドレス・スペースから別のアドレス・スペースへ移動させることが困難になる。このように、アドレス・スペース間でオブジェクト・インスタンスをマップする能力に欠けることおよびvテーブル・エントリの数と複雑さが、vテーブルの制約要因となっている。
【0009】
【課題を解決するための手段】
本発明は、インターフェース継承を伴うオブジェクトの呼出しのための方法および装置を提供する。より詳細には、本発明は、インターフェース継承のみをサポートするオブジェクト・リファレンスのためのディスパッチ機構としてのmテーブルを提供する。mテーブルを使用するオブジェクト・リファレンスは2つの部分、具体的には、オブジェクトのデータを指すポインタとオブジェクト上のメソッドを指すポインタとを含んでいる。オブジェクト上のメソッドは、mテーブルの集合体によって表される。
【0010】
所与のインターフェースのmテーブルは、継承インターフェースのmテーブルを指すポインタとインターフェースにおいて宣言された操作を実施する関数を指すポインタから成っている。オブジェクト・リファレンス内のmテーブル・ポインタは、オブジェクト・リファレンスのアパレント・インターフェース用のmテーブルを指す。継承インターフェース用のmテーブルには、好ましい実施の形態においては、アパレント・インターフェース用のmテーブルから、間接参照によって到達することができる。
【0011】
vテーブルとは異なり、mテーブルの構造は単純であり、基本的にはどのプログラミング言語でも実施可能である。オブジェクト・リファレンスは周知の構造を備えているので、修正なしにある言語から別の言語に渡すことができる。さらに、オブジェクトのデータが、mテーブル内のオブジェクト上のメソッドを指すポインタから分離されている。この分離によって、あるアドレス・スペースから別のアドレス・スペースへの、あるインスタンスのデータのポテンシャル・マッピングが可能になる。
【0012】
mテーブル・オブジェクト・リファレンスの操作を呼び出すためには、オブジェクト・リファレンスからインターフェースのmテーブルへの1回の間接参照、およびmテーブル内の関数ポインタを通しての1回の間接呼出しが必要となる。本発明の実施の形態においては、追加間接参照を使用して、継承インターフェースからメソッドの呼び出しを行う。追加間接参照は、アパレント・タイプのmテーブルから、操作を宣言したタイプのmテーブルへ向けてのものである。
【0013】
拡大とは、派生度の高いオブジェクト・リファレンスから、派生度の低いオブジェクト・リファレンスを作成するプロセスであり、元の表示ポインタと拡大インターフェースのmテーブルを指すポインタから成る、新たなオブジェクト・リファレンスを構成することにより実施される。縮小は、派生度の低いオブジェクト・リファレンスから、派生度の高いオブジェクト・リファレンスを作成するプロセスであり、元の表示ポインタと縮小インターフェースのmテーブルを指すポインタから成る、新たなオブジェクト・リファレンスを構成することにより実行される。
【0014】
従来技術のオブジェクト・リファレンス実施態様にmテーブルを使用することの利点は、mテーブルが代替実施態様をサポートし、mテーブルが他の言語で使用可能であり、またmテーブルが小型で迅速なことである。さらに、本発明の方法により、データのマッピングが可能になる。その上、拡大または縮小のためにデータを改変する必要がないので、拡大インターフェースのインスタンスとして拡大オブジェクト・リファレンスをコピーする場合に、データの拡大ビューだけがコピーされる可能性はなくなる。
【0015】
【発明の実施の形態】
インターフェース継承のみをサポートする、オブジェクト・リファレンス用ディスパッチ機構としてのmテーブルのための装置および方法を開示する。mテーブル(メソッド・テーブル)は、関数ポインタと追加mテーブルを指すポインタのテーブルであり、ベース・クラスごとに1つのmテーブルがあり、それぞれそのベース・クラスに見えるメソッドの適切なサブセットを指すポインタを含んでいる。
【0016】
図2は、本発明を示すシステム・ブロック図である。コンピュータ1は、メモリ3に接続されたCPU2を備えている。本発明によるmテーブル4はメモリ3内に常駐している。
【0017】
図3は、本発明によるmテーブルの例示的実施の形態を示す図である。オブジェクト・リファレンス10は、一対のポインタによって表され、1つのポインタ11はオブジェクト・リファレンスによって表されるオブジェクトの表示13を指し、もう1つのポインタ12はmテーブル16、関数ポインタのテーブルおよびベース・mテーブルを指す。
【0018】
mテーブル16は、アパレント・インターフェースのメソッド用コード22を指すポインタ20と継承インターフェースのmテーブル24を指すポインタ21を有する。mテーブル16はまた、フィールド、すなわち、識別子17と、関数を指すポインタ20の数を示すカウント18と、mテーブルを指すポインタ21の数を示すカウント19とを有する。mテーブル24は、そのインターフェースの関数を指すポインタ28とベース・mテーブルを指すポインタ29を有する。mテーブル24はまた、フィールド25−27を含む。したがって、本発明の方法は、あるオブジェクトのメソッドを指すポインタから、そのオブジェクトのデータを分離するオブジェクト表示をもたらす。さらに、メソッド・テーブルおよび関数を指すアドレス空間固有ポインタを分離することにより、データ・メンバ自体がポインタまたは他のアドレス空間固有情報を含まない場合、そのオブジェクトは、位置独立オブジェクトと呼ぶことができる。
【0019】
mテーブルはまた、総称トラバーサル方法によってナビゲートされるフィールドも含んでいる。これらのフィールドは、図3において17−19および25−27として識別されており、mテーブル・タイプの識別子と、メソッド・ポインタのカウント数と、mテーブル内のベース・mテーブル・ポインタのカウント数とを含んでいる。これらのフィールドを使用すると、たとえばインターフェース定義言語によるインターフェース宣言を調べることなしに、mテーブルのグラフに表された継承階層を実行時に決定することができる。これらのフィールドはまた、メソッド・ポインタおよびmテーブルのメソッド・ポインタとベース・mテーブル・ポインタにアクセスするコードの範囲検査を行う場合にも使用できる。さらに、識別子は、同じmテーブル内にあるか、またはmテーブル内のフィールドによって指されるかのいずれである。
【0020】
mテーブル・オブジェクト・リファレンス上の操作を呼び出すためには、オブジェクト・リファレンスからインターフェースのmテーブルへの1回の間接参照、およびmテーブル内の関数ポインタを通じての1回の間接参照が必要となる。本発明のこの実施の形態においては、追加間接参照を使用して、継承インターフェースからメソッドを呼び出す。追加間接参照は、アパレント・タイプのmテーブルから、操作を宣言したタイプのmテーブルへ向けてのものである。
【0021】
図4は、本発明によるmテーブルを使用したオブジェクト表示の例示的継承構造を示す図である。オブジェクト・タイプA 40およびB 42は、他のオブジェクト・タイプを継承していない。オブジェクト・タイプC 44は、A 40およびB 42を継承し、オブジェクト・タイプD 46は、オブジェクト・タイプB 42を継承している。さらに、オブジェクト・タイプE 48は、オブジェクト・タイプA 40、C 44およびD 46を継承している。図4の構造図は、ベース・クラスが多重に継承される多重継承を示している。一つのオブジェクトの各ベース・クラスには、メソッド・テーブルが1つだけ必要であり、そのメソッド・テーブルを継承したすべてのクラスがそのメソッド・テーブルを指すことができる。オブジェクト・タイプA 40およびB 42は、残りのオブジェクト・タイプのベース・クラスである。オブジェクト・タイプE 48は、図4に示した継承構造内で最も派生度の高いものである。
【0022】
オブジェクトE 48上で操作XXが呼び出されたと仮定すると、クライアント・アプリケーション実行中に、次の3つのシナリオが有り得る。すなわち、操作XXは、インターフェースE内で定義される、またはEのベース・インターフェース内で定義される、またはインターフェース階層において定義されない。インターフェース・コンパイラは、XX操作がEインターフェース内で直接定義される場合、オブジェクト・リファレンスが指すmテーブルのXXスロットを呼出しが通過するように、コードを生成する。XX操作がベース・インターフェース内で定義される場合、インターフェース・コンパイラは、オブジェクト・リファレンスが指す適切なmテーブルのベース・mテーブル・ポインタを通じて間接参照するコードを生成する。操作が階層内で定義されない場合、インターフェース・コンパイラは、何のコードも生成せず、操作を呼び出そうとするクライアント・アプリケーションはコンパイルしない。
【0023】
この実施の形態においては、1回の間接参照で、アパレント・mテーブルからどんなベース・mテーブルに達することも可能である。継承階層を異なる方法で表すことのできる代替実施の形態においては、操作を定義するmテーブルに達するために、1つまたは複数の間接参照が必要となることもある。クライアント・コードは、操作がオブジェクト・リファレンスのアパレント・インターフェース上で定義されるか、ベース・インターフェース上で定義されるかに拘らず、同一である。すなわち、クライアント・コードは、オブジェクト・リファレンスを有し、オブジェクト・リファレンス上でXXメソッドを呼び出す。インターフェース・コンパイラのタスクは、mテーブル階層内でXXメソッドを指すポインタを探す場所を知ることにある。
【0024】
図5は、図4に示した例示的インターフェース階層のmテーブルのC++タイプ宣言120である。派生インターフェースのmテーブルは、ベース・インターフェースのmテーブルを指すポインタを含んでいる。インターフェース・コンパイラは、派生インターフェースのmテーブルを構成するとき、ベース・mテーブルを指すポインタをmテーブルに組み込む。そのため、インターフェース・コンパイラは自らベース・mテーブルを構成する必要はない。派生インターフェースのインターフェース・コンパイラは、少なくともインターフェース・コンパイラがベース・mテーブルのアドレスを獲得することのできる時点まで、すでに構成されているベース・mテーブルに依存する。
【0025】
CまたはC++において、mテーブルの宣言は、ベース・mテーブルを外部記号として参照することにより、またリンカに派生mテーブルのスロットを記入させることにより、行われる。mテーブルは、メソッドのカウントとアドレス、ベース・mテーブルのアドレス、タイプ識別子のアドレスから構成されるので、すべて「コンパイル時」定数である。
【0026】
図6は、図5に示したmテーブルの例示的コンストラクタ130を示す。図6は、1つの実施態様のmテーブルのインスタンスを示す。ローカル実施などの代替実施態様においては、ローカル実施を指すポインタを有する各mテーブルとベース・インターフェースのローカル・mテーブルの並列インスタンスが使用される。
【0027】
図7は、本発明によるmテーブルを使用した、多重継承を伴うオブジェクト・リファレンスの実施の形態を示す。図7の実施の形態は、図4の継承構造に対応している。E_fp 50は、タイプEのオブジェクトのオブジェクト・リファレンスを表す。E_mtbl 52は、Eオブジェクトのメソッド・テーブルであり、C_mtbl 54は、Cオブジェクトのメソッド・テーブル、D_mtbl 56はDオブジェクトのメソッド・テーブル、A_mtbl 58はAオブジェクトのメソッド・テーブル、B_mtbl 60はBオブジェクトのメソッド・テーブルである。表示51はオブジェクトの表示である。A_mtbl 58、B_mtbl 60のいずれもベース・mテーブルを参照していない。A_mtble 58は、オブジェクト・タイプAのメソッドを指す関数ポインタを含む。B_mtbl 60は、オブジェクト・タイプBのメソッドを指す関数ポインタを含んでいる。
【0028】
オブジェクト・タイプCはオブジェクト・タイプAおよびBを継承する。C_mtbl 54は、オブジェクト・タイプCのメソッドの関数ポインタとオブジェクト・タイプAおよびBのメソッド・テーブルを指すポインタを含んでいる。D_mtbl 56は、オブジェクト・タイプBを継承し、オブジェクト・タイプDで定義されたメソッドの関数ポインタとB_mtbl 60を含んでいる。E_mtbl 52は、オブジェクト・タイプA、B、C、Dを継承し、オブジェクト・タイプEで定義されたメソッドの関数ポインタとオブジェクト・タイプA、B、C、Dのメソッド・テーブルを指すポインタを含んでいる。インターフェース上で宣言されたメソッドは、そのインターフェースのメソッド・テーブルを通じてアクセス可能であり、継承インターフェース上で宣言されたメソッドは、そのそれぞれのメソッド・テーブル・ポインタを通じて間接参照によりアクセス可能である。各メソッド・テーブルの上部空白は、関数ポインタを含むメソッド・テーブル部分を表している。
【0029】
ある継承がインターフェース継承である場合、ベース・クラスのメソッド・シグネチャのみが、そのベース・クラスから派生した任意のクラスにより継承される。したがって、ベース・クラスの実施は継承されない。これは、ベース・クラスのメンバの実施が、そのクラスから派生した任意のクラスにより継承される、従来技術におけるC++のvテーブルとは対照的である。
【0030】
図8は図7に示したオブジェクト・リファレンスの拡大の効果を表している。拡大は、同じ表示を指すポインタを、別のmテーブル、すなわち適当なベース・クラスのmテーブルを指すポインタと組み合わせることによって、行うことができる。このようにして、元の表示ポインタと拡大インターフェースのmテーブルを指すポインタから成る、新たなオブジェクト・リファレンスが構成される。拡大インターフェースのmテーブルは、派生インターフェースのmテーブルにインデックス、ベース・インターフェースのmテーブルを取り出すことにより、検索することができる。その結果得られるオブジェクト・リファレンスはE_as_C_fp 70で示されている。
【0031】
E_as_c_fp 70は、図7のオブジェクト・リファレンスと同じ表示を指すが、C_mtbl 54をも指す拡大オブジェクト・リファレンスである。内部的には、E_as_C_fp 70は、表示およびオブジェクト・タイプCのための適切なメソッドのサブセットを指す。縮小は、拡大と同様に、表示を指す元のポインタと縮小インターフェースのmテーブルを指すポインタから成る、新たなオブジェクト・リファレンスを構成することにより実施される。
【0032】
mテーブルの利点は、mテーブルが言語に依存しないことである。mテーブル・オブジェクト・リファレンスは、オブジェクト・リファレンス上での変換を必要とせずに言語間でやり取りすることができる。たとえば、オブジェクト・リファレンスのアパレント・タイプのインターフェース内で定義された操作の呼出しは、Cプログラミング言語では、(*(objref.mtable->operation))(objref.representation)と記述することができる。さらに、呼出しのための実際のパラメータを表示ポインタの後に渡すことができる。
【0033】
継承インターフェース内で定義された操作の呼出しは、Cプログラミング言語では、(*(objref.mtable->inherited->operation))(objref.representation)と記述される。継承ラティス内の操作は、コンパイル時にはわかっている。したがって、mテーブルにおける操作および継承mテーブルのオフセットは、コンパイル時定数である。
【0034】
mテーブルの必要スペースは、たとえば、実質的に各ベース・クラスを継承するクラスごとに別々のvテーブル・インスタンスを必要とする、C++のvテーブルに比べて小さくてすむ。インターフェースの、クライアントに見える実施ごとに、そのインターフェイスの操作および継承mテーブルを指すmテーブルが1つあるだけである。これは、mテーブルがそこで見つかったオブジェクト・リファレンスのアパレント・インターフェースに関わりない。さらに、mテーブルの操作は迅速である。mテーブル操作ポインタは、静的メソッドを指し、mテーブル・ポインタは、他の静的に定義されたmテーブルを指す。したがって、mテーブルは、オブジェクト・インスタンス化の際、初期化を必要としない。
【0035】
さらにもう1つの、mテーブルの利点は、mテーブルが、インターフェース上に継承のあるプログラムミング言語をサポートすることである。このようなプログラミング言語タイプの一例は、米国マサチューセッツ州フラミンガムのObject Management Group、Inc.製のインターフェース定義言語(IDL)である。IDLと他の言語の相違点は、たとえば、IDLがインターフェース継承だけを定義するということである。mテーブルを使用することにより、オブジェクト・リファレンス引数の変換の必要なく、実施言語間でIDL呼出しが可能になる。
【0036】
本発明の利点の1つは、mテーブルがインターフェース上での操作の代替実施をサポートすることである。インターフェースの代替mテーブルは、希望に応じて、オブジェクト・リファレンス内で使用できるように設けられる。たとえばクライアント側スタブ・メソッドを呼び出すmテーブル、またはローカル実施を指すmテーブルなど、別のmテーブルも設けられる。mテーブルは、インターフェース継承およびディスパッチを実施する。インターフェース上の操作は、mテーブルから呼び出された関数により実施される。表示は、必要な状態を保持するために使用される。メソッドの実施が、インターフェース継承をサポートするインターフェース定義言語を使用した、分散オブジェクト指向システムにおける遠隔プロシージャ呼び出しスタブのためのものである場合、すべてのmテーブルは共用される。
【0037】
以上、インターフェース継承を伴うオブジェクト上での呼び出しのための方法および機構について説明した。本発明のmテーブルを使用するオブジェクト・リファレンスは、オブジェクトのデータを指すポインタとオブジェクトのメソッドを指すポインタを提供する。オブジェクト上のメソッドは、mテーブルの集合体によって表される。オブジェクト・リファレンスのアパレント・インターフェース内で定義されたメソッドは、これらのメソッドの実施を指すポインタによって表され、オブジェクト・リファレンスのベース・インターフェース内で定義されたメソッドは、これらのメソッドの実施を指すポインタを含むベース・インターフェースのmテーブルを指すポインタによって表される。本発明によるmテーブルを使用するオブジェクト・リファレンスは、インターフェースの継承があるプログラミング言語をサポートする。さらに、mテーブルは、代替実施をサポートし、多重言語で使用することができる。その上、mテーブルは、C++のvテーブルなどのオブジェクト・リファレンスを実施するための、従来技術による方法および装置に比べて、小型で迅速である。
【0038】
いくつかの例示的実施の形態について詳細にわたって説明し、添付の図に示したが、このような実施の形態は例示的なものであって広義の発明を制限するものではなく、また本発明は、当業者なら様々な変更例を思いつくことができるので、特定の配置および構造に限定されるものではないことを理解されたい。
【図面の簡単な説明】
【図1】 例示的なvテーブル実施態様を示す図。
【図2】 本発明を示すシステム・ブロック図。
【図3】 本発明によるmテーブルの例示的実施態様を示す図。
【図4】 本発明によるmテーブルの実施態様のためのオブジェクト・タイプのセットの継承関係を示す図。
【図5】 図4に示した例示的インターフェース階層の、mテーブル用C++言語タイプの例示的宣言を示す図。
【図6】 図5に示したmテーブルの例示的コンストラクタを示す図。
【図7】 本発明によるmテーブルの例示的実施態様を示す図。
【図8】 図5の実施態様の拡大の影響を示す図。
【符号の説明】
10 オブジェクト・リファレンス、 11 表示を指すポインタ、
12 mテーブルを指すポインタ、 13 表示、 14 オブジェクトのデータ、 16 アパレント・インターフェースのmテーブル、
17 インターフェースの識別子、 18 関数を指すポインタ数、
19 mテーブルを指すポインタ数、 20 関数を指すポインタ、
21 mテーブルを指すポインタ、 22 操作のコード、 23 実施、
24 継承インターフェースのmテーブル、
25 インターフェースの識別子、 26 関数を指すポインタ数、
27 mテーブルを指すポインタ数、 28 関数を指すポインタ、
29 mテーブルを指すポインタ
Claims (14)
- 関係する操作に従って複数のオブジェクトがクラスに分類されており、メモリを含むデータ・プロセッサ上のオブジェクト指向プログラミング環境でインターフェース継承を伴うオブジェクト上の操作を呼出すために、コンピュータで実施される方法であって、
オブジェクト用のアパレント・インタフェースのmテーブルを作り出すステップであって、そのmテーブルは前記アパレント・インタフェースの関数を指す複数のポインタと付加的なmテーブルを指す複数のポインタとを含み、前記付加的なmテーブルは前記オブジェクトの複数の継承インタフェース用であって、前記アパレント・インタフェース用の前記mテーブルと同じテーブル構造を有する、ステップと、;
前記mテーブル内に収容された前記mテーブル用の識別子情報を含む識別子フィールドを与えるステップと、
前記mテーブル内に収容された関数を指す複数のポインタのカウント数を含む第1のカウント・フィールドを与えるステップと、
前記mテーブル内に収容された付加的なmテーブルを指す前記複数のポインタのカウント数を含む第2のカウント・フィールドを与えるステップと、
ポインタを使用して前記オブジェクト用のデータへポインティングするステップであって、そのポインタはオブジェクト・レファレンスの一部であり、前記オブジェクト用のデータは前記オブジェクト・レファレンスとは別のものである、ステップと、
ポインタを使用して前記アパレント・インタフェース用の前記mテーブルへポインティングするステップであって、そのポインタは前記オブジェクト・レファレンスの一部であり、データへの前記ポインティングと前記mテーブルへの前記ポインティングが別々のポインタを使用して前記オブジェクト・レファレンスによって容易になされる、ステップと、;そして
前記オブジェクト・レファレンスによってポイントされた前記データと前記mテーブル上の複数の操作とを呼び出すステップと、
を含むことを特徴とする前記方法。 - インターフェースごとに操作へのmテーブルを表示するステップであって、前記mテーブルは前記操作を指すポインタとベース・mテーブルを指すポインタとを有し、前記ポインタはインターフェース継承を表示する、ステップをさらに含むことを特徴とする請求項1に記載の方法。
- mテーブルの集合体によって前記オブジェクト上の前記操作を表示するステップをさらに含むことを特徴とする請求項1に記載の方法。
- 関数を指す前記複数のポインタが、前記インターフェースにおいて宣言された操作を実施する関数をポイントするステップとをさらに含むことを特徴とする請求項1に記載の方法。
- 異なる操作の実施のためにmテーブルの別々のグラフを表示するステップをさらに含むことを特徴とする請求項1に記載の方法。
- 共通の操作の実施のためにクラス間でmテーブルを共用するステップをさらに含むことを特徴とする請求項1に記載の方法。
- 操作の実施が、インターフェース継承をサポートするインターフェース定義言語を使用する分散オブジェクト指向システムにおける遠隔プロシージャ呼び出しスタブである場合に、すべてのmテーブルを共用するステップを、さらに含むことを特徴とする請求項1に記載の方法。
- 関係する操作に従って複数のオブジェクトがクラスに分類されており、メモリを含むデータ・プロセッサ上のオブジェクト指向プログラミング環境でインターフェース継承を伴うオブジェクト上の操作を呼出すための装置であって、
複数のmテーブルであって、その1つはオブジェクトのアパレント・インタフェース用であり、そのmテーブルは前記アパレント・インタフェースの関数を指す複数のポインタと付加的なmテーブルを指す複数のポインタとを含み、前記付加的なmテーブルは前記オブジェクトの複数の継承インタフェース用であって、前記アパレント・インタフェース用の前記mテーブルと同じテーブル構造を有し、前記別々のポインタと前記テーブル構造は前記複数のインタフェース継承を伴う前記オブジェクト上の操作の呼び出しのより効率的な取り扱いを可能にしている、前記複数のmテーブルと、
前記mテーブル内に収容された前記mテーブル用の識別子情報を含んでいる識別子フィールドと、
前記mテーブル内に収容された関数を指す複数のポインタのカウント数を含む第1のカウント・フィールドと、
前記mテーブル内に収容された付加的なmテーブルを指す前記複数のポインタのカウント数を含む第2のカウント・フィールドと、
前記オブジェクトのデータを指すポインタであって、そのポインタはオブジェクト・レファレンスの一部であり、前記オブジェクトのデータは前記オブジェクト・レファレンスとは別のものである、前記オブジェクトのデータを指すポインタと、
前記オブジェクト用の前記mテーブルを指すポインタであって、そのポインタは前記オブジェクト・レファレンスの一部であり、前記オブジェクトのデータへのポインティングと前記mテーブルへのポインティングは前記別々のポインタを使用して前記オブジェクト・レファレンスによって容易になされる、前記mテーブルを指すポインタと、そして
前記オブジェクト・レファレンスによってポイントされた前記データ上の複数の操作と前記複数のmテーブルとを呼び出す回路と、
を含むことを特徴とする装置 - 前記オブジェクト上の前記操作を呼び出すためのmテーブルの集合体の表示をさらに含むことを特徴とする請求項8に記載の装置。
- 前記関数は前記インターフェースにおいて宣言された操作を実施することを特徴とする請求項8に記載の装置。
- 複数のmテーブルの表示をさらに含み、オブジェクトのクラスごとに1つのmテーブルがあり、前記mテーブルは操作を指すポインタとmテーブルを指すポインタとを有し、前記別々のポインタはインターフェース継承を表示している、ことを特徴とする請求項8に記載の装置。
- 異なる操作の実施のためにmテーブルの別々のグラフの表示をさらに含む請求項11に記載の装置。
- 共通の操作の実施のためのクラス間で共用される共用mテーブルをさらに含む請求項11に記載の装置。
- 前記共用mテーブルは、前記実施がインターフェース継承をサポートしインターフェース定義言語を使用する分散オブジェクト指向システムにおける遠隔プロシージャ呼び出しスタブである場合に、共用されることを特徴とする請求項13に記載の装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US30792994A | 1994-09-19 | 1994-09-19 | |
US08/307929 | 1994-09-19 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08202551A JPH08202551A (ja) | 1996-08-09 |
JP3844801B2 true JP3844801B2 (ja) | 2006-11-15 |
Family
ID=23191784
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP26365695A Expired - Fee Related JP3844801B2 (ja) | 1994-09-19 | 1995-09-19 | インターフェース継承を伴うオブジェクト上での呼出しのための方法および機構 |
Country Status (4)
Country | Link |
---|---|
US (1) | US6412019B1 (ja) |
EP (1) | EP0702291B1 (ja) |
JP (1) | JP3844801B2 (ja) |
DE (1) | DE69526165T2 (ja) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6275870B1 (en) * | 1997-09-24 | 2001-08-14 | Sony Corporation | Network object request broker |
US5966702A (en) * | 1997-10-31 | 1999-10-12 | Sun Microsystems, Inc. | Method and apparatus for pre-processing and packaging class files |
DE29807670U1 (de) | 1998-04-28 | 1998-06-18 | Siemens AG, 80333 München | Programmiergerät |
US6988271B2 (en) | 1998-10-02 | 2006-01-17 | Microsoft Corporation | Heavyweight and lightweight instrumentation |
US7039919B1 (en) * | 1998-10-02 | 2006-05-02 | Microsoft Corporation | Tools and techniques for instrumenting interfaces of units of a software program |
US6983463B1 (en) | 1998-10-02 | 2006-01-03 | Microsoft Corporation | Network independent profiling of applications for automatic partitioning and distribution in a distributed computing environment |
US6381735B1 (en) * | 1998-10-02 | 2002-04-30 | Microsoft Corporation | Dynamic classification of sections of software |
US6668285B1 (en) * | 1999-05-12 | 2003-12-23 | Koninklijke Philips Electronics N.V. | Object oriented processing with dedicated pointer memories |
US7120899B1 (en) * | 1999-10-21 | 2006-10-10 | Unisys Corporation | Method for implementing component object model interfaces |
FR2825491B1 (fr) | 2001-05-30 | 2003-12-05 | Bull Sa | Procede d'implementation d'un pluralite d'interfaces d'objets |
US7010791B2 (en) * | 2001-09-20 | 2006-03-07 | Intel Corporation | Method for implementing multiple type hierarchies |
US9652358B1 (en) | 2016-04-14 | 2017-05-16 | Semmle Limited | Type widening for source code analysis |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05257664A (ja) * | 1991-12-12 | 1993-10-08 | Internatl Business Mach Corp <Ibm> | バージョン独立のオブジェクト指向アプリケーション・プログラムを生成するシステム及び方法 |
US5327562A (en) * | 1992-05-06 | 1994-07-05 | Microsoft Corporation | Method for implementing virtual function tables in a compiler for an object-oriented programming language |
US5404525A (en) * | 1992-09-30 | 1995-04-04 | International Business Machines Corporation | Efficient method router that supports multiple simultaneous object versions |
US5566302A (en) * | 1992-12-21 | 1996-10-15 | Sun Microsystems, Inc. | Method for executing operation call from client application using shared memory region and establishing shared memory region when the shared memory region does not exist |
US5442793A (en) * | 1993-02-26 | 1995-08-15 | Microsoft Corporation | Method and system for locating an inherited virtual function member of a derived class |
US5517645A (en) * | 1993-11-05 | 1996-05-14 | Microsoft Corporation | Method and system for interfacing components via aggregate components formed by aggregating the components each with an instance of a component manager |
US5600838A (en) * | 1994-01-18 | 1997-02-04 | Sybase, Inc. | Object oriented dispatch and supercall process and arrangement |
US5884316A (en) * | 1996-11-19 | 1999-03-16 | Microsoft Corporation | Implicit session context system with object state cache |
US5794041A (en) * | 1996-12-06 | 1998-08-11 | International Business Machines Corporation | C++ ojbect model alternatives |
US5907707A (en) * | 1997-01-14 | 1999-05-25 | International Business Machines Corporation | Object model for Java |
US6044380A (en) * | 1998-02-17 | 2000-03-28 | International Business Machines Corporation | Apparatus and method for morphing an object on first touch |
-
1995
- 1995-09-13 EP EP95306419A patent/EP0702291B1/en not_active Expired - Lifetime
- 1995-09-13 DE DE69526165T patent/DE69526165T2/de not_active Expired - Lifetime
- 1995-09-19 JP JP26365695A patent/JP3844801B2/ja not_active Expired - Fee Related
-
1997
- 1997-01-15 US US08/783,913 patent/US6412019B1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
DE69526165T2 (de) | 2002-10-31 |
EP0702291B1 (en) | 2002-04-03 |
US6412019B1 (en) | 2002-06-25 |
EP0702291A1 (en) | 1996-03-20 |
JPH08202551A (ja) | 1996-08-09 |
DE69526165D1 (de) | 2002-05-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR970008530B1 (ko) | 언어 특정의 인터페이스 정의 발생 시스템 및 언어 중립 객체 정의에 기초한 실행가능한 코드 발생 방법 | |
US6085035A (en) | Method and apparatus for efficient operations on primary type values without static overloading | |
JP4070248B2 (ja) | オブジェクト接続を動的に発生する方法及びシステム | |
US6944845B2 (en) | Implementation for an object oriented run-time extensible item | |
US6959307B2 (en) | Process and system for a client object to perform a remote method invocation of a method in a server object | |
US6167565A (en) | Method and system of custom marshaling of inter-language parameters | |
US6470494B1 (en) | Class loader | |
US7225438B2 (en) | Lazy compilation of template-generated classes in dynamic compilation execution environments | |
US6385722B1 (en) | Method, system, and article of manufacture for limiting access to program files in a shared library file | |
EP0690375A2 (en) | Persistent object-mapping in an object-oriented environment | |
JP3844801B2 (ja) | インターフェース継承を伴うオブジェクト上での呼出しのための方法および機構 | |
KR20010050408A (ko) | 프로그램 객체들의 버전-적응가능한 직렬화 및 탈직렬화 | |
US6085034A (en) | Constructor based object initialization with overrides | |
EP0784264B1 (en) | A computer-implemented process for determining a minimum code set for an executable application in a data processing system | |
JPH09231077A (ja) | コンピュータプログラムのサイズを縮小する方法 | |
JP3672334B2 (ja) | オブジェクト集合方法およびシステム | |
Hunt et al. | Intercepting and Instrumenting COM Applications. | |
US5970250A (en) | System, method, and computer program product for scoping operating system semanticis in a computing environment supporting multi-enclave processes | |
WO2001001256A1 (en) | Method and apparatus for static analysis of software code | |
Brown et al. | The Persistent Abstract Machine | |
Harrison et al. | Subdivided procedures: A language extension supporting extensible programming | |
US6769119B1 (en) | System, method, and computer program product for scoping operating system semantics in a computing environment supporting multi-enclave processes | |
US6202098B1 (en) | Method and system for object oriented notification | |
US7814073B2 (en) | Utility for identifying differences between two Java objects | |
Riehle | Method types in java |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050906 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20051206 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20051209 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060220 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060404 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060623 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060718 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060817 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |