JP2002517815A - オブジェクトベースプログラミングでのメソッド参照 - Google Patents

オブジェクトベースプログラミングでのメソッド参照

Info

Publication number
JP2002517815A
JP2002517815A JP2000552579A JP2000552579A JP2002517815A JP 2002517815 A JP2002517815 A JP 2002517815A JP 2000552579 A JP2000552579 A JP 2000552579A JP 2000552579 A JP2000552579 A JP 2000552579A JP 2002517815 A JP2002517815 A JP 2002517815A
Authority
JP
Japan
Prior art keywords
class
computer
instance
delegate
another
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.)
Granted
Application number
JP2000552579A
Other languages
English (en)
Other versions
JP4220127B2 (ja
Inventor
ピーター エイチ ゴールド
アンダース ヘジェルスバーグ
チャド ダブリュー ロイヤル
トレイシー シー シャープ
マイケル ジェイ トウトンギ
エドワード エイチ ワイアット
スコット エム ウィルタムス
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.)
Microsoft Corp
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2002517815A publication Critical patent/JP2002517815A/ja
Application granted granted Critical
Publication of JP4220127B2 publication Critical patent/JP4220127B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related 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

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)

Abstract

(57)【要約】 メソッドへのリファレンスをオブジェクトベースのプログラミングシステムにおいてカプセル化し、そのリファレンスが安全であることを保証するための方法及び装置が開示されている。カプセル化の方法は、a)参照されるメソッドの形状を定義するエンティティを定義し、b)メソッドへのリファレンスを入手し、c)このリファレンスを任意のデータ構成で保存し、d)リファレンスを他のパーティにより書き込まれたコードへ送り、e)メソッドリファレンスの保持者誰にでもメソッドが呼び出せるようにし、f)メソッドリファレンス保持者がターゲットオブジェクト及び参照されるメソッドを決定できるようにすることを提供する。これらの目的は、a)開発者が遅い時期(実行時)ではなく早く(コンパイル時)タイプ不適合問題を学習でき、そしてb)開発ツールが、開発者に、デレゲイトを用いる構成要素の形状について情報を提示することができるようにしながら、強くタイプされた方式で達成される。更に、イベントベースプログラミングのモデルが開示されており、そこではイベント関係のコードがデレゲイト内でカプセル化できるようになっている。

Description

【発明の詳細な説明】
【0001】 (著作権表示/許可) 本特許書類の開示の一部は、著作権保護を受けるべき資料を含んでいる。著作
権者は、特許・商標局のファイル又は記録に掲載される際に、特許書類又は特許
開示の何れかにより複写再生されるのに異存はないが、そうでない場合は全著作
権を留保するものである。次の表示は、以下に記載され、図面で表示されている
ようにソフトウェア及びデータに適用される。 Copyright(c)1998、Microsoft Corporation、All Rights Reserved
【0002】 (発明の属する技術的分野) 本発明は、一般的にはコンピューター言語、厳密にはオブジェクトベース又は
オブジェクト指向言語でプログラミングするための方法及び装置に関する。
【0003】 (発明の背景) 高級プログラミング言語は、開発者がコードを更に小さなチャンクに分解でき
るようにする。非オブジェクト指向言語では、分解の最小単位は手続き又は関数
である。オブジェクト指向言語では、分解の最小単位は、通常、クラス上のメソ
ッドである。
【0004】 多くの最新プログラミング言語も、開発者がこれらの分解単位を(やり取りさ
れる、データ構造に保存されるなど)の値として、且つ値が表すコードチャンク
を「呼び出す」又は「呼出しする」のに用いられる値として扱えるようにする。
異なる言語は異なるメカニズムを提供する。
【0005】 非オブジェクト指向プログラミング言語において、これらの構造の中で最もよ
く知られているのは、C及びC++に見られる関数ポインタである。関数型プロ
グラミング言語(LISP、ML、スキームなど)では、プログラミングのこの
スタイルが一般的である。オブジェクト指向プログラミング言語では、この目的
に適したメカニズムは開発されていない。
【0006】 開発者がメソッドリファレンスを作成及び使用可能なプログラミングシステム
とするため、本発明は次の設計目標に取り組む。
【0007】 a)参照すべきメソッドの形状を定義するエンティティを明確にする b)メソッドに対するリファレンスを入手する c)このリファレンスを任意のデータ構造に保存する d)リファレンスを他のパーティにより書き込まれたコードへ送る e)メソッドリファレンスを保持する者は誰でもメソッドの呼び出しができ
るようにする f)メソッドリファレンスの保持者は参照されている目標オブジェクト及び
メソッドを決定できるようにする。
【0008】 更に、本発明のプログラミングシステムは、上記目標を、強くタイプされた方
式で達成し、 a)開発者が後(実行時)ではなく早期(コンパイル時)にタイプミスマッ
チ問題を理解できるようにし、 b)開発ツールが、デレゲイト(delegate)を用いる要素の形状について開発
者に情報を示す、ことができるようする。
【0009】 (関連する問題に対する従来の解法) 多くの製品が、すべてマイクロソフト社から入手可能なマイクロソフト(登録
商標)ビジュアルC++、ビジュアルベーシック及びビジュアルベーシックAの
ような、C及びC++様の関数ポインタを採用している。ウインドウズ(登録商
標)APIも関数ポインタを広範囲に利用している。この種の関数ポインタは、
以下の複数の理由: a)タイプセーフではなく、キャスティングすることになり、 b)機密保護を意識しておらず―関数ポインタは、不注意に変えられ、そし
て呼び出されうるポインタに過ぎず、システムクラッシュに至り、 c)目標オブジェクト及びメソッドへのアクセスを考慮していない、もので
あって不完全である。
【0010】 マイクロソフト(登録商標)Java VM及び関連製品は、メソッドリファ
レンスの原型を提供する「Javaコアリフレクション」システムを有する。開
発者はjava.lang.reflect.Methodのインスタンスを入
手できる。このインスタンスは、メソッドをレイトバウンド方式で呼び出すのに
用いることができる。このリファレンスの形式は本質的にレイトバウンド(late-
bound)で、そのため非能率的である。
【0011】 (発明の概要) 本発明の一つの実施例によれば、あるクラスのあるインスタンスの第二メソッ
ドを呼び出すことにより第一メソッドを呼び出す段階をコンピューターを使って
実行する、オブジェクトベースのコンピューターコードでコンピューターをプロ
グラミングするための方法が提供されており、第二メソッドに供給されるパラメ
ータは第一メソッドに供給され、第二メソッドのパラメータリストは第一メソッ
ドのパラメータリストに一致し、更に第一メソッドは名前により、そして第一メ
ソッドのパラメータリスト及び結果のタイプをクラスに対して宣言されたパラメ
ータリスト及び結果のタイプと突き合わせることにより識別される。
【0012】 別の特徴によれば、クラスのインスタンスは、変数に割り当てることができ一
つの手続きから別の手続きへ送ることができる値により表示され、プログラムコ
ードは、クラスのインスタンスを示す値を割り当てられた変数上の第二メソッド
を呼び出すのに用いられる。
【0013】 別の実施例では、機密保護に関する許可は、オブジェクトベースのプログラム
内の各クラスと関連しており、これらの許可は、第一メソッドによる第二メソッ
ドへの呼び出しが許可されるかどうか決定するのに用いられる。
【0014】 更に別の実施例では、第一メソッドは、第一クラスの宣言で自動的に作成され
る。
【0015】 更に別の実施例では、第一メソッドは、オブジェクトベースのプログラムのイ
ベントを処理するのに用いられる。
【0016】 更に別の実施例では、1つ又はそれ以上の追加の第一メソッドは第二メソッド
への呼び出しを使って呼び出され、そこでは、1つ又はそれ以上の対応する追加
のパラメータのセットが、それぞれ、もう一つの追加の第一メソッドに供給され
る第二メソッドに供給される。更に、呼び出しリストは第二メソッドと関連して
おり、呼び出しリストは呼び出される第一メソッドを特定する。また、第一メソ
ッドが呼び出しリストに加えられることもあるし、呼び出しリストから削除され
ることもある。
【0017】 更に別の実施例では、既に上に概要を述べた方法が、コンピュータープログラ
ムと、コンパイラーと、インタープリターと、ハードウェア及びソフトウェアを
含むプログラミングシステム内に組み込まれている。
【0018】 (発明の詳細な説明) 好適な実施例に関する以下の詳細な説明では、その一部を形成する添付図面を
参照し、本発明が実施される特定の実施例を示すことにより説明を行う。本発明
の範囲から逸脱することなく、他の実施態様を利用したり、構造的な変更を行え
ることは理解されるであろう。
【0019】 (序論) 本発明は、本明細書で「デレゲイト(delegate)」と名付けられている、オブジ
ェクトベースのプログラミング内でメソッドを参照するためのメカニズムを提供
する。関数ポインタは関数へのリファレンスを含み、一方デレゲイトはメソッド
へのリファレンスを含んでいる。両者は、関数ポインタが1つのリファレンス(
関数)しか含んでいないのに対して、デレゲイトはオブジェクト及びオブジェク
トのメソッドへのリファレンスを含む点で異なっている。
【0020】 本明細書に記載のデレゲイトの有益な特性は、デレゲイトが参照するオブジェ
クトのタイプ(クラス)について知らないか又は留意しないということである。
むしろ、重要なのは、参照されるメソッドのパラメータリストがデレゲイトと互
換性があることである。このことは、デレゲイトを呼び出す呼び出し人が何のク
ラス又はメンバーが呼び出されているのか正確に知る必要がなく「匿名」通知利
用に関してデレゲイトを非常に有益なものにする。
【0021】 デレゲイトは関数ポインタと同様に値である。他の値のように、変数に割り当
てることができ、一つの手続きから別の手続きへ送ることもできる。デレゲイト
も、利用し、適用し、呼び出すことができる。この操作を実行するときには、ゼ
ロ又はそれ以上の引き数がデレゲイトに送られる。
【0022】 デレゲイトは安全である、即ち強くタイプ(strongly typed)できるという点で
関数ポインタと異なる。更に、関数ポインタは文脈自由であり、つまり、関数が
関数ポインタを通じて呼び出されるときには、関数はパラメータを通じて送られ
てくる以外の文脈(context)を持っていないのに対し、デレゲイトはそれ自身文
脈を伴っている。メソッドがデレゲイトを通じて呼び出される場合は、呼び出し
はデレゲイトにより参照されるオブジェクトに起こり、従って既知の文脈を使っ
てメソッドが提供される。
【0023】 以下に更に詳しく説明するが、本発明は、図1に示すように多数の異なる形式
を取る。図1に示すように、本明細書に記載されているデレゲイトの実施例は、
プログラミング言語10と、コンピュータープログラム12と、コンパイラ14
と、Javaバーチャルマシンインタープリタソフトウェア16と、イベントモ
デル18の形態で実施される。図2に示されているように、これら様々な実施例
は、例えばこれに限定するわけではないが、IBM互換パーソナルコンピュータ
ー等の(例えばこれに限定するわけではないが、CPU、記憶装置、メモリ、キ
ーボード、マウス等の従来のコンピューター構成要素を含む)コンピューターシ
ステム20上で実行し、保存することができるか、そうでなければ、ハードドラ
イブ22、フロッピーディスク24、CD−ROM26又は電子データトランス
ミッション28のような様々な担体媒体上で機械読み取り可能な形式で具体化す
ることができる。
【0024】 (本発明のJ++での実施例) 本発明の次の実施例は、マイクロソフト社のマイクロソフト(登録商標)ビジ
ュアルJ++、バージョン6.0におけるデレゲイトのインプリメンテーション
について説明している。しかし、本発明は、決してJ++言語に限定されるもの
ではなく、C++のようなどんなオブジェクト指向プログラミングシステム又は
マイクロソフト(登録商標)ビジュアルベーシックのようなオブジェクトベース
プログラミングシステムにも広く適用できる。本明細書では「オブジェクト指向
」という用語は、オブジェクトベース及び支援継承(supporting inheritance)両
方のプログラミング言語を意味する。「オブジェクトベース」という用語は、マ
イクロソフト(登録商標)ビジュアルベーシックのように、コードがオブジェク
トの中に編成されるが、必ずしも継承を支援するわけではないプログラミング言
語を指す。
【0025】 本発明を詳細に述べる前に、デレゲイトを使っているJ++コンピュータープ
ログラム30の簡単な例が図3に示されており、そこではデレゲイトインスタン
スがインスタンス上のメソッドをカプセル化している。この場合、メソッド「h
ello」はデレゲイト「f」を使って呼び出される。更に、デレゲイトの宣言
は、デレゲイトがカプセル化可能であるメソッドの種類を定義する。
【0026】 図3のプログラム例は、デレゲイトのインスタンスfであるSimpleDelegateが
どのように例示されて(“f=new SimpleDelegate(o.hello)”)、次にどの
ように呼び出されるか(“f.invoke()”)を示している。以下に更に詳しく
説明するが、有効且つ実行可能であるために、SimpleDelegateデレゲイトのタイ
プは参照される「hello」メソッドのタイプと一致していなければならない。こ
の場合、helloとSimpleDelegateは共に、入力パラメータを必要とせず、ボイド
出力である。これも以下に説明するが、この要件はデレゲイトをタイプセーフに
する。
【0027】 以下に述べるのは、マイクロソフト(登録商標)ビジュアルJ++、バージョ
ン6.0において実行されている、J++言語の延長として、デレゲイトの説明
である。サンマイクロシステムズ社より発行されているJava言語仕様を参考
資料として本明細書に援用する。Java言語仕様は、本明細書では「JIL」
とも呼んでおり、一部ではその様に引用する。
【0028】 (J++実施例におけるデレゲイト宣言) 本明細書に述べられている本発明の実施例によるデレゲイト宣言は、デレゲイ
ト又はマルチキャストデレゲイトのどちらかから来る新しいクラスを指定する。
デレゲイト宣言は、 DelegateModifiersopt delegate ResultType Identifier (FormalParameterListopt)Throwsopt の形態を取る。
【0029】 クラス宣言に対する関連プロダクションは、 ClassModifiersopt class Identifier Superopt Interfaceopt ClassBod
y である。
【0030】 本例のJava言語文法を使って宣言される場合、デレゲイト宣言は、次の属
性を有するクラスになる。 1)ClassModifiersoptに対し、クラス宣言はDelegateModifiersopt を有し
、所定の文脈内で指定される前提で、static、finalという追加変更が加わる。 2)Identifierに対し、クラス宣言は、デレゲイト宣言のIdentifierを有す
る。 3)Superoptに対しては、multicast変更子が指定されれば「extends com
.ms.lang.MulticastDelegate」を有し、multicast変更子が省略されれば「ext
ends com.ms.lang.Delegate」を有する。 4)Interfaceoptに対しては、“”を有する。
【0031】 デレゲイトが完全修飾された名前P(JLSの§6.7参照)を使って名前の
付いたパッケージ(JLSの§7.4.1参照)で宣言されれば、デレゲイトは
完全修飾された名前P.Identifierを有することになる。デレゲイトが名前無し
パッケージ(JLSの§7.4.2参照)で宣言されれば、デレゲイトは完全修
飾された名前Identifierを有することになる。図4の例では、デレゲイトEmptyM
ethod(32)は、パッケージステートメントの無いコンパイル単位で宣言され
、従ってEmptyMethodが完全修飾された名前であるのに、図5Aの例コード34
では、デレゲイトEmptyMethodの完全修飾された名前はvista.EmptyMethodである
【0032】 本発明の本実施例では、コンパイラ14(デジタル計算プラットフォームで実
行可能)は、 1)デレゲイトに命名する識別子が、同一パッケージ(JLSの§7.6
参照)で宣言される他のデレゲイトタイプか、クラスタイプか、又はインターフ
ェースタイプの名前として現れる場合、又は、 2)デレゲイトに命名する識別子が、デレゲイト宣言を含むコンパイル単
位(JLSの§7.3参照)内の、シングルタイプインポート宣言(JLSの§
7.5.1参照)によるタイプとして宣言されている場合、 コンパイル時間エラーを発生させる。
【0033】 (デレゲイトタイプの名前の範囲) デレゲイト宣言内の識別子は、デレゲイトの名前を指定する。このデレゲイト
の名前は、その範囲として(JLSの§6.3参照)デレゲイトが宣言される完
全なパッケージを有する。
【0034】 (デレゲイト変更子) デレゲイト宣言はデレゲイト変更子(delegate modifier)をんでいてもよい。
DelegateModifiersは、ゼロであるか、或いは public private static final multicast の中の1つであってもよい。
【0035】 2つ以上のデレゲイト変更子がデレゲイト宣言内に現れる場合は、それらは通
常、要求されてはいないが、DelegateModifierに対するプロダクションの中で先
に述べたことと一致するオーダで現れる。
【0036】 multicast変更子を含むデレゲイト宣言は、ボイドであるResultType
を有していなければならず、そうでなければコンパイルエラーが生じる。
【0037】 アクセス変更子publicは、JLSの§6.6で論じられている。本発明
のこの実施例のコンパイラは、 1)2つ以上のデレゲイト変更子が用いられる場合、 2)同じ変更子がデレゲイト宣言に二度以上現れる場合か、又はデレゲイ
ト宣言が2つ以上のアクセス変更子public及びprivateを有する場
合、 3)private変更子が、クラス内にネストされていないデレゲイト
宣言内に現れる場合、 コンパイル時間エラーを生み出す。
【0038】 デレゲイトは、暗黙にstaticである。デレゲイト宣言内で変更子sta
ticを重複して指定することは許されるが、スタイルの問題としては非常に妨
げとなる。更に、デレゲイトは暗黙にfinalである。デレゲイト宣言内で変
更子finalを重複して指定することは許されるが、スタイルの問題としては
非常に妨げとなる。
【0039】 本発明の実施例によれば、デレゲイト定義は、クラス定義が現れるところなら
どこでも現れる。クラス定義同様に、デレゲイト定義はクラス定義内にネストす
ることができる。加えて、デレゲイトは常にトップレベルである。
【0040】 デレゲイトのメンバーは、ベースクラス(デレゲイト又はマルチキャストクラ
スのどちらか)から継承したメンバーと、カプセル化されたメソッドを呼び出す
のに用いることのできる自動的に作成された特別なinvokeメソッド(以下
に記載)とを含む。デレゲイト宣言も、自動的に生み出された特別なコンストラ
クタ(constructor)を備えたクラスに帰着する。
【0041】 (呼び出しメソッド) デレゲイトのメンバーは、自動的に作成され、カプセル化されたメソッドを呼
び出すのに用いることができるinvokeメソッドを含む。invokeメソ
ッドのシグネチャ及びリターンタイプは、デレゲイト宣言により決定される。特
に、invokeメソッドのシグネチャは、 ResultType invoke(FormalParameterListopt)Throwsopt であり、ResultTypeと、(あれば) FormalParameterListと、(あれば) Throwsと
はデレゲイト宣言のシグネチャである。
【0042】 (デレゲイト例示) デレゲイトは次のような2つのコンストラクタを有する。 1)形状が、Delegateベースクラスにより定義される「インスタン
ス」コンストラクタ。このコンストラクタへの引き数と、Objectメソッド
の名前とStringメソッドの名前とは、デレゲイトのタイプと組み合わされ
て、デレゲイト定義と一致する指示されたオブジェクト上に、独自にメンバーを
特定する。新たに構成されたデレゲイトは、このメソッドをカプセル化する。 2)ほとんどのメソッド解決が、実行時ではなくコンパイル時間になされる
ことを可能にする特定の「メソッド指示子」コンストラクタ。メソッド指示子デ
レゲイトは、Javaコアリフレクションを通じて表に出されない。
【0043】 クラス及びインスタンスコンストラクタは何も特別ではなく、それらは本明細
書に述べられているベースDelegateクラスの説明に詳細に論じられてい
る。メソッド指示子式は、デレゲイト例示を目的に、クラス又はインスタンスメ
ソッドを示すのに用いられる。
【0044】 クラスインスタンス作成式は、 newClassType(ArgumentListopt) DelegateInstantiationExpression の形を取る。 デレゲイト例示式は、 NewDelegateTupe(MethodDesignator) の形を取る。 メソッド指示子は、 MethodName Primary. Identifier Super. Identifier の形を取る。 デレゲイトタイプは、com.Ms.lang.Delegateから出てくるクラスである。
【0045】 メソッド指示子は、メソッドを指示するには十分ではない。メソッドのセット
を(潜在的に)指定するのではなく、特定のメソッドを指示するためには、メソ
ッド指示子によって例示されるデレゲイトのリターンタイプ及びシグネチャ(引
き数の数及びタイプ)を参照することが必要である。このため、メソッド指示子
及び新しいインスタンス仕様形態が、単一の単位として記述される。
【0046】 デレゲイト例示には、メソッド呼び出し式(JLSの§15.11参照)に関
する探索ルールと同じ様な探索ルールが使われる。メソッドを指示することは、
メソッドがオーバーローディングとなったりインスタンスメソッドがオーバーラ
イディング(overriding)となる可能性があるために、複雑である。メソッド呼び
出し式により呼び出されるメソッドを決定するのには、複数の追加段階が含まれ
ている。以下に述べるのは、本発明の本実施例による、コンパイル時及び実行時
共にデレゲイト例示に含まれる段階である。
【0047】 (アーリーバウンド及びレイトバウンドデレゲイト) 図3の例で、例示「f=new SimpleDelegate(o.hello)」はメソッド「hello」
がコンパイル時間に知らされるアーリーバウンドデレゲイトである。ある場合に
は、デレゲイトが結合されるべきメソッドは、プログラムがコンパイルされてい
るときには知られていない。例えば、対話式開発環境のユーザーは、プログラム
プロトタイピング用のメソッドの名前を特定するかもしれないし、呼び出される
メソッドの名前を何か他の様式で計算するか又は入力するかもしれない。この場
合、2つの引き数コンストラクタを使うことにより、デレゲイトのインスタンス
を構築することができる。
【0048】 コンストラクタの第一引き数は、オブジェクトでメソッドが呼び出されること
になるオブジェクトを指定する。コンストラクタの第二引き数は、メソッドの名
前を指定する。第一引き数で指定されたオブジェクトは、そのオブジェクトが指
示された名前のメソッドを有することを確認するために、デレゲイトクラスが宣
言されたと同じシグネチャ(すなわちリターンタイプ及び引き数タイプ)使って
照合される。照合ができなければ、例外が起こる。照合されれば、新しいデレゲ
イトオブジェクトが構築されて戻される。
【0049】 直ぐ上に述べたように、「レイトバウンド」デレゲイトの例示は、例えば「g
=new SimpleDelegate(o,“hello")、」の形を取り、ここでメソッド「hello
」はプログラム実行の間に定められるストリングである。レイトバウンドデレゲ
イトの場合、呼び出しは「g.dynamicInvoke(Object〔〕args)」の形を取る。
図5Bのプログラム例36は、ストリングメソッドの名前に基づいてレイトバウ
ンドデレゲイトを構築する。
【0050】 (コンパイラオペレーション) 先に述べたように、本発明の実施例はコンパイラ14を含む。デレゲイト例示
式をコンパイル時間に処理するには、数段階が必要である。第一に、コンパイラ
は検索するクラス又はインターフェースを決定しなければならない。第二に、コ
ンパイラは一致していてアクセス可能なメソッドを検索しなければならない。第
三に、コンパイラは、メソッドが適当かどうかチェックしなければならない。こ
れらのプロセスについては、以下に更に詳細に説明する。
【0051】 (コンパイル時間段階1:検索するクラス又はインターフェースの決定) コンパイル時間にデレゲイト例示式を処理する際の第一段階は、メソッドの名
前、及びその名前のメソッドの定義に対してチェックすべきクラス又はインター
フェースを計算することである。メソッド指示子の形式によっては、次のように
考えられるケースが幾つかあり、 1)形式がMethodNameであれば、2つのサブケースがあり、 a)シンプルな名前、即ち、まさにIdentifireであれば、メソッドの
名前はIdentifireであり、検索するクラス又はインターフェースは、その宣言が
メソッド指示子を含んでいるクラス又はインターフェースである。 b)他のすべてのケースでは、修飾された名前はFieldName. Identif
ireの形を有しており、メソッドの名前はIdentifireであり、検索するクラス又
はインターフェースはFieldNameの名前が付いているフィールドの宣言されたタ
イプである。 2)形式がPrimay.Identifireであれば、メソッドの名前はIdentifire
であり、検索されるクラス又はインターフェースはPrimay式のタイプである。 3)形式がsuper.Identifireであれば、メソッドの名前はIdenti
fireであり、検索されるクラスは、その宣言がデレゲイト例示を含むようなクラ
スのスーパークラスである。そのようなメソッド指示子がインターフェース内か
、クラスobject内か、staticメソッドか、スタティックイニシャラ
イザか、又はstatic変数に関するイニシャライザかの内かに生じれば、コ
ンパイル時間エラーが生じる。次に、この形態のメソッド指示子は、objec
t以外のクラス内と、インスタンスメソッドの本体か、コンストラクタの本体か
、又はインスタンス変数に関するイニシャライザかの内にだけ現れることになる
【0052】 (コンパイル時間段階2:メソッドシグネチャの決定) 第二段階は、メソッド宣言のために前の段階で決定されたクラス又はインター
フェースを検索する。この段階は、一致し、且つアクセス可能であるメソッド宣
言、即ち、例示されるデレゲイトのタイプに一致し、デレゲイト例示文脈から正
しく呼び出すことのできる宣言の位置を突き止めるために、指示されたメソッド
の名前及びデレゲイト定義正式パラメータのタイプを用いる。突き合わせルール
は厳密なので、そのようなメソッド宣言は1つだけしかない。
【0053】 メソッドは、デレゲイトタイプに一致するかしないかのどちらかである。メソ
ッドMがタイプTに一致し、且つ一致する場合にだけ、メソッドMをカプセル化
するタイプTのデレゲイトインスタンスを例示することが可能である。
【0054】 Mをメソッド、Tをデレゲイトのタイプとしよう。次のことがすべて真であり
且つ次のことにすべてが真である場合だけ、MはTに一致する。 1)MとTは正式なパラメータの同じ数字を有し、 2)Mの各パラメータのタイプは、Tのパラメータのタイプと一致し、 3)Mの結果タイプは、Tの結果タイプと一致し、 4)MはT以上にもっとチェックされた例外を投じるように宣言されては
いない。Mが、何らかのチェックされた例外タイプについて述べるthrowク
ローズを含んでいれば、Tはthrowクローズを含んでいなければならず、t
hrowクローズ内に挙げられている全てのチェックされた例外タイプに対し、
その同じ例外クラス又はそのスーパークラスの中の一つがTのthrowクロー
ズ内に生じなければならない。
【0055】 突き合わせルールは厳密な一致(パラメータリスト及びリターンタイプに対し
同じタイプ)を要求するので、何れの所定のターゲットに対しても一致するメソ
ッドは多くとも1つしかあり得ないことに留意されたい。
【0056】 本明細書に記載のプロセスにより決定されるクラス又はインターフェースは、
デレゲイトタイプに一致するメソッド宣言を求めて検索され、スーパークラス及
びスーパーインターフェースから継承されるメソッド定義は、この検索に含まれ
ている。メソッド宣言がメソッド呼び出しにアクセス可能かどうかは、メソッド
宣言内のアクセス変更子(公共、無し、保護されている、又は私用)及びメソッ
ド指示子が現れる場所による。クラス又はインターフェースが、一致し、且つア
クセス可能であるメソッド宣言を持っていなければ、コンパイル時間エラーが発
生する。
【0057】 (コンパイル時間段階3:選択されたメソッドは適切か?) デレゲイト例示式に対し一致し且つアクセス可能なメソッド宣言がある場合、
これはデレゲイト例示式に対するコンパイル時間宣言と呼ばれる。コンパイル時
間宣言に、更に複数のチェックがなされなければならない。コンパイル時間エラ
ーは、 1)メソッド指示子が、Identifierの形態のMethodNameを有し、且つメソ
ッド指示子がstaticメソッドか、スタティックイニシャライザか又はst
atic変数用イニシャライザ内に現れる場合、 2)メソッド指示子が、TypeName.Identifierの形態のMethodNameを有す
る場合、に発生する。
【0058】 次のコンパイル時間情報は、実行時に用いるメソッド呼び出しと関連する。 1)コンパイル時間宣言へのリファレンス(メソッド)。 2)コンパイル時間宣言を含むクラスまたはインターフェース(ターゲッ
ト)。 3)次のように計算される呼び出しモード、 a)コンパイル時間宣言がprivate.変更子を有し、呼び出しモ
ードがnonvirtualである場合。 b)さもなければ、左かっこ前のメソッド呼び出し部分がsuper.
Identifierの形態であり、呼び出しモードがsuperである場合。 c)さもなければ、コンパイル時間宣言がインターフェース内にあり、
呼び出しモードがinterfaceである場合。 d)さもなければ、呼び出しモードがvirtualである場合。
【0059】 (実行時オペレーション) 本発明は、本発明のデレゲイトを実行するために、更にJavaバーチャルマ
シンインタープリタソフトウェア16(図1)を提供する。実行時にデレゲイト
例示式を処理するためには数段階が必要である。第一に、コンパイラはターゲッ
トのタイプ及びメソッドのアクセス可能性をチェックしなければならない。第二
に、コンパイラは、インスタンスメソッドがオーバーライディングする可能性を
考慮に入れながら、呼び出すメソッドの位置を突き止めなければならない。
【0060】 (実行時段階#1:タイプ及びメソッドのアクセス可能性のチェック) コンパイル時間に決定されるように、Cをデレゲイト例示式を含むクラス、T
をデレゲイト例示式に対するコンパイル時間宣言を含んだクラス又はインターフ
ェース、mをメソッドの名前とする。
【0061】 Javaバーチャルマシンインタープリタソフトウェア16は、リンケージ部
分として、メソッドmがタイプT内にまだ存在することを保証する。これが真で
ない場合は、(RuntimeExceptionのサブクラスである)IllegalArgu
mentExceptionが生成される。呼び出しモードがinterfac
eの場合、バーチャルマシンソフトウェア16は、ターゲットリファレンスタイ
プがまだ特定化されたインターフェースを実行することもチェックしなければな
らない。ターゲットリファレンスタイプがインターフェースをまだ実行していな
ければ、IncompatibleClassChangeErrorが生成さ
れる。
【0062】 バーチャルマシンソフトウェア16は、リンケージの間に、タイプTとメソッ
ドmがアクセス可能であることも保証しなければならない。
【0063】 タイプTに関しては、 1)TがCと同じパッケージ内にある場合、Tはアクセス可能である。 2)TがCと異なるパッケージ内にあり、Tがpublicである場合、
Tはアクセス可能である。 メソッドmに関しては、 1)mがpublicである場合、mはアクセス可能である。(インター
フェースの全メンバーはpublicである(JLSの§9.2参照))。 2)mがprotectedである場合、mは、TがCと同じパッケージ
内にあるか又はCがT又はTのサブクラスである場合及びその場合にだけアクセ
ス可能である。 3)mがデフォルト(パッケージ)アクセスを有する場合、mは、TがC
と同じパッケージ内にある場合及びその場合にだけアクセス可能である。 4)mがprivateである場合、mは、CがTである場合及びその場合にだ
けアクセス可能である。 T又はmの何れかがアクセス不可能である場合、IllegalArgume
ntException(JLSの§12.3参照)が生成される。
【0064】 (実行時段階#2:呼び出すメソッドの位置確認) メソッド探索に関する戦略(strategy)は、呼び出しモードによって異なる。本
発明の実施例では、デレゲイトのあるスタティックメソッドをカプセル化するこ
とは不可能で、従ってインスタンスメソッドがデレゲイトによりカプセル化され
るべきことが明白であり、ターゲットリファレンスが存在する。ターゲットリフ
ァレンスがnullである場合、このポイントにNullPointExcep
tionが投入される。そうでなければ、ターゲットリファレンスは、ターゲッ
トオブジェクトを参照するよう告げられ、デレゲイトが呼び出されるときに、キ
ーワードthisの値として用いられる。呼び出しモードに関する他の4つの可
能性は、次に、Javaバーチャルマシンインタープリタソフトウェア16によ
り以下のように考慮される。
【0065】 呼び出しモードがnonvirtualである場合、オーバーライディングは
許されない。クラスTのメソッドmは呼び出されるものである。そうでなければ
呼び出しモードはinterface、virtual又はsuperであり、
オーバーライディングが生じるかもしれない。ダイナミックメソッド探索が用い
られる。ダイナミック探索プロセスはクラスSからスタートして、以下のように
決定される。 1)呼び出しモードがinterface又はvirtualの場合、S
は最初はターゲットオブジェクトの実際の実行時クラスRである。ターゲットオ
ブジェクトがアレイである場合、RはクラスObjectである(呼び出しモー
ドinterfaceに対しては、必ずRがTを実行し、呼び出しモードvir
tualに対しては、必ずRがT又はTのサブクラスの何れかであることに留意
のこと)。 2)呼び出しモードがsuperである場合、Sは最初はデレゲイト例示
を含むクラスCのスーパークラスである。
【0066】 ダイナミックメソッドの探索には、メソッドmに関して、クラスSと、必要な
らば次にクラスSのスーパークラスを検索するために次の手続きを用いる。 1)クラスSが(上記)コンパイル時間に決定されたメソッド呼び出しに
必要な同じ記述子(同数のパラメータ、同じパラメータタイプ、同じリターンタ
イプ)を使ってmと名付けられているメソッドについての宣言を含んでいる場合
には、これがデレゲイトによりカプセル化されるべきメソッドであり、手続きは
終了する。 2)そうでなくて、SがTでない場合、この探索の結果がどう出ようと、
この同一の探索手続きはSのスーパークラスを使って実行される。
【0067】 この手続きは、クラスTに達するとき、適したメソッドを見つけ出すことにな
るが、なぜなら、そうでなければ上記のチェックによりIllegalAcce
ssExceptioinが投入されることになるからである。ダイナミック探
索プロセスは、ここでは明示的に記載されているが、しばしば暗黙的に実施され
ることに留意しておくべきである。
【0068】 (実行時段階#3:機密保護チェック) ここで述べるデレゲイトの実施例では、デレゲイトは信頼されている(以降、
信頼)コードを破壊するためには用いられないことを保証するための手続きが提
供されている。特別な機密保全予防対策がなければ、信頼されていない(以降、
非信頼)メソッドがデレゲイトを使って、非信頼クラスがコールスタックに現れ
ないような様式で、信頼メソッドを呼び出す可能性がある。標準的なJava機
密保全の下では、コールスタックに非信頼メソッドがない場合は、信頼メソッド
はうまく行くし、新しい非信頼メソッドがコールスタックにある場合は、おそら
く失敗することになる。良い例がjava.io.File.deleteであ
り、非信頼コードがこのメソッドを呼び出そうとすれば、SecurityExceptionが
投入される。しかし、非信頼コードがこの信頼メソッドをデレゲイト内にカプセ
ル化し、完全な信頼コードに送って、デレゲイトを呼び出す場合は、メソッド(
java.io.File.delete)はうまく行くであろう。従って、こ
こに述べる本実施例は、以下に論じるように、デレゲイトを例示する際に特定の
機密保全チェックを実行する。この機密保全チェックは実行時に行われる。
【0069】 ここに述べられている本発明の実施例は、標準Java機密保全モデルを拡張
して、機密保全許可のセットを全てのJavaクラスと関係付けている。所与の
クラスに対して、関係付けられた機密保全許可のセットが、クラスのメソッドが
実行を許される(ファイルIO及び印刷のような)信頼オペレーションを決定す
る。非信頼クラスは空の許可セットを有し、一方、完全信頼クラスは完全な許可
セットを有する(すなわち、すべての許可を有する)。
【0070】 実行時にうまく行くデレゲイト例示に関しては(デレゲイト例示式を含むクラ
ス)Cの許可は、実行時に決定される、メソッドmを含むクラスに所有されてい
る許可のスーパーセットでなければならない。これに当てはまらなければ、Il
legalAccessExceptionが投入される。更に、この機密保全
チェックは、デレゲイト又はマルチデレゲイトクラスから出されるクラスが最終
であることを要求して、コールチェーンを探索させ、どのエンティティがデレゲ
イトを作成するのかを調べさせる。結果として、非信頼クラスは非信頼メソッド
にデレゲイトを作成するだけで、完全信頼クラス(即ちシステムクラス)はアク
セス可能な何れのメソッドにも作成できる。
【0071】 (コンパイラ対インタプリタアクティビティ) 上記のように、コンパイラ14とインタプリタソフトウェア16とは別々のソ
フトウェア構成要素である。しかし、これらの構成要素は、オペレーションのモ
ードによって、ある場合には、結合デレゲイトのような同じ機能を実行すること
もある。更に、コンパイラ14とインタプリタソフトウェア16の機能は、ある
場合には、互いに交換されたり又は共有されたりすることがある。従って、本発
明は、ここに記載の実施例に述べられている機能の特定の分割には決して限定さ
れるものではない。むしろ、コンパイラ14とインタプリタソフトウェア16と
は、オブジェクトベースのコンピュータコードを処理してコンピュータによる実
行に備えるという共通のタスクを共有するものとして考えられるべきである。
【0072】 (クラスcom.ms.lang.Delegate) 上記のように、すべてのデレゲイトはこのベースデレゲイトクラスから出る。
タイプDelegateのオブジェクトは、呼び出し可能なエンティティ、すな
わちインスタンス及びインスタンス上のメソッドをカプセル化する。クラスDe
legateの定義例38を図6に示す。
【0073】 保護されているDelegate(Object target、String methodName)コン
ストラクタは、新たに作成されるDelegateオブジェクトが、引き数によ
り特定されるターゲット及びメソッドをカプセル化するように初期化する。ta
rgetがヌルの場合、NullPointerException例外が浮上する。methodNameの引
き数は、先に定義されているように、一致していて、アクセス可能で、適切なメ
ソッドを指示しなければならない。一致するターゲットメソッドが見付けられな
い場合、IllegalArgumentException例外が実行時に投入される。メソッドが見付
けられない場合は、NoSuchMethodErrorが投入される。
【0074】 引き数が、nullではなく、このDelegateオブジェクトと同じター
ゲットメソッド及び呼び出しリストを有するDelegateオブジェクトであ
る場合及びその場合にだけ、public final boolean equals(Object obj)
の結果は真である。2つのデレゲイトは、Delegate.equasにより
定められているように、互いに等しくなるために同じタイプである必要はない。
この式はオブジェクトのequalsメソッドを無効とする(JLSの§20.
1.3参照)。
【0075】 式public static final Delegate combine(Delegate a、Delegate b)
は、所与の2つのデレゲイトを組み合わせて単一のデレゲイトを形成する。aと
bが共にヌルの場合、結果はヌルである。aかbのどちらかがヌルの場合、結果
はヌルでないデレゲイトである。aとbが共にヌルでない場合、結果は、aの呼
び出しリストとbの呼び出しリストをその順に連結させることにより形成される
呼び出しリストを備えた新しいデレゲイトである。呼び出しリストが、同じオブ
ジェク上の同じメソッドを参照する重複エントリーエントリを含むことは、エラ
ーとはみなされない。aとbが共にヌルでない場合、デレゲイトaとデレゲイト
bは、同じ実タイプでなければならない。そうでない場合には、IllegalArgumen
t Exception例外がコンパイラ14により投入される。aとbが共にヌルでない
場合、デレゲイトaとデレゲイトbは、クラスMulticastDelegateから出る実タ
イプでなければならない。そうでない場合、Multicast NotSupportedException
例外がコンパイラ14により投入される。
【0076】 式public static final Delegate combine(Delegate〔〕delegate)は、
各デレゲイトの呼び出しリストをデレゲイトアレイ内に順に連結して構成された
呼び出しリストを備えたデレゲイトを戻す。結果としての呼び出しリストが空で
ある場合、回答はヌルである。デレゲイトアレイはヌルエントリを含んでいても
よいが、そのようなエントリは無視される。デレゲイトアレイパラメータがヌル
又は空である場合、結果はヌルである。デレゲイトアレイのヌルでない構成要素
は、同じ実タイプでなければならない。さもなければIllegalArgumentException
例外が投入される。デレゲイトアレイ内に複数のヌルでない構成要素がある場合
には、これらの構成要素はクラスMultiDelegateから出る実タイプでなければな
らない。さもなければ、MulticastNotSupportedException例外がコンパイラ14
により投入される。
【0077】 式public static final Delegate remove(Delegate source、Delegate
value)は、バリューパラメータにより与えられるデレゲイト最終オカレンス
(あれば)を、ソースパラメータにより与えられるデレゲイトの呼び出しリスト
から取り除くことにより形成される呼び出しリストを備えたデレゲイトを戻す。
呼び出しリストから取り除かれるデレゲイトは、デレゲイトを問い合わせ中の呼
び出しリストメンバーとして式value.Equals(delegate)が真となる最終デレ
ゲイトである。バリューパラメータがヌルである場合、又はバリューパラメータ
により与えられるデレゲイトがソースの呼び出しリストに出現しない場合、結果
はソースパラメータである。結果としての呼び出しリストが空である場合、結果
はヌルである。ソールパラメータがヌルである場合、結果はヌルである。
【0078】 式public final Object dynamicInvoke(Object〔〕arg)は、レイトバウ
ンド方式(Delegate. dynamicInvoke)でメソッドを呼び出すのに用いることが
できる。呼び出されると、dynamicInvokeメンバーは、arg引き数の要素を引き数
としてメソッドへ送って、デレゲイトをカプセル化するメソッドを実行する。Dy
namicInvokeの結果が、カプセル化されたメソッドの呼び出しの結果である。メ
ソッド呼び出しの結果がオブジェクトリファレンスであれば、このリファレンス
が戻される。そうではなく、結果がプリミティブ値であれば、このプリミティブ
値がオブジェクトに包まれて戻される。(例えば、ブール値はブールオブジェク
トに包まれる。)そうでなければ、メソッドのリターンタイプはボイドであり、
null値を含むオブジェクトが戻される。
【0079】 public final static Method getMethod()メソッドは、リファレンスを
(ターゲット、メソッド)対のメソッドである独自のメソッドオブジェクトに戻
す。
【0080】 public final static Object getMethod()メソッドは、リファレンスを
呼び出し可能なエンティティをカプセル化するのに必要な(インスタンス、メソ
ッド)組のインスタンス部分に戻す。
【0081】 public Delegate〔〕getInvocationList(
)メソッドは、このデレゲイトの呼び出しリストを呼び出し順に戻す。マルチキ
ャストでないデレゲイトに対しては、結果は常に単一要素を有するアレイである
。マルチキャストデレゲイトに関しては、以下に述べるように、結果アレイは2
つ以上の構成要素を有する。戻されたアレイ内の各要素の呼び出しリストは、正
確に1つのエントリを有することが保証されている。
【0082】 (マルチキャストデレゲイト) すべてのマルチキャストデレゲイトはクラスMulticastDelega
teから出ており、Javaの本実施例では、Class com.ms. lang. Multicast
Delegateとして言及されている。マルチキャストデレゲイトの呼び出しには、
複数のメソッドが呼び出される効果がある。デレゲイトのinvokeにより呼
び出されるメソッドのセットは、デレゲイトの呼び出しリストとして言及され、
getInvocationListメソッドを使って入手可能である。
【0083】 Delegateから直接継承するデレゲイトは、1つの要素、即ち自身を含
む呼び出しリストを常に有する。MulticastDelegateクラスか
ら継承するデレゲイトは、2つ以上の構成要素を含む呼び出しリストを有する。
メソッドDelegate.combine及びDelegate.remov
eメソッドは新しい呼び出しリストを作成するのに用いられる。
【0084】 invokeメソッド及びdynamicInvokeメソッドは、送られて
くる引き数を使って呼び出しリスト内の各デレゲイトを呼び出すことにより、マ
ルチキャストする。デレゲイトは、呼び出しリスト内に出現する順番で、同期的
に呼び出される。デレゲイトの1つが例外を戻せば、マルチキャストは停止し、
例外が呼び出しメソッドの呼び出し人に伝播される。マルチキャスト呼び出しが
行われている間に、Delegate.combine及びDelegate.
removeへの呼び出しが起こるかもしれない。そのような呼び出しは、既に
進行中のマルチキャストに採用されている呼び出しリストに影響しない。
【0085】 本発明の本実施例では、クラスMulticastDelegate(40)は、図7に示すよ
うに定義される。
【0086】 式protected MulticastDelegate nextは、マルチキャストチェーン内の次の
デレゲイトへの内部リファレンスである。正しい呼び出し順序が保存されるため
には「次」のデレゲイトを、このデレゲイトがカプセル化するメソッドを呼び出
す前に呼び出さなければならない。
【0087】 protected MulticastDelegate(Object target、String methodName)コン
ストラクタは、デレゲイトベースクラス内で定義された対応するコンストラクタ
のように機能する。
【0088】 マルチキャストデレゲイトを呼び出す別の実施態様は、デレゲイトのアレイを
構築し、マルチキャストデレゲイトの「次」のチェーンを歩いて調べることによ
り呼び出すことである。このリストは、プログラムのスタックに配置することが
できる。次にバーチャルマシンインタプリタソフトウェア16は、このアレイを
逆の順序に歩いて、マルチキャストデレゲイトの呼び出しメソッドへ送られてく
るパラメータを使って各デレゲイトの呼び出しメソッドを呼び出す。この技法の
利点は、スタックにはマルチキャストデレゲイトの呼び出しメソッドへ送られて
くるパラメータの、最大でも2つのコピーしかないので、プログラムのスタック
はそれほど深くなくてよいことである。
【0089】 (別の実施例:スタティックメンバーのラッピング) 本発明のある別の実施例では、J++言語が更に拡張され、クラス上のラップ
スタティックメンバーを包含している。この目的のために、形状がデレゲイトベ
ースクラスにより定義されている「クラス」コンストラクタが提供されている。
このコンストラクタに対する引き数、クラス及びストリングメソッドの名前は、
デレゲイトのタイプと組み合わせられ、デレゲイト定義に一致する指示されたク
ラス上のスタティックメンバーを独自に特定する。新たに構築されるデレゲイト
は、このスタティックメソッドをカプセル化する。このコンストラクタは、 protected Delegate(Class class、StringmethodName) の形態を取る。
【0090】 このコンストラクタは、新しく作成されるデレゲイトオブジェクトが引き数に
より特定されるスタティックメソッドをカプセル化するように、この新しく作成
されるデレゲイトオブジェクトを初期化する。クラスがヌルである場合、Nul
lPointException例外が浮上する。MethodName引き数は、先に定
義されたように、一致しており、アクセス可能で、且つ適切なメソッドを告げな
ければならない。一致するターゲットメソッドが見つからない場合は、実行時に
IllegalArgumentException例外が投入される。そのよ
うなメソッドが見付からない場合は、IllegalArgumentExce
ptionが投入される。
【0091】 デレゲイトがスタティックメンバーをラッピングするコンパイル時間の第一段
階では、検索するクラス又はインターフェースが決定されなければならない。そ
れがTypeName.Identifierの形態を取る修飾された名前である場合、メソッドの
名前はIdentifierであり、検索するクラスはTypeNameと名付けられたクラスであ
る。TypeNameがクラスではなくインターフェースの名前である場合、この形態は
スタティックメソッドだけを指名することができて、インターフェースはスタテ
ィックメソッドを持っていないので、コンパイル時間エラーが生じる。クラスの
インスタンスメンバーをラッピングするケースと同じく、メソッドが適切かどう
か決定することも必要である。デレゲイト例示式に対し、一致していて、アクセ
ス可能なメソッド宣言がある場合、それはそのデレゲイト例示式に対するコンパ
イル時間宣言と呼ばれる。
【0092】 更にコンパイル時間宣言には別のチェックがなされなければならない。メソッ
ド指示子が識別子の形のMethodNameを有し、メソッド指示子がスタティックメソ
ッド、スタティックイニシャライザ又はスタティック変数のイニシャライザ内に
現れる場合、コンパイル時間エラーが生じる。別の点で、スタティックメンバー
のラッピングは、上記のように、インスタンスメンバーのラッピングへの拡張又
は変更である。
【0093】 この別の実施例によれば、更に対応コンストラクタが、マルチキャストデレゲ
イトクラス:protected MulticastDelegate(Class class、String methodNa
me)に提供されている。このコンストラクタは、デレゲイトベースクラス内で定
義される対応コンストラクタのように機能する。
【0094】 (交互に呼び出し可能なインターフェース) マイクロソフト(登録商標)ビジュアルJ++は、多重継承(multiple-inheri
tance)をサポートしない。しかしときには、そのようなインターフェースが、現
存するコードをデレゲイトタイプのスタイルに変換するために必要となることも
あるであろう。この状況は、java.lang. Thread vs.java.lang.Runnableに似て
いるかもしれない。この問題に取り組むために、本発明の一つの実施例は、図8
に示されているように、マイクロソフト(登録商標)ビジュアルJ++を拡張し
てcom.ms.lang.Callableインターフェース42を含むようにする。デレゲイトは
このインターフェースを実行するのが望ましい。
【0095】 (デレゲイトベースのイベントモデル) オブジェクト指向プログラミングでは、イベントは、イベントソースが一人の
イベントリスナー(又はイベントリスナーのセット)に匿名で、数種類の状態遷
移が発生したことを通知できる構成である。一般的にイベントは、構成要素が構
成要素を用いている機能性コードを如何に公開するかについて説明する「構成要
素モデル」と呼ばれる大規模システム内で用いられる。最新のほとんどの構成要
素モデルは、構成要素がその(構成要素の状態を説明する)特性、その(構成要
素が実行できるアクションを示す)メソッド及びその(関心事が生じた構成要素
からの通知である)イベントについてどのように公開するかを基本レベルで説明
する。
【0096】 イベント呼び出しは、逆のメソッド呼び出しに似ている。メソッドを呼び出す
ために、構成要素消費者は、複数の引き数を送って構成要素上のメソッドを呼び
出す。イベントについては、呼び出しが反対方向であり、構成要素が複数の引き
数を送って、構成要素消費者により提供されるメソッドを呼び出す。呼び出しの
方向の違いに加えて、他にも幾つか顕著な違いが見られる。
【0097】 メソッド呼び出しに関しては、消費者は通常、呼び出されている構成要素に明
示的に従属している。これに対し、イベント呼び出しは通常匿名であり、構成要
素は構成要素消費者に明示的には従属しない。代わりに、リスナーは、イベント
ソースにより提供されるメカニズムを使ってイベント又はイベントセットに接続
できる。
【0098】 更にメソッド呼び出しに関しては、被呼び出し人は、メソッドの形状、すなわ
ち数とタイプ、又は引き数とリターンタイプを決定する。イベント呼び出しに関
しては、イベントソース(呼び出し人)は形状を決定する。
【0099】 以下に述べる本発明によるデレゲイトベース構成要素モデルの実施例では、イ
ベントは、通常、構成要素(販売者により書き込まれることが多い)とイベント
ハンドリングコード(構成要素を使って開発者により書き込まれる)との間の交
信に用いられる。以下に説明されている構成要素モデルの実施例は、シングルキ
ャスト及びマルチキャスト両方のイベントを支援する。
【0100】 (クラス及びインターフェース) 以下に、本発明の実施例により、どのようにイベントを出現させ、利用するか
を述べる。ここでは、幾つかのクラスが定義され、論じられている。 1)クラスEvent。イベントは、イベントオブジェクト内の関心のある状
態をパッケージする。そのようなイベントオブジェクトは全てイベントクラスか
ら出ている。イベントクラスはパラメータなしのイベントにも直接用いられる。 2)デレゲイトEventHandler、これはクラスイベントと協力して用いられ
る。 3)クラスCancelEvent、これはキャンセルすることのできるアクション
に用いられる。イベントソースは、アクションがすぐに発生することを、アクシ
ョンが起こる前に関心あるリスナーに通知する。各リスナーはアクションを「キ
ャンセル」する機会を有する。 4)デレゲイトCancelEventHandler、これはクラスキャンセルイベントと
協力して用いられる。
【0101】 (イベントの立上げ) イベントを立ち上げるためには、イベントソースは、次の内の一つ又はそれ
以上を行う。 1)イベントクラスを定義する 2)「イベントハンドラ」デレゲイトを定義する 3)イベントソースがイベントと接続し、その後それと切断することがで
きるようにする「追加」及び「取り外し」メソッドを提供するか、又は 4)を立ち上げる「イベント立上げ」メソッドを提供する。
【0102】 (イベントクラスの定義) これは、クラスイベントから出て追加の文脈上の情報を潜在的に追加する。現
存するイベントクラスを採用することができるので、新しいイベントクラスを定
義することは必ずしも必要ではない。
【0103】 イヴベントクラスは約束によって用いられる。イベントクラスをまったく採用
しないイベントを定義して用いることは可能である。本例の構成要素モデルは、
イベントワイヤリングシナリオ及びバージョニングを容易にするために、オブジ
ェクトとしてイベントをパッケージすることを勧める。これらのテーマについて
は、更に以下で論じる。ウインドウクラスにより持ち上げられたマウスイベント
に対しては、図9に示されているイベントクラスを定義することができる。
【0104】 (「イベントハンドラ」デレゲイトの定義) このような1つのデレゲイトが、イベントの各関心事セットに必要である。そ
のようなデレゲイトは、多数のイベントに用いられる。約束により、イベントハ
ンドラデレゲイトは、 public multicast delegate void <Name>Handler(Object source、<Ev
entType e) のパターンと一致するように定義されている。
【0105】 図9のマウスイベント例44では、これが public multicast delegate void MouseEventHandler(Object source、MouseEvent e) を意味する。
【0106】 ここに設定されているイベントハンドリングモデルの実施例は、イベントソー
スがイベントに接続し、その後イベントを切断できるような「追加」及び「取り
外し」メソッドを提供する。約束により、イベントハンドラデレゲイトは、 Public void addOn<EventName>Handler(<EventHandlerType>handler) Public void removeOn<EventName>Handler(<EventHandlerType>handler) のパターンに一致するように定義される。
【0107】 マウスイベント例に対しては、これは Public void addOnMouseMoveHandler(MouseEventHandlerhandler) Public void removeOnMouseMoveHandler(MouseEventHandlerhandler) を意味する。
【0108】 (イベントを立ち上げる「イベント立上げ」メソッドの提供) このメソッドは、引き出されたクラスが、イベントを立上げ、ベースクラス内
に立ち上げられたイベントをキャンセルし、構成要素の消費者から妨害されずに
前後処理できるようにするメソッドである。メソッド本体は、引き数を送り、t
hisをイベントに対するソースパラメータの値として加えて、適切なデレゲイ
ト値付きの特性上にDelegate.invokeを呼び出すイベントを立ち
上げる。最終クラスに対しては、引き出されるクラスが存在することは有り得な
いので、そのようなメソッドを提供する必要はない。約束により、イベントハン
ドラデレゲイトはパターン protected void on<EventName>(<EventType> e) に一致するように定義される。
【0109】 マウスイベント例に対して、図10に示すメソッドが示されている。
【0110】 (イベントのハンドリング) イベントを聴くために、イベントリスナーは次のことを行う。 1)JLSに説明されている、クラス構成要素マネジャーを使って、どのイ
ベントが構成要素に利用可能かを学習する。 2)例えば図11のコード48で示されているように、応答イベント特性に
対して用いられるデレゲイトにより定義される正当なシグネチャを使って、イベ
ントハンドラ関数を作成する。 3)例えば図12のコード50で示されているように、イベントソースによ
り提供される「追加」メソッドを呼び出すことにより、イベントハンドリングコ
ードをイベントに接続する。 4)例えば図13のコード52で示されているように、ソースにより提供さ
れる「取り外し」メソッドを呼び出すことにより、イベントハンドリングコード
をイベントから、随意的に、切断する。ほとんどの場合、明示的に切断する必要
はない。
【0111】 (J++Codeでのイベントモデルの第一例、ボックス例) 図14A―14Bは、上記デレゲイト及びイベントモデルの適用を示す例J+
+コード54の例である。図14A―14Bでは、マウスイベントクラス及びマ
ウスイベントハンドラデレゲイトが宣言されている。2つのボックスインスタン
スを用いる構成要素消費者の例と、ボックスクラス宣言とが述べられている。
【0112】 (J++Codeでのイベントモデルの別例、スマイリー例) パラメータが無しのイベントが立ち上げられる簡単なイベント例が、図15A
―15Bに示されている。図15A―15BのJ++プログラム56で、そのハ
ッピー特性が変わるときに、スマイリー制御がイベントを立ち上げる。
【0113】 (シングルキャストイベント及びマルチキャストイベント) 上記イベントモデルは、シングルキャストシナリオにもマルチキャストシナリ
オにも等しく上手く作用する。ここに述べられている実施例では、好適な約束に
より、全イベントはマルチキャストである。しかし、シングルキャストイベント
を定義することは実に簡単であり、デレゲイト宣言内のマルチキャスト変更子を
省略するだけである。イベントは、クラス定義又はインターフェースのどちらか
に現れる。一組のイベントを1つのインターフェース内に定義することと、この
インターフェースを支援する複数のクラスを有することとが可能である。
【0114】 マルチキャストイベントモデルとシングルキャストイベントモデルとの間の基
本的な違いは、どのように接続がなされるかである。マルチキャストの場合、マ
ルチキャストデレゲイトを用いて「addOn」及び「removeOn」メソッドを採用す
ることが必要である。シングルキャストでは、非マルチキャストデレゲイトを用
いて、特性設定及び入手によりイベントとの接続/切断がなされるようにするこ
とができる。つまり構成要素は、出現する各イベントに対するデレゲイト値付き
特性を提供する。例えばMouseMoveイベントでは、図16のコード58で示され
ているように、「foo」イベントを出現させようとする構成要素は、「OnFoo」特
性を出現させることになる。
【0115】 (クラスイベント) クラスイベントは以下の複数の目的に寄与する: 1)クラスイベントは、全イベントに対しベースクラスとして作用する。
約束により、構成要素に対するイベントは、タイプがクラスイベントから出るク
ラスであるような単一のパラメータを採用する。
【0116】 2)クラスイベントは、状態を持っていないイベントに用いられる。一般
的にスタティックメンバーEMPTYは、図17に示されているコード60に例
示されているように、この目的に用いられ、イベントが効果的に立ち上げられる
ことができるようにする。
【0117】 (デレゲイトイベントハンドラ) デレゲイトイベントハンドラは、図18のコード62に示されているように、
タイプイベントの単一のパラメータを取るイベントに用いられる。
【0118】 (クラスキャンセルイベント) キャンセルイベントクラスは、キャンセルすることができるアクションを参照
するイベントに用いられる。キャンセルイベントクラスは、当該アクションがキ
ャンセルされているかどうかを述べるcancelという名のブールフィールド
を提供する。真の値は、アクションがキャンセルされていることを示し、偽の値
は、アクションがキャンセルされていないことを示す。cancelに対する最
初の値は、提供されるコンストラクタを使って提供される。一般的に、canc
elはfalseに初期化され、そのためイベントが処理されないか又はイベン
トハンドラがcancelフィールドを変更しなければ、イベントソースは、ア
クションを実行する許可が与えられているとみなす。キャンセルイベントクラス
は、図19のコード64に示されている。
【0119】 (デレゲイトキャンセルイベントハンドラ) デレゲイトキャンセルイベントハンドラは、図20のコード66に示されてい
るように、タイプキャンセルイベントの単一のパラメータを取るイベントに用い
られる。
【0120】 (デレゲイトに関する他の利用) 既に示されているように、デレゲイトは全般に、特にイベント関係のシナリオ
に役立つ。しかし、J/直接呼び出し及びレイジー呼び出しにおけるコールバッ
ク機構に取って替わるような非イベント指向シナリオにも有益である。
【0121】 (他のプログラム言語及びシステムへの本発明の適用/代替実施例) 本明細書に記載の本発明のデレゲイト及びイベントモデルの実施例は、拡張マ
イクロソフト(登録商標)ビジュアルJ++として示されている。しかし、本明
細書に記述されている本発明は、C++及びマイクロソフト(登録商標)ビジュ
アルベーシックのようなオブジェクトベースのプログラミング言語のような他の
オブジェクト指向プログラミング言語システムに、又はマイクロソフト社又は他
の開発者から入手可能なJ++の他のバージョンに広く適用されることは理解頂
けるであろう。
【0122】 更に、本明細書に記述されている本発明は、本発明の発明的コードを使って書
かれるコンピュータープログラムと、コンピュータープログラムをコンピュータ
ーシステムで実行できるコマンドへ翻訳するコンパイラ、実行時バーチャルマシ
ン及び他のプログラミングシステムとの両方に適用可能であり、その両方の形式
を取る。
【0123】 本発明は更に、これに限定されるわけではないが、ハードドライブ、フレキシ
ブルディスク、コンピューターメモリ、又はコードを1つのコンピューター又は
記憶媒体から他のコンピューター又は記憶媒体へ転送するのに用いられる電気信
号のような、担体の中又は上において、デレゲイト及びイベントモデルを物理的
なコンピューターコードフォームに具体化する。
【0124】 更に、本明細書に開示されている実施例はソフトウェアで実施されているが、
ここに記述されている本発明はソフトウェアでの実行だけに決して限定されるも
のではないし、フィルムウェア及びシリコンベース又は他の形態のハードワイヤ
ードロジック、あるいはハードワイヤードロジック、フィルムウェア、ソフトウ
ェア又は何らかの好適な代用品の組み合わせ内でのインプリメンテーションをも
考慮していることは明らかである。
【0125】 (結論) このように、オブジェクト指向又はオブジェクトベースのプログラミングシス
テムにおいてメソッドへのリファランスをカプセル化し、そのリファレンスが安
全であることを保証するためのメソッド及び装置を説明してきた。上に述べたよ
うに、本発明は、 a)参照されるメソッドの形状を定義するエンティティを定義し、 b)メソッドへのリファレンスを入手し、 c)このリファレンスを任意のデータ構成で保存し、 d)リファレンスを他のパーティにより書き込まれたコードへ送り、 e)メソッドリファレンス保持者誰にでもメソッド呼び出しができるよう
にし、 f)メソッドリファレンス保持者がターゲットオブジェクト及び参照され
るメソッドを決定できるようにする。
【0126】 更に、本発明のプログラミングシステムは、 a)開発者が遅い時期(実行時)ではなく早く(コンパイル時)タイプ不
適合問題を学習でき、 b)開発ツールが、開発者に、デレゲイトを用いる構成要素の形状につい
て情報を提示することができる ようにしながら、強くタイプされた方式で上記目的を達成する。
【0127】 更に、本発明は、イベント関係のコードがデレゲイト内にカプセル化され得る
イベントベースプログラミングを提供する。
【図面の簡単な説明】
【図1】 本発明の主な構成要素のブロック図である。
【図2】 本発明に適用可能なプラットフォーム及び担体である。
【図3】 本発明によるJ++コンピュータープログラム例である。
【図4】 本発明によるアーリーバウンドデレゲイトの宣言例である。
【図5A】 本発明によるアーリーバウンドデレゲイトの宣言例である。
【図5B】 ストリングメソッド名前に基づきレイトバウンドデレゲイトを構築する例であ
る。
【図6】 本発明によるクラスデレゲイトの定義例である。
【図7】 クラスマルチキャストデレゲイトの定義例である。
【図8】 マイクロソフト(登録商標)ビジュアルJ++を拡張してcom.ms.la
ng.Callableインターフェースを含むようにする実施例である。
【図9】 本発明によるイベントクラスの例である。
【図10】 本発明によるイベント処理コードの例である。
【図11】 本発明によるイベント処理コードの例である。
【図12】 本発明によるイベント処理コードの例である。
【図13】 本発明によるイベント処理コードの例である。
【図14A】 本発明による、デレゲイトを用いるイベント処理プログラムの例である。
【図14B】 本発明による、デレゲイトを用いるイベント処理プログラムの例である。
【図15A】 本発明によるイベント処理プログラムの例である。
【図15B】 本発明によるイベント処理プログラムの例である。
【図16】 本発明による、シングルキャストのイベント処理プログラムの例である。
【図17】 本発明によるクラスイベントの定義である。
【図18】 本発明による、イベントハンドラ宣言の定義例である。
【図19】 本発明による、キャンセルイベントクラスの定義例である。
【図20】 本発明による、イベントハンドラの宣言である。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ヘジェルスバーグ アンダース アメリカ合衆国 ワシントン州 98112 シアトル メイデン レーン イースト 302 (72)発明者 ロイヤル チャド ダブリュー アメリカ合衆国 ワシントン州 98053 レッドモンド トウハンドレッドアンドシ ックスティフォース アベニュー ノース イースト 3412 (72)発明者 シャープ トレイシー シー アメリカ合衆国 ワシントン州 98102 シアトル サミット アベニュー 205 アパートメント 309 (72)発明者 トウトンギ マイケル ジェイ アメリカ合衆国 ワシントン州 98115 シアトル ナインティーンス アベニュー ノースイースト 7752 (72)発明者 ワイアット エドワード エイチ アメリカ合衆国 ワシントン州 98112 シアトル フォーティーンス アベニュー 505 アパートメント 201 (72)発明者 ウィルタムス スコット エム アメリカ合衆国 ワシントン州 98119 シアトル ナインス アベニュー ウェス ト 1622 【要約の続き】 化できるようになっている。

Claims (44)

    【特許請求の範囲】
  1. 【請求項1】 クラスのインスタンスの第二メソッドを呼び出すことにより
    第一メソッドを呼び出す段階を実行するためにコンピューターを用いる段階から
    成る、オブジェクトベースのコンピューターコードを使ってコンピューターを操
    作するための方法において、前記第二メソッドに提供されるパラメータが前記第
    一メソッドに提供され、前記第二メソッドのパラメータリストが前記第一メソッ
    ドのパラメータリストと一致し、更に、前記第一メソッドは名前により、及び前
    記第一メソッドのパラメータリスト及び結果タイプを前記クラスに対して宣言さ
    れたパラメータリスト及び結果タイプと突き合わせることにより識別されること
    を特徴とする方法。
  2. 【請求項2】 前記クラスのインスタンスが、変数に割り当てることができ
    一つの手続きから別の手続きへ送ることができる値により表されることを表示す
    る段階を更に含むことを特徴とする請求項1に記載の方法。
  3. 【請求項3】 前記クラスのインスタンスを表す値を割り当てられている変
    数上の前記第二メソッドを呼び出すために、プログラムコードを用いる段階を更
    に含むことを特徴とする請求項2に記載の方法。
  4. 【請求項4】 前記第一メソッドを用いてイベントを処理する段階を更に含
    むことを特徴とする請求項1に記載の方法。
  5. 【請求項5】 前記第二メソッドへの呼び出しで1つ又はそれ以上の追加の
    第一メソッドを呼び出す段階を更に含み、1つ又はそれ以上の対応する追加のパ
    ラメータのセットが、それぞれ、もう一つの追加の第一メソッドに供給される第
    二メソッドに供給されることを特徴とする請求項1に記載の方法。
  6. 【請求項6】 前記第二メソッドに関連する呼び出しリストを作成する段階
    を更に含み、前記呼び出しリストは呼び出される前記第一メソッドを特定するこ
    とを特徴とする請求項5に記載の方法。
  7. 【請求項7】 前記呼び出しリストに第一メソッドを加え、前記呼び出しリ
    ストから第一メソッドを削除する段階を更に含むことを特徴とする請求項6に記
    載の方法。
  8. 【請求項8】 物理的な担体上に、コンピューターが読み取り可能な形式で
    具体化されているコンピュータープログラムコードを備えた、オブジェクトベー
    スのコンピュータープログラム製品において、前記プログラムコードは、クラス
    のインスタンスの第二メソッドを呼び出すことによりコンピューターに第一メソ
    ッドを呼び出す段階を実行させ、前記第二メソッドに供給されるパラメータが前
    記第一メソッドに供給され、且つ前記第二メソッドのパラメータリストが前記第
    一メソッドのパラメータリストと一致し、更に、前記第一メソッドは、名前によ
    り、且つ前記第一メソッドのパラメータリスト及び結果タイプを前記クラスに対
    して宣言されたパラメータリスト及び結果タイプと突き合わせることにより識別
    されることを特徴とするコンピュータープログラム製品。
  9. 【請求項9】 更に、前記クラスの前記インスタンスが、変数に割り当てる
    ことができ一つの手続きから別の手続きへ送ることのできる値により表示されて
    いることを特徴とする請求項8に記載のコンピュータープログラム製品。
  10. 【請求項10】 更に、プログラムコードが、コンピューターに、前記クラ
    スのインスタンスを表す値を割り当てられている変数上の前記第二メソッドを呼
    び出させることを特徴とする請求項9に記載のコンピュータープログラム製品。
  11. 【請求項11】 更に、イベントが前記第一メソッドを用いて処理されるこ
    とを特徴とする請求項8に記載のコンピュータープログラム製品。
  12. 【請求項12】 更に、前記コンピューターは、前記第二メソッドへの呼び
    出しにより1つ又はそれ以上の追加の第一メソッドを呼び出し、1つ又はそれ以
    上の対応する追加のパラメータのセットが、それぞれ、もう一つの追加の第一メ
    ソッドに供給される第二メソッドに供給されることを特徴とする請求項8に記載
    のコンピュータープログラム製品。
  13. 【請求項13】 更に、前記第二メソッドに関連する呼び出しリストが作成
    され、前記呼び出しリストは、呼び出される前記第一メソッドを特定することを
    特徴とする請求項12に記載のコンピュータープログラム製品。
  14. 【請求項14】 更に、第一メソッドは、前記呼び出しリストに加えられ、
    そして前記呼び出しリストから削除されることを特徴とする請求項13に記載の
    コンピュータープログラム製品。
  15. 【請求項15】 クラスのインスタンスの第二メソッドを呼び出すことによ
    り第一メソッドを呼び出すことができるようになっているコンピューターを備え
    たオブジェクトベースのプログラミングシステムにおいて、前記第二メソッドに
    提供されるパラメータが前記第一メソッドに提供され、且つ前記第二メソッドの
    パラメータリストは前記第一メソッドのパラメータリストと一致し、更に、前記
    第一メソッドは名前により、且つ前記第一メソッドのパラメータリスト及び結果
    タイプを前記クラスに対して宣言されたパラメータリスト及び結果タイプと突き
    合わせることにより識別されることとを特徴とするプログラミングシステム。
  16. 【請求項16】 更に、前記クラスの前記インスタンスが、変数に割り当て
    ることができ一つの手続きから別の手続きへ送ることができる値により表示され
    ていることを特徴とする請求項15に記載のプログラミングシステム。
  17. 【請求項17】 更に、プログラムコードが、コンピューターに、前記クラ
    スのインスタンスを示す値を割り当てられている変数上の前記第二メソッドを呼
    び出させることを特徴とする請求項16に記載のプログラミングシステム。
  18. 【請求項18】 更に、イベントが前記第一メソッドを用いて処理されるこ
    とを特徴とする請求項15に記載のプログラミングシステム。
  19. 【請求項19】 更に、前記コンピューターは、前記第二メソッドへの呼び
    出しにより1つ又はそれ以上の追加の第一メソッドを呼び出し、1つ又はそれ以
    上の対応する追加のパラメータのセットが、それぞれ、もう一つの追加の第一メ
    ソッドに供給される第二メソッドに供給されることを特徴とする請求項15に記
    載のプログラミングシステム。
  20. 【請求項20】 更に、前記第二メソッドに関連する呼び出しリストが作成
    され、前記呼び出しリストは、呼び出される前記第一メソッドを特定することを
    特徴とする請求項19に記載のプログラミングシステム。
  21. 【請求項21】 更に、第一メソッドは、前記呼び出しリストに加えられ、
    そして前記呼び出しリストから削除されることを特徴とする請求項20に記載の
    プログラミングシステム。
  22. 【請求項22】 更に、前記コンピューターが、ソフトウェアに適合してい
    ることを特徴とする請求項15に記載のプログラミングシステム。
  23. 【請求項23】 更に、前記コンピューターが、ハードウェア及びソフトウ
    ェアに適合していることを特徴とする請求項15に記載のプログラミングシステ
    ム。
  24. 【請求項24】 更に、前記プログラミングシステムが、コンパイラを含ん
    でいることを特徴とする請求項15に記載のプログラミングシステム。
  25. 【請求項25】 更に、前記プログラミングシステムが、インタプリタを含
    んでいることを特徴とする請求項15に記載のプログラミングシステム。
  26. 【請求項26】 a)第一メソッドを有する第一クラスを、第二クラスの第
    二メソッドを参照するのに用いられるように定義するプログラミング段階と、 b)前記第一クラスのインスタンスを値で表示し、そこでは前記第二クラスのイ
    ンスタンス及び前記第二メソッドは前記第一クラスの前記インスタンスのパラメ
    ータとして識別されているプログラミング段階と、 c)前記インスタンスを参照するために、前記値を用いて前記第一クラスの前記
    インスタンス上の前記第一メソッドを呼び出すことにより、前記第二メソッドを
    呼び出すプログラミング段階とを実行するためにコンピューターを用いる段階か
    ら成ることを特徴とする、オブジェクトベースのコンピューターコードでコンピ
    ューターをプログラミングするための方法。
  27. 【請求項27】 クラスのインスタンスの第二メソッドを呼び出すことによ
    り第一スタティックメソッドを呼び出す段階を実行するためにコンピューターを
    用いる段階から成り、前記第二メソッドに供給されるパラメータが前記第一メソ
    ッドに供給され、且つ前記第二メソッドのパラメータリストは前記第一メソッド
    のパラメータリストと一致し、更に、前記第一メソッドは名前により、且つ前記
    第一メソッドのパラメータリスト及び結果タイプを前記クラスに対して宣言され
    たパラメータリスト及び結果タイプと突き合わせることにより識別されることを
    特徴とする、オブジェクトベースのコンピューターコードを使ってコンピュータ
    ーを操作するための方法。
  28. 【請求項28】 コンピューターに、 1)以下のプログラムステートメント、即ち、 a)第一クラスはもう一つのクラスのインスタンスのメソッドを呼び出すのに
    用いられることを宣言し、そこでは前記第一クラスはパラメータリスト及び結果
    タイプと共に宣言され、前記第一クラスは他のクラスのメソッドを呼び出すのに
    用いられるメソッドを含んでいるプログラムステートメントと、 b)前記第一クラスのインスタンスを、パラメータとして供給される他のクラ
    スのメソッドの名前及びインスタンスの名前と共に例示するプログラムステート
    メントと、 c)前記第一クラスの前記インスタンスのメソッドを呼び出し、他のクラスの
    前記メソッドへ提供されるパラメータを含んでいるプログラムステートメントと
    をコンピューターで読み取り可能に受信させ、 2)他のクラスの前記メソッドに関して前記コンピュータに供給される他のプロ
    グラムステートメントを検索させ、そのパラメータリスト及び結果タイプを前記
    第一クラスのパラメータリスト及び結果タイプと比較することによりそれを識別
    するように作用するオブジェクトベースのコンピュータープログラム。
  29. 【請求項29】 検索により識別された他のクラスの前記メソッドが1つ又
    はそれ以上の受け入れ基準を満たすかどうかをチェックするために、コンパイラ
    が前記コンピューター上で作動することを特徴とする請求項28に記載のオブジ
    ェクトベースのプログラム。
  30. 【請求項30】 物理的な担体上に、コンピューターが読み取り可能な形式
    でコード化されている以下のプログラムステートメント、即ち、 a)第一クラスはもう一つのクラスのインスタンスのメソッドを呼び出すのに用
    いられることを宣言し、そこでは前記第一クラスはパラメータリスト及び結果タ
    イプと共に宣言され、前記第一クラスは他のクラスのメソッドを呼び出すのに用
    いられるメソッドを含んでいるプログラムステートメントと、 b)前記第一クラスのインスタンスを、パラメータとして供給される他のクラス
    のメソッドの名前及びインスタンスと共に例示し、そこでは前記第一クラスの前
    記インスタンスが値で表示されているプログラムステートメントと、 c)前記第一クラスの前記インスタンスの前記メソッドを呼び出し、他のクラス
    の前記インスタンスの前記メソッドへ提供されるパラメータを含んでいるプログ
    ラムステートメントとを含むオブジェクトベースのコンピュータープログラム製
    品。
  31. 【請求項31】 前記第一クラスの前記インスタンスは機密保護許可のセッ
    トを有するクラス内に例示されており、且つ他のクラスは機密保護許可のセット
    を有しており、更に、前記機密保護許可は担体上にコンピューター読み取り可能
    な形式でコード化されていることとを特徴とする請求項30に記載の製品。
  32. 【請求項32】 第一クラスのインスタンス上の第一メソッドを呼び出す段
    階から成る、オブジェクトベースのコンピュータープログラム内でターゲットメ
    ソッドを呼び出すコンピューターで実行される方法において、前記第一メソッド
    へ供給されるパラメータは第二クラス上の前記ターゲットメソッドへのリファレ
    ンスを含んでおり、前記第一メソッドは前記ターゲットメソッドを呼び出し、更
    に、前記第一クラスの前記インスタンスは機密保護許可のセットを有する第三ク
    ラス内に例示され、前記第二クラスは機密保護許可のセットを有し、前記第三ク
    ラスの機密保護許可のセットは、前記第三クラスが前記第一クラスのインスタン
    スを例示できるかどうかを決定するために前記第二クラスの機密保護許可のセッ
    トと比較されることを特徴とする方法。
  33. 【請求項33】 更に、前記ターゲットメソッドの前記呼び出しが許可され
    なければ前記第一クラスは例示されないようにする段階を含むことを特徴とする
    請求項32に記載の方法。
  34. 【請求項34】 オブジェクトベースのコンピューター言語による複数のク
    ラス定義と、それぞれが少なくとも幾つかの前記クラスに関連している複数の機
    密保護許可とを備えており、前記クラスと関連している前記機密保護許可は、も
    う一つのクラスのインスタンスのメソッドを呼び出すのに用いられるクラスのイ
    ンスタンスが、もう一つ又別のクラスに例示されているかどうかを決定するため
    に互いが比較されるように構成されていることを特徴とするコンピューター読み
    取り可能な媒体上に記録されているデータ構成。
  35. 【請求項35】 オブジェクトベースのコンピュータープログラムを読み取
    り処理して実行に備えるための1つ又はそれ以上のコンピュータープログラムモ
    ジュールを備えており、前記モジュールの1つ又はそれ以上は、もう一つのクラ
    スのインスタンスのメソッドを呼び出すのに用いられるクラスのインスタンスが
    もう一つ又別のクラスに例示されているかどうかを決定するために、1つ又はそ
    れ以上のクラスに関連している機密保護許可をチェックすることを特徴とする、
    物理的な担体上にコンピューターが読み取り可能な形式でコード化されているコ
    ンピュータープログラムを備えているコンピュータープログラム製品。
  36. 【請求項36】 オブジェクトベースのコンピュータープログラムを読み取
    り処理して実行に備える段階と、 もう一つのクラスのインスタンスのメソッドを呼び出すのに用いられるクラス
    のインスタンスがもう一つ又別のクラスに例示されているかどうかを決定するた
    めに、1つ又はそれ以上のクラスに関連している機密保持許可をチェックする段
    階とを備えていることを特徴とする、コンピューターを操作する方法。
  37. 【請求項37】 機密保護チェックを容易にするために、前記クラスの前記
    インスタンスが最終クラスであることをチェックする段階を更に含むことを特徴
    とする請求項36に記載の方法。
  38. 【請求項38】 オブジェクトベースのコンピュータープログラムを読み取
    り処理して実行に備えるためのコンピューター上で作動する1つ又はそれ以上の
    コンピュータープログラムモジュールを備えた、物理的な担体上にコンピュータ
    ーが読み取り可能な形式でコード化されているコンピュータープログラムを備え
    ているコンピュータープログラム製品において、 前記モジュールの1つ又はそれ以上は、 1)以下のオブジェクトベースのプログラムステートメント、即ち、 a)第一クラスはもう一つのクラスのインスタンスのメソッドを呼び出すのに
    用いられることを宣言し、そこでは前記第一クラスはパラメータリスト及び結果
    タイプと共に宣言され、前記第一クラスは別のクラスのメソッドを呼び出すのに
    用いられるメソッドを含んでいるプログラムステートメントと、 b)パラメータとして供給される他のクラスのメソッドの名前及びインスタン
    スの名前と共に前記第一クラスのインスタンスを例示するプログラムステートメ
    ントと、 c)前記第一クラスの前記インスタンスの前記メソッドを呼び出し、他のクラ
    スの前記メソッドへ提供されるパラメータを含むプログラムステートメントとを
    コンピューターが読み取り可能な形式で受信し、 2)他のクラスの前記メソッドに対してコンピュータに供給される他のプログラ
    ムステートメントを検索し、そのパラメータリスト及び結果タイプを前記第一ク
    ラスのパラメータリスト及び結果タイプと比較することによりそれを識別するこ
    とを特徴とする、コンピュータープログラム製品。
  39. 【請求項39】 オブジェクトベースのコンピュータープログラムを読み取
    り処理して実行に備えるための、コンピューター上で作動する1つ又はそれ以上
    のコンピュータープログラムモジュールを備えており、前記モジュールの1つ又
    はそれ以上は、コンピューターの読み取り可能な形式でプログラムステートメン
    トをオブジェクトベースのコンピューター言語で受信し、別のクラスのインスタ
    ンスのメソッドを呼び出すのに用いられるクラスを宣言し、前記第一クラスはパ
    ラメータリスト及び結果タイプと共に宣言され、メソッドを別のクラスのインス
    タンスのメソッドを呼び出すのに用いられる前記第一クラス上に自動的に作成す
    ることを特徴とする、物理的な担体上にコンピューターが読み取り可能な形式で
    コード化されているコンピュータープログラムを備えているコンピュータープロ
    グラム製品。
  40. 【請求項40】 モジュールが機能的に関連しているコンピュータープログ
    ラムコード及びデータを備えていることを特徴とする請求項39に記載のオブジ
    ェクトベースのプログラム。
  41. 【請求項41】 コンピューターが読み取り可能なプログラムステートメン
    トをオブジェクトベースのコンピューター言語で受信し、別のクラスのインスタ
    ンスのメソッドを呼び出すのに用いられるクラスを宣言するコンピューターを備
    えた方法において、前記クラスはパラメータリスト及び結果タイプと共に宣言さ
    れ、前記クラスの宣言に応じて、メソッドを別のクラスのインスタンスのメソッ
    ドを呼び出すのに用いられる第一クラス上に自動的に作成することを特徴とする
    方法。
  42. 【請求項42】 別のクラスのメソッドを使ってメソッドを参照する段階か
    ら成る方法。
  43. 【請求項43】 別のクラスのメソッドを使ってメソッドを参照するための
    コードを備えたコンピュータープログラム。
  44. 【請求項44】 前記コードがコンピューター上で実行することを特徴とす
    る請求項43に記載のプログラム。
JP2000552579A 1998-06-03 1999-06-03 オブジェクトベースプログラミングでのメソッド参照 Expired - Fee Related JP4220127B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/089,619 1998-06-03
US09/089,619 US6381734B1 (en) 1998-06-03 1998-06-03 Method, software and apparatus for referencing a method in object-based programming
PCT/US1999/012299 WO1999063433A1 (en) 1998-06-03 1999-06-03 Referencing a method in object-based programming

Publications (2)

Publication Number Publication Date
JP2002517815A true JP2002517815A (ja) 2002-06-18
JP4220127B2 JP4220127B2 (ja) 2009-02-04

Family

ID=22218650

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000552579A Expired - Fee Related JP4220127B2 (ja) 1998-06-03 1999-06-03 オブジェクトベースプログラミングでのメソッド参照

Country Status (7)

Country Link
US (1) US6381734B1 (ja)
EP (1) EP1082654B1 (ja)
JP (1) JP4220127B2 (ja)
AT (1) ATE280973T1 (ja)
DE (1) DE69921474T2 (ja)
ES (1) ES2230900T3 (ja)
WO (1) WO1999063433A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009104658A1 (ja) * 2008-02-19 2009-08-27 日本電気株式会社 情報表示装置、方法及びプログラム

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6918126B1 (en) * 2000-09-08 2005-07-12 International Business Machines Corporation Method and apparatus for creating and enforcing protected system level Java code
US7150001B1 (en) * 2001-03-19 2006-12-12 Microsoft Corporation System and method to facilitate design-time component discovery
US6934946B2 (en) * 2001-05-15 2005-08-23 Sun Microsystems, Inc. Lightweight native method invocation interface for java computing environments
US7152223B1 (en) * 2001-06-04 2006-12-19 Microsoft Corporation Methods and systems for compiling and interpreting one or more associations between declarations and implementations in a language neutral fashion
US7636720B2 (en) * 2003-05-08 2009-12-22 Microsoft Corporation Associating and using information in a metadirectory
US7634480B2 (en) 2003-05-08 2009-12-15 Microsoft Corporation Declarative rules for metadirectory
US7257603B2 (en) * 2003-05-08 2007-08-14 Microsoft Corporation Preview mode
US7516157B2 (en) * 2003-05-08 2009-04-07 Microsoft Corporation Relational directory
US20040225632A1 (en) * 2003-05-08 2004-11-11 Microsoft Corporation Automated information management and related methods
US7330853B2 (en) 2003-05-08 2008-02-12 Microsoft Corporation Attribute value selection for entity objects
US7620658B2 (en) * 2003-09-24 2009-11-17 Microsoft Corporation Configuration of a directory system
US7552450B1 (en) 2003-09-30 2009-06-23 Microsoft Corporation Systems and methods for enabling applications via an application programming interface (API) to interface with and configure digital media components
US8533597B2 (en) * 2003-09-30 2013-09-10 Microsoft Corporation Strategies for configuring media processing functionality using a hierarchical ordering of control parameters
US20070016292A1 (en) * 2003-11-14 2007-01-18 Edward Perez Epithelium treatment methods and devices for treating the epithelium
US20050246773A1 (en) * 2004-04-29 2005-11-03 Microsoft Corporation System and methods for processing partial trust applications
US7665062B1 (en) 2004-07-02 2010-02-16 Borland Software Corporation System and methodology for design-time dynamic class type construction
US7561673B2 (en) * 2004-09-30 2009-07-14 Microsoft Corporation Integration of speech services with telecommunications
US20070074185A1 (en) * 2005-08-30 2007-03-29 Microsoft Corporation Identifier expressions
US7694285B2 (en) * 2005-08-30 2010-04-06 Microsoft Corporation Relaxed and extended delegates
US9009688B2 (en) * 2005-12-30 2015-04-14 Intel Corporation Type checking for object-oriented programming languages
US7752596B2 (en) * 2006-03-17 2010-07-06 Microsoft Corporation Connecting alternative development environment to interpretive runtime engine
US7743087B1 (en) 2006-03-22 2010-06-22 The Math Works, Inc. Partitioning distributed arrays according to criterion and functions applied to the distributed arrays
US8234626B2 (en) 2008-06-04 2012-07-31 Dell Products L.P. Modular ASL component
US9569282B2 (en) * 2009-04-24 2017-02-14 Microsoft Technology Licensing, Llc Concurrent mutation of isolated object graphs
US20110055809A1 (en) * 2009-08-28 2011-03-03 International Business Machines Corporation Typed configuration management in programming languages
US20120159429A1 (en) * 2010-12-15 2012-06-21 Microsoft Corporation Metadata based eventing
US8793706B2 (en) 2010-12-16 2014-07-29 Microsoft Corporation Metadata-based eventing supporting operations on data
US20130212598A1 (en) * 2012-02-14 2013-08-15 Microsoft Corporation Dependency informer
US9626171B2 (en) 2015-07-24 2017-04-18 Oracle International Corporation Composing a module system and a non-module system
US10104090B2 (en) 2015-08-25 2018-10-16 Oracle International Corporation Restrictive access control for modular reflection
US10394528B2 (en) 2016-03-30 2019-08-27 Oracle International Corporation Returning a runtime type loaded from an archive in a module system
US10360008B2 (en) * 2016-09-16 2019-07-23 Oracle International Corporation Metadata application constraints within a module system based on modular encapsulation

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU639802B2 (en) * 1990-08-14 1993-08-05 Oracle International Corporation Methods and apparatus for providing dynamic invocation of applications in a distributed heterogeneous environment
AU628264B2 (en) * 1990-08-14 1992-09-10 Oracle International Corporation Methods and apparatus for providing a client interface to an object-oriented invocation of an application
US5265206A (en) * 1990-10-23 1993-11-23 International Business Machines Corporation System and method for implementing a messenger and object manager in an object oriented programming environment
US5421016A (en) * 1991-12-12 1995-05-30 International Business Machines Corporation System and method for dynamically invoking object methods from an application designed for static method invocation
US5515536A (en) * 1992-11-13 1996-05-07 Microsoft Corporation Method and system for invoking methods of an object through a dispatching interface
US5632034A (en) * 1993-06-01 1997-05-20 International Business Machines Corporation Controlling method invocation sequence through virtual functions in an object-oriented class library
DE69426143T2 (de) * 1993-09-10 2001-06-13 Sun Microsystems, Inc. Kundenseitiger Stubinterpretor
US5732271A (en) * 1995-01-23 1998-03-24 International Business Machines Corporation Data processing system and method for processing an object oriented development environment employing property inheritance using prototypical objects
US5680619A (en) * 1995-04-03 1997-10-21 Mfactory, Inc. Hierarchical encapsulation of instantiated objects in a multimedia authoring system
DE19535519C2 (de) * 1995-09-25 1999-03-04 Ibm Verfahren zur Reduzierung des Umfanges von Computerprogrammen
US5864862A (en) * 1996-09-30 1999-01-26 Telefonaktiebolaget Lm Ericsson (Publ) System and method for creating reusable components in an object-oriented programming environment
US6298476B1 (en) * 1995-12-04 2001-10-02 International Business Machines Corporation Object oriented software build framework mechanism
US5768505A (en) * 1995-12-19 1998-06-16 International Business Machines Corporation Object oriented mail server framework mechanism
US6104874A (en) * 1996-10-15 2000-08-15 International Business Machines Corporation Object oriented framework mechanism for order processing including pre-defined extensible classes for defining an order processing environment
US6002867A (en) * 1996-10-24 1999-12-14 Inprise Corporation Development system with methods providing visual form inheritance
US5937189A (en) * 1996-11-12 1999-08-10 International Business Machines Corporation Object oriented framework mechanism for determining configuration relations
US5991802A (en) * 1996-11-27 1999-11-23 Microsoft Corporation Method and system for invoking methods of objects over the internet
US5920720A (en) * 1997-02-25 1999-07-06 Microsoft Corporation Efficient computer based virtual machine object structure
US6182274B1 (en) * 1997-05-01 2001-01-30 International Business Machines Corporation Reusing code in object-oriented program development
US5941945A (en) * 1997-06-18 1999-08-24 International Business Machines Corporation Interest-based collaborative framework
US6014710A (en) * 1997-06-30 2000-01-11 Sun Microsystems, Inc. System and method for message transmission between network nodes using remote wires
US6078743A (en) * 1997-11-24 2000-06-20 International Business Machines Corporation Generic IDE interface support for scripting
US6199197B1 (en) * 1998-03-11 2001-03-06 International Business Machines Corporation Apparatus and method for providing common behavior across different processing levels in an object oriented framework
US6195791B1 (en) * 1998-03-11 2001-02-27 International Business Machines Corporation Object mechanism and method for coupling together processes to define a desired processing environment in an object oriented framework
US6275979B1 (en) * 1998-03-11 2001-08-14 International Business Machines Corporation Implementation for an object oriented run-time extensible item
US6083276A (en) * 1998-06-11 2000-07-04 Corel, Inc. Creating and configuring component-based applications using a text-based descriptive attribute grammar

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009104658A1 (ja) * 2008-02-19 2009-08-27 日本電気株式会社 情報表示装置、方法及びプログラム
JP5359891B2 (ja) * 2008-02-19 2013-12-04 日本電気株式会社 情報表示装置、方法及びプログラム

Also Published As

Publication number Publication date
DE69921474D1 (de) 2004-12-02
DE69921474T2 (de) 2006-01-05
EP1082654B1 (en) 2004-10-27
EP1082654A1 (en) 2001-03-14
WO1999063433A1 (en) 1999-12-09
JP4220127B2 (ja) 2009-02-04
US6381734B1 (en) 2002-04-30
ES2230900T3 (es) 2005-05-01
ATE280973T1 (de) 2004-11-15

Similar Documents

Publication Publication Date Title
JP2002517815A (ja) オブジェクトベースプログラミングでのメソッド参照
US6959307B2 (en) Process and system for a client object to perform a remote method invocation of a method in a server object
Bracha et al. Modules as objects in Newspeak
US6385722B1 (en) Method, system, and article of manufacture for limiting access to program files in a shared library file
EP0546683B1 (en) Language neutral objects
US6044224A (en) Mechanism for dynamically associating a service dependent representation with objects at run time
US6470494B1 (en) Class loader
US7225438B2 (en) Lazy compilation of template-generated classes in dynamic compilation execution environments
EP0546684A2 (en) Method stubs for redispatch
EP0546809A2 (en) Computer with object oriented environment
US6473768B1 (en) System and method for modifying an executing application
US7114152B2 (en) Method, apparatus, and program to determine the mutability of an object at loading time
JPH10505693A (ja) 異種オブジェクトシステム相互間にインタオペラビリティを提供するシステム及び方法
US6330711B1 (en) Method and apparatus for dynamic application and maintenance of programs
US6085034A (en) Constructor based object initialization with overrides
US6298475B1 (en) Method and apparatus for analyzing performance of a Java bean
US6918126B1 (en) Method and apparatus for creating and enforcing protected system level Java code
US6205491B1 (en) Method and apparatus for deferred throwing of exceptions in C++
WO2000077632A1 (en) Management of non-mbeam objects in jmx environment
AU2000263715B2 (en) System and method of verifying the authenticity of dynamically connectable executable images
Meijer et al. Lambada, Haskell as a better Java
Hunt et al. Intercepting and Instrumenting COM Applications.
Watkins et al. Programming in the. NET Environment
Troelsen COM and. NET interoperability
Szyperski Components vs. objects vs. component objects

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041012

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20050112

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20050119

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050412

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20050530

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050928

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051110

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20051121

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20060113

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20061121

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20061121

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081006

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20081113

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111121

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111121

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121121

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131121

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees