JP2000347864A - ディスパッチテーブル構造のための方法と装置 - Google Patents

ディスパッチテーブル構造のための方法と装置

Info

Publication number
JP2000347864A
JP2000347864A JP2000126183A JP2000126183A JP2000347864A JP 2000347864 A JP2000347864 A JP 2000347864A JP 2000126183 A JP2000126183 A JP 2000126183A JP 2000126183 A JP2000126183 A JP 2000126183A JP 2000347864 A JP2000347864 A JP 2000347864A
Authority
JP
Japan
Prior art keywords
class
accessibility
superclass
entry
dispatch table
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.)
Pending
Application number
JP2000126183A
Other languages
English (en)
Other versions
JP2000347864A5 (ja
Inventor
Gilad Bracha
ブラカ ギラド
Deepa Viswanathan
ヴィスワナサン ディーパ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2000347864A publication Critical patent/JP2000347864A/ja
Publication of JP2000347864A5 publication Critical patent/JP2000347864A5/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution

Abstract

(57)【要約】 【課題】 ディスパッチテーブルを構造化するための装
置及びコンピュータプログラムプロダクト。 【解決手段】 本発明の一実施の形態では、新規ディス
パッチテーブルを割り当てるための判断は、クラスのア
クセス可能性に感応し易い。ディスパッチテーブル及び
ディスパッチテーブル構造プロセスは、Vtableのための
エントリが、アクセス可能性とクラス階層との間の競合
を回避するように判定される、と説明されている。特
に、ディスパッチテーブル及びディスパッチテーブル構
造プロセスは、メソッドのアクセス可能性とパッケージ
状態を、適切にオーバーライドしている意味規定とテー
ブル構築技術の判定において考慮する、と説明されてい
る。ディスパッチテーブルは、メソッドのための複数の
明確なエントリを有していてもよい。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】
【発明の分野】本発明は一般に、コンピュータソフトウ
ェア及びソフトウェア移植性の分野に関する。特に、構
造ディスパッチテーブルに関する。
【0002】
【発明の背景】以下の説明を容易にするため、従来のオ
ブジェクト指向のコンピューティング環境の簡単な概略
を述べる。オブジェクト指向のコンピューティング環境
では、オブジェクトは変数及び関連メソッドのソフトウ
ェアバンドルを参照する。オブジェクトは、その状態
(即ちオブジェクトが知っているもの)を変数内に維持
しており、その振るまい(即ちオブジェクトが行うこと
ができるもの)をメソッド内に実装している。メッセー
ジは、ソフトウェアオブジェクトが互いに影響し合い、
交信する手段である。集合的に、変数とメソッドは、メ
ンバと称してもよい。また、オブジェクト用の変数とメ
ソッドは、インスタンス変数とインスタンスメソッドと
称する。
【0003】普通、クラス変数とクラスメソッドは、ク
ラスに属するものとして定義されるそれらの変数とメソ
ッドである。クラスは、特定種類のすべてのオブジェク
トに共通な変数とメソッドを定義する再使用可能な青写
真と説明することもできる。インスタンスは、クラスに
属するオブジェクトであって、メモリがクラス内のイン
スタンス変数に割り当てられるオブジェクトである。
【0004】クラスは、クラス階層内、又は継承ツリー
内に編成されてもよく、より下の階層にクラスが現れる
のであれば、それはより一層特化されたものである。図
1は、特定のクラス階層100を表すブロック図であ
る。クラス階層100は、変数104とメソッド106
を含むクラスA102を含む。図示実施例では、クラス
Aは、メソッドMを含む複数の関連メソッドを有してい
る。クラス階層は更に、クラスAからの継承であるクラ
スB110と、全てクラスB110からの継承であるク
ラスC、D及びE(それぞれ112、114及び11
6)を含む。各サブクラスも、変数104とメソッド1
06を含む。
【0005】スーパークラスは、クラスの直系の祖先と
同様にその先祖のクラスのすべてを参照する。「直系
の」スーパークラスは、直属の親スーパークラスとクラ
ス階層内の代替先祖スーパークラスを区別する。サブク
ラスは、スーパークラスによって提供された共有エレメ
ントの基盤から離れて、特化された振るまいを提供す
る。これを行うために、各サブクラスは、スーパークラ
スから変数とメソッドを継承する。加えて、サブクラス
は、それらがスーパークラスから継承するものに変数と
メソッドを加えることができる。例えば、クラスB11
0は、メソッドM108を含むそのスーパークラス(ク
ラスA102)内で定義されるアクセス可能なメソッド
を継承する。クラスBはまた、図示実施の形態において
109の、メソッドNを含むそれ自身の新規メソッドを
定義してもよい。サブクラスはまた、その継承されたメ
ソッドの一つ以上をオーバーライドし、それらメソッド
のために特化した実装を備えることができる点に注意す
ることが重要である。
【0006】言語が、クラスに単一のスーパークラスか
らの継承を許容する場合、それは、単一継承を有すると
言われている。それに対し、言語が、クラスに複数のス
ーパークラスからの継承を許容する場合、それは、多重
継承を有すると言われている。図1に示すクラス階層で
は、各サブクラスがただ一つの直系スーパークラスから
継承するので、単一継承がある。
【0007】幾つかの言語では、スーパークラスは、継
承の実施を介して繰り返し用いられてもよい。一般に、
サブクラスは、サブクラスが明示的にメソッドをオーバ
ーライドしない限り、サブクラスにアクセス可能なスー
パークラスからのメソッドのすべてをそのまま継承す
る。アクセス可能性は、スーパークラスメンバのアクセ
ス可能性宣言とサブクラスメンバのアクセス可能性宣言
の組み合わせによって判定される。
【0008】アクセス可能性は、ソースコードの無制限
の共有から機密の特定形式まで変動範囲を促進するよう
区別される。2つの従来のタイプのアクセス可能性レベ
ルは、パブリックとプライベートである。パブリックメ
ンバは、他の何れのクラスによっても見られるか、又は
アクセスされ得る。プライベートメンバは、それ自身の
クラスによってのみアクセスされ得る。特定の言語は、
追加のアクセス可能性の型を用いるであろう。例えば、
C++は、プロテクテッドメンバが一般にそのサブクラ
スによってのみアクセスされ得るプロテクテッドアクセ
ス可能性を用いる。加えて、Javaは、パッケージプ
ライベートメンバが特定パッケージ内のクラスによって
のみアクセスされ得るパッケージプライベートアクセス
可能性を用いる。パッケージは、パッケージのすべての
エレメントに対するアクセス保護及びネームスペース管
理を提供する関連クラスのコレクション及びインターフ
ェースである。クラスは、パッケージへとグループ化さ
れて、クラスの検索と使用を容易にし、名前の競合を回
避し、アクセスを制御するようにしてもよい。
【0009】一般に、メッセージのアクセス可能性は、
メンバ宣言によって特定される。何のアクセス可能性も
最初に提供されない場合、デフォルトのアクセス可能性
が用いられるであろう。例えば、Javaパッケージの
内部では、アクセス可能性が初期に特定されていないメ
ンバのためのデフォルトのアクセス可能性は、プライベ
ートのパッケージになる。
【0010】図2は、クラス階層を説明するブロック図
であり、ここで、階層内の各クラスは、ローカル的にメ
ソッド「foo」を定義している。特に、クラスA202
は、パッケージP1に属し、未特定のアクセス可能性を
有するメソッド「A.foo」204を含んでいる。こ
の場合、メソッドA.foo204は、パッケージP1
に関してパッケージプライベートアクセス可能性にデフ
ォルト設定される。同様に、クラスB206は、パッケ
ージP2に属し、パブリックなアクセス可能性を有する
メソッド「B.foo」208を含む。クラスC210
は、パッケージP1に属し、パブリックアクセス可能性
を有するメソッド「C.foo」212を含んでいる。
メソッド204、208及び212全ては、メソッド
「foo」を実装するが、3つの間で異なるのは、それ
らそれぞれのクラス、パッケージ、ソースコード及びア
クセス可能性である。この差はメソッドの振るまいに悪
影響を及ぼすかもしれず、例えば、メソッドが、print
ステートメントのためのソースコードを呼び出して、メ
ソッドのクラスを公表する場合、3つのメソッドは、図
示の通り異なった出力を有する。
【0011】従来は、すべてのクラス及びインターフェ
ースは、それがローカルに定義するすべてのメソッドを
含むメソッドテーブルを有している。加えて、すべての
クラスは、継承メソッドを含むクラスによって呼び出さ
れ得るすべての外部アクセス可能なメソッドのためのエ
ントリを有するディスパッチテーブル、即ちVtableを有
する。普通プライベートメソッドは、Vtable内に含まれ
る注記である。従来のVtable構造では、すべての外部ア
クセス可能なメソッドは、メソッドに対応するコードの
1セクションを指す単一のVtableエントリと関連する。
従って、すべてのVtableエントリは、それが対応するメ
ソッドにおいて、ローカルであるのか、継承されるのか
を、指し返す。
【0012】図3は、図2のクラスB206に対応する
Vtable 300の従来のフォーマットを示すブロック図
である。Vtable300は、直系のスーパークラス(クラ
スA202)から継承されるメソッドに対応するすべて
のエントリを含むスーパークラス部302と、クラスB
206においてローカルに定義されるメソッドに対応す
るエントリを含むクラス部304とを含む。クラス部3
04内で見出されるローカル定義のメソッドは、クラス
B206にとって新規なものである。例えば、クラスA
202からのメソッドに対応するエントリを上書きしな
かった新規エントリ306は、クラス部304内に加え
られ、従って、Vtable300のサイズを増加させる。代
替として、対応するスーパークラスのメソッドをオーバ
ーライドするローカル定義のメソッドは、スーパークラ
ス部302内の既存のVtableエントリを上書きする。例
えば、B.fooのためのコードを指すVtable300の
エントリ308は、Vtable300のスーパークラス部内
の対応するエントリを上書きして、ローカル定義メソッ
ドC.fooのためのコードを指す。
【0013】Javaプログラミング言語は、単一継承
の使用を考慮している。Javaでは、サブクラスは、
そのスーパークラスと祖先のアクセス可能なメンバのす
べてを継承するよう定義されており、これらメンバのそ
のまま使用、それらの隠蔽、又はそれらのオーバーライ
ド可能である。サブクラスは、パブリック又はプロテク
テッドとして宣言されるそれらのスーパークラスメンバ
を継承する。加えて、サブクラスは、サブクラスがスー
パークラスと同じパッケージ内にある(即ち、それらの
両方とも、プライベートのパッケージにデフォルト設定
されている)限り、アクセス指定されないで宣言されて
いるスーパークラスのメンバを継承する。従って、Ja
vaは、無制限のソースコードの共有から制御可能なレ
ベルの機密まで、アクセス可能性の変動範囲を柔軟に提
供する。継承に対する正反対の体系に基づく従来のVtab
le構造は、このアクセス可能性の変動範囲を許可しな
い。
【0014】上記を鑑みて、改良されたディスパッチテ
ーブル構造技法が望ましいということは明白となろう。
【0015】
【発明の概要】本発明によれば、方法、装置及びコンピ
ュータプログラムプロダクトが、ディスパッチテーブル
を構成するために開示される。本発明の実施の形態で
は、新規ディスパッチテーブルエントリを割り当てる判
定は、アクセス可能性に感応しやすい。別の実施の形態
では、Vtableは、Vtable内のメソッドが複数のエントリ
を持って提供される。
【0016】本発明は、一実施の形態に従って、単一の
スーパークラスから継承するクラス内のメソッドのため
のディスパッチテーブルの構築プロセスに関する。プロ
セスは、スーパークラス用のディスパッチテーブルのコ
ピーを含む。プロセスはまた、クラスにおいて選択され
るメソッドが、クラスの先祖スーパークラス内にも存在
するかどうかの判定を含む。更に、プロセスは、選択さ
れるメソッドの選択されるスーパークラスバージョン
が、アクセス可能であるかどうかを、第1のクラスが継
承する先祖スーパークラスにおいても、選択メソッドが
存在するのかが判定される時に判定することを含む。プ
ロセスは加えて、選択メソッドの選択スーパークラスバ
ージョンが、アクセス可能でないことが判定される時、
新規エントリを第1のクラスにおける選択メソッドのた
めのディスパッチテーブル内に作成することを含む。プ
ロセスはまた、第1のクラスにおける選択メソッドが、
アクセス可能であることが判定される時、エントリを上
書きすることを含む。メソッドのスーパークラスバージ
ョンが何れも存在しない時、メソッドのための新規エン
トリが作成される。
【0017】別の実施の形態では、本発明は、先祖階層
内の直系スーパークラスから継承するクラス内のメソッ
ドのためのディスパッチテーブルを構築するプロセスに
関する。プロセスは、ディスパッチテーブルをスーパー
クラスからコピーすることを含む。プロセスはまた、ク
ラスにおける選択メソッド及びアクセス可能性が、先祖
階層のスーパークラス内に存在するかどうかを判定する
ことを含む。プロセスは更に、インデックスをディスパ
ッチテーブルのエントリに割り当てることを含む。
【0018】更に別の実施の形態では、本発明は、少な
くとも一つのスーパークラスから継承するクラス用のデ
ィスパッチテーブルに関し、ディスパッチテーブルが、
特定メソッドのための複数のエントリを含む。
【0019】
【詳細な説明】参照をここで、本発明の特定実施の形態
に対して詳細に行う。本実施の形態の実施例を、添付図
面に図示する。本発明を特定実施の形態に関連して説明
する一方で、それが本発明を一実施の形態に制限するこ
とを目的としないことは理解されたい。逆に、それは、
添付請求項に記載の本発明の精神及び適用範囲に含まれ
るであろうような、代替、変更及び同等物をカバーする
ことを目的とする。
【0020】ディスパッチテーブル及びディスパッチテ
ーブル構造プロセスは、Vtable用のエントリが、アクセ
ス可能性とクラス階層との間の競合が回避されるように
判定される、と説明される。特に、ディスパッチテーブ
ル及びディスパッチテーブル構造プロセスは、メソッド
のアクセス可能性を、適切にオーバーライドしている意
味規定とテーブル構造とを判定することにおいて考慮す
る、と説明される。ディスパッチテーブルは、メソッド
のための複数の明確なエントリを有していてもよい。メ
ソッドの不適当な処理を回避するために、オーバーライ
ドするエントリを、判定しなければならない。場合によ
っては、たとえメソッドが、スーパークラスメソッドに
オーバーライドするとしても、新規のVtableエントリ
は、その後も生成されなければならない。
【0021】記載のJava実施の形態では、4つの明
確なアクセス可能性指定が、提供されている。対応し
て、スーパークラス階層の少なくとも一部への多重検索
は、各指定に対して実行されてもよい。先祖階層への検
索は、すべてのアクセス可能性がスーパークラス内に見
出された時、中止する。また、クラスがスーパーインタ
ーフェースから継承するであろう際に、クラス階層とア
クセス可能性との間で直面する意味的インタラクション
は、インターフェース階層内で生じる。
【0022】加えて、Vtable内の特定メソッドのための
各多重エントリは、クラス内の特定メソッドのための優
先度を割り当てられてもよい。普通、メソッドのアクセ
ス可能性と同じアクセス可能性指定を含むエントリは、
一次エントリとして割り当てられる。一次エントリは普
通、特定メソッドが宣言される時、呼び出される。加え
て、二次及び三次エントリもまた、異なるアクセス可能
性指定に対応する特定メソッドのためのVtable内に存在
していてもよい。
【0023】一般に、新規Vtableエントリを割り当てる
判定はここで、メソッドのアクセス可能性に感応しやす
い。それは、また、オーバーライドされるメソッドのア
クセス可能性に依存してもよい。例えば、パブリック又
はプロテクテッドメソッドは、何れのパブリックかプロ
テクテッドメソッドがオーバーライドされない場合にの
み、新規Vtableエントリを必要とする。そうでなけれ
ば、オーバーライドされるパブリック/プロテクテッド
メソッドのVtableインデックスが用いられる。同様に、
同じパッケージからのパッケージプライベートメソッド
が何れもオーバーライドされない場合にのみ、パッケー
ジプライベートメソッドは、新規Vtableエントリを必要
とする。プライベートエントリは、常に新規Vtableエン
トリを必要とする。従って、新規及びオーバーライドさ
れたメソッドのためのVtableエントリの更新プロセス
は、メソッドが、全て適切に設定されなければならない
3つのVtableエントリと同じだけを用いてもよいという
点で、ケース依存性である。
【0024】本発明の一実施の形態に従うVtable構造の
ための規則は、それぞれ図2のクラスA202、クラス
B206及びクラスC210のための簡略化されたVtab
le402、404及び406を図示する図4を参照し
て、説明される。普通、各Vtableは、各Vtable内の部分
408、410及び412のそれぞれによって表される
多くの継承エントリを含む。図2に示すように、この図
の目的上、クラスA、B及びCがそれぞれローカルにメ
ソッド「foo」を定義すると仮定する。クラスAはパ
ッケージP1に属し、メソッドA.fooは、プライベ
ートのパッケージとして定義される。クラスBはパッケ
ージP2に属し、メソッドB.fooは、パブリックで
ある。クラスCは(クラスAと同様に)パッケージP1
に属し、メソッドC.fooは、パブリックである。
【0025】クラスA、B及びCに対応するVtableの構
造では、ローカルに定義された「foo」メソッドが、
新規Vtableエントリを必要とするかどうか、又は、それ
が、Vtableのスーパークラス部において一つ以上の対応
エントリを上書きすることを必要とするかどうかを、判
定しなければならない。この判定は、メソッド「fo
o」のスーパークラスバージョンが、クラスに対してア
クセス可能かどうかに基づいて、簡単に行われる。アク
セス可能であるメソッドのバージョンに対応する何れの
Vtableエントリも、上書きされる。メソッド「foo」
に対応するスーパークラスエントリの何れもクラスに対
してアクセス可能であるメソッドに対応しない場合、新
規Vtableエントリが作成される。
【0026】実施例として、クラスBのためのVtableの
構造を熟考する。第1に、そのスーパークラス(この場
合では、クラスA)のVtableが、コピーされる。クラス
Bは、ローカルにメソッドB.fooを定義しているの
で、判定はA.foo用のVtableエントリに上書きする
べきであるか又はVtableに新規エントリを行うべきかど
うかに関しては行われなければならない。上で指摘した
ように、クラスA202のメソッド204は、パッケー
ジP1に関してプライベートのパッケージであり、従っ
て、クラスB206のメソッド208はアクセスでき
ず、何故なら、クラスBは、(パッケージP1とは対照
的に)パッケージP2内にあるためである。従って、ク
ラスB206のメソッド208に対応する新規エントリ
414は、クラスB404のためのVtable内に備えられ
る。従って、クラスBのためのVtableは、ここで、「f
oo」メソッドに対応する2つのエントリを有する。第
1のエントリは、メソッドA.fooに対応するオリジ
ナルエントリ416である。第2のエントリは、B.f
ooに対応する新規エントリ414である。即ち、B.
fooに対応する新規エントリ414は、Vtable404
に加えられる。この編成を用いて、メソッド「foo」
がクラスBのインスタンスに呼び出される時、クラスB
404のインスタンスのためのVtableは、クラスB20
6のための適切なメソッド208に対応するB.foo
エントリ414を返す。
【0027】次に、クラスCのためのVtableの構造を熟
考する。前記のように、クラスC210は、その直系の
スーパークラス、即ちクラスB206のすべてのメソッ
ドを継承する。従って、クラスCのためのVtableは、前
もって判定されたエントリ414及び416を含むその
直系のスーパークラス(この場合では、クラスB40
4)のVtableからのすべてのエントリを含む。図示のサ
ンプルでは、クラスCは、パッケージP1の一部であり
(クラスAと同様ではあるが、クラスBと同様ではな
い)、また、ローカルに「foo」メソッド(本明細書
中では、C.fooと称する)を定義する。先に言及し
たように、クラスCがアクセス可能なメソッド「fo
o」のいかなる既存のバージョンも、オーバーライドさ
れ、アクセスできないメソッド「foo」のいかなる既
存のバージョンも、オーバーライドされ得ない。この場
合では、クラスB206のメソッド208は、パブリッ
クであり、クラスC210のメソッド212が、アクセ
スできる。従って、クラスCのためのVtable406で
は、クラスB206のメソッド208に対応するエント
リ420は、C.fooを参照するよう上書きされる。
加えて、クラスA202のメソッド204は、パッケー
ジP1に関してプライベートのパッケージであり、ま
た、両クラスA及びCが、同じパッケージ(パッケージ
P1)内部にあるので、クラスC210がアクセス可能
である。従って、クラスCのためのVtable406では、
クラスA202のメソッド204に対応するエントリ4
18は、C.fooを参照するよう上書きされる。従っ
て、C.fooは、同じVtableにおいて二度参照され
る。この編成を用いて、メソッド「foo」がクラスC
のインスタンスに呼び出される時、インスタンスのため
のVtableは、C.fooエントリを返す。
【0028】次いで図5を参照して、第2の実施例を説
明する。この実施例では、図2のクラス階層及びメソッ
ドアクセス可能性は、クラスCが、(図4の実施例にお
けるようなパッケージP1よりはむしろ)第3のパッケ
ージ、パッケージP3の一部として定義される一つの例
外を有して保持される。このクラスCに対応するVtable
の構造では、クラスB210のメソッド208は、クラ
スCがアクセス可能なまま保たれる。従って、メソッド
B.fooに対応するVtableエントリは、(前の場合と
同様に)C.fooに対応するエントリ504によって
上書きされる。しかし、メソッドA.fooは、パッケ
ージP1に関してプライベートのパッケージであり、パ
ッケージP3の一部であるクラスCはアクセスできな
い。従って、エントリ502は、クラスCのためのVtab
le500において上書きされない。
【0029】オブジェクト指向型言語内で共通に見出さ
れる注目すべき別の規則は、公開度を設定した後で、メ
ソッドの公開度を下げることができないということにあ
り、即ち、アクセス可能性を下げることができない。こ
のように、サブクラスは、そのスーパークラスが期待さ
れる箇所で、常に用いることができ、即ち、継承された
パブリックのメソッドは、プライベートメソッドに変換
することができない。
【0030】図6は、プライベートであって、パッケー
ジP1に属するクラスC210のサブクラス、D、のた
めのVtable 600の構築の実施例を図示する。クラス
DのためのVtable600は、その直系のスーパークラ
ス、即ち図2のクラスC210、のすべてのメソッドを
継承する。従って、それは、その直系のスーパークラス
のすべてのエントリを含み、この場合では、図4のクラ
スC210のためのVtable406である。クラスDのた
めのVtable600の構造は、前述したVtableの構造と、
同様に行われる。クラスCのメソッド212は、パブリ
ックであり、クラスDはアクセス可能である。従って、
エントリ606は、それがメソッドD.fooを参照す
るように上書きされる。更に、クラスA202のメソッ
ド204は、パッケージP1に関してプライベートのパ
ッケージであり、パッケージP1に属するクラスDのメ
ソッドはアクセス可能である。このメソッドは、エント
リ604内に存在して、同様にオーバーライドされる。
最終的に、インスタンスD内でローカルに定義されるメ
ソッド「foo」(即ちD.foo)は、プライベート
であり、新規エントリ608は、そのエントリを反映す
るよう作成される。従って、3つエントリはここで、同
一メソッド「foo」のためのVtable600内に存在す
る。改良されたVtable600を作成するためのプロセス
は、図8から図13に関して以下に幾つか詳細に説明す
る。
【0031】クラス及びスーパークラス階層と同様に、
独立インターフェース階層もまた、存在する。一般に、
インターフェースは、おそらく無関係なオブジェクトが
互いに相互作用するために用いるメカニズムである。オ
ブジェクト指向型言語においてこれを行うために、イン
ターフェースは、1セットのメソッドシグニチャを含ん
でいる。普通、メソッドシグニチャと関連するコードは
存在しない。インターフェースを実装するクラスは、イ
ンターフェースにおいて定義されるメソッドのすべてを
実装することを承認し、これにより特定の振るまいを承
認する。
【0032】抽象クラスは、一般的な振るまいを定義
し、部分的にこれらのメソッドを実装できるが、そのク
ラスの多くは、定義及び実装されない。この不満足の指
定によって、単独実装は、特化サブクラスのための詳細
(即ち、コード)を完全にすることができる。抽象クラ
スは、コンパイラが認識するその状態を特定する宣言を
含んでいてもよい。インターフェースが実装され、クラ
スが抽象である場合、コンパイラは、インターフェース
からの未特定メソッドの継承を許容する。しかし、クラ
スが抽象クラスでない場合、コンパイラは未特定メソッ
ドが満たされていると主張する。クラス又はそのスーパ
ークラスの何れかにおけるそれらの定義において完全で
はないスーパーインターフェースから継承されるこれら
のメソッドは、「ミランダメソッド」と称される。
【0033】これらのミランダメソッドもまた、まるで
それらがクラス内で宣言されたかのように、エントリを
必要とする。クラスが、スーパーインターフェースから
幾分同様に継承できるように、クラス階層とアクセス可
能性との間に直面する意味的インタラクションもまた、
インターフェース階層内部に生じるであろう。インター
フェース階層の場合に注目すべき差は、インターフェー
スメソッドが、一般に常にパブリックであるという点で
ある。しかし、クラスが、単一継承階層内の一つのスー
パークラスだけを有する一方で、それは、相当システム
の複雑さを増す多重スーパーインターフェースを有する
であろう。
【0034】呼び出された場合、対応コードを持たない
メソッドを呼び出すためのエラーメッセージを発行しな
ければならない抽象メソッドを処理するために、スタブ
ポインタは、メソッドコードに対するポインタの代わり
に用いられる。このスタブは、例外を引き起こすコード
を指す。スタブポインタは、抽象メソッドが共通である
ため適所になければならず、独立したデザイナが抽象ク
ラスに関してコード設計できるようにし、従って、対応
サブクラスの間の共通の振るまいを管理する。
【0035】特定の実施の形態では、ミランダメソッド
は、クラスのVtableにおいて定義されるが、いかなるク
ラスのメソッドテーブルにおいても出現しない。Vtable
の構築のために、ミランダメソッドは、クラスによって
宣言されないので、それらは、別々に処理されなければ
ならない。本発明の実施の形態では、別々のVtableエン
トリは、ミランダメソッドを備える。
【0036】アクセス可能性構造及びソースコードの継
承を用いるいかなるソフトウェア言語も、本発明を実装
することができる。本発明の特定の実施の形態では、デ
ィスパッチテーブル構造におけるJAVAの意味規定
が、本発明を実装する。
【0037】図7(a)は、本発明の一実施の形態に従
う、Javaソースコードからネイティブ命令を作成す
ることに関わる入力/出力及び実行ソフトウェア/シス
テムを示すブロック図である。他の実施の形態では、本
発明は、他言語用の仮想マシンを用いて、又はJava
クラスファイル以外のクラスファイルを用いて実装でき
る。線図の左側から開始すると、第1の入力は、カリフ
ォルニア州マウンテンビューのサンマイクロシステムズ
によって開発されたJava(商標)プログラミング言
語で書かれたJavaソースコード701である。Ja
vaソースコード701は、バイトコードコンパイラ7
03に対する入力である。バイトコードコンパイラ70
3は本質的に、ソースコード701をバイトコードにコ
ンパイルするプログラムである。バイトコードは、一つ
以上のJavaクラスファイル705に含まれている。
Javaクラスファイル705は、Java仮想マシン
(JVM)を有するいかなるコンピュータ上でも実行可
能という点で、ポータブルである。仮想マシンの構成要
素は、図7(b)で更に詳細に示す。Javaクラスフ
ァイル705は、JVM707に対する入力である。J
VM707は、いかなるコンピュータ上にもあることが
でき、従って、バイトコードコンパイラ703を有する
同一のコンピュータ上にある必要はない。JVM707
は、インタプリタ又はコンパイラ等、幾つかの役割のう
ちの一つで動作できる。それがコンパイラとして動作す
る場合、それは更に、"just in time"(JIT)コンパ
イラとして、即ち適応コンパイラとして動作できる。イ
ンタプリタの働きをする時、JVM707は、Java
クラスファイル705に含まれる各バイトコード命令を
解釈する。
【0038】図7(b)は、下で説明する図18のコン
ピュータシステム1800によってサポートされ得るJ
VM707等の仮想マシン711の線図である。前記の
ように、コンピュータプログラム、例えばJava(商
標)プログラミング言語で書かれたプログラムが、ソー
スからバイトコードへ変換される場合、ソースコード7
01は、コンパイル時環境709内部でバイトコードコ
ンパイラ703に提供される。バイトコードコンパイラ
703は、ソースコード701をバイトコード705に
変換する。一般に、ソースコード701は、ソースコー
ド701がソフトウェア開発者によって作成された後
で、バイトコード705に変換される。
【0039】バイトコード705は一般に、再現、ダウ
ンロードされるか、そうでなければ、ネットワークを介
して、例えば、図18のネットワークインターフェース
1824を介して配布するか、又は図18の一次記憶装
置1804等の記憶装置に格納することができる。記載
の実施の形態では、バイトコード703は、プラットホ
ームに依存しない。即ち、バイトコード703は、適切
な仮想マシン711を実行している実質的にいかなるコ
ンピュータシステム上でも実行されるであろう。バイト
コードのコンパイルによって形成されるネイティブ命令
は、JVMによるその後の使用のために保持されてもよ
い。このような方法で、変換コストは、多重実行上で清
算されて、解釈されたコード上のネイティブコードに対
し有利な速度を提供する。実施例として、Java(商
標)環境では、バイトコード705は、JVMを実行し
ているコンピュータシステム上で実行され得る。
【0040】バイトコード705は、仮想マシン711
を含む実行時環境713に提供される。実行時環境71
3は一般に、図18のCPU1002等のプロセッサを
用いて実行され得る。仮想マシン711は、コンパイラ
715、インタプリタ717、及び実行時システム71
9を含む。バイトコード705は一般に、コンパイラ7
15又はインタプリタ717の何れかに対して提供され
得る。
【0041】バイトコード705が、コンパイラ715
に提供される時、バイトコード705に含まれているメ
ソッドは、ネイティブ機械命令(図示せず)にコンパイ
ルされる。一方で、バイトコード705が、インタプリ
タ717に提供される時、バイトコード705は、一度
に一つのバイトコードずつインタプリタ717に読み込
まれる。次いで、インタプリタ717は、各バイトコー
ドがインタプリタ717に読み込まれる際に、各バイト
コードによって定義される操作を実行する。一般に、イ
ンタプリタ717は、バイトコード705を処理し、実
質的に連続してバイトコード705と関連する操作を実
行する。
【0042】メソッドが、オペレーティングシステム7
21から呼び出される時、そのメソッドが、解釈された
メソッドとして呼び出されるものであると判定される
と、実行時システム719は、インタプリタ717から
メソッドを得ることができる。一方で、メソッドが、コ
ンパイルされたメソッドとして呼び出されるものである
と判定されると、実行時システム719は、コンパイラ
715を起動させる。次いで、コンパイラ715は、バ
イトコード705からのネイティブ機械命令を生成し、
機械語命令を実行する。一般に、機械語命令は、仮想マ
シン711が終了する時、破棄される。仮想マシンの操
作、即ち、より詳しくは、Java(商標)仮想マシン
の操作は、Tim Lindholm及びFrank Yellin著のThe Java
TM VirtualMachine Specification、第2版(ISBN 0-201
-43294-3)に、より詳細に記載されており、本明細書に
そのすべてを引用して組み込む。
【0043】図8から図13は、本発明の一実施の形態
に従うディスパッチテーブル構造プロセス800を示
す。ディスパッチテーブルは、直系のスーパークラスS
を有するパッケージP内のクラスCのために構築され
る。ディスパッチテーブル構造プロセス800はまた、
Vtableのサイズを計算し、Vtableを割り当て、それを不
揮発性メモリの最適サイズに設定した部分に満たす。
【0044】ディスパッチテーブル構造プロセス800
は、クラスC(図8)内のローカル定義のメソッドのす
べてを通して繰り返すことから始める。対応して、現行
の反復のメソッドは、メソッドMと呼ばれる。ディスパ
ッチテーブルを構築するためのアクセス可能性を区別す
るために、判定されるアクセス可能性の3つのグループ
は、パブリック/プロテクテッド、プライベート、及び
プライベートパッケージである。パブリック及びプロテ
クテッドは、ディスパッチテーブルの構築におけるそれ
らの振るまいが、実質的に類似しているため、図8の場
合では共にグループ化される。
【0045】ディスパッチテーブル構造プロセス800
は、メソッドMが、パブリックかプロテクテッドかの判
定(802)から始める。それが、パブリックかプロテ
クテッドであれば、プロセスは、パブリック/プロテク
テッドプロトコルに従うメソッドMを編成する手続きを
行い(804)、これを図9に関して以下に詳細に記載
する。そうでなければ、プロセスは、メソッドMが、プ
ライベートパッケージであるかどうかを判定する(80
6)。それが、プライベートパッケージであれば、プロ
セスは、パッケージプライベートプロトコルに従うメソ
ッドMを編成する手続きを行い(808)、これを図1
1に関して以下に詳細に記載する。そうでなければ、メ
ソッドMは、プライベートのアクセス可能性にデフォル
ト設定され、プライベートプロトコルに従って編成され
(810)、これを図12に関して以下に詳細に記載す
る。上記の場合の何れでも、メソッドMが、適切な方法
に従って編成される時、プロセスは次いで、何れか未処
理のメソッドが存在するのかを判定し(812)、次の
メソッドのために開始まで戻る。すべてのメソッドが処
理された後で、追加ステップは、何れかのミランダメソ
ッドの処理が必要であれば取られ(814)、これを図
13に関して以下に詳細に記載する。
【0046】図9は、パブリック/プロテクテッドプロ
トコル(804)に従うディスパッチテーブルにおいて
メソッドMを編成するためのプロセスを示す。それは、
直系のスーパークラスS、又は、スーパークラスSのス
ーパークラス又はスーパーインターフェースの何れかに
おいて宣言されたメソッドMのパブリック又はプロテク
テッドバージョンが、存在するかどうかを判定すること
から開始する(902)。言い換えると、プロセスは、
メソッドMのバージョンが、先祖階層内のどこかに存在
するかどうかを判定する。メソッドMのパブリック又は
プロテクテッドバージョンが、先祖階層内に存在しなけ
れば、新規エントリは、ディスパッチテーブルに追加さ
れる(904)。対応して、プロセスは、メソッドMに
対する適切なポインタ(1000)を新規に形成される
エントリに挿入し(906)、これを図10に関して以
下に詳細に記載する。メソッドMのパブリック又はプロ
テクテッドバージョンが、スーパークラス内に存在すれ
ば、識別されたスーパークラスエントリは、クラスCの
ディスパッチテーブルのための識別されたスーパークラ
スエントリに、適切なポインタ(1000)を挿入する
ことによってオーバーライドされる(908)。
【0047】プロセス804はまた、先祖階層内にメソ
ッドMの(メソッドMが対応するパッケージPに対し
て)プライベートなアクセス可能なパッケージのバージ
ョンがあるかどうかを判定する(910)。もし存在す
るならば、識別されたスーパークラスエントリは、アク
セス可能なパッケージプライベートメソッドに対する適
切なポインタ(1000)を識別されたスーパークラス
エントリに挿入することによってオーバーライドされる
(912)。
【0048】図10は、エントリ内のメソッドのための
ソースコードへ適切なポインタを挿入するためのプロセ
スを説明するブロック図を示す(1000)。メソッド
Mが、抽象メソッドであるかどうかを判定することから
開始する(1002)。メソッドが、抽象メソッドでな
ければ、メソッドコードへのポインタは、ディスパッチ
テーブルの適切なエントリに挿入される(1006)。
代替として、メソッドが、抽象メソッドであれば、スタ
ブポインタが、ディスパッチテーブルの適切なエントリ
に挿入される(1006)。この時点での、標準又はス
タブの、ポインタの挿入は、既存のエントリポインタか
ら独立している、即ち、スタブポインタは、メソッドコ
ードへのポインタを上書きする能力があるということに
注意することが重要である。
【0049】図11は、図8に関して上記で検討された
パッケージプライベートプロトコル(808)に従っ
て、メソッドMを編成するためのプロセスを示す。それ
は、直系のスーパークラスS、又は、スーパークラスS
のスーパークラス又はスーパーインターフェースの何れ
かにおいて宣言されたメソッドMのアクセス可能なパッ
ケージプライベートバージョンが、存在するかどうかを
判定することから開始する(1102)。適切なパッケ
ージのプライベート状態(この場合ではパッケージP)
を有するメソッドMが、先祖階層内に存在しなければ、
新規エントリは、ディスパッチテーブルに追加される
(1104)。対応して、プロセスは、メソッドMのパ
ッケージプライベートバージョンに対する適切なポイン
タ(1000)を新規に形成されるエントリに挿入する
(1106)。メソッドMのパッケージプライベートバ
ージョンが、先祖階層内に存在すれば、識別されたスー
パークラスエントリは、適切なポインタ(1000)を
識別されたスーパークラスエントリに挿入することによ
ってオーバーライドされる(1108)。
【0050】プロセス808はまた、直系のスーパーク
ラスS、又は、スーパークラスSのスーパークラス又は
スーパーインターフェースの何れかにおけるメソッドM
のパブリック又はプロテクテッドバージョンが、存在す
るかどうかを判定する(1110)。もし存在するなら
ば、識別されたスーパークラスエントリは、メソッドM
の識別されたパブリック又はプロテクテッドバージョン
に対する適切なポインタ(1000)を識別されたスー
パークラスエントリに挿入することによってオーバーラ
イドされる(1112)。
【0051】図12は、図8に関して上記で検討された
プライベートプロトコル(810)に従って、メソッド
Mを編成するためのプロセスを示す。それは、プライベ
ートエントリが普通、新規Vtableエントリを必要とする
ので、新規エントリをディスパッチテーブル(120
2)に追加することを開始する。対応して、プロセス
は、メソッドMのプライベートバージョンに対する適切
なポインタを新規に形成されるエントリに挿入する(1
204)。この場合では、プライベートメソッドMは、
抽象され得るので、抽象クラスのチェックは必要でな
い。
【0052】プロセス810はまた、直系のスーパーク
ラスS、又は、スーパークラスSのスーパークラス又は
スーパーインターフェースの何れかにおけるメソッドM
のパブリック又はプロテクテッドバージョンが、存在す
るかどうかを判定する(1206)。もし存在するなら
ば、識別されたスーパークラスエントリは、適切なポイ
ンタ(1000)を識別されたスーパークラスエントリ
に挿入することによってオーバーライドされる(120
8)。
【0053】プロセス810はまた、直系のスーパーク
ラスS、又は、スーパークラスSのスーパークラスの何
れかにおけるメソッドMのパッケージプライベートバー
ジョンが、存在するかどうかを判定する(1210)。
もし存在するならば、識別されたスーパークラスエント
リは、適切なポインタ(1000)を識別されたスーパ
ークラスエントリに挿入することによってオーバーライ
ドされる(1212)。
【0054】クラスC内のすべてのローカル定義メソッ
ドが、ディスパッチテーブル構造プロセス800におい
て編成された後で、何れのミランダメソッドも、処理さ
れなければならない。図13は、図8に関して上記で検
討されたミランダメソッドプロトコル(814)に従う
ディスパッチテーブルにおいてエントリを割り当てるた
めのプロセスを示す。
【0055】ミランダメソッドプロトコル(814)
は、クラスCの何れか未処理のスーパーインターフェー
スが存在するかどうかを判定することから開始する(1
302)。何れのクラスCの未処理のスーパーインター
フェースも存在していなければ、プロセス814は、終
了する。未処理のスーパーインターフェースが存在する
場合、次のインターフェースIが、選択される(130
4)。このインターフェースIのため、プロセス814
は、インターフェースIの各メソッドを通して繰り返
す。何れのインターフェースIの未処理のメソッドも存
在していなければ、プロセスは、何れかのクラスCの未
処理のスーパーインターフェースが存在するかの判定ま
で戻る(1302)。そうでなければ、インターフェー
スIの次のメソッドが検索され、チェックが実行され
て、インターフェースIの同一メソッドの同一バージョ
ンが既に、クラスCのためのディスパッチテーブル内に
存在しているかを判定する(1310)。インターフェ
ースIの同一メソッドのバージョンが、ディスパッチテ
ーブル内に存在する場合、プロセスは、インターフェー
スIの残りのメソッドを通して繰り返すよう続けられる
(1306)。クラスCのメソッドの同一バージョンが
存在しない場合、新規エントリは、クラスCのためのデ
ィスパッチテーブルに作成される(1312)。ポイン
タは、ディスパッチテーブルの新規エントリに挿入され
(1314)、プロセスは、インターフェースIの残り
のメソッドを通して繰り返すよう続けられる(130
6)。
【0056】ディスパッチテーブルを構築するため、様
々な手続きが、実装されてもよい。例えば、従来のディ
スパッチテーブル構築プロセスは、各ステップに対して
僅かな変更を行って用いられてもよい。この従来のプロ
セスでは、ディスパッチテーブル内のスーパークラスの
サイズは、最初に判定される。この継承されたサイズか
ら、クラスC内の各ローカル定義のメソッドは、新規エ
ントリを提供される。新規エントリは、累積的に計数さ
れ、継承されたスーパークラスディスパッチテーブルの
サイズに追加される。最終的に、いかなるミランダメソ
ッドも、ディスパッチテーブルの完全な構造に処理され
てもよい。
【0057】本発明が、多重アクセス可能性指定を許可
するように、スーパークラス及びスーパーインターフェ
ース階層の少なくとも一部への別々の検索は、各アクセ
ス可能性に対して実行されてもよい。特定のアクセス可
能性に対する先祖階層への検索は、それがスーパークラ
ス内に見出された時、中止するのが好ましい。
【0058】加えて、特定メソッドのための各多重エン
トリは、優先度を割り当てられてもよい。普通、メソッ
ドのアクセス可能性と同じアクセス可能性を有するエン
トリは、一次エントリである。この一次優先度に対応す
るアクセス可能性が、メソッド及びパッケージに基づい
て変化しても良いように、優先度インデックスは、一次
メソッドがパッケージに関係なく設定されることを可能
にする。二次及び三次エントリは、他のアクセス可能性
に対応する先祖階層内に見出される場合、追加として存
在することができ、それに応じて、エントリに割り当て
られてもよい。
【0059】実際には、メソッドが呼び出される時、一
次インデックスだけが用いられる。従って、二次及び三
次エントリに対応するインデックスは、必ずしもディス
パッチテーブル内に割り当てられるか、恒久的に保持さ
れる必要はなく、実装によって定まる際に割り当てられ
るか、恒久的に保持されてもよい。
【0060】単一メソッドに対する複数のエントリの間
で相対的な優先度を設定するための正当性は、一次メソ
ッドがリンクされる時、呼び出されたメソッドがエント
リの構造において設定されたため、アクセスビリティか
ら呼び出されたメソッドのアクセス可能性状態に関して
曖昧性がまったくない。
【0061】優先度は、同一アクセス可能性を指定した
エントリが、クラスのために用いられることを可能にす
る一方で、他のアクセス可能性指定エントリを保持する
ためのニーズに感応しやすい。従って、クラスのために
呼び出される一次インデックスでなくてもよい新規ロー
カル定義エントリは、残りの階層に関するクラス内で適
切に更新されてもよい。ローカル定義のプライベートメ
ソッドは一般に、常に、そのメソッドのための一次エン
トリとして指定されてもよいVtable内の新規エントリを
必要とする。しかし、スーパークラスから継承される他
のアクセス可能なメソッド(即ち、パブリック)は、同
一メソッドを持つ2つのエントリの曖昧性を回避するよ
う、オーバーライドされ、正しくインデックス付けされ
てもよい。
【0062】上記のプロセスは、明確なアクセス可能性
レベルに関するメソッドのための多重エントリを割り当
てるために適切である。しかし、ディスパッチテーブル
構造プロセス800は、各アクセス可能性のために先祖
各自の階層を通しての冗長なルックアップを必要とす
る。
【0063】図14から図16は、本発明の他の実施の
形態に従い、ルックアップ量を低減させる代替ディスパ
ッチテーブル構造プロセス1400を示す。それはまた
同時に、ディスパッチテーブルのサイズを判定し、何の
インデックスがVtable内の各メソッドと関連するかを判
定する。一旦これが実行されると、プロセスは、Vtable
を割り当て、適切なエントリを満たす。再び、ディスパ
ッチテーブルは、直系のスーパークラスSを有するパッ
ケージP内のクラスCのために構築される。ディスパッ
チテーブル構造プロセス1400は、それが、クラス及
びインターフェース階層の一横断において、メソッドM
の各アクセス可能性のためのインデックスを判定する一
方で、同時に、Vtableのサイズを判定するので、先の実
施例とは異なる。
【0064】ディスパッチテーブル構造プロセス140
0(図14)は、第1の近似では、スーパークラスのVt
ableのサイズであるVtableの初期サイズを推定すること
から開始する(1402)。ディスパッチテーブル構造
プロセス1400はまた、特定のアクセス可能性が先祖
階層において見出されたかどうかの判定に用いられる少
なくとも一つのインデックスを初期化する。
【0065】メソッドMが先祖階層において見出された
どうかの判定に、一つのインデックスが用いられた前の
場合とは対照的に、ディスパッチテーブル構造プロセス
1400は、多重インデックスを用いる。例えば、メソ
ッドに対するパブリックアクセス可能性と特に関連する
アクセス可能性インデックスは、先祖階層をスキャンす
る間、パッケージプライベートアクセス可能性と特に関
連するアクセス可能性インデックスから独立して維持さ
れてもよい。加えて、いかなるアクセス可能性インデッ
クスも、特定のメソッドが先祖階層において見出されな
かったことを示すデフォルト値(例えば負の数)で開始
してもよい。インデックスは次いで、対応するメソッド
の位置を示す第2の値(正の数)に変更してもよい。
【0066】ルックアップが先祖階層を通して行われる
際の、アクセス可能性インデックスの割り当て(140
4)と、テーブルサイズの増加とを、図14に関して上
で検討したように図15内に示す。プロセスは、クラス
C内の各ローカル定義メソッドMのために繰り返す(1
502)。すべてのローカル定義メソッドが処理される
と、メソッドは好ましいディスパッチテーブル構造プロ
セス1400へ戻る(1408)。次の未処理メソッド
Mのため、対応メソッドMを検索する先祖階層上への横
断が、実行される。これは、直系のスーパークラス5が
存在するかどうかを判定することから開始する(150
4)。
【0067】直系のスーパークラス5が存在する場合、
ディスパッチテーブル構造プロセス1400は、アクセ
ス可能性インデックスの状態をチェックして、メソッド
Mのすべての関連アクセス可能性が見出されたかを判定
する。例えば、メソッドのパブリック/プロテクテッド
及びパッケージプライベートバージョンに対応するアク
セス可能性インデックスのすべてが、先祖階層内のメソ
ッドの存在を示すと(1512)、プロセスは検索され
た情報の割り当て(1506)へ進んでもよい。メソッ
ドのパブリック、プライベート及びパッケージプライベ
ートバージョンに対応するアクセス可能性インデックス
のすべてが、見出されなければ、好ましいプロセス14
00は、階層を遡り続ける(1504)。
【0068】ディスパッチテーブル構造プロセス140
0は次いで、現在のスーパークラスSが、メソッドMに
よってオーバーライドされるメソッドを含むかどうかを
判定する(1514−1520)。もし、このようなメ
ソッドが存在するならば、プロセス1400は、現在の
スーパークラスSで終了し、階層内に他のスーパークラ
スが存在するかの判定まで戻る(1504)。もしそれ
が、メソッドMによってオーバーライドされたメソッド
を含むのであれば、メソッドのアクセス可能性は、判定
される必要がある。オーバーライドされたメソッドが、
パブリックかプロテクテッドであれば(1516)、メ
ソッドに対する一次Vtableインデックスは、パブリック
/プロテクテッドインデックスに割り当てられる(15
18)。代替として、オーバーライドされたメソッド
が、プライベートであれば(1520)、メソッドに対
する一次Vtableインデックスは、パッケージプライベー
トインデックスに割り当てられる(1522)。何れに
せよ、プロセス1400は、階層を遡り続ける(150
4)。
【0069】すべてのメソッドMのアクセス可能性のタ
イプが見出された場合、又は先祖階層を通してのルック
アップが終了した場合、情報は、Vtableに割り当てられ
る(1506)。先祖階層を通してのルックアップ後
の、Vtable1700内へのインデックスの作成を、図1
6及び図17に示す。Vtable1700のためのインデッ
クスの作成は、メソッドMのアクセス可能性に感応しや
すい。対応して、メソッドMに対するインデックスを割
り当てるプロセスは、最初にメソッドMのアクセス可能
性を判定する。
【0070】本実施の形態では、メソッドMがパブリッ
クかプロテクテッドかは最初に判定される(160
2)。メソッドMが、パブリックかプロテクテッドであ
る場合、アクセス可能性インデックスは、チェックされ
て、メソッドMのパブリックバージョンが、先祖階層内
で見出されたのかを判定する(1604)。パブリック
又はプロテクテッドメソッドMが、先祖階層内で見出さ
れたとすると、メソッドMに割り当てられる一次Vtable
インデックスは、スーパークラス内で見出されるパブリ
ック/プロテクテッドアクセス可能性インデックス17
02である(1606)。パブリック又はプロテクテッ
ドメソッドMが、先祖階層内で見出されなければ、新規
エントリ1704は、Vtable1700内に作成され、メ
ソッドMに対する一次インデックスは、新規エントリ1
704に割り当てられ(1608)、現在のVtableサイ
ズは、Vtableポインタ1706用いて増加させられる
(1610)。従って、メソッドMが先祖階層内に見出
されたかどうかに関係なく、一次Vtableインデックス
は、Vtable1700内に割り当てられる。
【0071】Vtableポインタ1706は次いで、Vtable
1700内の次のエントリ1710を指す。Vtableポイ
ンタ1706は、スーパークラスSの継承メソッドに対
応する推定サイズ及び位置で開始した。各新規エントリ
が、クラスCのローカル定義メソッドのために追加され
るように、Vtableポインタ1706は、Vtable1700
のサイズを増加し、保持する。
【0072】次いで、パッケージプライベートアクセス
可能性インデックスが、記録された場合、それは、二次
インデックスに割り当てられなければならない。割り当
てられたインデックスは、Vtable1700のスーパーク
ラス部内の適切なエントリを上書きするために後で用い
られる。
【0073】メソッドMがプライベートパッケージであ
る場合(1616)、アクセス可能性インデックスは、
チェックされて、メソッドMが先祖階層内で見出された
かを判定する(1618)。パッケージプライベートメ
ソッドMが、先祖階層内で見出されたとすると、メソッ
ドMに割り当てられる一次Vtableインデックスは、スー
パークラス内で見出されるパッケージプライベートアク
セス可能性インデックス1708である(1620)。
パッケージプライベートメソッドMが、先祖階層内で見
出されなければ、新規エントリ1704は、依然として
Vtable1700内に作成され、メソッドMに対する一次
インデックスは、新規エントリ1704に割り当てられ
(1622)、現在のVtableサイズは、Vtableポインタ
1706用いて増加させられる。
【0074】また、パブリック/プロテクテッドインデ
ックスが、記録された場合、それは、二次インデックス
に割り当てられなければならない。割り当てられたイン
デックスは、Vtable1700のスーパークラス部内の適
切なエントリを上書きするために後で用いられる。
【0075】最終的に、好ましいプロセス1400のた
めに、メソッドMが、パブリック、プロテクテッド、又
はプライベートパッケージでない場合、それはプライベ
ートとしなければならない(1616)。ローカル定義
メソッドが、常に新規エントリを必要とするように、メ
ソッドMに対する新規エントリ1704は、Vtable17
00内に作成され、メソッドMに対する一次インデック
スは、新規エントリ1704に割り当てられ(162
2)、現在のVtableサイズは、Vtableポインタ1706
用いて増加させられる。
【0076】次いで、パブリック/プロテクテッドアク
セス可能性インデックスが、記録された場合、それは、
二次インデックスに割り当てられなければならない。割
り当てられたインデックスは次いで、Vtable1700の
スーパークラス部内の適切なエントリを上書きするため
に用いられる。同様に、パッケージプライベートインデ
ックスが、記録された場合、それは、三次インデックス
に割り当てられなければならない。割り当てられたイン
デックスは次いで、Vtable1700のスーパークラス部
内の適切なエントリを上書きするために用いられる。
【0077】ローカル定義メソッドのすべてに対するイ
ンデックスの割当てが完了し、テーブルのサイズが決定
された後(1404)、好ましいプロセス1400は次
いで、必要であれば、何れのミランダメソッドも処理す
る(1406)。Vtable1700は次いで、メモリの適
切な部分に割り当てられる(1408)。Vtable170
0は、最初にスーパークラスSの内容によって満たされ
(1410)、次いで各ローカル定義メソッドによって
満たされる(1412)。
【0078】各ローカル定義メソッドMのために、好ま
しいプロセス1400は、ポインタを一次インデックス
において対応するメソッドソースコードに割り当てる
(1414)。二次インデックスが割り当てられると
(1416)、二次インデックスにおけるソースコード
に対するポインタが、割り当てられる(1418)。同
様に、三次インデックスが割り当てられると(142
0)、三次インデックスにおけるソースコードに対する
ポインタが、割り当てられる(1422)。
【0079】サブクラスがミランダメソッドを実装する
時、対応するVtableエントリは、更新されなければなら
ない。従って、何れかのミランダメソッドが上書きされ
たかは、別々に判定されなければならない。これは、ス
ーパークラスのVtableを通して検索することによって実
行される。より詳細には、Vtableは、低部から走査され
て、現在のメソッドの名前とディスクリプタと一致する
ミランダメソッドを探す。ミランダメソッドに対応する
エントリ1712は、Vtable1700内に示す。
【0080】エントリを新規ミランダメソッドに割り当
てるための手続きは、図13と同様である。しかしこの
場合では、新規エントリをディスパッチテーブル内に割
り当て(1302)、スタブポインタを新規エントリに
挿入する(1314)ことの代わりに、新規スタブメソ
ッドは、ローカル定義のミランダメソッドのセットに追
加される。一次インデックスは、このメソッドのために
割り当てられ、Vtableサイズは、増加させられる。
【0081】特定の実施の形態では、上記Vtable構築メ
ソッドは、サンマイクロシステムズのホットスポットの
内部クラス表現のクラス表現において実装される。この
場合では、すべてのクラス及びインターフェースは、そ
れがローカルに定義するすべてのメソッドを含むメソッ
ドテーブルを有している。加えて、すべてのクラスは、
(継承メソッドを含む)クラスのインスタンスにおいて
呼び出され得るすべてのメソッドのためのエントリを有
するディスパッチテーブルを有する。
【0082】本発明は、コンピュータシステム内に格納
される情報に関わる様々なコンピュータ実装オペレーシ
ョンを用いてもよい。これらのオペレーションは、それ
らの必要とする物理量の物理的な操作を含むが、これに
限定されるものではない。必ずしもそうではないが、通
常、これらの量は、格納され、転送され、組み合わさ
れ、比較され、一方で処理されることが可能な電気又は
磁気信号の形をとる。本発明の一部を形成する本明細書
中に記載のオペレーションは、有用な機械操作である。
実行される操作は、多くの場合、作成、識別、実行、判
定、比較、履行、ダウンロード、又は検出等の用語で引
用される。時には、便宜的に、主に一般的な用法の理由
で、これら電気又は磁気信号を、ビット、数値、エレメ
ント、変数、文字等と称する。しかしながら、これら全
ての、及び同様の用語は、適切な物理量と関連するもの
であり、これらの量に適用される単に便宜上の呼び名で
あることを留意されたい。
【0083】本発明はまた、前記のオペレーションを実
行するためのデバイス、システム又は装置に関する。シ
ステムは、必要な目的のために特別に構成されてもよ
く、又は、コンピュータ内に格納されるコンピュータプ
ログラムによって選択的に起動させられるか、又は設定
される汎用コンピュータであってもよい。上で示される
プロセスは本質的に、いかなる特定のコンピュータ又は
他のコンピューティング装置とも関係しない。特に、様
々な汎用コンピュータは、本明細書中の教示に従って書
かれるプログラムとともに用いられてもよく、又は、代
替として、必要なオペレーションを実行するため、より
特化したコンピュータシステムを構成することが、便利
であろう。
【0084】図18は、本発明の一実施の形態に従う処
理の実行に適した汎用コンピュータシステム1800の
ブロック図である。例えば、JVM707、仮想マシン
711、又はバイトコードコンパイラ703は、汎用コ
ンピュータシステム1800上で実行できる。図18
は、汎用コンピュータシステムの一実施の形態を示す。
他のコンピュータシステムアーキテクチャ及び構成は、
本発明の処理の実行に用いることができる。以下に記載
する様々なサブシステムで構成されているコンピュータ
システム1800は、少なくとも一つのマイクロプロセ
ッササブシステム(また、中央処理装置、即ちCPUと
称する)1802を含む。即ち、CPU1802は、シ
ングルチッププロセッサによって、又はマルチプロセッ
サによって実装され得る。CPU1802は、コンピュ
ータシステム1800のオペレーションを制御する汎用
デジタルプロセッサである。メモリから取り出される命
令を用いることによって、CPU1802は、入力情報
の受信及び操作、及び出力装置上への情報の表示及び出
力を制御する。
【0085】CPU1802は、第1の一次記憶装置1
804、普通はランダムアクセスメモリ(RAM)と双
方向に、そして、メモリーバス1808を介して第2の
一次記憶領域1806、普通は読み出し専用メモリ(R
OM)と単方向に接続される。当該技術においてよく知
られるように、一次記憶装置1804は、汎用記憶領域
として、及び、スクラッチパッドメモリとして用いるこ
とができ、また、入力データ及び処理済データの格納に
用いることができる。それはまた、プログラム命令及び
データを、CPU1802上で動作するプロセス用の他
のデータ及び命令に加えて格納でき、普通、メモリーバ
ス1808上での双方向の素早いデータ及び命令の転送
に用いられる。また、当該技術においてよく知られるよ
うに、一次記憶装置1806は普通、CPU1802に
よって用いられて、その機能を実行する基本動作命令、
プログラムコード、データ及びオブジェクトを含む。一
次記憶デバイス1804及び1806は、例えば、デー
タアクセスが、双方向又は単方向である必要があるかど
うか等によって、以下に記載の、あらゆる適切なコンピ
ュータ可読記憶媒体を含んでいてもよい。CPU180
2はまた、頻繁に必要とされるデータをキャッシュメモ
リ1810内に直接及び非常に素早く取り出し、格納す
ることができる。
【0086】リムーバブル大容量記憶装置1812は、
コンピュータシステム1800用の追加データ記憶容量
を提供し、周辺バス1814を介して双方向又は単方向
でCPU1802に接続される。例えば、CD―ROM
として一般に公知されている特定のリムーバブル大容量
記憶装置は普通、単方向でデータをCPU1802に渡
すのに対して、フロッピー(登録商標)ディスクは、双
方向でデータをCPU1802に渡すことができる。記
憶装置1812はまた、磁気テープ、フラッシュメモ
リ、搬送波内に包含される信号、スマートカード、ポー
タブル大容量記憶装置及び他の記憶装置等のコンピュー
タ可読媒体を含んでいてもよい。固定大容量記憶装置1
816はまた、追加データ記憶容量を提供し、周辺バス
1814を介して双方向でCPU1802に接続され
る。一般に、これらの媒体へのアクセスは、一次記憶装
置1804及び1806へのアクセスより遅い。大容量
記憶装置1812及び1816は一般に、普通CPU1
802によってアクティブに使用されない追加のプログ
ラム命令、データその他を格納する。大容量記憶装置1
812及び1816内部で保持される情報は、必要であ
れば、仮想メモリとしての一次記憶装置1804(例え
ばRAM)の一部として標準形態で組み込まれてもよい
ことは認められよう。
【0087】記憶サブシステムに対するCPU1802
のアクセスを提供することに加え、周辺バス1814
は、他のサブシステム及びデバイスにも同様にアクセス
を提供するために用いられる。記載の実施の形態では、
これらは、表示モニタ1818及びアダプタ1820、
プリンタ装置1822、ネットワークインターフェース
1824、補助入出力装置インターフェース1826、
サウンドカード1828及びスピーカ1830、及び必
要に応じて他のサブシステムを含んでいる。
【0088】ネットワークインターフェース1824
は、CPU1802が他のコンピュータ、コンピュータ
ネットワーク、又は参照されるようなネットワーク接続
を用いる遠距離通信ネットワークに接続されることを許
容する。ネットワークインターフェース1824を介し
て、CPU1802が、例えば、他のネットワーク内の
コンピュータからのオブジェクト、プログラム命令、又
はバイトコード命令の情報を受信するかもしれず、又
は、上記メソッドのステップの実行の間に他のネットワ
ーク内のコンピュータに情報を出力するかもしれないこ
とは、考慮される。多くの場合CPU上で実行される連
続命令として表される情報は、例えば、搬送波内に包含
されるコンピュータデータ信号の形で、他のネットワー
クから受信され、出力されてもよい。インターフェース
カード又は同様のデバイス、及びCPU1802によっ
て実装される適切なソフトウェアは、コンピュータシス
テム1800を外部ネットワークに接続し、標準プロト
コルに従ってデータを転送するために使用される。即
ち、本発明のメソッドの実施の形態は、単にCPU18
02上だけで実行してもよく、又は、処理の一部を共有
する遠隔CPUと連動する、インターネット、イントラ
ネットネットワーク、又はローカルエリアネットワーク
等のネットワークにわたって実行されてもよい。追加の
大容量記憶装置(図示せず)はまた、ネットワークイン
ターフェース1824を介してCPU1802に接続さ
れてもよい。
【0089】補助I/O装置インターフェース1826
は、CPU1802が、他のデバイスからデータを送信
し、より一般的には、受信することができる汎用及びカ
スタマイズされたインターフェースを意味する。また、
CPU1802に接続されるのは、キーボード1836
又はポインタデバイス1838からの入力を受信し、キ
ーボード1836又はポインタデバイス1838からの
復号化シンボルをCPU1802へ送信するためのロー
カルバス1834を介するキーボードコントローラ18
32である。ポインタデバイスは、マウス、スタイラ
ス、トラックボール又はタブレットであってもよく、グ
ラフィカルユーザーインターフェースとの相互作用に役
立つ。
【0090】加えて、本発明の実施の形態は更に、様々
なコンピュータ実装オペレーションを実行するためのプ
ログラムコードを含むコンピュータ可読媒体を持つコン
ピュータ記憶装置製品に関する。コンピュータ可読媒体
は、その後でコンピュータシステムによって読取り可能
なデータを格納することができるすべてのデータ記憶装
置である。コンピュータ可読媒体の実施例は、ハードデ
ィスク、フロッピーディスク、及び特定用途向け集積回
路(ASIC)又はプログラマブルロジックデバイス
(PLD)等の特別に構成されたハードウェアデバイス
を含む上記すべての媒体を含むが、これに限定されるも
のではない。コンピュータ可読媒体はまた、コンピュー
タ可読コードが、配布形態で格納され、実行されるよ
う、搬送波に包含されるデータ信号として接続したコン
ピュータシステムのネットワーク上で配布することがで
きる。
【0091】上記のハードウェア及びソフトウェアエレ
メントは、標準の設計と構成のものであることは、当該
技術に精通する者によって認められるであろう。本発明
の用途に適切な他のコンピュータシステムは、追加の、
又はより少ないサブシステムを含んでいてもよい。加え
て、メモリーバス1008、周辺バス1814、及びロ
ーカルバス1834は、サブシステムの連結に役立つす
べての相互接続体系を例証する。例えば、ローカルバス
は、CPUを固定大容量記憶装置1816及びディスプ
レイアダプタ1820に接続するために用いられてもよ
い。図18において参照されるコンピュータシステム
は、本発明の用途に適切なコンピュータシステムのほん
の一実施例である。異なるサブシステム構成を有する他
のコンピュータアーキテクチャもまた、利用されてもよ
い。
【0092】前記発明は、明確な理解のために幾つか詳
細に記載したが、特定の変更及び修正は、添付請求の範
囲の適用範囲において実践されるであろうことは、明白
である。例えば、発明は、クラスのためのディスパッチ
テーブルの構築に関して検討されてきたが、ディスパッ
チテーブルは、インターフェースのために開示された手
続きを用いて同様に構築されてもよい。他の実施例で
は、Vtableに関してそれらを区別するstaticメソッド及
びプロセスは、拡張されなかったが、本発明は、それら
を区分することも同様に適用可能である。加えて、最適
化として、Vtableエントリを最終メソッドに割り当てる
ことは、それがスーパークラス又はスーパーインターフ
ェースにおいてメソッドをオーバーライドする限り、回
避され得る。更に、本発明は、4つのアクセス可能性の
みを示したが、より多くは、本発明に対し明らかに可能
で、適用可能である点に留意されたい。更に、本発明が
柔軟に適応可能なディスパッチテーブル構造の競合及び
アドレス指定されない解像度の代替形式がある点に留意
されたい。従って、本実施例は、例証であり、制限する
ものでないことを考慮すべきであり、本発明は、本明細
書中で与えられる詳細に限定されないが、添付請求の範
囲の適用範囲及び同等物の範囲において修正されても良
い。
【図面の簡単な説明】
本発明は、添付図面に関連して行われる以下の説明を参
照することによってより良く理解されるであろう、
【図1】図1は、クラス階層の代表的な形式を説明する
ブロック図である。
【図2】図2は、各それぞれのクラスにおいて別々に定
義される特定メソッドfooを含むクラス階層を説明する
ブロック図である。
【図3】図3は、図2のクラスBに対応するVtableの従
来のフォーマットを示す。
【図4】図4は、本発明の一実施の形態に従う図2のク
ラスに対応する簡略化されたVtableのセットである。
【図5】図5は、本発明の他の実施の形態に従う図2の
クラスCに対応する簡略化されたVtableである。
【図6】図6は、本発明の他の実施の形態に従う図4の
クラスCから継承するクラスDのための簡略化されたVt
ableである。
【図7】(a)は、Javaソースコードを含むJav
aTMプログラムの特定のプラットホーム又はコンピュ
ータ上で実行されるネイティブコードへの変換を示すブ
ロック/プロセス図であり、(b)は、下で説明する図
18のコンピュータシステムによってサポートされる仮
想マシンの線図である。
【図8】図8は、本発明の一実施の形態に従うディスパ
ッチテーブル構造プロセスを示す。
【図9】図9は、図8のステップ804で参照されるよ
うなパブリック/プロテクテッドプロトコルに従って、
メソッドMを編成するためのプロセスを説明するブロッ
ク図を示す。
【図10】図10は、エントリ内のメソッドのためのソ
ースコードへ適切なポインタを挿入するためのプロセス
を説明するブロック図を示す。
【図11】図11は、図8のステップ808で参照され
るようなパッケージプライベートプロトコルに従って、
メソッドMを編成するためのプロセスを説明するブロッ
ク図を示す。
【図12】図12は、図8のステップ810で参照され
るようなプライベートプロトコル(810)に従って、
メソッドMを編成するためのプロセスを説明するブロッ
ク図を示す。
【図13】図13は、図8のステップ814で参照され
るようなミランダメソッドプロトコルに従って、ディス
パッチテーブル内にエントリを割り当てるためのプロセ
スを説明するブロック図を示す。
【図14】図14は、本発明の好ましい実施の形態に従
って、ルックアップ量を低減させる好ましいディスパッ
チテーブル構造プロセスを説明するブロック図を示す。
【図15】図15は、図14のステップ1404で参照
されるような、ルックアップが先祖階層を通して行われ
る際に、アクセス可能性インデックスを割り当て、テー
ブルサイズを増加させるためのプロセスを説明するブロ
ック図を示す。
【図16】図16は、先祖階層を通したルックアップの
後、Vtable内にインデックスを作成するためのプロセス
を説明するブロック図を示す。
【図17】図17は、本発明の一実施の形態に従うVtab
leを示す。
【図18】図18は、本発明の実施の形態の実装に適切
な代表的なコンピュータシステムのブロック図である。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ギラド ブラカ アメリカ合衆国, カリフォルニア州, ロス アルトス, ファーンドン アヴェ ニュー 2042 (72)発明者 ディーパ ヴィスワナサン アメリカ合衆国, カリフォルニア州, クパティノ, ヴァレイ グリーン ドラ イヴ 20875 ナンバー23

Claims (23)

    【特許請求の範囲】
  1. 【請求項1】 直系のスーパークラスから継承する第1
    のクラス内のメソッドのためのディスパッチテーブルの
    構築プロセスであって、 ディスパッチテーブルを前記直系スーパークラスからコ
    ピーするステップと、 前記第1のクラス内の選択メソッドが、前記第1のクラ
    スの先祖スーパークラス内にも存在するかどうかを判定
    するステップと、 前記選択メソッドが、前記先祖スーパークラス内にも存
    在することが判定された場合、前記選択メソッドの前記
    先祖スーパークラスバージョンが、アクセス可能かどう
    かを判定するステップと、 前記選択メソッドの前記先祖スーパークラスバージョン
    が、アクセス可能でないことが判定された場合、前記第
    1のクラス内の前記選択メソッドのために、新規エント
    リを前記ディスパッチテーブル内に作成するステップ
    と、 前記第1のクラス内の前記選択メソッドが、アクセス可
    能であることが判定された場合、エントリを上書きする
    ステップと、を有する、ディスパッチテーブルの構築方
    法。
  2. 【請求項2】 更に、少なくとも一つのスーパーインタ
    ーフェースからメソッドを継承するステップを含む、請
    求項1に記載の方法。
  3. 【請求項3】 作成される前記エントリは、ミランダ
    (miranda)メソッドである、請求項2に記載の方法。
  4. 【請求項4】 前記ディスパッチテーブルを構築する前
    記プロセスは、オブジェクト指向型言語によって実装さ
    れる、請求項1に記載の方法。
  5. 【請求項5】 前記オブジェクト指向型言語は、JAV
    A(登録商標)である、請求項4に記載の方法。
  6. 【請求項6】 更に、前記エントリ又は前記新規エント
    リは、インデックスを含む、請求項1に記載の方法。
  7. 【請求項7】 前記クラスは、パッケージに属する、請
    求項1に記載の方法。
  8. 【請求項8】 更に、前記メソッドの前記バージョン
    は、パブリック(public)アクセス可能性、プライベー
    ト(private)アクセス可能性、プロテクテッド(protec
    ted)アクセス可能性、及びパッケージプライベートアク
    セス可能性のうちの一つを含む、請求項1に記載の方
    法。
  9. 【請求項9】 先祖階層内の直系のスーパークラスから
    継承する第1のクラス内のメソッドのためのディスパッ
    チテーブルの構築プロセスであって、 ディスパッチテーブルを前記直系スーパークラスからコ
    ピーするステップと、 前記第1のクラス内の選択メソッド及びアクセス可能性
    が、前記先祖階層のスーパークラス内に存在するかどう
    かを判定するステップと、 各アクセス可能性のために、前記選択メソッド及び前記
    アクセス可能性が、前記先祖階層の前記スーパークラス
    内にも存在することが判定された場合、前記ディスパッ
    チテーブルのインデックスを前記メソッド及びアクセス
    可能性に割り当てるステップと、 前記ディスパッチテーブル内のエントリを、前記選択メ
    ソッド及び前記アクセス可能性に割り当てられた各イン
    デックスに割り当てるステップと、を有する、ディスパ
    ッチテーブルの構築方法。
  10. 【請求項10】 更に、前記選択メソッド及び前記アク
    セス可能性に割り当てられた各エントリのための前記デ
    ィスパッチテーブル内に優先度を割り当てるステップを
    含む、請求項9に記載の方法。
  11. 【請求項11】 一次優先度は、前記選択メソッドに対
    応する前記エントリ及び前記第1のクラスの前記アクセ
    ス可能性に対応する前記アクセス可能性に割り当てられ
    る、請求項10に記載の方法。
  12. 【請求項12】 更に、すべての前記メソッドの前記ア
    クセス可能性がインデックスを割り当てられた場合、前
    記第1のクラス内の前記選択メソッド及び前記アクセス
    可能性が、前記先祖階層のスーパークラス内にも存在す
    るかどうかの判定を中止するステップを含む、請求項9
    に記載の方法。
  13. 【請求項13】 メソッドの前記アクセス可能性は、パ
    ブリックアクセス可能性、プライベートアクセス可能
    性、プロテクテッドアクセス可能性、又はパッケージプ
    ライベートアクセス可能性である、請求項9に記載の方
    法。
  14. 【請求項14】 前記第1のクラス内の前記選択メソッ
    ド及び前記アクセス可能性が前記先祖階層のスーパーク
    ラス内にも存在するかどうかの判定は、前記選択メソッ
    ド及びアクセス可能性が見出されなかった場合の第1の
    状態から、前記選択メソッド及びアクセス可能性が見出
    された場合の第2の状態へ変化するインデックスを用い
    て実行される、請求項9に記載の方法。
  15. 【請求項15】 更に、前記Vtableの前記サイズを判定
    するステップを含む、請求項9に記載の方法。
  16. 【請求項16】 更に、割り当てられた各エントリに対
    応する前記Vtableの少なくとも一つのエントリを割り当
    てるステップを含む、請求項15に記載の方法。
  17. 【請求項17】 更に、前記Vtableを満たすステップを
    含む、請求項16に記載の方法。
  18. 【請求項18】 少なくとも一つのスーパークラスから
    継承するクラスのためのディスパッチテーブルであっ
    て、 特定メソッドのための複数のエントリ、を備える、ディ
    スパッチテーブル。
  19. 【請求項19】 前記明確なアクセス可能性は、パブリ
    ックアクセス可能性、プライベートアクセス可能性、プ
    ロテクテッドアクセス可能性、又はパッケージプライベ
    ートアクセス可能性のうちの一つである、請求項18に
    記載のディスパッチテーブル。
  20. 【請求項20】 前記複数のエントリの第1のエントリ
    は、優先度を割り当てられる、請求項18に記載のディ
    スパッチテーブル。
  21. 【請求項21】 更に、前記クラスが継承するスーパー
    インターフェースを含む、請求項18に記載のディスパ
    ッチテーブル。
  22. 【請求項22】 更に、前記ディスパッチテーブルは、
    ミランダメソッドを含む、請求項21に記載のディスパ
    ッチテーブル。
  23. 【請求項23】 スーパークラスから継承する第1のク
    ラス内のメソッドのためのディスパッチテーブルを構築
    するためコンピュータプログラムプロダクトであって、 スーパークラスのためのディスパッチテーブルをコピー
    するコンピュータコードと、 前記第1のクラス内の選択メソッドが、前記第1のクラ
    スの先祖スーパークラス内にも存在するかどうかを判定
    するコンピュータコードと、 前記選択メソッドが、前記第1のクラスが継承する先祖
    スーパークラス内にも存在することが判定された場合、
    前記選択メソッドの選択スーパークラスバージョンが、
    アクセス可能かどうかを判定するコンピュータコード
    と、 前記選択メソッドの前記選択スーパークラスバージョン
    が、アクセス可能でないことが判定された場合、前記第
    1のクラス内の前記選択メソッドのために、新規エント
    リを前記ディスパッチテーブル内に作成するコンピュー
    タコードと、 前記第1のクラス内の前記選択メソッドが、アクセス可
    能であることが判定された場合、エントリを上書きする
    コンピュータコードと、を備える、コンピュータプログ
    ラムプロダクト。
JP2000126183A 1999-04-26 2000-04-26 ディスパッチテーブル構造のための方法と装置 Pending JP2000347864A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/299,946 US6393491B1 (en) 1999-04-26 1999-04-26 Method and apparatus for dispatch table construction
US09/299946 1999-04-26

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2010107436A Division JP4571710B2 (ja) 1999-04-26 2010-05-07 ディスパッチテーブル構造のための方法と装置

Publications (2)

Publication Number Publication Date
JP2000347864A true JP2000347864A (ja) 2000-12-15
JP2000347864A5 JP2000347864A5 (ja) 2010-02-12

Family

ID=23156997

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2000126183A Pending JP2000347864A (ja) 1999-04-26 2000-04-26 ディスパッチテーブル構造のための方法と装置
JP2010107436A Expired - Lifetime JP4571710B2 (ja) 1999-04-26 2010-05-07 ディスパッチテーブル構造のための方法と装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2010107436A Expired - Lifetime JP4571710B2 (ja) 1999-04-26 2010-05-07 ディスパッチテーブル構造のための方法と装置

Country Status (6)

Country Link
US (2) US6393491B1 (ja)
EP (1) EP1049009A3 (ja)
JP (2) JP2000347864A (ja)
CN (1) CN1183447C (ja)
AU (1) AU773769B2 (ja)
CA (1) CA2306533A1 (ja)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6668285B1 (en) * 1999-05-12 2003-12-23 Koninklijke Philips Electronics N.V. Object oriented processing with dedicated pointer memories
US6725280B1 (en) * 1999-08-13 2004-04-20 Sun Microsystems, Inc. Method and apparatus for constructing dispatch tables which enable transitive method override
DE10030988A1 (de) * 2000-06-30 2002-01-10 Bosch Gmbh Robert Elektronisches System zur Entwicklung von Software und ein Verfahren zum Eingriff auf interne Daten der Software
US6978456B1 (en) 2000-10-31 2005-12-20 Sun Microsystems, Inc. Methods and apparatus for numeric constant value inlining in virtual machines
US6901591B1 (en) * 2000-10-31 2005-05-31 Sun Microsystems, Inc. Frameworks for invoking methods in virtual machines
US6996813B1 (en) 2000-10-31 2006-02-07 Sun Microsystems, Inc. Frameworks for loading and execution of object-based programs
US7020874B2 (en) * 2001-03-26 2006-03-28 Sun Microsystems, Inc. Techniques for loading class files into virtual machines
US7096466B2 (en) * 2001-03-26 2006-08-22 Sun Microsystems, Inc. Loading attribute for partial loading of class files into virtual machines
US7543288B2 (en) 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
US7305658B1 (en) 2001-05-07 2007-12-04 Microsoft Corporation Method and system for application partitions
US6996830B1 (en) 2001-05-07 2006-02-07 Microsoft Corporation System determining whether to activate public and private components operating within multiple applications of a component-based computing system
US6941550B1 (en) * 2001-07-09 2005-09-06 Microsoft Corporation Interface invoke mechanism
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
US7039904B2 (en) 2001-08-24 2006-05-02 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for storing values into local variables
US7058934B2 (en) * 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
US6988261B2 (en) 2001-08-24 2006-01-17 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions in Java computing environments
US7010791B2 (en) * 2001-09-20 2006-03-07 Intel Corporation Method for implementing multiple type hierarchies
US7457796B2 (en) * 2004-07-08 2008-11-25 International Business Machines Corporation Method using virtual replicated tables in a cluster database management system
US8201189B2 (en) 2005-12-30 2012-06-12 Sap Ag System and method for filtering components
US8838750B2 (en) * 2005-12-30 2014-09-16 Sap Ag System and method for system information centralization
US8843918B2 (en) 2005-12-30 2014-09-23 Sap Ag System and method for deployable templates
US20070257715A1 (en) * 2005-12-30 2007-11-08 Semerdzhiev Krasimir P System and method for abstract configuration
US9477495B2 (en) 2006-08-17 2016-10-25 International Business Machines Corporation Conservative class preloading for real time Java execution
US8127284B2 (en) 2007-10-16 2012-02-28 Microsoft Corporation On-demand loading of types of software code of a program executing on a computing device
US20090249311A1 (en) * 2008-03-31 2009-10-01 International Business Machines Corporation Sharing a native module of compiled code using an abstraction module of interpreted code in a virtual machine environment
US20090319982A1 (en) * 2008-06-24 2009-12-24 Microsoft Corporation Multiple Code Inheritance with Explicit Base Calling
US8793671B2 (en) * 2008-06-28 2014-07-29 Microsoft Corporation Interface optimization in a closed system
US8316350B2 (en) * 2008-11-20 2012-11-20 Sap Aktiengesellschaft Interface versioning
US8578352B1 (en) * 2011-03-31 2013-11-05 Google, Inc. Optimizing object oriented programs using limited customization
US8910127B2 (en) * 2012-09-20 2014-12-09 Identify Software Ltd. (IL) Estimating indirect interface implementation before load time based on directly implemented methods

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4525780A (en) * 1981-05-22 1985-06-25 Data General Corporation Data processing system having a memory using object-based information and a protection scheme for determining access rights to such information
US5345587A (en) * 1988-09-14 1994-09-06 Digital Equipment Corporation Extensible entity management system including a dispatching kernel and modules which independently interpret and execute commands
US5515536A (en) 1992-11-13 1996-05-07 Microsoft Corporation Method and system for invoking methods of an object through a dispatching interface
US5546586A (en) * 1993-05-06 1996-08-13 Apple Computer, Inc. Method and apparatus for vectorizing the contents of a read only memory device without modifying underlying source code
US5481713A (en) * 1993-05-06 1996-01-02 Apple Computer, Inc. Method and apparatus for patching code residing on a read only memory device
US5615400A (en) 1993-06-30 1997-03-25 Apple Computer, Inc. System for object oriented dynamic linking based upon a catalog of registered function set or class identifiers
US5600838A (en) * 1994-01-18 1997-02-04 Sybase, Inc. Object oriented dispatch and supercall process and arrangement
JPH08320790A (ja) * 1995-05-25 1996-12-03 Mitsubishi Electric Corp メソッド呼び出し方法及びメソッド追加・削除方法
JP3019915B2 (ja) * 1995-11-20 2000-03-15 日本電気株式会社 手続き呼出し方法
JPH09282167A (ja) * 1996-04-10 1997-10-31 Internatl Business Mach Corp <Ibm> メソッド起動方法及びメソッド起動制御装置
US5889995A (en) 1996-05-20 1999-03-30 Sun Microsystems, Inc. Using constant selectors for method identification
CA2236064A1 (en) * 1998-04-28 1999-10-28 Ibm Canada Limited - Ibm Canada Limitee Method and system for constructing hybrid virtual function tables
US6256752B1 (en) * 1998-07-24 2001-07-03 International Business Machines Corporation Method and apparatus for dynamic swappable bytecode loop in java virtual machines
US6260187B1 (en) * 1998-08-20 2001-07-10 Wily Technology, Inc. System for modifying object oriented code

Also Published As

Publication number Publication date
CA2306533A1 (en) 2000-10-26
US20020107996A1 (en) 2002-08-08
CN1274886A (zh) 2000-11-29
JP2010170585A (ja) 2010-08-05
AU2891800A (en) 2000-11-02
EP1049009A3 (en) 2005-02-09
JP4571710B2 (ja) 2010-10-27
US6643711B2 (en) 2003-11-04
AU773769B2 (en) 2004-06-03
EP1049009A2 (en) 2000-11-02
CN1183447C (zh) 2005-01-05
US6393491B1 (en) 2002-05-21

Similar Documents

Publication Publication Date Title
JP4571710B2 (ja) ディスパッチテーブル構造のための方法と装置
US11175896B2 (en) Handling value types
JP3550151B2 (ja) ロード・リンキング装置および方法
US5414854A (en) Object-oriental system for managing shared libraries
US7316010B1 (en) Methods for sharing conditionally across class loaders dynamically compiled code
US6799173B2 (en) Method and apparatus for sharing code containing references to non-shared objects
US5303392A (en) Accessing current symbol definitions in a dynamically configurable operating system
US7882198B2 (en) Shared JAVA JAR files
US7840967B1 (en) Sharing data among isolated applications
AU712005B2 (en) System and method for runtime optimization of private variable function calls in a secure interpreter
WO2005103927A1 (en) Modified computer architecture with finalization of objects
US7665075B1 (en) Methods for sharing of dynamically compiled code across class loaders by making the compiled code loader reentrant
US20170115975A1 (en) Universal adapter for native calling
US20090133042A1 (en) Efficient linking and loading for late binding and platform retargeting
US7406687B1 (en) Sharing runtime representation of software component methods across component loaders
US8464226B2 (en) System and method for interoperating with foreign objects from a host computing environment
JP2023551746A (ja) 最小ランタイムでのガベージオブジェクトの蓄積の防止
Heege Managed Types, Instances, and Memory

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070329

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090825

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20091119

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20091125

A524 Written submission of copy of amendment under section 19 (pct)

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20091218

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100119