(57)【特許請求の範囲】
【請求項１】
プログラムコードを発生するためのマシンで実現される方法において、
ソースコード内において、メソッド呼出しにおいて呼び出されている第一プログラムメソッドに対するパラメータとしてパスされる特定の参照を見つけ、
該参照を見つけることに応答して、該特定の参照が第二プログラムメソッドに対する参照であるか否かを決定し、
該特定の参照が該第二プログラムメソッドに対する参照であることの決定に応答して、
前記メソッド呼出しにおいて呼び出された前記第一プログラムメソッドにより期待されるオブジェクトのクラスによりインプリメントされるインターフェースを決定し、
前記インターフェースをインプリメントする新たなブリッジクラスに対応するバイトコードを生成し、
前記メソッド呼出しを、前記第二プログラムメソッドに対する参照の代わりに、前記ブリッジクラスのオブジェクトへの参照をパスするメソッド呼出しへマッピングする
ことを包含している方法。
【請求項２】
請求項１において、前記バイトコードが、該ソースコードが該クラスの定義を有している場合に自動的にコンパイラにより発生されるコンパイルされたコードであり、該ソースコードは該クラスの定義を有するものでない方法。
【請求項３】
請求項１において、該ソースコードがＪＡＶＡプログラミング言語で書かれている方法。
【請求項４】
請求項１において、該第一プログラムメソッドが該第二プログラムメソッドに対応するイベントリスナーを登録するメソッドである方法。
【請求項５】
請求項１において、該第二プログラムメソッドが、特定したオブジェクトに対する特定したイベント型のイベントの発生に応答して自動的に呼び出されるイベント処理メソッドである方法。
【請求項６】
請求項１において、前記バイトコードを生成することが以下の形のソースコードに基づいてコンパイラが発生するコンパイルされたコードを発生することを包含しており、その場合にＣＬＡＳＳＮＡＭＥはクラス名であり、ＰＡＲＡＭＥＴＥＲＬＩＳＴは（ａ）メソッドＭＹの１個又はそれ以上のパラメータ及び（ｂ）該１個又はそれ以上のパラメータの型のリストであり、ＰＡＲＡＭＥＴＥＲＳは該１個又はそれ以上のパラメータのリストであり、Ｘはインターフェースであり、ＭＸはインターフェースＸにより定義されるメソッドであり、且つＹ及びＺは型である、
【表１】
0005165234.tif 000006
方法。
【請求項７】
請求項６において、該特定の参照を見つけることが、メソッド呼出しにおいて呼びされているメソッドに対するパラメータとしてメソッドＭＹに対する参照をパスするメソッド呼出しを見つけ出すことを包含している方法。
【請求項８】
請求項６において、ＸはメソッドＭＸを定義するインターフェースであり、且つ該特定の参照を見つけることが、インターフェースＸをインプリメントするクラスのインスタンスであるオブジェクトに対する参照をパラメータとして受取ることを期待するメソッド呼出しを見つけることを包含している方法。
【請求項９】
請求項６において、更に、
「ＯＢＪＥＣＴＮＡＭＥ．ＭＥＴＨＯＤＮＡＭＥ（ＭＹ）」の形のメソッド呼出しを「ＯＢＪＥＣＴＮＡＭＥ．ＭＥＴＨＯＤＮＡＭＥ（ｎｅｗ  ＣＬＡＳＳＮＡＭＥ（ｔｈｉｓ））」の形の代替的メソッド呼出しに対してマッピングする、
ことを包含しており、その場合に、ＯＢＪＥＣＴＮＡＭＥはオブジェクトの名前であり且つＭＥＴＨＯＤＮＡＭＥはインターフェースＸをインプリメントするクラスのインスタンスであるオブジェクトに対する参照をパラメータとして受取ることを期待するメソッドの名前である方法。
【請求項１０】
請求項１において、更に、
「ＯＢＪＥＣＴＮＡＭＥ．ＭＥＴＨＯＤＮＡＭＥ（ＭＹ）」の形のメソッド呼出しを「
ＯＢＪＥＣＴＮＡＭＥ．ＭＥＴＨＯＤＮＡＭＥ（ｎｅｗ  ＣＬＡＳＳＮＡＭＥ（ｔｈｉｓ
））」の形の代替的メソッド呼出しへマッピングする、
ことを包含しており、その場合に、ＯＢＪＥＣＴＮＡＭＥはオブジェクトの名前であり、
その場合に、ＭＥＴＨＯＤＮＡＭＥはクラスのインスタンスであるオブジェクトに対する
参照をパラメータとして受取ることを期待するメソッドの名前であり、且つ
その場合にＣＬＡＳＳＮＡＭＥは該第二プログラムメソッドを呼び出すメソッドをインプリメントするクラスの名前である方法。
【請求項１１】
請求項１において、前記バイトコードが、該ソースコードが該クラスの定義を有している場合にコンパイラにより自動的に発生されるコンパイルされたコードであり、その場合に該ソースコードは該クラスの定義を有するものではなく、その場合に該パラメータは特定のインターフェース型に対して定義されており、且つその場合に該クラスが該インターフェース型をインプリメントする方法。
【請求項１２】
命令の１つ又はそれ以上のシーケンスを担持するマシンにより読取可能な記憶媒体において、その命令は、１つ又はそれ以上のプロセッサにより実行される場合に、該１つ又はそれ以上のプロセッサをして、
ソースコード内において、メソッド呼出しにおいて呼び出されている第一プログラムメソッドに対するパラメータとしてパスされる特定の参照を見つけ、
該参照を見つけることに応答して、該特定の参照が第二プログラムメソッドに対する参照であるか否かを決定し、
該特定の参照が該第二プログラムメソッドに対する参照であることの決定に応答して、
前記メソッド呼出しにおいて呼び出された前記第一プログラムメソッドにより期待されるオブジェクトのクラスによりインプリメントされるインターフェースを決定し、
前記インターフェースをインプリメントする新たなブリッジクラスに対応するバイトコードを生成し、
前記メソッド呼出しを、前記第二プログラムメソッドに対する参照の代わりに、前記ブリッジクラスのオブジェクトへの参照をパスするメソッド呼出しへマッピングする
ステップを実施するマシンにより読取可能な記憶媒体。
【請求項１３】
請求項１２において、前記バイトコードが、該ソースコードが該クラスの定義を有している場合にコンパイラにより自動的に発生されるコンパイルされたコードであり、その場合に該ソースコードは該クラスの定義を有するものでないマシンにより読取可能な記憶媒体。
【請求項１４】
請求項１２において、該ソースコードがＪＡＶＡプログラミング言語で書かれているマシンにより読取可能な記憶媒体。
【請求項１５】
請求項１２において、該第一プログラムメソッドが該第二プログラムメソッドに対応するイベントリスナーを登録するメソッドであるマシンにより読取可能な記憶媒体。
【請求項１６】
請求項１２において、該第二プログラムメソッドが特定したオブジェクトに対する特定したイベント型のイベントの発生に応答して自動的に呼び出されるイベント処理メソッドであるマシンにより読取可能な記憶媒体。
【請求項１７】
請求項１２において、前記バイトコードを生成することが、以下の形のソースコードに基づいてコンパイラが発生するコンパイルされたコードを発生することを包含しており、その場合にＣＬＡＳＳＮＡＭＥはクラス名であり、ＰＡＲＡＭＥＴＥＲＬＩＳＴは、（ａ）メソッドＭＹの１つ又はそれ以上のパラメータ及び（ｂ）該１つ又はそれ以上のパラメータの型のリストであり、ＰＡＲＡＭＥＴＥＲＳは該１つ又はそれ以上のパラメータのリストであり、Ｘはインターフェースであり、ＭＸはインターフェースＸにより定義されるメソッドであり、且つＹ及びＺは型である、
【表２】
0005165234.tif 000007
マシンにより読取可能な記憶媒体。
【請求項１８】
請求項１７において、該特定の参照を見つけることが、メソッド呼出しにおいて呼出されるメソッドに対するパラメータとしてメソッドＭＹに対する参照をパスするメソッド呼出しを見つけることを包含しているマシンにより読取可能な記憶媒体。
【請求項１９】
請求項１７において、ＸはメソッドＭＸを定義するインターフェースであり、且つ該特定の参照を見つけることが、インターフェースＸをインプリメントするクラスのインスタンスであるオブジェクトへの参照をパラメータとして受取ることを期待するメソッド呼出しを見つけることを包含しているマシンにより読取可能な記憶媒体。
【請求項２０】
請求項１７において、前記命令は、前記１つ又はそれ以上のプロセッサにより実行される場合に、前記１つ又はそれ以上のプロセッサをして付加的に、
「ＯＢＪＥＣＴＮＡＭＥ．ＭＥＨＴＯＤＮＡＭＥ（ＭＹ）」の形のメソッド呼出しを「
ＯＢＪＥＣＴＮＡＭＥ．ＭＥＴＨＯＤＮＡＭＥ（ｎｅｗ  ＣＬＡＳＳＮＡＭＥ（ｔｈｉｓ
））」の形の代替的メソッド呼出しへマッピングする、
ステップを実施させ、
その場合に、ＯＢＪＥＣＴＮＡＭＥはオブジェクトの名前であり且つＭＥＴＨＯＤＮＡＭＥはインターフェースＸをインプリメントするクラスのインスタンスであるオブジェクトへの参照をパラメータとして受取ることを期待するメソッドの名前であるマシンにより読取可能な記憶媒体。
【請求項２１】
請求項１２において、前記命令は、前記１つ又はそれ以上のプロセッサにより実行される場合に、前記１つ又はそれ以上のプロセッサをして付加的に、
「ＯＢＪＥＣＴＮＡＭＥ．ＭＥＴＨＯＤＮＡＭＥ（ＭＹ）」の形のメソッド呼出しを「ＯＢＪＥＣＴＮＡＭＥ．ＭＥＴＨＯＤＮＡＭＥ（ｎｅｗ  ＣＬＡＳＳＮＡＭＥ（ｔｈｉｓ））」の形の代替的メソッド呼出しへマッピングする、
ステップを実施させ、
その場合にＯＢＪＥＣＴＮＡＭＥはオブジェクトの名前であり、
その場合にＭＥＴＨＯＤＮＡＭＥはクラスのインスタンスであるオブジェクトへの参照をパラメータとして受取ることを期待するメソッドの名前であり、且つ
その場合にＣＬＡＳＳＮＡＭＥは該第二プログラムメソッドを呼出すメソッドをインプリメントするクラスの名前であるマシンにより読取可能な記憶媒体。
【請求項２２】
請求項１２において、前記バイトコードが、該ソースコードが該クラスの定義を有している場合にコンパイラにより自動的に発生されるコンパイルされたコードであり、その場合に該ソースコードは該クラスの定義を有するものではなく、その場合に該パラメータは特定のインターフェース型を有するべく定義されており、且つその場合に該クラスは該インターフェース型をインプリメントするマシンにより読取可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
ＪＡＶＡ（登録商標）言語はユーザインターフェースに対して実施されたユーザのアクションを検知し且つそれに応答するためのイベント処理メカニズムを提供する。これらのイベント処理メカニズムを使用して、プログラマは、ユーザインターフェースの特定した要素に関連する特定した型のイベントの発生に応答してプログラムが実施すべきオペレーションを特定することが可能である。該特定した型のイベントが発生すると、プログラムは特定した組の命令を自動的に呼び出す。プログラマは、該特定した型のイベントの発生を周期的に調査する命令をコーディングすることの負担から免除される。
【背景技術】
【０００２】
異なるプログラミング言語はイベント処理メカニズムを特定するための異なる構文上の技法を提供する。ＪＡＶＡにおいては、イベント処理メカニズムは、伝統的に、「イベントリスナー（ＥｖｅｎｔＬｉｓｔｅｎｅｒ）」インターフェースを使用してコード化されている。ＪＡＶＡにおいては、「インターフェース」は、丁度クラスが型であるように、１つの型である。クラスのように、インターフェースはメソッドを定義する。クラスと異なり、インターフェースはメソッドをインプリメントすることは無く、その代わりに、そのインターフェースをインプリメントするクラスがそのインターフェースにより定義されるメソッドをインプリメントする。１つのクラスは複数のインターフェースをインプリメントすることが可能である。
【０００３】
歴史的に、イベントリスナーインターフェースの機能性を利用するために、プログラマは、そのイベントリスナーインターフェースのうちの特定の１つをインプリメントする新たなクラスを定義することが必要であった。各イベントリスナーインターフェースは異なる組のメソッドを定義する場合があり、その場合に、各メソッドは異なるイベント型に対応している。例えば、１つのメソッドは１つの「マウスクリック（ｍｏｕｓｅ  ｃｌｉｃｋ）」イベントタイプに対応する場合があり且つ別のメソッドは「マウスオーバー（ｍｏｕｓｅ  ｏｖｅｒ）」イベントタイプに対応する場合がある。プログラマが「マウスクリック」イベント型の発生に応答して特定の組のオペレーションを彼のコードが実施することを所望する場合には、そのプログラマは新たなクラスにおけるそのメソッドの特定のインプリメンテーションを配置させることにより適宜のインターフェースの適宜のメソッドを「インプリメント（ｉｍｐｌｅｍｅｎｔ）」することが必要であった。そのメソッドのインプリメンテーションのコード内において、プログラマはそのメソッドに対応するイベント型のイベントの発生によって実行される命令を配置させていた。
【０００４】
例えば、ＪＡＶＡプログラムは以下のようなコードを有している場合がある。
【０００５】
【表３】
0005165234.tif 000002
【０００６】
上のコードにおいて、プログラマが定義したクラス「ＦｒｅｄＣｌｉｃｋｅｄ」は「ＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」と呼ばれるイベントリスナーインターフェースをインプリメントする。ＡｃｔｉｏｎＬｉｓｔｅｎｅｒは、プログラマがＦｒｅｄＣｌｉｃｋｅｄ内にインプリメントさせた「ａｃｔｉｏｎＰｅｒｆｏｒｍｅｄ」メソッドを定義する。該メソッドのインプリメンテーションは、「ｆｒｅｄ  ｃｌｉｃｋｅｄ」というテキストをシステム出力装置へ送らせる。ＡｃｔｉｏｎＬｉｓｔｅｎｅｒをインプリメントするその他のクラスは異なる態様で「ａｃｔｉｏｎＰｅｒｆｏｒｍｅｄ」メソッドをインプリメントする場合がある。
【０００７】
しばしば、ユーザインターフェースは、ユーザが相互作用することが可能な複数のユーザインターフェース要素（例えば、ボタン、テキストボックス、ラジオボタン、チェックボックス等）を包含している。これらのユーザインターフェース要素の各々に関連して複数の異なるイベントが発生する場合がある。上述した従来のアプローチを使用する場合には、各異なるイベント型・ユーザ要素対に対して新たなクラス（上の例のＦｒｅｄＣｌｉｃｋｅｄクラスに構造が類似）を定義することが必要であった。例えば、ユーザインターフェースが５個のユーザインターフェース要素から構成されており、且つこれらのユーザインターフェース要素の各々に関連して発生する場合のある５つの型のイベントが存在しており、且つプログラマは彼のプログラムが各ユーザインターフェース要素に関連して各可能なイベント発生に応答して特定のオペレーションを実施することを所望する場合には、そのプログラマは２５個の別個のクラスをインプリメントすることが必要であった。
【０００８】
そのうち、プログラマは、しばしば、高度に類似しており且つ基本的にはＪＡＶＡ言語の構文上の条件のためにのみ必要な新たなクラス定義を何度も何度も再入力することが厄介であることに気づく。然しながら、イベントリスナーインターフェースは長い間ＪＡＶＡの中心的な部分であったものであるから、現在のインターフェースに基づいたイベント処理メカニズムを特定する態様からの著しい逸れはＪＡＶＡの一般的なスキームに上手く合わない場合がある。他のプログラミング言語により使用される著しく異なる技法を採用するためにプログラミングセマンティクスにおける著しい変化は、ＪＡＶＡ及びその特性、特にＪＡＶＡ型システムに慣れている者により受けがよくない場合がある。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
従って、より簡潔でより冗長でない構文を使用してＪＡＶＡにおいてプログラマがイベント処理メカニズムを特定することを可能とする技法は有用であり且つ望ましいものである。
【課題を解決するための手段】
【００１０】
本発明の１実施例によるプログラムコードを発生するためのマシンで実現される方法は、ソースコード内において、メソッド呼出しにおいて呼び出されている第一プログラムメソッドに対するパラメータとしてパスされる特定の参照を見つけ、該参照を見つけることに応答して、該特定の参照が第二プログラムメソッドに対する参照であるか否かを決定し、該特定の参照が該第二プログラムメソッドに対する参照であることの決定に応答して、前記メソッド呼出しにおいて呼び出された前記第一プログラムメソッドにより期待されるオブジェクトのクラスによりインプリメントされるインターフェースを決定し、前記インターフェースをインプリメントする新たなブリッジクラスに対応するバイトコードを生成し、前記メソッド呼出しを、前記第二プログラムメソッドに対する参照の代わりに、前記ブリッジクラスのオブジェクトへの参照をパスするメソッド呼出しへマッピングすることを包含している。
【００１１】
この技法の結果として、プログラマは、これらのプログラマが彼らのコードにおいて配置させるイベント処理メソッドに対する別々のクラスを定義する負担から免除される。イベント処理メソッドをインプリメントする新たなクラスを定義し、次いでその新たなクラスのインスタンスであるオブジェクトを別のメソッド（例えばイベントリスナーを登録するメソッド）へのパラメータとしてパスする代わりに、プログラマは単純にそのイベント処理メソッドを定義し且つそのイベント処理メソッドへの参照をオブジェクト参照がパスされるメソッドへのパラメータとしてパスさせることが可能である。従って、プログラマはそのイベント処理メソッドをインプリメントする新たなクラスの定義を完全に省略することが可能である。
【発明を実施するための最良の形態】
【００１２】
本発明の１実施例によれば、ソースコードをコンパイルしている間にオブジェクトへの参照を受取ることを期待する第一メソッドの呼出しが該第一メソッドに対してオブジェクトへの参照の代わりに第二メソッドへの参照をパスすることをＪＡＶＡコンパイラが決定する場合に、そのＪＡＶＡコンパイラはそのＪＡＶＡコンパラーが通常行うようなコンパイル時エラーを発行することがないようにＪＡＶＡコンパイラは修正されている。その代わりに、ＪＡＶＡコンパイラは、そのソースコードが（ａ）その第二メソッドを呼出したメソッドをインプリメントする「ブリッジ」クラスを定義しており、且つ（ｂ）その第一メソッドの呼出しにおいて、該第二メソッドへの参照の代わりに「ブリッジ」クラスのインスタンスであるオブジェクトへの参照を包含している場合にＪＡＶＡコンパイラが発生するようなコンパイルされたコード（例えば、バイトコード）を発生する。
【００１３】
例えば、コンパイラは以下のソースコードをコンパイルしている場合があり、その場合に、第一メソッド「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」の呼出しが、「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」へのパラメータとして、第二メソッド「ｆｒｅｄＣｌｉｃｋｅｄ」への参照をパスし、その場合に「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」はその代わりにオブジェクトへの参照を受取ることを期待する（「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」の定義に基づいて）。
【００１４】
【表４】
0005165234.tif 000003
【００１５】
以前においては、「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」メソッドの呼出しは、その存在をコンパイラが気が付いていない見掛けのオブジェクト「ｆｒｅｄＣｌｉｃｋｅｄ」への参照をパスするので、上のコードはコンパイラをしてコンパイル時エラーを発行させる。上のコードは「ｆｒｅｄＣｌｉｃｋｅｄ」という名前のオブジェクトのインスタンス化を包含するものではない。以前においては、コンパイラがこのような呼出しに遭遇すると、コンパイラは、そのソースコードがどこか他に「ｆｒｅｄＣｌｉｃｋｅｄ」という名前のオブジェクトをインスタンス化させているか否かを決定しようとしていた。そのソースコードがそのようにしていないことを決定すると、コンパイラはエラーを発行していた。
【００１６】
然しながら、本発明の１実施例によれば、このような呼出しに遭遇することに応答して、コンパイラは、その代わりに、そのソースコードが（ａ）メソッド「ｆｒｅｄＣｌｉｃｋｅｄ」を呼出したメソッドをインプリメントするクラス「ｆｒｅｄＣｌｉｃｋｅｄＢｏｘｅｒ」を付加的に定義しており且つ（ｂ）メソッド「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」の呼出しにおいてメソッド「ｆｒｅｄＣｌｉｃｋｅｄ」への参照の代わりにクラス「ｆｒｅｄＣｌｉｃｋｅｄＢｏｘｅｒ」のインスタンスであるオブジェクトへの参照を包含している場合にそのコンパイラが発生するようなバイトコードを発生する。
【００１７】
例えば、上のソースコードに示した呼出しに遭遇することに応答して、コンパイラは、上のソースコードにおけるアウタークラス「Ｆｏｏ」が以下のコードを付加的に包含している場合に発生されるようなバイトコードを自動的に発生する場合がある。
【００１８】
【表５】
0005165234.tif 000004
【００１９】
付加的に、その呼出しに遭遇することに応答して、呼出し「ｆｒｅｄ．ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ（ｆｒｅｄＣｌｉｃｋｅｄ）」に基づいてコンパイラが発生するようなバイトコードを発生する代わりに、該コンパイラは呼出し「ｆｒｅｄ．ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ（ｎｅｗ  ＦｒｅｄＣｌｉｃｋｅｄＢｏｘｅｒ（ｔｈｉｓ））」に基づくバイトコードを該コンパイラが自動的に発生する場合がある。
【００２０】
コンパイラは、該バイトコードを発生する前に上の代替的ソースコードを発生することは実際には必要ではなく、該コンパイラはそのオリジナルのソースコードをあたかもそれが該代替的ソースコードと等価であるかのように取扱い且つ該代替的ソースコードがどのようにして書かれたかに基づいてバイトコードを発生することが可能である。該コンパイラは該代替的ソースコードと機能的に等価なバイトコードを発生する。上から理解することが可能であるように、該代替的ソースコードは、メソッド「ｆｒｅｄＣｌｉｃｋｅｄ」を呼出すメソッド「ａｃｔｉｏｎＰｅｒｆｏｒｍｅｄ」をインプリメントする新たな「ブリッジ」クラス「ｆｒｅｄＣｌｉｃｋｅｄＢｏｘｅｒ」の定義を包含しており、又、メソッド「ｆｒｅｄＣｌｉｃｋｅｄ」への参照の代わりにクラス「ｆｒｅｄＣｌｉｃｋｅｄＢｏｘｅｒ」のインスタンスであるオブジェクトへの参照をメソッド「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」へパスする改定した呼出しを包含している。
【００２１】
グラハムハミルトン（Ｇｒａｈａｍ  Ｈａｍｉｌｔｏｎ）による「ザジャバビーンズＡＰＩ仕様（Ｔｈｅ  ＪａｖａＢｅａｎｓ  ＡＰＩ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ）」、バージョン１．０１（１９９７年８月８日）をあたかも完全に且つ元の通りに本明細書に開示されているかの如く引用により取り込む。「ザジャバビーンズＡＰＩ仕様」は標準のＪＡＶＡイベント処理モデルを定義している。
【００２２】
本発明の１実施例によれば、コンパイル時期間中に、コンパイラが、ソースコードにおいて、クラス「Ｙ」のメソッド「ＭＹ」への参照が呼出されるメソッドに対するパラメータとしてパスされているメソッド呼出しを見つけると、呼出されメソッドがオブジェクトへの参照を受取ることを期待している場合で、且つそのオブジェクトが単一のメソッド「ＭＸ」を定義するインターフェース「Ｘ」をインプリメントするクラスのインスタンスである場合には、該コンパイラは以下の決定を行う。
【００２３】
上述した場合においては、該コンパイラはメソッド「ＭＹ」の「シグネチャ（ｓｉｇｎａｔｕｒｅ）」がメソッド「ＭＸ」の「シグネチャ」と互換性があるか否かを決定する。本発明の１実施例においては、メソッド「ＭＹ」のシグネチャがメソッド「ＭＸ」のシグネチャの「サブシグネチャ（ｓｕｂｓｉｇｎａｔｕｒｅ）」である場合に、メソッド「ＭＹ」のシグネチャはメソッド「ＭＸ」のシグネチャと互換性があるものと考えられる。シグネチャ及びサブシグネチャについては後の「シグネチャ」と題名の付けたセクションにおいて簡単に説明する。
【００２４】
メソッド「ＭＹ」のシグネチャがメソッド「ＭＸ」のシグネチャと互換性があるものと該コンパイラが決定する場合には、本発明の１実施例においては、該ソースコードにおいて、該メソッド呼出しを包含する「アウタークラス（ｏｕｔｅｒ  ｃｌａｓｓ）」が以下の形を有する「インナークラス（ｉｎｎｅｒ  ｃｌａｓｓ）」を包含している場合に発生されるようなバイトコードを該コンパイラが発生する（尚、「Ｚ」はメソッド「ＭＸ」の戻り型であり、例えば「ｖｏｉｄ」である）。
【００２５】
【表６】
0005165234.tif 000005
【００２６】
要するに、該コンパイラは、上のコードに対応するバイトコードを発生することにより新たな「ブリッジ」クラスを自動的に作成する。メソッド呼出しにおけるパラメータとしてパスされる各対応するメソッド参照に対して別個の「ブリッジ」クラスを作成することが可能である。クラス名「Ｂｏｘｅｒ」は、例としてのみ使用され、本発明の実施例は、メソッド呼出しにおけるパラメータとしてパスされる各異なるメソッド参照に対して異なるクラス名を使用することが可能である．例えば、第一メソッド呼出しが「ｆｒｅｄＣｌｉｃｋｅｄ」という名前のメソッドへの参照をパスする場合には、対応する「ブリッジ」クラスは「ｆｒｅｄＣｌｉｃｋｅｄＢｏｘｅｒ」と名前を付けることが可能である。第二メソッド呼出しが「ｂｕｒｔＣｌｉｃｋｅｄ」という名前のメソッドへの参照をパスする場合には、対応する「ブリッジ」クラスは「ｂｕｒｔＣｌｉｃｋｅｄＢｏｘｅｒ」と名前を付けることが可能である。
【００２７】
本発明の１実施例によれば、上述したようなバイトコードを発生することに加えて、該コンパイラは、又、ソースコードにおける「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ（ＭＹ）」の形を有する各メソッド呼出しを「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ（ｎｅｗ  Ｂｏｘｅｒ（ｔｈｉｓ））」の形を有する代替的メソッド呼出しに対してマップさせる。例えば、そうでない場合にはコンパイラがオリジナルのメソッド呼出しに対応するバイトコードを発生していた場合に、該コンパイラは代替的メソッド呼出しに対応するバイトコードを発生することによりこのマッピングを発生する場合がある。このマッピングの結果として、メソッド「ＭＹ」への参照をパスしたメソッド呼出しは、その代わりに、自動的に発生される「ブリッジ」クラスのインスタンスであるオブジェクトへの参照をパスするように実効的になされる。
【００２８】
図１はオリジナルのソースコード及び対応する仮定の代替的コードの例を例示する模式図であり、それに基づいて、コンパイラは上述した本発明の１実施例に基づいてバイトコードを発生する。ボックス１０２はプログラマがコンパイルすべきソースコード内に元々記入するコードを包含している。理解することが可能であるように、ボックス１０２内のボックス１０６はメソッド「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」の呼出しを包含しており、その中に、オブジェクトへの参照が期待される場合に、メソッド「ＭＹ」への参照がパスされる。
【００２９】
本発明の１実施例によれば、コンパイラがボックス１０２内のソースコードに基づいてバイトコードを発生する場合に、該バイトコードは、その代わりにボックス１０４内の仮定の代替的コードに基づいてコンパイラがバイトコードを発生する場合に発生されるようなバイトコードと機能的に等価である。ボックス１０４内のコードは、２，３の変更があるがボックス１０２内のコードと類似している。クラス「Ｙ」内に、「ブリッジ」クラス「ＭＹＢｏｘｅｒ」が挿入されている。クラス「ＭＹＢｏｘｅｒ」はインターフェース「Ｘ」をインプリメントする。何故ならば、該コンパイラは、メソッド「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」がインターフェース「Ｘ」をインプリメントするクラスのインスタンスであるオブジェクトを期待することを決定するからである。クラス「ＭＹＢｏｘｅｒ」はコンストラクターメソッド（メソッド「ＭＹＢｏｘｅｒ」）及びインターフェース「Ｘ」により定義されるメソッド「ＭＸ」を有している。
【００３０】
メソッド「ＭＸ」はクラス「Ｙ」のメソッド「ＭＹ」と同一の戻り型及び引き数を有している。メソッド「ＭＸ」は、メソッド「ＭＸ」が呼出される場合に、メソッド「ＭＸ」がメソッド「ＭＸ」へパスされたのと同一のパラメータでメソッド「ＭＹ」を呼出すようにインプリメントされる。
【００３１】
付加的に、ボックス１０２におけるメソッド呼出し１０６の代わりに、ボックス１０４は、メソッド「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」を呼出す改定されたメソッド呼出し１１０を包含しており、ボックス１０８内に示されている新たな「ＭＹＢｏｘｅｒ」クラスのインスタンスであるオブジェクトをパスする。
【００３２】
実行されると、ボックス１０２におけるコードのコンパイレーションから得られるバイトコードは、ボックス１０４におけるコードのコンパイレーションから得られるバイトコードが有するものと同一の効果を有している。然しながら、ボックス１０２におけるソースコードはボックス１０４におけるコードよりも一層簡潔且つ簡明である。ボックス１０２に示した構文を使用することはプログラマの時間及び努力を節約する。
【００３３】
図２は、別のメソッドへの参照がパラメータとしてパスされるメソッドの呼出しを包含するソースコードに基づくバイトコードを発生するための技法２００の１例を例示するフローチャートである。例えば、技法２００は図３に例示した装置のようなコンピュータ上で実行するＪＡＶＡコンパイラにより実施することが可能である。技法２００は、ソースコードのコンパイレーション期間中に複数回実施することが可能である。
【００３４】
ブロック２０２において、コンパイル中のソースコード内においてメソッド呼出しが検知される。例えば、該コンパイラは図１のボックス１０６に示したようなメソッド呼出し「ｆｒｅｄ．ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ（ＭＹ）」を検知することが可能である。
【００３５】
ブロック２０４において、メソッド呼出しを検知することに応答して、呼出されるメソッドへのパラメータとしてパスされる参照がオブジェクトへの参照又は特定のメソッドへの参照であるか否かが決定される。例えば、該コンパイラは、「ＭＹ」がオブジェクトへの参照か又はメソッドであるか否かを決定することが可能である。その参照がオブジェクト参照である場合には、制御はブロック２０６へパスする。そうでない場合には、制御はブロック２０８へパスする。
【００３６】
ブロック２０６において、メソッド呼出しが呼出されるメソッドへのパラメータとしてパスされるオブジェクト参照が関与する場合には、コンパイレーションは通常の如くに進行する。該コンパイラは、メソッド呼出しに相応したバイトコードを発生することが可能である。
【００３７】
一方、ブロック２０８において、特別バイトコードが発生される。この特別バイトコードは、そのメソッド呼出しを包含するクラスが、付加的に、上述した如く「ブリッジ」クラス及び改定したメソッド呼出しを包含している場合に発生されるようなバイトコードと同一である。本発明の１実施例においては、特別バイトコードを発生することは、コンパイラが既に発生したバイトコードを修正することが関与する。本発明の１実施例においては、特別バイトコードを発生することは、以下のブロック２１０−２１６内に記載されるオペレーションが関与する。
【００３８】
ブロック２１０において、メソッド呼出し（上のブロック２０２において検知）において呼出されるメソッドにより期待されるオブジェクトのクラスによってインプリメントされるインターフェースが決定される。例えば、メソッド「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」がインターフェース「Ｘ」をインプリメントするクラスのインスタンスであるオブジェクトを受取ることを期待することを該コンパイラが決定することが可能である。
【００３９】
ブロック２１２において、新たな「ブリッジ」クラスに対応するバイトコードが発生される。この新たな「ブリッジ」クラスは、上のブロック２１０において決定されたインターフェースをインプリメントする。例えば、該コンパイラは図１のボックス１０８に示したクラス「ＭＹＢｏｘｅｒ」に対応するバイトコードを発生することが可能である。本発明の１実施例においては、新たな「ブリッジ」クラスに対応するバイトコードを発生することは、下のブロック２１４に記載されるオペレーションが関与する。
【００４０】
ブロック２１４において、新たなメソッドに対応するバイトコードが発生される。この新たなメソッドはインターフェース「Ｘ」により定義される単一のメソッド「ＭＸ」である。この新たなメソッドは、その新たなメソッドが呼出される場合に、その新たなメソッドがそのメソッド呼出しにおいて呼出されるメソッド（「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」）へパスされるメソッド参照に対応するメソッド「ＭＹ」を呼出すような態様で、且つその新たなメソッドを呼出すために使用されるものと同一のパラメータ（例えば、「ｅｖｔ  ｏｆ  ｔｙｐｅ  ＡｃｔｉｏｎＥｖｅｎｔ」）でインプリメントされる。例えば、該コンパイラは図１のボックス１０８に示したメソッド「ＭＸ」に対応するバイトコードを発生することが可能である。
【００４１】
ブロック２１６において、そのメソッド呼出しは新たな改定されたメソッド呼出しへマップされる。本発明の１実施例によれば、このマッピングはバイトコードがその代わりに改定されたメソッド呼出しのオペレーションを反映するように、該コンパイラーがオリジナルのメソッド呼出し（「ｆｒｅｄ．ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ（ＭＹ）」）に対して発生するバイトコードを修正することが関与する。その改定されたメソッド呼出しは、オリジナルのメソッド呼出しにおいて呼出したメソッドに対してパスされるメソッド参照（メソッド「ＭＹ」への）の代わりに新たな「ブリッジ」クラス（「ＭＹＢｏｘｅｒ」）のインスタンスであるオブジェクトへの参照を呼出したメソッド（「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」）へパスする。例えば、コンパイラーは、そのバイトコードがその代わりに図１のボックス１１０の改定したメソッド呼出しを反映するように、図１のボックス１０６のメソッド呼出しに対応するバイトコードを改訂することが可能である。
【００４２】
ブロック２１８において、コンパイレーションは通常の通りに進行する。コンパイラは、コンパイル中のソースコードの残部に基づいてバイトコードの発生を継続することが可能である。
【００４３】
本発明の１実施例においては、特別バイトコードが上述した如くに発生される前に、コンパイラは、メソッド「ＭＹ」のシグネチャが上述した如くにメソッド「ＭＸ」のシグネチャと互換性があるか否かを決定する。本発明の１実施例においては、メソッドシグネチャが非互換性である場合にコンパイラはエラーを発行する。
【００４４】
その他のオブジェクトへのメソッドへの参照のパス
上の説明において、オリジナルのメソッド呼出しが「現在の」オブジェクトのメソッドへ参照をパスしていた。例えば、図１のボックス１０６において、オリジナルのメソッド呼出し「ｆｒｅｄ．ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ（ＭＹ）」は、そのメソッド参照が明示的にいずれかのオブジェクトを指定するものではないので「現在の」オブジェクトのメソッドをパスするものと仮定されている。そのメソッド参照がオブジェクト参照により資格が与えられるものでない場合には、そのメソッド参照は「現在の」オブジェクト「ｔｈｉｓ」のメソッドを参照するものと仮定される。従って、ボックス１０６に示されるオリジナルのメソッド呼出しは等価的に「ｆｒｅｄ．ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ（ｔｈｉｓ．ＭＹ）」と書くことが可能である。
【００４５】
然しながら、「現在の」オブジェクト以外の何等かのオブジェクトのメソッドへの参照をオリジナルのメソッド呼出しにおけるパラメータとしてパスするソースコードを書くことが望ましい場合がある。例えば、両方がクラス「Ｙ」のインスタンスである２つのオブジェクトが存在する場合がある。１つのオブジェクトは「ｊａｃｋ」と名前が付けられている場合があり且つ他方のオブジェクトは「ｂｕｒｔ」と名前が付けられている場合がある。各オブジェクトが現在のオブジェクト自身のメソッド「ＭＹ」への参照ではなくオブジェクト「ｊａｃｋ」のメソッド「ＭＹ」への参照を「ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ」メソッド呼出しにおいてパスすることをプログラマが所望する場合には、そのプログラマは、代替的に、
ｆｒｅｄ．ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ（ｊａｃｋ．ＭＹ）
のようにボックス１０６に示したオリジナルのメソッド呼出しをコード化する場合がある。
【００４６】
本発明の１実施例によれば、改定されたメソッド呼出し（例えば、図１のボックス１１０に示した改定されたメソッド呼出し）は、オリジナルのメソッド呼出しにおけるパラメータとしてパスされたメソッド参照に資格を付与するオブジェクト参照を明示的に表示する。例えば、メソッド参照「ＭＹ」が上の例において説明したようなオブジェクト参照「ｊａｃｋ」で資格が付与される場合には、対応する改定されたメソッド呼出しは、
ｆｒｅｄ．ａｄｄＡｃｔｉｏｎＬｉｓｔｅｎｅｒ（ｎｅｗ  ＭＹＢｏｘｅｒ（ｊａｃｋ））
である。
【００４７】
従って、本発明の１実施例によれば、オリジナルのメソッド呼出しが特定のオブジェクト参照により明示的に資格が付与されることのないメソッド参照をパスする場合には、対応する改定されたメソッド呼出しが「ブリッジ」クラスのコンストラクタメソッドをして暗示的なオブジェクト修飾子「ｔｈｉｓ」を使用して呼出させるが、オリジナルのメソッド呼出しが特定のオブジェクト参照により資格が付与されるメソッド参照をパスさせる場合には、対応する改定されたメソッド呼出しは「ブリッジ」クラスのコントラクタメソッドをしてその代わりに特定のオブジェクト参照を使用して呼出させる（例えば、「ｊａｃｋ」）。
【００４８】
シグネチャ
本発明の１実施例によれば、特定のメソッドのシグネチャは特定のメソッドの名前、特定のメソッドの仮パラメータの引き数型、及びその特定のメソッドの型パラメータの境界を包含している。本発明の１実施例によれば、２つのメソッドが同一の名前及び同一の引き数型を有している場合にはそれら２つのメソッドは同一のシグネチャを有している。本発明の１実施例によれば、以下の全てが真である場合には２つのメソッドは同一の引き数型を有している。
【００４９】
・それらのメソッドが同数の仮パラメータを有している（それはゼロである場合がある）。
【００５０】
・それらのメソッドは同数の型パラメータを有している（それはゼロである場合がある）。
【００５１】
・＜Ａ1，．．．ＡN＞を１つのメソッドの仮型パラメータとし且つ＜Ｂ1，．．．ＢN＞を他方のメソッドの仮型パラメータとして、１乃至Ｎのｉの全ての値に対しＢiをＡiへリネーミング（ｒｅｎａｍｉｎｇ）した後に、それらのメソッドの対応する型変数の境界及び引き数型が同じである。
【００５２】
「ＭＸ」が「ＭＹ」と同一のシグネチャを有しているか、又は「ＭＹ」のシグネチャが「ＭＸ」のシグネチャの消去と同一である場合には、メソッド「ＭＹ」のシグネチャはメソッド「ＭＸ」のシグネチャの「サブシグネチャ」である。
【００５３】
ハードウエア概観
図３は本発明の１実施例をインクリメントすることが可能なコンピュータシステム３００を例示したブロック図である。コンピュータシステム３００は、情報交換を容易化するためのバス３０２と、情報を処理するためにバス３０２と結合されている１つ又はそれ以上のプロセッサ３０４とを包含している。コンピュータシステム３００は、又、プロセッサ３０４により実行されるべき情報及び命令を格納するためにバス３０２へ結合されているランダムアクセスメモリ（ＲＡＭ）又はその他の動的格納装置等のメインメモリ３０６を包含している。メインメモリ３０６は、又、プロセッサ３０４による命令の実行期間中に一時的な変数又はその他の中間情報を格納するために使用することが可能である。コンピュータシステム３００は、更に、プロセッサ３０４に対する静的情報及び命令を格納するためにバス３０２へ結合されている読取専用メモリ（ＲＯＭ）３０８又はその他の静的格納装置を包含することが可能である。磁気ディスク又は光学ディスク等の格納装置３１０が設けられており且つ情報及び命令を格納するためにバス３０２へ結合されている。
【００５４】
コンピュータシステム３００はコンピュータユーザに対して情報を表示するために陰極線管（ＣＲＴ）等のディスプレイ３１１へバス３０２を介して結合させることが可能である。英文字及びその他のキーを包含する入力装置３１４が情報及びコマンド選択をプロセッサ３０４へ通信するためにバス３０２へ結合されている。別のタイプのユーザ入力装置はプロセッサ３０４に対して方向情報及びコマンド選択を通信し且つディスプレイ３１２上のカーソルの動きを制御するためのマウス、トラックボール、又はカーソル方向器等のカーソル制御３１６である。この入力装置は、典型的に、該装置が面内における位置を特定することを可能とする第一軸（例えば、ｘ）及び第二軸（例えば、ｙ）の２つの軸における２つの自由度を有している。
【００５５】
コンピュータシステム３００において、バス３０２は種々のコンポーネント間において、情報、信号データ等を交換させることを可能とする任意のメカニズム及び／又は媒体とすることが可能である。例えば、バス３０２は電気的信号を担持する１組の導体とすることが可能である。バス３０２は、又、該コンポーネントのうちの１つ又はそれ以上の間でワイヤレス信号を担持するワイヤレス媒体（例えば、空気）とすることが可能である。バス３０２は、又、該コンポーネントのうちの１つ又はそれ以上の間で容量的に信号を交換することを可能とする媒体（例えば、空気）とすることが可能である。バス３０２は、更に、該コンポーネントのうちの１つ又はそれ以上を接続するネットワーク接続とすることが可能である。全体的に、種々のコンポーネント間において情報、信号、データ等を交換することを可能とする任意のメカニズム及び／又は媒体をバス３０２として使用することが可能である。
【００５６】
バス３０２は、又、これらのメカニズム／媒体の結合とすることが可能である。例えば、プロセッサ３０４はワイヤレスによって格納装置３１０と通信することが可能である。このような場合には、バス３０２は、プロセッサ３０４及び格納装置３１０の観点からは、空気等のワイヤレス媒体である。更に、プロセッサ３０４は容量的にＲＯＭ３０８と通信することが可能である。この場合には、バス３０２はこの容量的通信を行うことを可能とする媒体（例えば空気）である。更に、プロセッサ３０４はネットワーク接続を介してメインメモリ３０６と通信することが可能である。この場合には、バス３０２はネットワーク接続である。更に、プロセッサ３０４は１組の導体を介してディスプレイ３１２と通信することが可能である。この場合には、バス３０２は該１組の導体である。従って、どのようにして種々のコンポーネントが互いに通信するかに依存して、バス３０２は異なる形態を取ることが可能である。バス３０２は、図３に示したように、種々のコンポーネント間において情報、信号、データ等を交換することを可能とするメカニズム及び／又は媒体の全てを機能的に表わしている。
【００５７】
本発明はここに記載した技法をインプリメントするためのコンピュータシステム３００の使用に関連している。本発明の１実施例によれば、これらの技法はメインメモリ３０６内に包含されている１つ又はそれ以上の命令の１つ又はそれ以上のシーケンスを実行するプロセッサ３０４に応答してコンピュータシステム３００により実施される。これらの命令は格納装置３１０等の別のマシンにより読取可能な媒体からメインメモリ３０６内に読込むことが可能である。メインメモリ３０６内に包含されている命令からなるシーケンスの実行は、プロセッサ３０４をしてここに記載した処理ステップを実施させる。別の実施例においては、本発明をインプリメントするためのソフトウエア命令の代わりに又はそれと組合わせてハードワイアード回路を使用することが可能である。従って、本発明の実施例はハードウエア回路とソフトウエアとのいずれかの特定の結合に制限されるものではない。
【００５８】
ここで使用する「マシンにより読取可能な媒体」という用語は、マシンをして特定の態様で動作させるデータを供給する場合に参加する任意の媒体のことを意味している。コンピュータシステム３００を使用してインプリメントされる実施例において、種々のマシンにより読取可能な媒体が、例えば、実行のためにプロセッサ３０４へ命令を供給する場合に関与する。このような媒体は、これらに制限されるものではないが、非揮発性媒体、揮発性媒体、伝送媒体を包含する多くの形態をとることが可能である。非揮発性媒体は、例えば、格納装置３１０等の光学的又は磁気的ディスクを包含している。揮発性媒体は、メインメモリ３０６等のダイナミックメモリを包含している。伝送媒体は、バス３０２を有するワイヤを包含して、同軸ケーブル、銅ワイヤー及びオプティカルファイバーを包含している。伝送媒体は、又、電波及び赤外線データ通信期間中に発生されるものなどの音波又は光波の形態をとることが可能である。本発明の１実施例によれば、上述した伝送媒体はタンジブル（即ち、「実質的に実際の」）媒体である。
【００５９】
マシンにより読取可能な媒体の一般的な形態は、例えば、フロッピィディスク、フレキシブルディスク、ハードディスク、磁気テープ、又はいずれかのその他の磁気媒体、ＣＤ−ＲＯＭ、何等かのその他の光学的媒体、パンチカード、ペーパーテープ、孔のパターンを具備する何等かのその他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、フラッシュＥＰＲＯＭ、何等かのその他のメモリチップ又はカートリッジ、以後記載するような搬送波、又はコンピュータがそれから読取ることが可能な任意のその他の媒体を包含している。
【００６０】
種々の形態のマシンにより読取可能な媒体は、実行のためにプロセッサ３０４に対し１つ又はそれ以上の命令からなる１つ又はそれ以上のシーケンスを担持する場合に関与する場合がある。例えば、該命令は、初期的に、遠隔コンピュータの磁気ディスク上に担持されている場合がある。該遠隔コンピュータは該命令をそのダイナミックメモリ内にロードさせ且つ該命令をモデムを使用して電話線を介して送信することが可能である。コンピュータシステム３００に対して局所的なモデムは電話線上のデータを受取り且つ赤外線送信器を使用して該データを赤外線信号へ変換させることが可能である。赤外線検知器は該赤外線信号内に担持されているデータを受信することが可能であり、且つ適宜の回路が該データをバス３０２上に配置させることが可能である。バス３０２はメインメモリ３０６へのデータを担持し、それからプロセッサ３０４は該命令を検索し且つ実行する。メインメモリ３０６により受取られる命令は、オプションとして、プロセッサ３０４による実行の前又は後のいずれかにおいて格納装置３１０上に格納させることが可能である。
【００６１】
コンピュータシステム３００は、又、バス３０２へ結合されている通信インターフェース３１８を包含している。通信インターフェース３１８はローカルネットワーク３２２へ接続されているネットワークリンク３２０へ結合させる二方向データ通信を提供する。例えば、通信インターフェース３１８は対応するタイプの電話線に対してデータ通信接続を提供するための統合デジタルネットワーク（ＩＳＤＮ）カード又はモデムとすることが可能である。別の例として、通信インターフェース３１８は互換性のあるＬＡＮへのデータ通信接続を提供するローカルエリアネットワーク（ＬＡＮ）とすることが可能である。ワイヤレスリンクをインプリメントすることも可能である。いずれかのこのようなインプリメンテーションにおいて、通信インターフェース３１８は種々のタイプの情報を表わすデジタルデータストリームを担持する電気的、電磁的又は光学的信号を送信し且つ受信する。
【００６２】
ネットワークリンク３２０は、典型的に、その他のデータ装置に対し１つ又はそれ以上のネットワークを介してデータ通信を提供する。例えば、ネットワークリンク３２０はローカルネットワーク３２２を介してホストコンピュータ３２４に対し又はインターネットサービスプロバイダ（ＩＳＰ）３２６により操作されるデータ装置への接続を与えることが可能である。ＩＳＰ３２６は現在一般的に「インターネット」３２８として呼称されているワールドワイドパケットデータ通信ネットワークを介してデータ通信サービスを提供する。ローカルネットワーク３２２及びインターネット３２８は、両方共、デジタルデータストリームを担持する電気的、電磁的又は光学的信号を使用する。コンピュータシステム３００への及びそれからのデジタルデータを担持している種々のネットワークを介しての信号及びネットワークリンク３２０上及び通信インターフェース３１８を介しての信号は、情報を輸送する搬送波の例示的な形態である。
【００６３】
コンピュータシステム３００はネットワーク、ネットワークリンク３２０及び通信インターフェース３１８を介してメッセージ及びプログラムコードを包含するデータを送信し且つ受信することが可能である。インターネットの例においては、サーバー３２０はインターネット３２８、ＩＳＰ３２６、ローカルネットワーク３２２及び通信インターフェース３１８を介してアプリケーションプログラムに対する要求されたコードを送信する場合がある。
【００６４】
受信されたコードはそれが受信されるとプロセッサ３０４により実行することが可能であり、及び／又は後に実行するために格納装置３１０又はその他の非揮発性格納部内に格納することが可能である。このように、コンピュータシステム３００は搬送波の形態でアプリケーションコードを得ることが可能である。
【００６５】
前述した説明において、本発明の実施例をインプリメンテーション毎に異なる場合がある多数の特定の詳細を参照して説明した。従って、何が発明であるか及び出願人により発明であるとして意図されているものが何であるか、の唯一且つ排他的な指標はこの出願から発行される１組の特許請求の範囲であって、このような特許請求の範囲が発行される特定の形態において、全てのその後の補正を包含して発行される特許請求の範囲である。このような特許請求の範囲に包含される用語に対してここで明示的に記載される明示的な定義は特許請求の範囲に使用されるそのような用語の意味を支配する。従って、請求項において明示的に記載されていない限定、要素、特性、特徴、利点又は属性は如何なる態様でもこのような請求項の範囲を制限すべきものではない。従って、本明細書及び図面は制限的な意味ではなく例示的なものとしてみなされるべきである。
【図面の簡単な説明】
【００６６】
【図１】オリジナルのソースコード及び本発明の１実施例に従ってそれに基づいてコンパイラがバイトコードを発生するような対応する仮定的代替的コードの例を例示した模式図。
【図２】それに対して別のメソッドへの参照がパラメータとしてパスされる１つのメソッドの呼出しを包含するソースコードに基づいてバイトコードを発生するための技法の１例を例示したフローチャート。
【図３】本発明のある実施例をインプリメントさせることが可能な例示的コンピュータ実体のハードウエアブロック図。
【図１】
0005165234.tif 000008
【図２】
0005165234.tif 000009
【図３】
0005165234.tif 000010