(57)【要約】      （修正有）【課題】ダイナミックライブラリを有するインターフェースを単純化する方法を提供する。【解決手段】方法は、実装ポインタを有する静的メンバを含むインターフェースクラスを定義する。また、インターフェースクラスのスタブ実装を含むメインコードセグメントをロードする。更に、スタブ実装オブジェクトを提供するためにインターフェースクラスのスタブ実装をインスタンス化する。インターフェースクラスのスタブ実装は、実装ポインタをスタブ実装オブジェクトに定めるように設定された第１のコンストラクタを含む。更に、インターフェースクラスのリアル実装を含むダイナミックライブラリをロードする。更にまた、リアル実装オブジェクトを提供するためにインターフェースクラスのリアル実装をインスタンス化する。インターフェースクラスのリアル実装は、実装ポインタをリアル実装オブジェクトに定めるように設定された第２のコンストラクタを含む。【選択図】図１
2010244516.tif 000002
【特許請求の範囲】
【請求項１】
実装ポインタを有する静的メンバを含むインターフェースクラスを定義し、
前記インターフェースクラスのスタブ実装を含むメインコードセグメントをロードし、
スタブ実装オブジェクトを提供するために前記インターフェースクラスの前記スタブ実装をインスタンス化する処理であって、前記インターフェースクラスの前記スタブ実装は、前記実装ポインタを前記スタブ実装オブジェクトに定めるように設定された第１のコンストラクタを含み、
前記インターフェースクラスのリアル実装を含むダイナミックライブラリをロードし、
リアル実装オブジェクトを提供するために前記インターフェースクラスの前記リアル実装をインスタンス化する処理であって、前記インターフェースクラスの前記リアル実装は、前記実装ポインタを前記リアル実装オブジェクトに定めるように設定された第２のコンストラクタを含む
方法。
【請求項２】
請求項１記載の方法であって、更に、
前記実装ポインタが前記スタブ実装オブジェクトに定められている間に前記実装ポインタのコピーを格納する方法。
【請求項３】
請求項２記載の方法であって、更に、
前記ダイナミックライブラリと前記インターフェースクラスの前記リアル実装とをアンロードする方法。
【請求項４】
請求項３記載の方法であって、更に、
前記実装ポインタを前記格納された実装ポインタのコピーに定める方法。
【請求項５】
前記インターフェースクラスは、エンハンスドシングルトンインターフェースクラスである請求項１記載の方法。
【請求項６】
前記エンハンスドシングルトンインターフェースクラスは、アブストラクトＣ＋＋シングルトンインターフェースクラスを含む請求項５記載の方法。
【請求項７】
前記スタブ実装は、第１のポインタアレイを含み、前記リアル実装は、第２のポインタアレイを含む請求項１記載の方法。
【請求項８】
コンピュータプログラミング製品であって、
信号保持媒体を備え、
前記信号保持媒体は、
実装ポインタを有する静的メンバを含むインターフェースクラスを定義するための１つ又は２つ以上の命令と、
前記インターフェースクラスのスタブ実装を含むメインコードセグメントをロードするための１つ又は２つ以上の命令と、
スタブ実装オブジェクトを提供するために前記インターフェースクラスの前記スタブ実装をインスタンス化するための１つ又は２つ以上の命令であって、前記インターフェースクラスの前記スタブ実装は、前記実装ポインタを前記スタブ実装オブジェクトに定めるように設定された第１のコンストラクタを含む、命令と、
前記インターフェースクラスのリアル実装を含むダイナミックライブラリをロードするための１つ又は２つ以上の命令と、
リアル実装オブジェクトを提供するために前記インターフェースクラスの前記リアル実装をインスタンス化するための１つ又は２つ以上の命令であって、前記インターフェースクラスの前記リアル実装は、前記実装ポインタを前記リアル実装オブジェクトに定めるように設定された第２のコンストラクタを含む、命令と、
を保持するコンピュータプログラム製品。
【請求項９】
請求項８記載のコンピュータプログラミング製品であって、更に、
前記実装ポインタが前記スタブ実装オブジェクトに定められている間に前記実装ポインタのコピーを格納するための１つ又は２つ以上の命令を備えるコンピュータプログラミング製品。
【請求項１０】
請求項９記載のコンピュータプログラミング製品であって、更に、
前記ダイナミックライブラリと前記インターフェースクラスの前記リアル実装とをアンロードするための１つ又は２つ以上の命令を備えるコンピュータプログラミング製品。
【請求項１１】
請求項１０記載のコンピュータプログラミング製品であって、更に、
前記実装ポインタを前記格納された実装ポインタのコピーに定めるための１つ又は２つ以上の命令を備えるコンピュータプログラミング製品。
【請求項１２】
請求項８記載のコンピュータプログラミング製品であって、
前記インターフェースクラスは、エンハンスドシングルトンインターフェースクラスである、コンピュータプログラミング製品。
【請求項１３】
請求項１２記載のコンピュータプログラミング製品であって、
前記エンハンスドシングルトンインターフェースクラスは、アブストラクトＣ＋＋シングルトンインターフェースクラスを含む、コンピュータプログラミング製品。
【請求項１４】
請求項８記載のコンピュータプログラミング製品であって、
前記スタブ実装は、第１のポインタアレイを含み、前記リアル実装は、第２のポインタアレイを含むコンピュータプログラミング製品。
【請求項１５】
システムであって、
コンピューティングデバイスと、前記コンピューティングデバイス上で実行されるプログラムとを備え、
前記プログラムは、前記コンピューティングデバイスに、
実装ポインタを有する静的メンバを含むインターフェースクラスを定義させ、
前記インターフェースクラスのスタブ実装を含むメインコードセグメントをロードさせ、
スタブ実装オブジェクトを提供するために前記インターフェースクラスの前記スタブ実装をインスタンス化させるためであって、前記インターフェースクラスの前記スタブ実装は、前記実装ポインタを前記スタブ実装オブジェクトに定めるように設定された第１のコンストラクタを含ませ、
前記インターフェースクラスのリアル実装を含むダイナミックライブラリをロードさせ、
リアル実装オブジェクトを提供するために前記インターフェースクラスの前記リアル実装をインスタンス化させるためであって、前記インターフェースクラスの前記リアル実装は、前記実装ポインタを前記リアル実装オブジェクトに定めるように設定された第２のコンストラクタを含ませる
システム。
【請求項１６】
請求項１５記載のシステムであって、前記プログラムは、
前記コンピューティングデバイス上で実行されたときに前記コンピューティングデバイスに、前記実装ポインタが前記スタブ実装オブジェクトに定められている間に前記実装ポインタのコピーを格納させるための、１つ又は２つ以上の命令を含むシステム。
【請求項１７】
請求項１６記載のシステムであって、更に、前記プログラムは、
前記コンピューティングデバイス上で実行されたときに前記コンピューティングデバイスに、前記ダイナミックライブラリと前記インターフェースクラスの前記リアル実装とをアンロードさせるための、１つ又は２つ以上の命令を含むシステム。
【請求項１８】
請求項１７記載のシステムであって、前記プログラムは、
前記コンピューティングデバイス上で実行されたときに前記コンピューティングデバイスに、前記実装ポインタを前記格納された実装ポインタのコピーに定めさせるための、１つ又は２つ以上の命令を含むシステム。
【請求項１９】
前記インターフェースクラスは、エンハンスドシングルトンインターフェースクラスを含む請求項１５記載のシステム。
【請求項２０】
前記エンハンスドシングルトンインターフェースクラスは、アブストラクトＣ＋＋シングルトンインターフェースクラスである請求項１９記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全体として、コンピュータプログラミングの分野に関するものであり、特に、ダイナミックライブラリを有するインターフェースを単純化するためのシステム、方法、及びコンピュータプログラム製品に関するものである。
【背景技術】
【０００２】
ダイナミックライブラリは、メモリにコードをダウンロードすることをそのコードがコンピュータプログラムの実行に必要になるまで回避するために用いることができる。弱いシンボルリンケージ機能を含むリンカは、コンピュータプログラムのメインコードがリンクタイムエラーを生じずにダイナミックライブラリ内のシンボルを参照することを可能にする。しかしながら、このタイプのリンカは、これらのシンボルを参照するコードに対し、シンボルの利用時にランタイムエラーをチェックするように要求することがある。また、リンカによっては、弱いシンボルリンケージをサポートしないものがあったり、環境によっては、弱いシンボルリンケージがディセーブルされたりする。このような場合、コンピュータプログラムのメインコードセグメントは、リンクタイムエラーを生じずにダイナミックライブラリ内のシンボルを参照することができなくなるであろう。
【０００３】
或いは、別のアプローチでは、メインコードによって参照可能なダイナミックライブラリ内の全てのシンボルを、シンボルテーブルに含ませる必要があるであろう。この実装形態では、メインコードは、これらのシンボルを参照する際に、それらシンボルの存在をチェックするために、シンボルテーブルルックアップルーチンを用いる。そして、必要なシンボルが見つかったら、リンクタイムエラーを回避するために、ポインタを通じてアクセスすることができる。この技術は、コンピュータプログラミング環境に対して不必要な複雑性を導入するうえに、シンボルテーブルのサイズを大きくし、シンボルテーブルルックアップを実施するため及びその結果をチェックするための余分なランタイムチェックを必要とするであろう。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２８８０７６号公報
【発明の概要】
【０００５】
この方法は、実装ポインタを有する静的メンバを含むインターフェースクラスを定義することを含むことができる。この方法は、また、インターフェースクラスのスタブ実装を含むメインコードセグメントをロードすることを含むことができる。また、方法は、スタブ実装オブジェクトを提供するためにインターフェースクラスのスタブ実装をインスタンス化することを含むことができる。インターフェースクラスのスタブ実装は、実装ポインタをスタブ実装オブジェクトに定めるように設定された第１のコンストラクタを含むことができる。更に、方法は、インターフェースクラスのリアル実装を含むダイナミックライブラリをロードすることを含んでよい。更にまた、この方法は、リアル実装オブジェクトを提供するためにインターフェースクラスのリアル実装をインスタンス化することを含むことができる。インターフェースクラスのリアル実装は、実装ポインタをリアル実装オブジェクトに定めるように設定された第２のコンストラクタを含むことができる。
【０００６】
コンピュータプログラミング製品は、実装ポインタを有する静的メンバを含むインターフェースクラスを定義するための１つ又は２つ以上の命令を保持する信号保持媒体を含むことができる。コンピュータプログラミング製品は、また、インターフェースクラスのスタブ実装を含むメインコードセグメントをロードするための１つ又は２つ以上の命令を含むことができる。また、コンピュータプログラミング製品は、スタブ実装オブジェクトを提供するためにインターフェースクラスのスタブ実装をインスタンス化するための１つ又は２つ以上の命令を含むことができる。インターフェースクラスのスタブ実装は、実装ポインタをスタブ実装オブジェクトに定めるように設定された第１のコンストラクタを含むことができる。更に、コンピュータプログラミング製品は、インターフェースクラスのリアル実装を含むダイナミックライブラリをロードするための１つ又は２つ以上の命令を含むことができる。更にまた、コンピュータプログラミング製品は、リアル実装オブジェクトを提供するためにインターフェースクラスのリアル実装をインスタンス化するための１つ又は２つ以上の命令を含むことができる。インターフェースクラスのリアル実装は、実装ポインタをリアル実装オブジェクトに定めるように設定された第２のコンストラクタを含むことができる。
【０００７】
システムは、コンピューティングデバイスと、該コンピューティングデバイス上で実行されたときにコンピューティングデバイスに、実装ポインタを有する静的メンバを含むインターフェースクラスを定義させる命令と、を含むことができる。システムは、また、コンピューティングデバイス上で実行されたときにコンピューティングデバイスに、インターフェースクラスのスタブ実装を含むメインコードセグメントをロードさせる命令を含むことができる。また、システムは、コンピューティングデバイス上で実行されたときにコンピューティングデバイスに、スタブ実装オブジェクトを提供するためにインターフェースクラスのスタブ実装をインスタンス化させる命令を含むことができる。インターフェースクラスのスタブ実装は、実装ポインタをスタブ実装オブジェクトに定めるように設定された第１のコンストラクタを含むことができる。更に、システムは、コンピューティングデバイス上で実行されたときにコンピューティングデバイスに、インターフェースクラスのリアル実装を含むダイナミックライブラリをロードさせる命令を含むことができる。更にまた、システムは、コンピューティングデバイス上で実行されたときにコンピューティングデバイスに、リアル実装オブジェクトを提供するためにインターフェースクラスのリアル実装をインスタンス化させる命令を含むことができる。インターフェースクラスのリアル実装は、実装ポインタをリアル実装オブジェクトに定めるように設定された第２のコンストラクタを含むことができる。
【０００８】
以下の説明は、いずれも例示的で説明的なものに過ぎず、必ずしも本発明の内容を限定するものではない。添付の図面は、本開示の内容を例示し、明細書の説明共々、本発明の原理を例示する。当業者ならば、下記図面を参照にして、本願記載の技術の数々の利点をより良く理解することができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施例おける幾つかのクラスを示したクラス図である。
【図２】本発明の実施例おける方法を示した流れ図である。
【図３】本発明の実施例おけるコンピュータプログラム製品の部分図である。
【図４】本発明の実施例おける代表的なシステムの部分図である。
【発明を実施するための形態】
【００１０】
添付の図面に例示された内容に沿って、以下本発明の一実施例について説明する。
図１、図２を参照にして、本発明の実施例おける方法２００の概要を説明する。一般に、方法２００は、（変更可能な実装ポインタを伴う）エンハンスドシングルトンパターンと組み合わされたＣ＋＋継承技術を用いる。こうすれば、方法２００は、特定のライブラリがまだロードされていない場合でも、ダイナミックライブラリシンボルへのアクセスを提供することができる。例えば、メインコードセグメント１０２によるアクセスを必要とするダイナミックライブラリ１００内のシンボルは、アブストラクトＣ＋＋シングルトンインターフェースクラスのメンバとして含ませることができる。ダイナミックライブラリ１００は、インターフェース１０８のリアル実装１０４を内包する１つのＣ＋＋シングルトンクラスを含み、メインコードセグメント１０２は、インターフェース１０８のスタブ実装１０６を内包する別のＣ＋＋シングルトンクラスを含む。シングルトンデザインパターンにあるように、インターフェースクラスの静的メンバは、実装クラスへのポインタを内包する。最初、このポインタは、スタブ実装オブジェクトを指し示しているが、ダイナミックライブラリ１００がロードされると、コンストラクタによって、ダイナミックライブラリ１００からのリアル実装オブジェクトを指し示すように変更される。
【００１１】
以下の説明では、幾らかの特異性を伴うＣ＋＋の構文及び構造が用いられる。例えば、以下の説明は、エンハンスドシングルトンインターフェースクラスと言われるインターフェースクラスを含む。より具体的には、このエンハンスドシングルトンインターフェースクラスは、アブストラクトＣ＋＋シングルトンインターフェースクラスとして実装される。しかしながら、この説明は、説明目的で提供されるものであり、本開示に対して制約的であることを意図していない。例えば、以下の説明は、Ｃ＋＋に言及しているが、本開示では、カプセル化を用いる尚且つ／又はＣ＋＋に類似のインヘリタンス特徴を含む任意のプログラミング言語が用いることができる。具体的な一実施形態では、Ｃプログラミング言語が用いることができる。Ｃ実装では、後述されるスタブ実装は、第１のポインタアレイを含んでよく、リアル実装は、第２のポインタアレイを含むことができる（各シンボルに代わって１つのポインタが用いられる）。この実装では、各シンボルは、アレイへのインデックス付けによってアクセスされると考えられる。
【００１２】
次に、方法２００を参照する（とともに、これらの関係を示した図１のクラス図に特に注意を払う）と、先ず、処理２１０において、実装ポインタを有する静的メンバを含むインターフェースクラス１０８が定義される。次いで、ダイナミックライブラリ１００がロードされる前に、処理２２０において、インターフェースクラス１０８のスタブ実装１０６を含むメインコードセグメント１０２がロードされる。次に、処理２３０において、スタブ実装オブジェクトを提供するためにスタブ実装１０６がインスタンス化される。インターフェースクラス１０８のスタブ実装１０６は、実装ポインタをスタブ実装オブジェクトに定めるように設定された第１のコンストラクタ１１０を含む。例えば、スタンダードシングルトンパターンにあるように、第１のコンストラクタ１１０は、実装ポインタを実装オブジェクト（この場合はスタブ実装オブジェクト）を指し示すように定めるために、「interface::setInstance()」を用いることができる。次いで、クライアント１１２は、シンボル１１４にアクセスするにあたり、構文「Interface::getInstance()->symbol1()」を用いることができる。この場合、実際に呼び出されるルーチンは、「StubImplementation::symbol1()」である。
【００１３】
処理２４０では、ある時点において、インターフェースクラス１０８のリアル実装１０４を含むダイナミックライブラリ１００がロードされる。次いで、処理２５０において、リアル実装オブジェクトを提供するためにリアル実装１０４がインスタンス化される。インターフェースクラス１０８のリアル実装１０４は、実装ポインタをリアル実装オブジェクトに定めるように設定された第２のコンストラクタ１１６を含む。例えば、第２のコンストラクタ１１６は、実装ポインタをリアル実装オブジェクトを指し示すように定めるために、「interface::setInstance()」を用いることができる。次いで、クライアント１１２は、構文「Interface::getInstance()->symbol1()」を用いるが、このときに実際に呼び出されるルーチンは、「RealImplementation::symbol1()」である。
【００１４】
第２のコンストラクタ１１６が実装ポインタをリアル実装オブジェクトに定める（方法２００の処理２５０参照）より前に、処理２６０において、実装ポインタがスタブ実装オブジェクトに定められている間に、実装ポインタのコピーを格納してもよい。もし、のちのとある時点において、ダイナミックライブラリ１００がアンロードされた場合は、リアル実装のデストラクタ１１８は、インターフェースポインタを元の値に復元するために、「Interface::unsetInstance()」などの構文を用いることができる。例えば、処理２７０において、ダイナミックライブラリとインターフェースクラスのリアル実装とをアンロードすることができる。そして、処理２８０において、実装ポインタを、格納してある実装ポインタのコピーに定めることができる。一実施形態では、「Implementation::originalImplementation」ポインタが用いられる。この実施形態では、それは、最初の「Interface::setInstance()」の呼び出しによって、先立って割り当てられている。
【００１５】
図３は、コンピューティングデバイス上でコンピュータプロセスを実行するためのコンピュータプログラム３０４を含む代表的なコンピュータプログラム製品３００を示した部分図である。信号保持媒体３０２を使用して、代表的なコンピュータプログラム製品３００の実施形態が提供される。該実施形態は、実装ポインタを有する静的メンバを含むインターフェースクラスを定義するためと、インターフェースクラスのスタブ実装を含むメインコードセグメントをロードするためと、スタブ実装オブジェクトを提供するためにインターフェースクラスのスタブ実装をインスタンス化するためであって、インターフェースクラスのスタブ実装は、実装ポインタをスタブ実装オブジェクトに定めるように設定された第１のコンストラクタを含む、ためと、インターフェースクラスのリアル実装を含むダイナミックライブラリをロードするためと、リアル実装オブジェクトを提供するためにインターフェースクラスのリアル実装をインスタンス化するためであって、インターフェースクラスのリアル実装は、実装ポインタをリアル実装オブジェクトに定めるように設定された第２のコンストラクタを含む、ための、１つ又は２つ以上の命令を含むことができる。１つ又は２つ以上の命令は、例えば、コンピュータ実行可能命令及び／又は論理的実装命令とすることができる。一実装形態では、信号保持媒体３０２は、コンピュータ可読媒体３０６を含むことができる。一実装形態では、信号保持媒体３０２は、追記型媒体３０８を含むことができる。一実施形態では、信号保持媒体３０２は、通信媒体３１０を含むことができる。
【００１６】
図４は、実施形態を実装可能な代表的なシステム４００を示している。システム４００は、コンピューティングシステム環境を含む。システム４００には、デバイス４０４を使用するユーザ４１２も図示され、該ユーザは、随意の接続４０６によってコンピューティングデバイス４０２と通信するものとして随意に示されている。随意の接続４０６は、ローカルネットワーク、広域ネットワーク、又はピアツーピアネットワークとして実現しても良いし、あるいは（例えば、コンピューティングデバイス４０２の全部又は一部がデバイス４０４に内包される代表的実地形態では）コンピューティングデバイス内部のバスであっても差し支えない。記憶媒体４０８は、任意のコンピュータ記憶媒体が該当する。
【００１７】
コンピューティングデバイス４０２は、コンピューティングデバイス４０２上で実行されたときにコンピューティングデバイス４０２に、実装ポインタを有する静的メンバを含むインターフェースクラスを定義させるためと、インターフェースクラスのスタブ実装を含むメインコードセグメントをロードさせるためと、スタブ実装オブジェクトを提供するためにインターフェースクラスのスタブ実装をインスタンス化させるためであって、インターフェースクラスのスタブ実装は、実装ポインタをスタブ実装オブジェクトに定めるように設定された第１のコンストラクタを含む、ためと、インターフェースクラスのリアル実装を含むダイナミックライブラリをロードさせるためと、リアル実装オブジェクトを提供するためにインターフェースクラスのリアル実装をインスタンス化させるためであって、インターフェースクラスのリアル実装は、実装ポインタをリアル実装オブジェクトに定めるように設定された第２のコンストラクタを含む、ための、コンピュータ実行可能命令４１０を含む。上述され、図４に示されるように、実施例によっては、コンピューティングデバイス４０２は、その全部又は一部をデバイス４０４内に随意に内包することができる。
【００１８】
図４では、したがって、システム４００は、少なくとも１つのコンピューティングデバイス（例えば４０２及び／又は４０４）を含む。コンピュータ実行可能命令４１０は、１つ又は２つ以上の上記少なくとも１つのコンピューティングデバイス上で実行することができる。例えば、コンピューティングデバイス４０２は、コンピュータ実行可能命令４１０を実装し、コンピューティングデバイス４０４に結果を出力（尚且つ／又はコンピューティングデバイス４０４からデータを受信）することができる。コンピューティングデバイス４０２は、その全部又は一部をコンピューティングデバイス４０４内に内包されえるので、デバイス４０４もまた、例えば本明細書に記載された様々な技術又はその他の技術を実施又は実装させられるように、コンピュータ実行可能命令４１０の一部又は全部を実行するものと称することができる。
【００１９】
デバイス４０４は、例えば、携帯型コンピューティングデバイス、ワークステーション、又はデスクトップ型コンピューティングデバイスを含むことができる。別の代表的実施形態では、コンピューティングデバイス４０２は、データアクセス及びデータ処理を実施するためのユーザ４１２からの入力に関する情報を受信し、ダイナミックライブラリを有する簡略化されたインターフェースの出力をユーザデータに少なくとも部分的に基づいて提示するために、ユーザ４１２に関連付けられたデバイス４０４と通信するように動作可能である。
【００２０】
本開示では、開示された方法は、デバイスによって読み取り可能な命令セット又はソフトウェアとして実装することができる。更に、開示された方法における段階間の具体的順序又は序列は、代表的アプローチの例に過ぎないことが理解される。方法における段階間の具体的順序又は序列は、開示された内容の範囲内で、設計上の好みに基づいて並べ替え可能である。添付の方法クレームは、各段階の要素を１つの順序例で提示したものであり、提示された具体的な順序又は序列に必ずしも限定されることを意図していない。
【００２１】
以上の説明によって、本開示及びそれに付随する多くの利点が理解されると考えられ、開示された内容から逸脱することなく又はその重要な利点のいずれも犠牲にすることなく形態、構成、及び配置に対して様々な変更が可能であることは明らかである。説明された形態は、説明的なものに過ぎず、以下のクレームの意図は、このような変更を包含して含むことにある。
【図１】
2010244516.tif 000003
【図２】
2010244516.tif 000004
【図３】
2010244516.tif 000005
【図４】
2010244516.tif 000006