(57)【要約】【課題】オブジェクトに含まれるメソッド毎に、他のオブジェクトからのアクセスを制限する。【解決手段】情報処理装置１０は、第１管理部２６、第２管理部２８、及び生成部２４を備える。第１管理部２６は、第１オブジェクト１８の第１クラス、及び制限部（インタフェース２０）の第３クラスをロードする。第１オブジェクト１８は、第２オブジェクト２２におけるメソッドの実行要求元である。第２オブジェクト２２は、複数のメソッドを含む。第２管理部２８は、第２オブジェクト２２の第２クラスをロードする。生成部２４は、第１オブジェクト１８から第２オブジェクト２２の生成要求を受信したときに、第２クラスから第２オブジェクト２２を生成する。また、生成部２４は、第２オブジェクト２２及び第３クラスから制限部（インタフェース２０）を生成し、該制限部を第１オブジェクト１８へ送信する。【選択図】図１
2015097061.tif 000002
【特許請求の範囲】
【請求項１】
複数のメソッドを含む第２オブジェクトにおける前記メソッドの実行要求元である第１オブジェクトの第１クラス、及び前記第１オブジェクトから前記メソッドへのアクセスを制限する制限部の第３クラスをロードする第１管理部と、
前記第２オブジェクトの第２クラスをロードする第２管理部と、
前記第１オブジェクトから前記第２オブジェクトの生成要求を受信したときに、前記第２クラスから前記第２オブジェクトを生成すると共に、前記第２オブジェクト及び前記第３クラスから前記制限部を生成し、該制限部を前記第１オブジェクトへ送信する生成部と、
を備えた情報処理装置。
【請求項２】
前記第１オブジェクトは、前記制限部を受信したときに、該制限部を介して前記第２オブジェクトへ前記メソッドの実行要求を送信する、請求項１に記載の情報処理装置。
【請求項３】
前記制限部は、前記第２オブジェクトに含まれる複数の前記メソッドの内、前記第１オブジェクトがアクセス可能な前記メソッドを定義したインタフェースである、請求項１に記載の情報処理装置。
【請求項４】
前記生成部は、
前記第１オブジェクトから初期化要求を受信したときに前記第２管理部を初期化する初期化部を有する、
請求項１に記載の情報処理装置。
【請求項５】
前記制限部は、前記第１オブジェクトから前記メソッドの実行要求を受信したときに、前記第２オブジェクトに含まれる複数の前記メソッドの内、前記第１オブジェクトがアクセス可能なメソッドの呼出要求を前記第２オブジェクトへ転送するプロキシオブジェクトであり、
前記第１管理部は、前記第２オブジェクトに含まれる複数の前記メソッドの内、前記第１オブジェクトがアクセス可能なメソッドを定義したインタフェースの第４クラスと、前記第１クラスと、前記第３クラスと、をロードし、
前記生成部は、前記生成要求を受信したときに、前記第２クラスから前記第２オブジェクトを生成すると共に、前記第４クラスに基づいて前記第３クラスから前記制限部を生成し、該制限部を前記第１オブジェクトへ送信する、
請求項１に記載の情報処理装置。
【請求項６】
前記制限部は、前記第１オブジェクトから前記メソッドの実行要求を受信したときに、前記第２オブジェクトに含まれる複数の前記メソッドの内、前記第１オブジェクトがアクセス可能なメソッドの呼出要求を前記第２オブジェクトへ転送するプロキシオブジェクトであり、
前記第１管理部は、前記第２オブジェクトに含まれる複数の前記メソッドの内、前記第１クラスと、前記第３クラスと、をロードし、
前記第２管理部は、前記第１オブジェクトがアクセス可能なメソッドを定義し、かつ、前記制限部の生成に利用するインタフェースの第４クラスをロードし、
前記生成部は、前記生成要求を受信したときに、前記第２クラスから前記第２オブジェクトを生成すると共に、前記第４クラスに基づいて前記第３クラスから前記制限部を生成し、該制限部を前記第１オブジェクトへ送信する、
請求項１に記載の情報処理装置。
【請求項７】
複数の前記第２オブジェクトの各々の前記第２クラスを個別にロードする複数の前記第２管理部と、
複数の前記第２オブジェクトの各々に含まれる前記メソッドへのアクセスを個別に制限する複数の前記制限部と、
前記第２クラスの第２識別情報と前記第３クラスの第３識別情報とを対応づけて記憶した第１記憶部と、
を備え、
前記第１管理部は、前記第１クラス、及び複数の前記第３クラスをロードし、
前記生成部は、前記生成要求を受信したときに、該生成要求された前記第２オブジェクトの前記第２クラスから前記第２オブジェクトを生成すると共に、該第２クラスの前記第２識別情報に対応する前記第３識別情報によって識別される前記第３クラス及び該第２オブジェクトから前記制限部を生成し、該制限部を前記第１オブジェクトへ送信する、
請求項１に記載の情報処理装置。
【請求項８】
前記生成部は、前記第１オブジェクトから初期化要求を受信したときに前記第２管理部を初期化する初期化部を有し、
前記生成部は、前記生成要求を受信したときに、該生成要求された前記第２オブジェクトの前記第２クラスであり、且つ初期化された前記第２管理部がロードする前記第２クラスから、前記第２オブジェクトを生成すると共に、該第２クラスの前記第２識別情報に対応する前記第３識別情報によって識別される前記第３クラス及び該第２オブジェクトから前記制限部を生成し、該制限部を前記第１オブジェクトへ送信する、請求項６に記載の情報処理装置。
【請求項９】
前記第２クラスを記述した第２コード群の暗号化データを記憶する第２記憶部と、
前記第１オブジェクトからアクセス不可能な第４記憶部と、
前記暗号化データを復号した復号データを前記第４記憶部に記憶する復号部と、
をさらに備え、
前記初期化部は、前記復号データを用いて、前記第２管理部を初期化する、
請求項４に記載の情報処理装置。
【請求項１０】
前記初期化部が前記第２管理部を初期化した後に、前記復号データを前記第４記憶部から削除する削除部を備えた、請求項９に記載の情報処理装置。
【請求項１１】
複数の前記暗号化データを個別に記憶する複数の前記第２記憶部と、
前記第２記憶部を識別する第３識別情報と復号鍵とを対応づけて記憶した第５記憶部と、
を備え、
前記復号部は、複数の前記第２記憶部の各々から取得した前記暗号化データを前記第３識別情報に対応する前記復号鍵を用いて復号した複数の前記復号データを、前記第４記憶部に記憶し、
前記初期化部は、複数の該復号データを用いて、複数の前記第２管理部を初期化する、
請求項８に記載の情報処理装置。
【請求項１２】
前記第２クラスを記述した第２コード群を記憶する第２記憶部を備え、
前記生成部は、
前記生成要求を受信したときに、前記第２管理部が初期化済であるか否かを判定する判定部と、
未初期化であると判定されたときに、前記第２コード群を用いて前記第２管理部を初期化する初期化部と、
を有する、請求項１に記載の情報処理装置。
【請求項１３】
複数の前記第２オブジェクトの各々の前記第２クラスを個別にロードする複数の前記第２管理部と、
を備え、
前記判定部は、前記生成要求を受信したときに、複数の前記第２管理部の内、前記生成要求された前記第２オブジェクトの前記第２クラスをロードする前記第２管理部が初期化済であるか否かを判定し、
前記初期化部は、複数の前記第２管理部の内、初期化済でないと判定された前記第２管理部を初期化する、
請求項１２に記載の情報処理装置。
【請求項１４】
前記生成部は、
前記第２管理部の第１識別情報と、該第１識別情報によって識別される前記第２管理部の初期化時に用いた前記第２コード群から算出したハッシュ値と、を対応付けて記憶する第７記憶部と、
前記生成要求を受信したときに、前記第２記憶部に記憶されている前記第２コード群から算出したハッシュ値と、前記第７記憶部に記憶されているハッシュ値と、が不一致であるか否かを判定する初期化判定部と、
不一致であると判定されたときに、前記第２記憶部に記憶された前記第２コード群を用いて前記第２管理部を更新した後に、該第２コード群のハッシュ値を前記第７記憶部に記憶する更新部と、
を備えた、請求項１２に記載の情報処理装置。
【請求項１５】
複数のメソッドを含む第２オブジェクトにおける前記メソッドの実行要求元である第１オブジェクトの第１クラス、及び前記第１オブジェクトから前記メソッドへのアクセスを制限する制限部の第３クラスをロードするステップと、
前記第２オブジェクトの第２クラスをロードするステップと、
前記第１オブジェクトから前記第２オブジェクトの生成要求を受信したときに、前記第２クラスから前記第２オブジェクトを生成すると共に、前記第２オブジェクト及び前記第３クラスから前記制限部を生成し、該制限部を前記第１オブジェクトへ送信するステップと、
を含む情報処理方法。
【請求項１６】
コンピュータに、
複数のメソッドを含む第２オブジェクトにおける前記メソッドの実行要求元である第１オブジェクトの第１クラス、及び前記第１オブジェクトから前記メソッドへのアクセスを制限する制限部の第３クラスをロードするステップと、
前記第２オブジェクトの第２クラスをロードするステップと、
前記第１オブジェクトから前記第２オブジェクトの生成要求を受信したときに、前記第２クラスから前記第２オブジェクトを生成すると共に、前記第２オブジェクト及び前記第３クラスから前記制限部を生成し、該制限部を前記第１オブジェクトへ送信するステップと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置、情報処理方法、及びプログラムに関する。
【背景技術】
【０００２】
オブジェクト指向プログラミング言語で記述されたプログラムを保護する技術が知られている。例えば、Ｊａｖａ（登録商標）言語で記載されたプログラムとして、暗号化したプログラムを配布し、該プログラムの実行直前に復号する技術が開示されている。また、複数のオブジェクトが別々のクラスローダを利用して、動的にプログラムを実行及び追加する技術も開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１０−３０１７７２号公報
【特許文献２】特開２０１２−２１２４３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来では、オブジェクトに含まれる複数のメソッド毎に、他のオブジェクトからのアクセスを制限することは出来なかった。
【０００５】
本発明は、上記に鑑みてなされたものであって、オブジェクトに含まれるメソッド毎に、他のオブジェクトからのアクセスを制限することができる、情報処理装置、情報処理方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
実施形態の情報処理装置は、複数のメソッドを含む第２オブジェクトにおける前記メソッドの実行要求元である第１オブジェクトの第１クラス、及び前記第１オブジェクトから前記メソッドへのアクセスを制限する制限部の第３クラスをロードする第１管理部と、前記第２オブジェクトの第２クラスをロードする第２管理部と、前記第１オブジェクトから前記第２オブジェクトの生成要求を受信したときに、前記第２クラスから前記第２オブジェクトを生成すると共に、前記第２オブジェクト及び前記第３クラスから前記制限部を生成し、該制限部を前記第１オブジェクトへ送信する生成部と、を備える。
【図面の簡単な説明】
【０００７】
【図１】情報処理装置を示すブロック図。
【図２】生成部の説明図。
【図３】初期化処理の手順を示すフローチャート。
【図４】制御部の動作手順の一例を示すシーケンス図。
【図５】情報処理装置をＪａｖａ（登録商標）で実現したブロック図。
【図６】ＬｉｂＩｍｐｌ（Ｊ２２）の構成例を示す図。
【図７】ＬｉｂＩｆｃ（Ｊ２０）の構成例を示す図。
【図８】従来の情報処理装置を示す図。
【図９】情報処理装置の説明図。
【図１０】生成部の説明図。
【図１１】制御部の動作手順の一例を示すシーケンス図。
【図１２】情報処理装置をＪａｖａ（登録商標）で実現したブロック図。
【図１３】情報処理装置を示すブロック図。
【図１４】生成部の説明図。
【図１５】第３記憶部のデータ構成の一例を示す図。
【図１６】第１記憶部のデータ構成の一例を示す図。
【図１７】初期化処理の手順の一例を示すフローチャート。
【図１８】制御部の動作手順の一例を示すシーケンス図。
【図１９】情報処理装置を示すブロック図。
【図２０】生成部の説明図。
【図２１】初期化処理の手順の一例を示すシーケンス図。
【図２２】情報処理装置を示すブロック図。
【図２３】生成部の説明図。
【図２４】第５記憶部のデータ構造の一例を示す図。
【図２５】初期化処理の手順の一例を示すシーケンス図。
【図２６】情報処理装置を示すブロック図。
【図２７】生成部の説明図。
【図２８】第６記憶部のデータ構造の一例を示す図。
【図２９】第３記憶部のデータ構造の一例を示す図。
【図３０】制御部の動作手順の一例を示すシーケンス図。
【図３１】第３記憶部を示す図。
【図３２】情報処理装置を示すブロック図。
【図３３】生成部の説明図。
【図３４】第６記憶部のデータ構造の一例を示す図。
【図３５】第３記憶部のデータ構造の一例を示す図。
【図３６】制御部の動作手順の一例を示すシーケンス図。
【図３７】情報処理装置を示すブロック図。
【図３８】生成部の説明図。
【図３９】第７記憶部のデータ構造の一例を示す図。
【図４０】制御部の動作手順の一例を示すシーケンス図。
【図４１】第７記憶部のデータ構造の一例を示す図。
【図４２】情報処理装置の説明図。
【図４３】生成部の説明図。
【図４４】制御部の動作手順の一例を示すシーケンス図。
【図４５】情報処理装置を示すブロック図。
【図４６】生成部の説明図。
【図４７】情報処理装置のハードウェア構成を示す説明図。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、本実施の形態の詳細を説明する。
【０００９】
（実施の形態１）
図１は、本実施の形態の情報処理装置１０を示すブロック図である。
【００１０】
情報処理装置１０は、制御部１２、第１０記憶部１４、及び第２記憶部１６を備える。
【００１１】
制御部１２は、情報処理装置１０を制御する。制御部１２は、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
【００１２】
制御部１２は、第１オブジェクト１８、インタフェース２０、第２オブジェクト２２、生成部２４、第１管理部２６、及び第２管理部２８を有する。制御部１２は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）またはＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等に格納されたプログラムを実行することで、第１オブジェクト１８、インタフェース２０、第２オブジェクト２２、生成部２４、第１管理部２６、及び第２管理部２８を実現する。
【００１３】
本実施の形態では、第１オブジェクト１８、インタフェース２０、第２オブジェクト２２、生成部２４、第１管理部２６、及び第２管理部２８を、ソフトウェアにより実現する場合を説明する。なお、生成部２４、第１管理部２６、及び第２管理部２８の少なくとも一部を、ＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などのハードウェアにより実現してもよいし、ソフトウェアおよびハードウェアを併用して実現してもよい。
【００１４】
第１オブジェクト１８及び第２オブジェクト２２は、オブジェクト指向プログラミング言語におけるオブジェクトである。第１オブジェクト１８は、他のオブジェクトに含まれるメソッドの実行要求元のオブジェクトである。第２オブジェクト２２は、第１オブジェクト１８からの呼び出し先のオブジェクトである。言い換えると、第２オブジェクト２２は、第１オブジェクト１８による、該第２オブジェクト２２に含まれるメソッドの実行要求先のオブジェクトである。第２オブジェクト２２は、複数のメソッドを含む。
【００１５】
本実施の形態では、第１オブジェクト１８は、第２オブジェクト２２に含まれるメソッドの実行要求元のオブジェクトである場合を説明する。
【００１６】
インタフェース２０は、第１オブジェクト１８から第２オブジェクト２２に含まれる複数のメソッドへのアクセスを制限する制限部として機能する。インタフェース２０は、オブジェクト指向プログラミング言語におけるインタフェースである。本実施の形態では、インタフェース２０は、第２オブジェクト２２に含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドを定義した情報である。
【００１７】
第１管理部２６は、第１クラス、及び、第３クラスをロードする。第２管理部２８は、第２クラスをロードする。第１クラス、第３クラス、及び第２クラスは、オブジェクト指向プログラミング言語におけるクラスである。第１クラスは、第１オブジェクト１８のクラスである。第２クラスは、第２オブジェクト２２のクラスである。
【００１８】
第３クラスは、制限部のクラスである。本実施の形態では、第３クラスは、制限部として機能するインタフェース２０のクラスである。第３クラスには、第２オブジェクト２２に含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドが、第２オブジェクト２２の作成者によって予め記述されている。
【００１９】
第１管理部２６は、第１オブジェクト１８の第１クラス、及びインタフェース２０の第３クラスを、第１０記憶部１４からロードする。第１管理部２６は、プログラム実行開始時に初期化される。
【００２０】
第２管理部２８は、第２オブジェクト２２の第２クラスを第２記憶部１６からロードする。第２管理部２８は、第１オブジェクト１８などから初期化要求を受信すると、後述する初期化部によって初期化される（詳細後述）。
【００２１】
生成部２４は、第１オブジェクト１８から第２オブジェクト２２の生成要求を受信する。生成部２４は、この生成要求を受信したときに、第２クラスから第２オブジェクト２２を生成する。また、生成部２４は、第２オブジェクト２２及び第３クラスから、インタフェース２０を生成する。そして、生成部２４は、インタフェース２０を第１オブジェクト１８へ送信する。
【００２２】
インタフェース２０を生成する、とは、インタフェース２０のクラスである第３クラスを用いて、第２オブジェクト２２をインタフェース２０に変換することを意味する。なお、請求項に記載の「制限部を生成する」という記述は、本実施形態では生成部２４が、第２オブジェクト２２をインタフェース２０に変換する部分に該当する。
【００２３】
生成部２４からインタフェース２０を受信すると、第１オブジェクト１８は、このインタフェース２０を介して、第２オブジェクト２２へメソッドの実行要求を送信する。なお、第２オブジェクト２２へのメソッドの実行要求の送信を、“第２オブジェクト２２へアクセスする”と称して説明する場合がある。
【００２４】
ここで、上述したように、インタフェース２０は、第２オブジェクト２２に含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドを定義した情報である。このため、第１オブジェクト１８は、第２オブジェクト２２に含まれる複数のメソッドの内、インタフェース２０に定義されているメソッドにのみ、にアクセスすることができる。このため、第１オブジェクト１８は、インタフェース２０によって第２オブジェクト２２に含まれるメソッドへのアクセスを制限される。
【００２５】
第２オブジェクト２２は、第１オブジェクト１８からインタフェース２０を介してアクセスされたメソッドを実現する。すなわち、第１オブジェクト１８は、第２オブジェクト２２に含まれる複数のメソッドの内、インタフェース２０で定義されたメソッドを実行することができる。
【００２６】
第１０記憶部１４は、第１オブジェクト１８を利用するための第１コード群、インタフェース２０を利用するための第３コード群、等を予め記憶する。第１コード群には、第１クラスが記述されている。第３コード群には、第３クラスが記述されている。
【００２７】
第２記憶部１６は、第２オブジェクト２２を利用するための第２コード群を記憶する。第２コード群には、第２クラスが記述されている。
【００２８】
図２は、生成部２４の説明図である。生成部２４は、判定部３０、オブジェクト生成部３１、変換部３２、初期化部３４、及び受信部３３を有する。
【００２９】
判定部３０は、第１オブジェクト１８からオブジェクトの生成要求を受信する。判定部３０は、生成要求されたオブジェクトのクラスを、第２管理部２８がロードできるか否かを判定する。
【００３０】
生成要求されたオブジェクトのクラスを、第２管理部２８がロード可能である場合には、第２管理部２８は、生成要求されたクラスを第２記憶部１６からロードする。第２管理部２８は、ロードしたクラスをオブジェクト生成部３１へ送信する。
【００３１】
オブジェクト生成部３１は、第２管理部２８から取得したクラスから、オブジェクトを生成する。第２管理部２８から取得したクラスが第２クラスである場合、オブジェクト生成部３１は、第２クラスから第２オブジェクト２２を生成する。そして、オブジェクト生成部３１は、この第２オブジェクト２２を変換部３２へ送信する。
【００３２】
変換部３２は、第３クラスを用いて、第２オブジェクト２２をインタフェース２０に変換する。具体的には、変換部３２は、インタフェース２０の第３クラスを第１管理部２６から取得する。次に、変換部３２は、この第３クラスを用いて、第２オブジェクト２２をインタフェース２０に変換する。変換部３２は、インタフェース２０を、第１オブジェクト１８へ送信する。
【００３３】
受信部３３は、第２管理部２８の初期化要求を第１オブジェクト１８などから受信すると、この初期化要求を初期化部３４へ送信する。
【００３４】
初期化部３４は、受信部３３から初期化要求を受信すると、第２記憶部１６に記憶されている、第２コード群を用いて、第２管理部２８を初期化する。
【００３５】
図３は、制御部１２が実行する初期化処理の手順の一例を示すフローチャートである。制御部１２は、第１オブジェクト１８がオブジェクトの生成要求を送信する前に、この初期化処理を実行する。
【００３６】
まず、受信部３３が初期化要求を受信したか否かを判断する（ステップＳ１００）。ステップＳ１００で否定判断すると（ステップＳ１００：Ｎｏ）、本ルーチンを終了する。一方、受信部３３が初期化要求を受信すると（ステップＳ１００：Ｙｅｓ）、受信部３３は初期化部３４に初期化要求を送信する（ステップＳ１０２）。
【００３７】
初期化要求を受信した初期化部３４は、第２記憶部１６に記憶されている第２コード群を用いて、第２管理部２８を初期化する（ステップＳ１０４）。そして、本ルーチンを終了する。
【００３８】
制御部１２が図３に示す初期化処理を実行することによって、第２管理部２８は、第２記憶部１６に記憶されている第２コード群を利用可能な状態となる。
【００３９】
図４は、第１オブジェクト１８が他のオブジェクトの生成要求を送信したときの、制御部１２の動作手順の一例を示すシーケンス図である。なお、具体例として、第１オブジェクト１８が第２オブジェクト２２の生成要求を送信する場合を説明する。
【００４０】
まず、第１オブジェクト１８が第２オブジェクト２２の生成要求を生成部２４へ送信する（ステップＳ１１０）。第１オブジェクト１８から生成要求を受信すると、生成部２４の判定部３０が、第２クラスをロード可能であるか否かを判定する（ステップＳ１１２）。
【００４１】
本実施の形態では、第２管理部２８は第２オブジェクト２２の第２クラスをロードする。このため、判定部３０は、第２クラスをロード可能であると判定する（ステップＳ１１２：Ｙｅｓ）。そして、判定部３０は、第２クラスのロード要求を第２管理部２８へ送信する（ステップＳ１１４）。
【００４２】
第２管理部２８は、判定部３０から送信されたロード要求の対象である第２クラスを第２記憶部１６からロードする（ステップＳ１１６）。そして、第２管理部２８は、ロードした第２クラスを生成部２４に送信する（ステップＳ１１８）。
【００４３】
第２クラスを受け付けると、生成部２４のオブジェクト生成部３１は、この第２クラスから第２オブジェクト２２を生成する（ステップＳ１２０）。次に、オブジェクト生成部３１は、第２オブジェクト２２を変換部３２へ送信する（ステップＳ１２２）。
【００４４】
変換部３２は、第３クラスをロード可能であるか否かを判定する（ステップＳ１２４）。
【００４５】
本実施の形態では、第１管理部２６は第３クラスをロードする。このため、変換部３２は、第３クラスをロード可能であると判定する（ステップＳ１２４：Ｙｅｓ）。そして、変換部３２は、第３クラスのロード要求を第１管理部２６へ送信する（ステップＳ１２５）。
【００４６】
第１管理部２６は、変換部３２から送信されたロード要求の対象である第３クラスを第１０記憶部１４からロードする（ステップＳ１２６）。そして、第１管理部２６は、ロードした第３クラスを生成部２４に送信する（ステップＳ１２８）。
【００４７】
生成部２４の変換部３２は、第１管理部２６から第３クラスを受信すると、第３クラスを用いて、オブジェクト生成部３１で生成された第２オブジェクト２２をインタフェース２０に変換する（ステップＳ１３０）。次に、変換部３２は、インタフェース２０を第１オブジェクト１８へ送信する（ステップＳ１３２）。
【００４８】
第１オブジェクト１８は、変換部３２から受信したインタフェース２０を介して、第２オブジェクト２２へアクセスする（ステップＳ１３４）。ステップＳ１３４の処理により、第１オブジェクト１８は、第２オブジェクト２２に含まれる複数のメソッドの内、インタフェース２０で定義されたメソッドを実行する。すなわち、第２オブジェクト２２に含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドは、インタフェース２０に定義されたメソッドに制限される。
【００４９】
一方、上記ステップＳ１１２の判定において、ステップＳ１１２で第１オブジェクト１８から受信した生成要求が、第２管理部２８でロードできないクラスのオブジェクトの生成要求であったとする。この場合、判定部３０は否定判定する（ステップＳ１１２：Ｎｏ）。そして、判定部３０は、例外を第１オブジェクト１８へ投げる（ステップＳ１３６）。生成部２４からの例外を捕まえると、第１オブジェクト１８は、例外処理を実行する（ステップＳ１４０）。
【００５０】
また、上記ステップＳ１２４の判定において、変換部３２が受信したロード要求が第１管理部２６でロードできないクラスのロード要求であったとする。この場合、変換部３２は否定判定する（ステップＳ１２４：Ｎｏ）。そして、変換部３２は、例外を第１オブジェクト１８へ投げる（ステップＳ１３８）。生成部２４からの例外を捕まえると、第１オブジェクト１８は、例外処理を実行する（ステップＳ１４０）。
【００５１】
次に、本実施の形態の情報処理装置１０をオブジェクト指向プログラミング言語の１つであるＪａｖａ（登録商標）で実現した場合を説明する。図５は、情報処理装置１０をＪａｖａ（登録商標）で実現したブロック図である。
【００５２】
情報処理装置１０をＪａｖａ（登録商標）で実現した情報処理装置（Ｊ１０）は、プログラム（Ｊ１２）、メインファイル（Ｊ１４）、及びライブラリファイル（Ｊ１６）を備える。プログラム（Ｊ１２）、メインファイル（Ｊ１４）、及びライブラリファイル（Ｊ１６）は、各々、図１に示す制御部１２、第１０記憶部１４、及び第２記憶部１６に相当する。
【００５３】
プログラム（Ｊ１２）は、Ｍａｉｎ（Ｊ１８）、ＬｉｂＩｍｐｌ（Ｊ２２）、ＬｉｂＩｆｃ（Ｊ２０）、ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ２４）、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６）、及びＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）を有する。Ｍａｉｎ（Ｊ１８）、ＬｉｂＩｍｐｌ（Ｊ２２）、ＬｉｂＩｆｃ（Ｊ２０）、ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ２４）、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６）、及びＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）は、各々、図１に示す第１オブジェクト１８、第２オブジェクト２２、インタフェース２０、生成部２４、第１管理部２６、及び第２管理部２８に相当する。
【００５４】
メインファイル（Ｊ１４）は、少なくともＭａｉｎ（Ｊ１８）と、ＬｉｂＩｆｃ（Ｊ２０）を利用するためのコード群（第１コード群、第３コード群）を記憶する。ライブラリファイル（Ｊ１６）は、少なくともＬｉｂＩｍｐｌ（Ｊ２２）を利用するための第２コード群を記憶する。
【００５５】
ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６）は、プログラムの実行開始時にメインファイル（Ｊ１４）にある第１コード群を用いて初期化される。Ｍａｉｎ（Ｊ１８）の実行時には、すでに、メインファイル（Ｊ１４）に記述されているクラス（第１クラス、第３クラス）をロードできるものとする。
【００５６】
また、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６）は、オブジェクトの生成要求を受信すると、オブジェクトのクラス、または、インタフェースのクラスをロードする。
【００５７】
詳細には、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６）は、メインファイル（Ｊ１４）に記述されているＭａｉｎ（Ｊ１８）の第１クラスと、ＬｉｂＩｆｃ（Ｊ２０）の第３クラスをロードすることが出来る。しかし、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６）は、ライブラリファイル（Ｊ１６）に記述されているＬｉｂＩｍｐｌ（Ｊ２２）の第２クラスをロードすることは出来ない。
【００５８】
同様に、ＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）は、ライブラリファイル（Ｊ１６）に記述されている第２コード群を用いて初期化される。初期化されることによって、ＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）は、ライブラリファイル（Ｊ１６）に記述されている第２クラスをロードできる。
【００５９】
また、ＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）は、オブジェクトの生成要求を受信すると、オブジェクト、または、インタフェースのクラスをロードする。
【００６０】
詳細には、ＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）は、ライブラリファイル（Ｊ１６）に記述されているＬｉｂＩｍｐｌ（Ｊ２２）の第２クラスをロードできる。
【００６１】
ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ２４）は、様々なオブジェクトから他のオブジェクトの生成要求を受信する。そして、ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ２４）は、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６）がロードするクラス（第１クラス、第３クラス）、または、ＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）がロードするクラス（第２クラス）から、生成要求されたオブジェクトを生成する。そして、ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ２４）は、生成したオブジェクトをインタフェースに変換し、生成要求元のオブジェクトに送信する。
【００６２】
例えば、Ｍａｉｎ（Ｊ１８）が、ＬｉｂＩｍｐｌ（Ｊ２２）の生成要求をＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ２４）へ送信したとする。この場合、ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ２４）は、ＬｉｂＩｍｐｌ（Ｊ２２）に対応するＬｉｂＩｆｃ（Ｊ２０）を生成し、Ｍａｉｎ（Ｊ１８）に送信する。ＬｉｂＩｍｐｌ（Ｊ２２）からＬｉｂＩｆｃ（Ｊ２０）への変換は、例えば、キャストを用いて行う。
【００６３】
すなわち、Ｍａｉｎ（Ｊ１８）は、ＬｉｂＩｍｐｌ（Ｊ２２）を知る方法がなく、ＬｉｂＩｆｃ（Ｊ２０）のみを知ることができる。このため、Ｍａｉｎ（Ｊ１８）は、ＬｉｂＩｆｃ（Ｊ２０）を経由することで、ＬｉｂＩｍｐｌ（Ｊ２２）における所定のメソッドにのみアクセスする。
【００６４】
図６は、第２オブジェクト２２に相当するＬｉｂＩｍｐｌ（Ｊ２２）の構成例を示す図である。図６に示すように、第２オブジェクト２２に相当するＬｉｂＩｍｐｌ（Ｊ２２）が、３つのメソッド（ｓｕｂ１、ｓｕｂ２、ｓｕｂ３）を含み、いずれのメソッドも“ｐｕｂｌｉｃ”属性を有するとする。
【００６５】
図７は、インタフェース２０に相当するＬｉｂＩｆｃ（Ｊ２０）を、Ｊａｖａ（登録商標）言語を用いて実装した構成例を示す図である。図７に示すように、インタフェース２０は、第２オブジェクト２２に含まれる複数のメソッド（ｓｕｂ１、ｓｕｂ２、ｓｕｂ３）の内、第１オブジェクト１８に相当するＭａｉｎ（Ｊ１８）がアクセス可能なメソッドとしてメソッド（ｓｕｂ１）のみを定義している。
【００６６】
上述したように、第１オブジェクト１８に相当するＭａｉｎ（Ｊ１８）は、インタフェース２０に相当するＬｉｂＩｆｃ（Ｊ２０）を経由しなければ、第２オブジェクト２２に相当するＬｉｂＩｍｐｌ（Ｊ２２）のメソッドを実行することができない。このため、Ｍａｉｎ（Ｊ１８）は、ＬｉｂＩｍｐｌ（Ｊ２２）に含まれる複数のメソッド（ｓｕｂ１、ｓｕｂ２、ｓｕｂ３）の内、ＬｉｂＩｆｃ（Ｊ２０）で定義されたメソッド（ｓｕｂ１）を実行することができる。しかし、Ｍａｉｎ（Ｊ１８）は、ＬｉｂＩｍｐｌ（Ｊ２２）に含まれる複数のメソッド（ｓｕｂ１、ｓｕｂ２、ｓｕｂ３）の内、ＬｉｂＩｆｃ（Ｊ２０）で定義されていないメソッド（ｓｕｂ２、ｓｕｂ３）を実行することは出来ない。
【００６７】
具体的には、本実施の形態では、Ｍａｉｎ（Ｊ１８）の第１クラスは、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６）にロードされる。一方、ＬｉｂＩｍｐｌ（Ｊ２２）の第２クラスは、ＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）にロードされる。すなわち、Ｍａｉｎ（Ｊ１８）の第１クラスとＬｉｂＩｍｐｌ（Ｊ２２）の第２クラスとは、異なるＣｌａｓｓＬｏａｄｅｒによってロードされる。
【００６８】
このため、Ｍａｉｎ（Ｊ１８）は、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６）でロードされないＬｉｂＩｍｐｌ（Ｊ２２）の第２クラスを取得することは出来ない。
【００６９】
また、Ｍａｉｎ（Ｊ１８）が、ＬｉｂＩｍｐｌ（Ｊ２２）の生成要求をＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ２４）に送信しても、Ｍａｉｎ（Ｊ１８）は、ＬｉｂＩｍｐｌ（Ｊ２２）を受信することは出来ない。すなわち、Ｍａｉｎ（Ｊ１８）は、ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ２４）からＬｉｂＩｆｃ（Ｊ２０）を受信する。
【００７０】
このため、Ｍａｉｎ（Ｊ１８）は、ＬｉｂＩｆｃ（Ｊ２０）を経由しなければ、ＬｉｂＩｍｐｌ（Ｊ２２）に含まれるメソッドを実行することが出来ない。ＬｉｂＩｆｃ（Ｊ２０）には、ＬｉｂＩｍｐｌ（Ｊ２２）の作成者が他のオブジェクトからのアクセス可能なメソッドとして定義したメソッド（ｓｕｂ１）のみが定義されている。このため、Ｍａｉｎ（Ｊ１８）は、ＬｉｂＩｍｐｌ（Ｊ２２）に含まれるメソッド（ｓｕｂ１）を実行することは出来る。しかし、Ｍａｉｎ（Ｊ１８）は、ＬｉｂＩｍｐｌ（Ｊ２２）に含まれるメソッド（ｓｕｂ２、ｓｕｂ３）を実行することはできない。
【００７１】
一方、従来では、このようなメソッド毎の制限を行うことは出来なかった。
【００７２】
図８は、従来の情報処理装置１０Ｚを示す図である。従来の情報処理装置１０Ｚは、制御部１２Ｚと、記憶部１４００と、を備える。制御部１２Ｚは、他のオブジェクトのメソッドの実行要求元である第１オブジェクト１８００と、複数のメソッドを含む第２オブジェクト２２００と、管理部２６００と、を含む。
【００７３】
記憶部１４００は、制御部１２Ｚに含まれる第１オブジェクト１８００と第２オブジェクト２２００を実行するためのコード群を記憶する。すなわち、該コード群は、第１オブジェクト１８００のクラスと、第２オブジェクト２２００のクラスと、を記述したコード群である。管理部２６００は、様々なオブジェクトから他のオブジェクトの生成要求を受け取ると、記憶部１４００にあるコード群から、そのオブジェクトを生成する。
【００７４】
このように、従来では、第１オブジェクト１８００は、第２オブジェクト２２００に含まれる全てのメソッドに対して、自由にアクセスすることができた。例えば、第２オブジェクト２２００が、図６に示す３つのメソッド（ｓｕｂ１、ｓｕｂ２，ｓｕｂ３）を含むとする。また、上述したように、これらの３つのメソッド（ｓｕｂ１、ｓｕｂ２，ｓｕｂ３）は、“ｐｕｂｌｉｃ”属性を有する。
【００７５】
この場合、第２オブジェクト２２００の作成者が、他のオブジェクトに対してメソッド（ｓｕｂ１）についてのみアクセスを許可したいと考えていた場合であっても、アクセスを制限することが出来なかった。すなわち、例えば、情報処理装置１０ＺがＪａｖａ（登録商標）で記述されている場合には、Ｊａｖａ（登録商標）言語仕様により、ｐｕｂｌｉｃ属性を持つメソッドへのアクセスは、すべてのオブジェクトから可能である。このため、第１オブジェクト１８００は、第２オブジェクト２２００の全てのメソッド（ｓｕｂ１、ｓｕｂ２，ｓｕｂ３）へアクセス可能であった。
【００７６】
具体的には、従来では、第１オブジェクト１８００のクラスと第２オブジェクト２２００のクラスは、同じ管理部２６００によってロードされる。このため、第１オブジェクト１８００は、管理部２６００に問い合わせることで、第２オブジェクト２２００に含まれる全てのメソッド（ｓｕｂ１、ｓｕｂ２，ｓｕｂ３）を知ることが出来た。すなわち、第１オブジェクト１８００は、第２オブジェクト２２００に含まれる全てのメソッド（ｓｕｂ１、ｓｕｂ２，ｓｕｂ３）へアクセスすることが出来た。
【００７７】
なお、従来では、第２オブジェクト２２００の作成者が第１オブジェクト１８００の作成者に対して１つのメソッド（例えば、ｓｕｂ１）のみしか公開していない場合であっても、例えば、情報処理装置１０ＺがＪａｖａ（登録商標）で記述されている場合には、Ｊａｖａ（登録商標）言語仕様から、第２オブジェクト２２００が保持する全てのメソッドを知ることは容易である。
【００７８】
例えば、Ｊａｖａ（登録商標）言語の場合、各オブジェクトは、自分自身をロードする管理部であるクラスローダを知ることができる（ｔｈｉｓ．ｇｅｔＣｌａｓｓ．ｇｅｔＣｌａｓｓＬｏａｄｅｒ）。また、各オブジェクトは、その管理部に問い合わせることで、その管理部がロードするすべてのクラスを取得することができる（ＣｌａｓｓＬｏａｄｅｒ．ｌｏａｄＣｌａｓｓ）。そして、各オブジェクトは、取得したクラスから、そのクラスが持つメソッドを知ることができる（Ｃｌａｓｓ．ｇｅｔＤｅｃｌａｒｅｄＭｅｔｈｏｄｓ）。そして、取得したメソッド名を用いることで、各オブジェクトは他のオブジェクトのメソッドの全てにアクセスすることが可能であった。
【００７９】
具体的には、第１オブジェクト１８００は、第１オブジェクト１８００をロードする管理部２６００から、第２オブジェクト２２００に含まれる全てのメソッド（ｓｕｂ１、ｓｕｂ２、ｓｕｂ３）の識別情報を取得することが出来た。そして、第１オブジェクト１８００は、取得した識別情報によって識別される全てのメソッド（ｓｕｂ１、ｓｕｂ２、ｓｕｂ３）にアクセスすることが出来た。
【００８０】
このように、従来では、メソッドの実行要求先の第２オブジェクト２２００に含まれるメソッド毎に、実行要求元の第１オブジェクト１８００からのアクセスを制限することは出来なかった。
【００８１】
一方、本実施の形態では、メソッドの実行要求を受け付ける側の第２オブジェクト２２に含まれるメソッド毎に、実行要求元の第１オブジェクト１８からのアクセスを制限することが出来る。
【００８２】
以上説明したように、本実施の形態の情報処理装置１０は、異なる管理部（第１管理部２６、第２管理部２８）によって、各オブジェクト（第１オブジェクト１８、第２オブジェクト２２）に対応するクラス（第１クラス、第２クラス）を個別にロードする。そして、生成部２４は、第２オブジェクト２２ではなく、インタフェース２０を第１オブジェクト１８へ送信する。インタフェース２０は、第２オブジェクト２２に含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドを定義した情報である。第１オブジェクト１８は、インタフェース２０を介して、第２オブジェクト２２へアクセスする。
【００８３】
このため、第１オブジェクト１８は、第２オブジェクト２２に含まれる複数のメソッドの内、インタフェース２０で定義されたメソッドのみを実行する。すなわち、第２オブジェクト２２に含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドは、インタフェース２０に定義されたメソッドに制限される。
【００８４】
従って、本実施の形態の情報処理装置１０では、オブジェクトに含まれるメソッド毎に、他のオブジェクトからのアクセスを制限することが出来る。
【００８５】
（実施の形態２）
本実施の形態では、制限部として、実施の形態１におけるインタフェース２０に代えてプロキシオブジェクトを用いる場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
【００８６】
図９は、本実施の形態における情報処理装置１０Ａの説明図である。情報処理装置１０Ａは、制御部１２Ａ、第１０記憶部１４Ａ、及び第２記憶部１６を備える。第２記憶部１６は、実施の形態１と同様である。
【００８７】
制御部１２Ａは、情報処理装置１０Ａを制御する。制御部１２Ａは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
【００８８】
制御部１２Ａは、第１オブジェクト１８、プロキシオブジェクト２１、第２オブジェクト２２、生成部３６、第１管理部２６Ａ、及び第２管理部２８を備える。第１オブジェクト１８、第２オブジェクト２２、及び第２管理部２８は、実施の形態１と同様である。
【００８９】
制御部１２Ａは、ＲＯＭまたはＨＤＤ等に格納されたプログラムを実行することで、第１オブジェクト１８、プロキシオブジェクト２１、第２オブジェクト２２、生成部３６、第１管理部２６Ａ、及び第２管理部２８を実現する。
【００９０】
プロキシオブジェクト２１は、第１オブジェクト１８から第２オブジェクト２２に含まれるメソッドの実行要求を受け付けたときに、第２オブジェクト２２に含まれるメソッドの内、第１オブジェクト１８がアクセス可能なメソッドの呼出要求を第２オブジェクト２２へ転送するオブジェクトである。すなわち、プロキシオブジェクト２１は、第１オブジェクト１８から第２オブジェクト２２に含まれる複数のメソッドへのアクセスを制限する制限部として機能する。
【００９１】
第１管理部２６Ａは、第１クラス、第３クラス、及び第４クラスをロードする。第１クラスは、実施の形態１と同様である。本実施の形態では、第３クラスは、制御部として機能するプロキシオブジェクト２１のクラスである。
【００９２】
第４クラスは、オブジェクト指向プログラミング言語におけるクラスである。第４クラスは、第２オブジェクト２２に含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドを定義したインタフェース（以下、第２インタフェースと称する）のクラスである。
【００９３】
具体的には、第１管理部２６Ａは、第１クラスや第４クラスを、第１０記憶部１４Ａからロードする。また、第１管理部２６Ａは、第４クラスを用いて、プロキシオブジェクト２１の第３クラスを新たに生成する。
【００９４】
言い換えると、第１管理部２６Ａは、第１クラスと、第２インタフェースの第４クラスを生成する。また、第１管理部２６Ａは、第２インタフェースの第４クラスに基づき、プロキシオブジェクト２１の第３クラスを新たに生成する。なお、第１管理部２６Ａは、プログラム実行開始時に初期化される。
【００９５】
第１０記憶部１４Ａは、第１オブジェクト１８を利用するための第１コード群、及び第２インタフェースを利用するための第４コード群等を予め記憶する。第１コード群は、実施の形態１と同様である。第４コード群には、第４クラスが記述されている。
【００９６】
生成部３６は、第１オブジェクト１８から第２オブジェクト２２の生成要求を受信したときに、第２クラスから第２オブジェクト２２を生成する。また、生成部３６は、第２インフェースの第４クラスに基づいて、新たに生成される第３クラスからプロキシオブジェクト２１を生成する。そして、生成部３６は、該プロキシオブジェクト２１を第１オブジェクト１８へ送信する。
【００９７】
請求項記載の「制限部を生成する」という記述は、本実施形態では、生成部３６がプロキシオブジェクト２１を生成する部分に該当する。
【００９８】
図１０は、生成部３６の説明図である。生成部３６は、判定部３０、オブジェクト生成部３１、変換部３２Ａ、初期化部３４、及び受信部３３を有する。判定部３０、オブジェクト生成部３１、初期化部３４、及び受信部３３は、実施の形態１と同様である。
【００９９】
変換部３２Ａは、第４クラスを第１管理部２６Ａから取得する。変換部３２Ａは、第４クラスに基づいて、第１管理部２６Ａからプロキシオブジェクト２１の第３クラスを取得する。変換部３２Ａは、第３クラスからプロキシオブジェクト２１を生成する。更に、変換部３２は、プロキシオブジェクト２１を、第１オブジェクト１８へ送信する。
【０１００】
図１１は、第１オブジェクト１８が他のオブジェクトの生成要求を送信したときの、制御部１２Ａの動作手順の一例を示すシーケンス図である。なお、具体例として、第１オブジェクト１８が第２オブジェクト２２の生成要求を送信する場合を説明する。
【０１０１】
まず、制御部１２Ａは、実施の形態１と同様に、ステップＳ１１０〜ステップＳ１２２の処理を実行する。次に、変換部３２Ａは、第１管理部２６Ａから第４クラスをロード可能であるか否かを判定する（ステップＳ１４１）。
【０１０２】
本実施の形態では、第１管理部２６Ａは第４クラスをロードする。このため、変換部３２Ａは、第４クラスをロード可能であると判定する（ステップＳ１４１：Ｙｅｓ）。そして、変換部３２Ａは、第４クラスのロード要求を第１管理部２６Ａへ送信する（ステップＳ１４２）。
【０１０３】
第１管理部２６Ａは、変換部３２Ａから送信されたロード要求の対象である第４クラスを第１０記憶部１４Ａからロードする（ステップＳ１４４）。次に、第１管理部２６Ａは、第４クラスを生成部３６へ送信する（ステップＳ１４６）。
【０１０４】
生成部３６の変換部３２Ａは、第４クラスを第１管理部２６Ａから受信すると、プロキシオブジェクト２１の第３クラスの生成要求を第１管理部２６Ａへ送信する（ステップＳ１４８）。
【０１０５】
第３クラスの生成要求を受信すると、第１管理部２６Ａは、ステップＳ１４４でロードした第４クラスから、第３クラスを生成する（ステップＳ１５０）。第１管理部２６Ａは、この第３クラスを生成部３６へ送信する（ステップＳ１５２）。
【０１０６】
生成部３６の変換部３２Ａは、第１管理部２６Ａから受信した第３クラスからプロキシオブジェクト２１を生成する（ステップＳ１５４）。このプロキシオブジェクト２１は、メソッドとして、第２インタフェースの第４クラスにおいて定義されたメソッドのみを有する。
【０１０７】
変換部３２Ａは、プロキシオブジェクト２１を第１オブジェクト１８へ送信する（ステップＳ１５６）。第１オブジェクト１８は、変換部３２Ａから受信したプロキシオブジェクト２１へ、メソッドの実行を要求する（ステップＳ１５８、ステップＳ１６０）。
【０１０８】
プロキシオブジェクト２１は、メソッドの実行要求を第１オブジェクト１８から受信すると、実行要求によって特定されるメソッドの内、第４クラスにおいて定義されたメソッドの実行要求を第２オブジェクト２２へ転送する（ステップＳ１６２）。すなわち、プロキシオブジェクト２１は、第２オブジェクト２２に含まれる複数のメソッドの内、第２インタフェースで定義されたメソッドを実行する。なお、プロキシオブジェクト２１は、メソッドとして、第２インタフェースで定義されたメソッドのみを有する。このため、プロキシオブジェクト２１は、第２オブジェクト２２に含まれる複数のメソッドの内、第２インタフェースで定義されたメソッド以外のメソッドを実行することは出来ない。
【０１０９】
このため、第２オブジェクト２２に含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドは、プロキシオブジェクト２１に含まれるメソッドに制限される。
【０１１０】
一方、上記ステップＳ１４１の判定において、変換部３２Ａが受信したロード要求が第１管理部２６Ａでロードできないクラスのロード要求であったとする。この場合、変換部３２Ａは否定判定する（ステップＳ１４１：Ｎｏ）。そして、変換部３２Ａは、例外を第１オブジェクト１８へ投げる（ステップＳ１３８）。生成部２４からの例外を捕まえると、第１オブジェクト１８は、例外処理を実行する（ステップＳ１４０）。
【０１１１】
次に、本実施の形態の情報処理装置１０Ａをオブジェクト指向プログラミング言語の１つであるＪａｖａ（登録商標）で実現した場合を説明する。図１２は、情報処理装置１０ＡをＪａｖａ（登録商標）で実現したブロック図である。
【０１１２】
情報処理装置１０ＡをＪａｖａ（登録商標）で実現した情報処理装置（Ｊ１０Ａ）は、プログラム（Ｊ１２Ａ）、メインファイル（Ｊ１４）、及びライブラリファイル（Ｊ１６）を備える。プログラム（Ｊ１２Ａ）、メインファイル（Ｊ１４Ａ）、及びライブラリファイル（Ｊ１６）は、各々、図９に示す制御部１２Ａ、第１０記憶部１４Ａ、及び第２記憶部１６に相当する。
【０１１３】
プログラム（Ｊ１２Ａ）は、Ｍａｉｎ（Ｊ１８）、ＬｉｂＩｍｐｌ（Ｊ２２）、Ｐｒｏｘｙオブジェクト（Ｊ２１）、ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ３６）、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６Ａ）、及びＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）を有する。Ｍａｉｎ（Ｊ１８）、ＬｉｂＩｍｐｌ（Ｊ２２）、Ｐｒｏｘｙオブジェクト（Ｊ２１）、ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ３６）、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６Ａ）、及びＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）は、各々、図９に示す第１オブジェクト１８、第２オブジェクト２２、プロキシオブジェクト２１、生成部３６、第１管理部２６Ａ、及び第２管理部２８に相当する。
【０１１４】
Ｍａｉｎ（Ｊ１８）、ＬｉｂＩｍｐｌ（Ｊ２２）、ＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）、及びライブラリファイル（Ｊ１６）は、実施の形態１の図５と同様である。
【０１１５】
メインファイル（Ｊ１４Ａ）は、少なくともＭａｉｎ（Ｊ１８）と、第２インタフェース（図示なし）を利用するためのコード群（第１コード群、第４コード群）を記憶する。
【０１１６】
ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６Ａ）は、メインファイル（Ｊ１４Ａ）に記憶されているコードやデータを用いて初期化されている。このため、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６Ａ）は、メインファイル（Ｊ１４Ａ）に記憶されているクラス（第１クラス、第４クラス）をロード可能な状態になっている。また、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６Ａ）は、各クラスの生成要求に応じて第１クラス、または、第４クラスを生成する。
【０１１７】
さらに、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６Ａ）は、生成要求に応じて、第４クラスからＰｒｏｘｙオブジェクト（Ｊ２１）の第３クラスを生成することもできる。なお、Ｐｒｏｘｙオブジェクト２１を利用するためのコード群（第３コード群）はメインファイル（Ｊ１４Ａ）に存在していてもよいし、しなくてもよい。
【０１１８】
すなわち、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６Ａ）は、Ｍａｉｎ（Ｊ１８）の第１クラスと、第２インタフェースの第４クラスと、Ｐｒｏｘｙオブジェクト（Ｊ２１）の第３クラスを生成することが出来る。また、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６Ａ）は、ライブラリファイル（Ｊ１６）にあるＬｉｂＩｍｐｌ（Ｊ２２）の第２クラスは、生成することが出来ない。
【０１１９】
なお、第１管理部２６Ａに対して送信する、Ｐｒｏｘｙオブジェクト（Ｊ２１）の第３クラスの生成要求は、例えば、Ｊａｖａ（登録商標）言語の標準ライブラリが持つｊａｖａ．ｌａｎｇ．ｒｅｆｌｅｃｔ．Ｐｒｏｘｙ．ｇｅｔＰｒｏｘｙＣｌａｓｓメソッドを用いて行うことができる。
【０１２０】
同様に、ＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）は、ライブラリファイル（Ｊ１６）にあるコードやデータを用いて初期化されている。このため、ＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）は、ライブラリファイル（Ｊ１６）に記述されている第２クラスをロード可能な状態となっている。また、ＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）は、ライブラリファイル（Ｊ１６）に記述されているＬｉｂＩｍｐｌ（Ｊ２２）の第２クラスを生成することが出来る。
【０１２１】
ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ３６）は、様々なオブジェクトからの生成要求に従って、Ｐｒｏｘｙオブジェクト（Ｊ２１）やＬｉｂＩｍｐｌ（Ｊ２２）を生成する。
【０１２２】
例えば、Ｍａｉｎ（Ｊ１８）がＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ３６）に対して、ＬｉｂＩｍｐｌ（Ｊ２２）の生成要求を送信する。この場合、ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ３６）は、ＬｉｂＩｍｐｌ（Ｊ２２）を生成する。また、ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ３６）は、第２インタフェースの第４クラスに基づいて、Ｐｒｏｘｙオブジェクト（Ｊ２１）を作成し、Ｍａｉｎ（Ｊ１８）に送信する。
【０１２３】
Ｐｒｏｘｙオブジェクト（Ｊ２１）の生成には、例えば、上述のｊａｖａ．ｌａｎｇ．ｒｅｆｌｅｃｔ．Ｐｒｏｘｙ．ｇｅｔＰｒｏｘｙＣｌａｓｓメソッドを用いる。ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ３６）は、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６Ａ）から第３クラスを生成する。そして、ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ３６）は、Ｐｒｏｘｙオブジェクト（Ｊ２１）として、ＬｉｂＩｍｐｌ（Ｊ２２）へメソッド呼び出しを転送するｊａｖａ．ｌａｎｇ．ｒｅｆｌｅｃｔ．ＩｎｖｏｃａｔｉｏｎＨａｎｄｌｅｒオブジェクトを作成する。また、ＯｂｊｅｃｔＦａｃｔｏｒｙ（Ｊ３６）は、上記ｊａｖａ．ｌａｎｇ．ｒｅｆｌｅｃｔ．ＩｎｖｏｃａｔｉｏｎＨａｎｄｌｅｒオブジェクトを用いて、第３クラスのインスタンスを作成する。
【０１２４】
ここで、Ｍａｉｎ（Ｊ１８）は、Ｐｒｏｘｙオブジェクト（Ｊ２１）のメソッドを呼び出すことはできるが、Ｐｒｏｘｙオブジェクト（Ｊ２１）からＬｉｂＩｍｐｌ（Ｊ２２）を取得することはできない。このため、Ｍａｉｎ（Ｊ１８）は、Ｐｒｏｘｙオブジェクト（Ｊ２１）が提供するメソッドを利用して、ＬｉｂＩｍｐｌ（Ｊ２２）を間接的に呼び出すことでのみ、ＬｉｂＩｍｐｌ（Ｊ２２）における所定のメソッドを実行する。
【０１２５】
次に、Ｍａｉｎ（Ｊ１８）が、Ｊａｖａ（登録商標）言語のもつリフレクションを用いることができる場合においても、ＬｉｂＩｍｐｌ（Ｊ２２）のメソッドへのアクセスを制限出来ることを説明する。
【０１２６】
オブジェクトは、リフレクションを用いることで、任意のオブジェクトのメソッドの一覧を取得することができる。例えば、あるオブジェクトが、ＬｉｂＩｍｐｌ（Ｊ２２）に対してｇｅｔＣｌａｓｓ（）．ｇｅｔＤｅｃｌａｒｅｄＭｅｔｈｏｄｓ（）を呼び出す。これにより、該オブジェクトは、ＬｉｂＩｍｐｌのメソッドの一覧を取得し、呼び出すことができる。
【０１２７】
しかし、Ｍａｉｎ（Ｊ１８）がＰｒｏｘｙオブジェクト（Ｊ２１）に対してメソッドの一覧を取得しても、Ｍａｉｎ（Ｊ１８）は、第２インタフェースの第４クラスに定義されたメソッド、および基本クラス（ｊａｖａ．ｌａｎｇ．Ｏｂｊｅｃｔ）のメソッドしか取得できない。そのため、Ｍａｉｎ（Ｊ１８）は、第２インタフェースの第４クラスで定義されていないメソッドを呼び出すことはできない。
【０１２８】
また、オブジェクトは、リフレクションを用いることで、任意のオブジェクトのクラスを持つクラスローダを取得することができる。例えば、あるオブジェクトが、ＬｉｂＩｍｐｌ（Ｊ２２）に対してｇｅｔＣｌａｓｓ（）．ｇｅｔＣｌａｓｓＬｏａｄｅｒ（）を呼び出す。これにより、該オブジェクトは、ＬｉｂＩｍｐｌ（Ｊ２２）のクラスをロードするクラスローダ、すなわちＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）を取得し、ライブラリファイルＪ１６内の任意のクラスやインタフェースを利用することが出来る。
【０１２９】
しかし、Ｍａｉｎ（Ｊ１８）がＰｒｏｘｙオブジェクト（Ｊ２１）の第３クラスを持つクラスローダを取得しても、ＤｅｆａｕｌｔＣｌａｓｓＬｏａｄｅｒ（Ｊ２６Ａ）が取得される。そのため、Ｍａｉｎ（Ｊ１８）は、ＣｕｓｔｏｍＣｌａｓｓＬｏａｄｅｒ（Ｊ２８）のロードする第２クラス、すなわちライブラリファイル（Ｊ１６）に記述されているコードやデータを利用することはできない。
【０１３０】
以上説明したように、本実施の形態の情報処理装置１０Ａは、実施の形態１のインタフェース２０に代えて、プロキシオブジェクト２１を備える。プロキシオブジェクト２１は、第１オブジェクト１８から第２オブジェクト２２に含まれるメソッドの実行要求を受け付けたときに、第２オブジェクト２２に含まれるメソッドの内、第１オブジェクト１８がアクセス可能なメソッドの呼出要求を第２オブジェクト２２へ転送するプロキシオブジェクトである。
【０１３１】
このため、第２オブジェクト２２に含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドは、プロキシオブジェクト２１に含まれるメソッドに制限される。
【０１３２】
従って、本実施の形態の情報処理装置１０Ａは、オブジェクトに含まれるメソッド毎に、他のオブジェクトからのアクセスを制限することが出来る。
【０１３３】
（実施の形態３）
本実施の形態では、メソッドの実行要求先の第２オブジェクト２２が複数である場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
【０１３４】
図１３は、本実施の形態の情報処理装置１０Ｂを示すブロック図である。
【０１３５】
情報処理装置１０Ｂは、制御部１２Ｂ、第１０記憶部１４Ｂ、及び第２記憶部１６を備える。
【０１３６】
制御部１２Ｂは、情報処理装置１０Ｂを制御する。制御部１２Ｂは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
【０１３７】
制御部１２Ｂは、第１オブジェクト１８、複数のインタフェース２０、複数の第２オブジェクト２２、生成部４０、第１管理部２６Ｂ、及び複数の第２管理部２８を有する。制御部１２Ｂは、ＲＯＭまたはＨＤＤ等に格納されたプログラムを実行することで、第１オブジェクト１８、複数のインタフェース２０、複数の第２オブジェクト２２、第１管理部２６Ｂ、及び複数の第２管理部２８を実現する。
【０１３８】
第１オブジェクト１８は、実施の形態１と同様である。制御部１２Ｂは、メソッドの実行要求先の複数の第２オブジェクト２２を有する。ちなみに、これらの複数の第２オブジェクト２２は、すべて同じクラスから生成されたオブジェクトでもよいし、まったく異なるクラスから生成されたオブジェクトでもよいし、一部が同じクラスから、他は別のクラスから生成されたオブジェクトであってもよい。本実施の形態では、複数の第２オブジェクト２２として、各々異なるクラスから生成された第２オブジェクト２２Ａ及び第２オブジェクト２２Ｂを有する場合を説明する。
【０１３９】
第２オブジェクト２２Ａ及び第２オブジェクト２２Ｂは、メソッドの実行要求先のオブジェクトである。第２オブジェクト２２Ａ及び第２オブジェクト２２Ｂは、各々、複数のメソッドを含む。なお、これらの第２オブジェクト２２Ａ及び第２オブジェクト２２Ｂを総称する場合、複数の第２オブジェクト２２と称して説明する。
【０１４０】
制御部１２Ｂは、複数の第２オブジェクト２２（第２オブジェクト２２Ａ及び第２オブジェクト２２Ｂ）の各々に対応する複数のインタフェース２０を備える。これらの複数のインタフェース２０は、複数の第２オブジェクト２２の各々に含まれるメソッドへのアクセスを、該複数の第２オブジェクト２２毎に個別に制限する。
【０１４１】
本実施の形態では、制御部１２Ｂは、複数のインタフェース２０として、インタフェース２０Ａ及びインタフェース２０Ｂを備える。インタフェース２０Ａ及びインタフェース２０Ｂは、オブジェクト指向プログラミング言語におけるインタフェースである。これらのインタフェース２０Ａ及びインタフェース２０Ｂを総称する場合、複数のインタフェース２０と称して説明する。
【０１４２】
インタフェース２０Ａは、第２オブジェクト２２Ａに含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドを定義した情報である。すなわち、インタフェース２０Ａは、第１オブジェクト１８から第２オブジェクト２２Ａに含まれる複数のメソッドへのアクセスを制限する制限部として機能する。
【０１４３】
インタフェース２０Ｂは、第２オブジェクト２２Ｂに含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドを定義した情報である。すなわち、インタフェース２０Ｂは、第１オブジェクト１８から第２オブジェクト２２Ｂに含まれる複数のメソッドへのアクセスを制限する制限部として機能する。
【０１４４】
第１管理部２６Ｂは、第１クラス、インタフェース２０Ａの第３クラス、及びインタフェース２０Ｂの第３クラスをロードする。第１管理部２６Ｂは、プログラム実行開始時に初期化される。
【０１４５】
本実施の形態では、制御部１２Ｂは、複数の第２管理部２８を備える。本実施の形態では、複数の第２管理部２８として、第２管理部２８Ａ及び第２管理部２８Ｂを備える。これらの複数の第２管理部２８は、複数の第２オブジェクト２２の各々の第２クラスを個別にロードする。
【０１４６】
具体的には、第２管理部２８Ａは、第２オブジェクト２２Ａの第２クラスをロードする。第２管理部２８Ｂは、第２オブジェクト２２Ｂの第２クラスをロードする。上述したように、第２管理部２８Ａ及び第２管理部２８Ｂを総称する場合、複数の第２管理部２８と称して説明する。
【０１４７】
なお、本実施の形態では、制御部１２Ｂは、上述したように、各々異なるクラスから生成された複数の第２オブジェクト２２として、２つの第２オブジェクト２２Ａ、第２オブジェクト２２Ｂを有する場合を説明する。そして、制御部１２Ｂは、これらの２つの第２オブジェクト２２に対応する、２つのインタフェース２０（インタフェース２０Ａ、インタフェース２０Ｂ）、２つの第２管理部２８（第２管理部２８Ａ、第２管理部２８Ｂ）、及び２つの第２記憶部１６（第２記憶部１６Ａ、第２記憶部１６Ｂ）を備える。
【０１４８】
第２記憶部１６Ａは、第２オブジェクト２２Ａを利用するための第２コード群を記憶する。この第２コード群には、第２オブジェクト２２Ａの第２クラスが記述されている。第２記憶部１６Ｂは、第２オブジェクト２２Ｂを利用するための第２コード群を記憶する。この第２コード群には、第２オブジェクト２２Ｂの第２クラスが記述されている。すなわち、第２記憶部１６Ａに記憶されている第２クラスは第２オブジェクト２２Ａの生成に用いるクラスであり、第２記憶部１６Ｂに記憶されている第２クラスは第２オブジェクト２２Ｂの生成に用いるクラスであり、これらの第２クラスは、異なるクラスである。
【０１４９】
第２管理部２８Ａは、第２オブジェクト２２Ａの第２クラスを第２記憶部１６Ａからロードする。第２管理部２８Ｂは、第２オブジェクト２２Ｂの第２クラスを第２記憶部１６Ｂからロードする。
【０１５０】
インタフェース２０Ａは、第１オブジェクト１８から第２オブジェクト２２Ａに含まれる複数のメソッドへのアクセスを制限する制限部として機能する。本実施の形態では、インタフェース２０Ａは、第２オブジェクト２２Ａに含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドを定義した情報である。
【０１５１】
インタフェース２０Ｂは、第１オブジェクト１８から第２オブジェクト２２Ｂに含まれる複数のメソッドへのアクセスを制限する制限部として機能する。本実施の形態では、インタフェース２０Ｂは、第２オブジェクト２２Ｂに含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドを定義した情報である。
【０１５２】
なお、本実施の形態において、実行要求先の第２オブジェクト２２は、異なるクラスから生成された複数の第２オブジェクト２２であればよく、３つ以上であってもよい。この場合には、複数の第２オブジェクト２２の各々に対応する数の、複数のインタフェース２０、複数の第２管理部２８、及び複数の第２記憶部１６を備えた構成とすればよい。
【０１５３】
第１０記憶部１４Ｂは、第１オブジェクト１８を利用するための第１コード群、インタフェース２０Ａを利用するための第３コード群、インタフェース２０Ｂを利用するための第３コード群等を予め記憶する。第１コード群には、第１クラスが記載されている。インタフェース２０Ａを利用するための第３コード群には、インタフェース２０Ａの第３クラスが記載されている。インタフェース２０Ｂを利用するための第３コード群には、インタフェース２０Ｂの第３クラスが記載されている。
【０１５４】
第１管理部２６Ｂは、生成要求された第２オブジェクト２２Ａの第２クラスを第１０記憶部１４Ｂからロードする。また、第１管理部２６Ｂは、生成要求されたインタフェース２０Ａの第３クラスを第１０記憶部１４Ｂからロードする。また、第１管理部２６Ｂは、生成要求されたインタフェース２０Ｂの第３クラスを第１０記憶部１４Ｂからロードする。すなわち、第１管理部２６Ｂは、第１オブジェクト１８の第１クラス、インタフェース２０Ａの第２クラス、及びインタフェース２０Ｂの第３クラスを生成できる。
【０１５５】
第２管理部２８Ａは、第２オブジェクト２２Ａの第２クラスを第２記憶部１６Ａからロードする。そして、第２管理部２８Ａは、ロードした第２オブジェクト２２Ａの第２クラスを生成部４０へ送信する。すなわち、第２管理部２８Ａは、少なくとも第２オブジェクト２２Ａの第２クラスを生成することが出来る。
【０１５６】
第２管理部２８Ｂは、第２オブジェクト２２Ｂの第２クラスを第２記憶部１６Ｂからロードする。そして、第２管理部２８Ｂは、ロードした第２オブジェクト２２Ｂの第２クラスを生成部４０へ送信する。すなわち、第２管理部２８Ｂは、少なくとも第２オブジェクト２２Ｂの第２クラスを生成することが出来る。
【０１５７】
生成部４０は、第２オブジェクト２２Ａの生成要求を受信したときに、第２オブジェクト２２Ａの第２クラスから第２オブジェクト２２Ａを生成する。また、生成部４０は、この第２オブジェクト２２Ａ、及びインタフェース２０Ａの第３クラスから、インタフェース２０Ａを生成する。そして、生成部４０は、インタフェース２０Ａを第１オブジェクト１８へ送信する。
【０１５８】
一方、生成部４０は、第２オブジェクト２２Ｂの生成要求を受信したときに、第２オブジェクト２２Ｂの第２クラスから第２オブジェクト２２Ｂを生成する。また、生成部４０は、この第２オブジェクト２２Ｂ、及びインタフェース２０Ｂの第３クラスから、インタフェース２０Ｂを生成する。そして、生成部４０は、インタフェース２０Ｂを第１オブジェクト１８へ送信する。
【０１５９】
図１４は、生成部４０の説明図である。生成部４０は、判定部４６、オブジェクト生成部４７、変換部４８、初期化部５０、及び受信部４９を有する。また、本実施の形態では、情報処理装置１０Ｂは、第３記憶部４２及び第１記憶部４４を備える。
【０１６０】
第３記憶部４２は、複数の第２管理部２８の内、初期化部５０が初期化した第２管理部２８の第１識別情報を記憶する。すなわち、第３記憶部４２は、複数の第２管理部２８の内、制御部１２Ｂで利用可能な状態の第２管理部２８の第１識別情報を記憶する。第１識別情報は、複数の第２管理部２８の各々を一意に識別可能な情報である。
【０１６１】
図１５は、第３記憶部４２のデータ構成の一例を示す図である。図１５に示すように、第３記憶部４２は、初期化された第２管理部２８の識別情報（ＩＤ）である第１識別情報（図中、第１ＩＤ参照）を記憶する。
【０１６２】
第１記憶部４４は、第２識別情報と、第３識別情報と、を対応づけて記憶する。第２識別情報は、複数の第２オブジェクト２２の各々に対応する第２クラスを一意に識別する情報である。第３識別情報は、複数の第２オブジェクト２２の各々に対応するインタフェース２０の第３クラスを一意に識別する情報である。
【０１６３】
図１６は、第１記憶部４４のデータ構成の一例を示す図である。図１６に示すように、第１記憶部４４は、第２識別情報（図中、第２ＩＤ参照）と、第３識別情報（図中、第３ＩＤ参照）と、を対応づけて記憶する。この第３識別情報は、対応する第２識別情報によって識別される第２クラスの第２オブジェクト（第２オブジェクト２２Ａまたは第２オブジェクト２２Ｂ）に対応する、インタフェース２０（インタフェース２０Ａまたはインタフェース２０Ｂ）の第３クラスの識別情報である。
【０１６４】
図１４に戻り、判定部４６は、第１オブジェクト１８からオブジェクトの生成要求を受信する。判定部４６は、生成要求されたオブジェクトのクラスを、複数の第２管理部２８の内の何れかの第２管理部２８がロードできるか否かを判定する。
【０１６５】
複数の第２オブジェクト２２の内、生成要求されたオブジェクトのクラスを、複数の第２管理部２８の内の何れかがロード可能である場合には、該クラスをロード可能な第２管理部２８は、生成要求された第２オブジェクト２２Ａまたは第２オブジェクト２２Ｂに対応する第２クラスを、対応する第２記憶部１６（第２記憶部１６Ａまたは第２記憶部１６Ｂ）からロードする。複数の第２管理部２８の内、該第２クラスをロードした第２管理部２８は、ロードした第２クラスをオブジェクト生成部４７へ送信する。
【０１６６】
オブジェクト生成部４７は、第２管理部２８Ａまたは第２管理部２８Ｂから取得した第２クラスから、オブジェクトを生成する。第２管理部２８Ａから、第２オブジェクト２２Ａの第２クラスを取得した場合、オブジェクト生成部４７は、この第２クラスから第２オブジェクト２２Ａを生成する。そして、この第２オブジェクト２２Ａを変換部４８へ送信する。
【０１６７】
第２管理部２８Ｂから、第２オブジェクト２２Ｂの第２クラスを取得した場合、オブジェクト生成部４７は、この第２クラスから第２オブジェクト２２Ｂを生成する。そして、この第２オブジェクト２２Ｂを変換部４８へ送信する。
【０１６８】
変換部４８は、第１記憶部４４から、オブジェクト生成部４７で生成された第２オブジェクト２２Ａまたは第２オブジェクト２２Ｂの第２クラスの第２識別情報に対応する、第３識別情報を読取る。そして、変換部４８は、読取った第３識別情報によって識別される、インタフェース２０（インタフェース２０Ａまたはインタフェース２０Ｂ）の第３クラスを、該第３クラスをロードする第１管理部２６Ｂから取得する。そして、変換部４８は、この第３クラスを用いて、オブジェクト生成部４７が生成した第２オブジェクト２２（第２オブジェクト２２Ａまたは第２オブジェクト２２Ｂ）を、対応するインタフェース２０（インタフェース２０Ａまたはインタフェース２０Ｂ）に変換する。変換部４８は、変換したインタフェース２０（インタフェース２０Ａまたはインタフェース２０Ｂ）を、第１オブジェクト１８へ送信する。
【０１６９】
受信部４９は、第２管理部２８の初期化要求を第１オブジェクト１８から受信すると、この初期化要求を初期化部５０へ送信する。初期化要求を受信すると、初期化部５０は、複数の第２管理部２８（第２管理部２８Ａ及び第２管理部２８Ｂ）の各々を初期化する。具体的には、初期化部５０は、第２記憶部１６Ａに記憶されている第２コード群を用いて、第２管理部２８Ａを初期化する。また、初期化部５０は、第２記憶部１６Ｂに記憶されている第２コード群を用いて、第２管理部２８Ｂを初期化する。
【０１７０】
図１７は、制御部１２Ｂが実行する初期化処理の手順の一例を示すフローチャートである。制御部１２Ｂは、第１オブジェクト１８がオブジェクトの生成要求を送信する前に、この初期化処理を実行する。
【０１７１】
まず、受信部４９が初期化要求を受信したか否かを判断する（ステップＳ３００）。ステップＳ３００で否定判断すると（ステップＳ３００：Ｎｏ）、本ルーチンを終了する。一方、受信部４９が初期化要求を受信すると（ステップＳ３００：Ｙｅｓ）、受信部４９は初期化部５０に初期化要求を送信する（ステップＳ３０２）。
【０１７２】
初期化要求を受信した初期化部５０は、情報処理装置１０Ｂの備える複数の第２記憶部１６（第２記憶部１６Ａ、第２記憶部１６Ｂ）毎に、ステップＳ３０４〜ステップＳ３０６の処理を繰り返し実行する。そして、本ルーチンを終了する。
【０１７３】
ステップＳ３０４では、初期化部５０が、情報処理装置１０Ｂに設けられている複数の第２管理部２８の内、処理対象の第２記憶部１６（第２記憶部１６Ａまたは第２記憶部１６Ｂ）に対応する第２管理部２８（第２管理部２８Ａまたは第２管理部２８Ｂ）を初期化する（ステップＳ３０４）。
【０１７４】
次に、初期化部５０は、ステップＳ３０４で初期化した第２管理部２８（第２管理部２８Ａまたは第２管理部２８Ｂ）の第１識別情報を、第３記憶部４２に登録する（ステップＳ３０６（図１５参照））。そして、繰返しを終了する。
【０１７５】
図１８は、第１オブジェクト１８が他のオブジェクトの生成要求を送信したときの、制御部１２Ｂの動作手順の一例を示すシーケンス図である。
【０１７６】
なお、具体例として、第１オブジェクト１８が第２オブジェクト２２Ｂの生成要求を送信する場合を説明する。なお、第１オブジェクト１８が第２オブジェクト２２Ａの生成要求を送信する場合も同様の処理が行われる。
【０１７７】
まず、第１オブジェクト１８が第２オブジェクト２２Ｂの生成要求を生成部４０へ送信する（ステップＳ１１０）。第１オブジェクト１８から生成要求を受信すると、生成部４０の判定部４６は、複数の第２管理部２８の内の何れか（第２管理部２８Ａまたは第２管理部２８Ｂ）が、第２オブジェクト２２Ｂの第２クラスをロード可能であるか否かを判定する（ステップＳ３１０）。
【０１７８】
本実施の形態では、第２管理部２８Ｂが第２オブジェクト２２Ｂの第２クラスをロードする。このため、判定部４６は、第２オブジェクト２２Ｂの第２クラスをロード可能であると判定する（ステップＳ３１０：Ｙｅｓ）。そして、判定部４６は、第２オブジェクト２２Ｂの第２クラスのロード要求を第２管理部２８Ｂへ送信する（ステップＳ３１２）。
【０１７９】
次に、制御部１２Ｂは、実施の形態１のステップＳ１１６〜ステップＳ１２２と同様にして、ステップＳ３１４〜ステップＳ３２０の処理を実行する。
【０１８０】
すなわち、第２管理部２８Ｂは、判定部４６から送信されたロード要求の対象である、第２オブジェクト２２Ｂの第２クラスを第２記憶部１６Ｂからロードする（ステップＳ３１４）。そして、第２管理部２８Ｂは、ロードした第２クラスを生成部４０に送信する（ステップＳ３１６）。
【０１８１】
第２オブジェクト２２Ｂの第２クラスを受け付けると、生成部４０のオブジェクト生成部４７は、この第２クラスから第２オブジェクト２２Ｂを生成する（ステップＳ３１８）。次に、オブジェクト生成部４７は、第２オブジェクト２２Ｂを変換部４８へ送信する（ステップＳ３２０）。
【０１８２】
次に、変換部４８は、オブジェクト生成部４７から受信した第２オブジェクト２２Ｂの第２クラスの第２識別情報に対応する、インタフェース２０Ｂの第３識別情報を、第１記憶部４４から取得する（ステップＳ３２２）。
【０１８３】
次に、変換部４８は、ステップＳ３２２で取得した第３識別情報によって識別される第３クラスを、ロード可能か否かを判定する（ステップＳ３２４）。例えば、変換部４８は、ステップＳ３２２で取得した第３識別情報によって識別される第３クラスが、インタフェース２０Ｂの第３クラスの第３識別情報である場合、この第３識別情報によって識別される第３クラスを、第１管理部２６Ｂからロード可能であるか否かを判定する。
【０１８４】
次に、制御部１２Ｂは、実施の形態１のステップＳ１２４〜ステップＳ１４０と同様にして、ステップＳ３２４〜ステップＳ３３６の処理を実行する。
【０１８５】
すなわち、変換部４８は、第３クラスをロード可能であると判定すると（ステップＳ３２４：Ｙｅｓ）、この第３クラスのロード要求を第１管理部２６Ｂへ送信する（ステップＳ３２６）。例えば、変換部４８は、インタフェース２０Ｂの第３クラスのロード要求を第１管理部２６Ｂへ送信する。
【０１８６】
第１管理部２６Ｂは、変換部４８から送信されたロード要求の対象である、インタフェース２０Ｂの第３クラスを第１０記憶部１４Ｂからロードする（ステップＳ３２８）。そして、第１管理部２６Ｂは、ロードした第３クラスを生成部４０に送信する（ステップＳ３３０）。
【０１８７】
生成部４０の変換部４８は、第１管理部２６Ｂからインタフェース２０Ｂの第３クラスを受信すると、この第３クラスを用いて、オブジェクト生成部４７で生成された第２オブジェクト２２Ｂをインタフェース２０Ｂに変換する（ステップＳ３３２）。次に、変換部４８は、インタフェース２０Ｂを第１オブジェクト１８へ送信する（ステップＳ３３４）。
【０１８８】
第１オブジェクト１８は、変換部４８から受信したインタフェース２０Ｂを介して、第２オブジェクト２２Ｂへアクセスする（ステップＳ３３６）。
【０１８９】
一方、上記ステップＳ３１０の判定において、第１オブジェクト１８から受信した生成要求が、複数の第２管理部２８（第２管理部２８Ａ、第２管理部２８Ｂ）の何れにおいてもロードできないクラスのオブジェクトの生成要求であったとする。この場合、判定部４６は否定判定する（ステップＳ３１０：Ｎｏ）。そして、判定部４６は、例外を第１オブジェクト１８へ投げる（ステップＳ３３８）。生成部４０からの例外を捕まえると、第１オブジェクト１８は、例外処理を実行する（ステップＳ３４２）。
【０１９０】
また、上記ステップＳ３２４の判定において、変換部４８が受信したロード要求が第１管理部２６Ｂでロードできないクラスのロード要求であったとする。この場合、変換部４８は否定判定する（ステップＳ３２４：Ｎｏ）。そして、変換部４８は、例外を第１オブジェクト１８へ投げる（ステップＳ３４０）。生成部４０からの例外を捕まえると、第１オブジェクト１８は、例外処理を実行する（ステップＳ３４２）。
【０１９１】
なお、上記では、具体例として、第１オブジェクト１８が第２オブジェクト２２Ｂの生成要求を送信する場合を説明した。しかし、第１オブジェクト１８が第２オブジェクト２２Ａの生成要求を送信する場合についても、同様の処理が行われる。すなわち、第１オブジェクト１８が第２オブジェクト２２Ａの生成要求を生成部４０へ送信した場合、判定部４６、オブジェクト生成部４７、変換部４８、第２管理部２８、及び第１管理部２６Ｂは、各々、生成要求された第２オブジェクト２２Ａに対応する情報（第２オブジェクト２２Ａの第２クラス、インタフェース２０Ａの第３クラス、第２オブジェクト２２Ａ、第２記憶部１６Ａ）について、処理を行えばよい。
【０１９２】
以上説明したように、本実施の形態では、実行要求先の第２オブジェクト２２として、複数の第２オブジェクト２２（第２オブジェクト２２Ａ、第２オブジェクト２２Ｂ）を想定している。また、本実施の形態では、情報処理装置１０Ｂは、複数の第２オブジェクト２２の各々に対応する数の、複数のインタフェース２０（インタフェース２０Ａ、インタフェース２０Ｂ）、複数の第２管理部２８（第２管理部２８Ａ、第２管理部２８Ｂ）、複数の第２記憶部１６（第２記憶部１６Ａ、第２記憶部１６Ｂ）を備える。また、第１管理部２６Ｂは、第１オブジェクト１８の第１クラス、インタフェース２０Ａの第３クラス、インタフェース２０Ｂの第３クラスをロードする。
【０１９３】
また、情報処理装置１０Ｂは、第１記憶部４４と、第３記憶部４２と、を備える。第１記憶部４４は、複数の第２オブジェクト２２の各々に対応する第２クラスを一意に識別する第２識別情報と、複数の第２オブジェクト２２の各々に対応するインタフェース２０の第３クラスを一意に識別する第３識別情報と、を対応づけて記憶する。
【０１９４】
このように、本実施の形態の情報処理装置１０Ｂは、実行要求先とされうる第２オブジェクト２２を複数備える。また、情報処理装置１０Ｂは、複数の第２オブジェクト２２の第２クラスを、複数の第２管理部２８によって個別にロードする。そして、制御部１２Ｂは、第１記憶部４４に記憶されている、実行要求先の第２オブジェクト２２の第２クラスの第２識別情報に対応する第３識別情報を取得することで、複数の第２管理部２８の内、実行要求先の第２オブジェクト２２に対応するインタフェース２０の第３クラスを容易に取得することができる。このため、本実施の形態の情報処理装置１０Ｂは、実行要求先の第２オブジェクト２２が１つである場合と同様に、複数の第２オブジェクト２２の各々に含まれるメソッドへのアクセスを制限することができる。
【０１９５】
従って、本実施の形態の情報処理装置１０Ｂは、上記実施の形態１の効果に加えて更に、複数の第２オブジェクト２２の各々に含まれるメソッド毎に、他のオブジェクトからのアクセスを制限することができる。
【０１９６】
（実施の形態４）
本実施の形態では、暗号化データを第２記憶部１６に記憶する場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
【０１９７】
図１９は、本実施の形態の情報処理装置１０Ｃを示すブロック図である。
【０１９８】
情報処理装置１０Ｃは、制御部１２Ｃ、第１０記憶部１４、及び第２記憶部５６を備える。第１０記憶部１４は、実施の形態１と同様である。
【０１９９】
制御部１２Ｃは、情報処理装置１０Ｃを制御する。制御部１２Ｃは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
【０２００】
制御部１２Ｃは、第１オブジェクト１８、インタフェース２０、第２オブジェクト２２、生成部５２、第１管理部２６、及び第２管理部２８を有する。制御部１２Ｃは、ＲＯＭまたはＨＤＤ等に格納されたプログラムを実行することで、第１オブジェクト１８、インタフェース２０、第２オブジェクト２２、生成部５２、第１管理部２６、及び第２管理部２８を実現する。第１オブジェクト１８、インタフェース２０、第２オブジェクト２２、第１管理部２６、及び第２管理部２８は、実施の形態１と同様の構成である。
【０２０１】
第２記憶部５６は、第２クラスを記述した第２コード群の暗号化データを記憶する。すなわち、第２記憶部５６は、第２オブジェクト２２の第２クラスの暗号化データを記憶する。
【０２０２】
生成部５２は、第２オブジェクト２２の生成要求を受信したときに、第２クラスから第２オブジェクト２２を生成する。このとき、生成部５２は、暗号化データの復号を行う（詳細後述）。また、生成部５２は、実施の形態１の生成部２４と同様に、第２オブジェクト２２及び第３クラスから、インタフェース２０を生成する。そして、生成部５２は、インタフェース２０を第１オブジェクト１８へ送信する。
【０２０３】
図２０は、生成部５２の説明図である。生成部５２は、判定部３０、オブジェクト生成部３１、変換部３２、削除部６２、初期化部６０、受信部６４、及び復号部５８を有する。判定部３０、オブジェクト生成部３１、及び変換部３２は、実施の形態１と同様である。図２０に示すように、情報処理装置１０Ｃは、更に第４記憶部５４を備える。
【０２０４】
第４記憶部５４は、平文の（暗号化されていない）第２コード群を記憶する。第４記憶部５４は、第１オブジェクト１８、及びプログラムの不具合の発見や修正を支援するソフトウェアであるデバッガ等からはアクセス不可能である。
【０２０５】
受信部６４は、第２管理部２８の初期化要求を第１オブジェクト１８などから受信すると、この初期化要求を復号部５８へ送信する。
【０２０６】
復号部５８は、第２記憶部５６から暗号化データを読み出し、復号する。そして、復号部５８は、復号データを、第４記憶部５４へ記憶する。このため、第４記憶部５４には、復号された、第２オブジェクト２２の第２コード群が記憶される。
【０２０７】
初期化部６０は、初期化要求を受信すると、第４記憶部５４に記憶されている、第２コード群を用いて、第２管理部２８を初期化する。削除部６２は、第４記憶部５４に記憶された第２コード群を削除する。
【０２０８】
図２１は、制御部１２Ｃが実行する初期化処理の手順の一例を示すシーケンス図である。制御部１２Ｃは、第１オブジェクト１８がオブジェクトの生成要求を送信する前に、この初期化処理を実行する。
【０２０９】
図２１には、第２管理部２８を初期化する場合の手順を示した。
【０２１０】
まず、受信部６４が、第１オブジェクト１８などから初期化要求を受信する（ステップＳ４００）。初期化要求を受信すると、受信部６４は、復号部５８に初期化要求を送信する（ステップＳ４０２）。
【０２１１】
復号部５８は、第２記憶部５６から第２コード群の暗号化データを取得する（ステップＳ４０４）。そして、復号部５８は、暗号化データを復号する（ステップＳ４０６）。次に、復号部５８は、復号によって得た復号データである第２コード群を、第４記憶部５４へ記憶する（ステップＳ４０８）。
【０２１２】
次に、復号部５８は、初期化部６０に初期化要求を送信する（ステップＳ４１０）。初期化部６０は、第４記憶部５４に記憶されている復号データである第２コード群を用いて、第２管理部２８を初期化する（ステップＳ４１２）。次に、初期化部６０は、初期化完了を削除部６２へ送信する（ステップＳ４１４）。
【０２１３】
削除部６２は、ステップＳ４０６で復号された復号データである第２コード群を、第４記憶部５４から削除する（ステップＳ４１６）。そして、本シーケンスを終了する。
【０２１４】
制御部１２Ｃが、図２１に示す初期化処理を実行することによって、第２管理部２８は、第２コード群に記載された第２クラスを利用可能な状態となる。
【０２１５】
第１オブジェクト１８は、上記初期化処理が実行された後に、オブジェクトの生成要求を生成部５２へ送信する。第１オブジェクト１８が第２オブジェクト２２の生成要求を送信したときの、制御部１２Ｃの動作手順は、実施の形態１と同様である（図４参照）。
【０２１６】
例えば、第２管理部２８が第２クラスのロード要求を受信したときには（図４のステップＳ１１４参照）、第２管理部２８はすでに初期化されていて第２クラスを保持していることから、第２クラスのロードを行えばよい（図４のステップＳ１１６参照）。
【０２１７】
以上説明したように、本実施の形態の情報処理装置１０Ｃは、第２コード群を暗号化した暗号化データを第２記憶部５６に記憶する。そして、生成部５２による第２管理部２８の初期化処理時には、暗号化データを復号した復号データを用いて、第２管理部２８の初期化処理を行う。
【０２１８】
従って、本実施の形態の情報処理装置１０Ｃは、上記実施の形態の効果に加えて、第２記憶部５６に記憶されているデータの解析や改ざんを防止することができる。また、情報処理装置１０Ｃは、復号データを、第１オブジェクト１８及びデバッガからアクセス不可能な第４記憶部５４に記憶する。このため、実行要求元である第１オブジェクト１８からの、該復号データの解析や改ざんを防止することができる。
【０２１９】
（実施の形態５）
本実施の形態では、メソッドの実行要求先の第２オブジェクト２２が複数であり、複数の第２オブジェクト２２の各々の第２コード群の暗号化データを、複数の第２記憶部５６で個別に記憶する場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
【０２２０】
図２２は、本実施の形態の情報処理装置１０Ｄを示すブロック図である。
【０２２１】
情報処理装置１０Ｄは、制御部１２Ｄ、第１０記憶部１４Ｂ、及び複数の第２記憶部５６を備える。第１０記憶部１４Ｂは、実施の形態３と同様である。
【０２２２】
制御部１２Ｄは、情報処理装置１０Ｄを制御する。制御部１２Ｄは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
【０２２３】
制御部１２Ｄは、第１オブジェクト１８、複数のインタフェース２０、複数の第２オブジェクト２２、生成部６８、第１管理部２６Ｂ、及び複数の第２管理部２８を有する。制御部１２Ｄは、ＲＯＭまたはＨＤＤ等に格納されたプログラムを実行することで、第１オブジェクト１８、複数のインタフェース２０、複数の第２オブジェクト２２、生成部６８、第１管理部２６Ｂ、及び複数の第２管理部２８を実現する。第１オブジェクト１８は、実施の形態１と同様の構成である。
【０２２４】
制御部１２Ｄは、複数の第２オブジェクト２２、複数のインタフェース２０、複数の第２管理部２８、及び複数の第２記憶部５６を備える。
【０２２５】
実施の形態３と同様に、制御部１２Ｄは、複数の第２オブジェクト２２として、第２オブジェクト２２Ａ〜第２オブジェクト２２Ｂを備える。また、実施の形態３と同様に、制御部１２Ｄは、複数のインタフェース２０として、第２オブジェクト２２Ａ及び第２オブジェクト２２Ｂに対応する、インタフェース２０Ａ及びインタフェース２０Ｂを備える。また、実施の形態３と同様に、制御部１２Ｄは、複数の第２管理部２８として、第２オブジェクト２２Ａ及び第２オブジェクト２２Ｂに対応する、第２管理部２８Ａ及び第２管理部２８Ｂを備える。
【０２２６】
第２オブジェクト２２Ａ、第２オブジェクト２２Ｂ、インタフェース２０Ａ、インタフェース２０Ｂ、第２管理部２８Ａ、及び第２管理部２８Ｂは、実施の形態３と同様である。
【０２２７】
本実施の形態では、制御部１２Ｄは、複数の第２記憶部５６を備える。第２記憶部５６は、実施の形態４と同様である。本実施の形態では、制御部１２Ｄは、複数の第２記憶部５６として、第２記憶部５６Ａ及び第２記憶部５６Ｂを備える。第２記憶部５６Ａ及び第２記憶部５６Ｂを総称する場合、複数の第２記憶部５６と称して説明する。
【０２２８】
複数の第２記憶部５６は、複数の第２オブジェクト２２の各々に対応する第２コード群の暗号化データを、個別に記憶する。
【０２２９】
詳細には、第２記憶部５６Ａは、第２オブジェクト２２Ａの第２クラスを記述した第２コード群の暗号化データを記憶する。すなわち、第２記憶部５６Ａは、第２オブジェクト２２Ａの第２クラスの暗号化データを記憶する。第２記憶部５６Ｂは、第２オブジェクト２２Ｂの第２クラスを記述した第２コード群の暗号化データを記憶する。すなわち、第２記憶部５６Ｂは、第２オブジェクト２２Ｂの第２クラスの暗号化データを記憶する。
【０２３０】
生成部６８は、複数の第２オブジェクト２２の内の何れか（第２オブジェクト２２Ａまたは第２オブジェクト２２Ｂ）の生成要求を受信したときに、対応する第２クラスから、生成要求された第２オブジェクト２２（第２オブジェクト２２Ａまたは第２オブジェクト２２Ｂ）を生成する。また、生成部６８は、実施の形態３の生成部４０と同様に、生成した第２オブジェクト２２（第２オブジェクト２２Ａまたは第２オブジェクト２２Ｂ）、及び対応する第３クラス（インタフェース２０Ａの第３クラス、またはインタフェース２０Ｂの第３クラス）から、対応するインタフェース２０（インタフェース２０Ａまたはインタフェース２０Ｂ）を生成する。そして、生成部６８は、生成したインタフェース２０Ａまたはインタフェース２０Ｂを、第１オブジェクト１８へ送信する。
【０２３１】
図２３は、生成部６８の説明図である。生成部６８は、判定部４６、オブジェクト生成部４７、変換部４８、削除部６２、初期化部７２、受信部６４、及び復号部７４を有する。判定部４６、オブジェクト生成部４７、及び変換部４８は、実施の形態３と同様である。削除部６２、及び受信部６４は、実施の形態４と同様である。
【０２３２】
図２３に示すように、情報処理装置１０Ｄは、第１記憶部４４、第４記憶部５４、第３記憶部４２、第２記憶部５６、及び第５記憶部７０を備える。第１記憶部４４及び第３記憶部４２は、実施の形態３と同様である。第４記憶部５４及び第２記憶部５６は、実施の形態４と同様である。
【０２３３】
第５記憶部７０は、複数の第２記憶部５６の各々を識別する第３識別情報と、各第２記憶部５６に記憶されている暗号化データの復号鍵と、を対応づけて記憶する。
【０２３４】
なお、第５記憶部７０に記憶されている復号鍵は、対応する第３識別情報毎に異なる復号鍵であってもよいし、同じ復号鍵であってもよい。
【０２３５】
図２４は、第５記憶部７０のデータ構造の一例を示す図である。図２４に示すように、第５記憶部７０は、第２記憶部５６の識別情報（ＩＤ）である第３識別情報（図中、第３ＩＤ参照）と、復号鍵と、を対応づけて記憶する。
【０２３６】
図２３に戻り、復号部７４は、複数の第２記憶部５６の各々から、暗号化データを読み出す。また、復号部７４は、複数の第２記憶部５６の各々の第３識別情報に対応する復号鍵を、第５記憶部７０から取得する。そして、復号部７４は、読み出した復号鍵を用いて、対応する第２記憶部５６に記憶されている暗号化データを復号する。復号部５８は、この復号データを、第４記憶部５４へ記憶する。
【０２３７】
初期化部７２は、初期化要求を受信すると、第４記憶部５４に記憶されている復号データである第２コード群を用いて、対応する第２管理部２８を初期化する。詳細には、初期化部７２は、第２記憶部５６Ａに記憶されていた暗号化データから復号した第２コード群を用いて、第２管理部２８Ａを初期化する。また、初期化部７２は、第２記憶部５６Ｂに記憶されていた暗号化データから復号した第２コード群を用いて、第２管理部２８Ｂを初期化する。
【０２３８】
図２５は、制御部１２Ｄが実行する初期化処理の手順の一例を示すシーケンス図である。制御部１２Ｄは、第１オブジェクト１８がオブジェクトの生成要求を送信する前に、この初期化処理を実行する。すなわち、第１オブジェクト１８は、オブジェクトの生成要求を生成部６８へ送信する前に、生成要求する第２オブジェクト２２に対応する第２管理部２８の初期化要求を、生成部６８へ送信する。
【０２３９】
図２５には、複数の第２管理部２８の全て（第２管理部２８Ａ及び第２管理部２８Ｂ）を初期化する場合の手順を示した。
【０２４０】
まず、受信部６４が、第２管理部２８の初期化要求を受信する（ステップＳ５００）。受信部６４は、復号部７４に初期化要求を送信する（ステップＳ５０２）。
【０２４１】
次に、生成部６８は、情報処理装置１０Ｄに設けられている複数の第２記憶部５６毎に、ステップＳ５０４〜ステップＳ５１８の処理を繰り返し実行する。
【０２４２】
詳細には、まず、復号部７４が、複数の第２記憶部５６の内、初期化処理を行っていない第２管理部２８に対応する第２記憶部５６に記憶されている暗号化データを、取得する（ステップＳ５０４）。次に、復号部７４は、ステップＳ５０４で暗号化データを取得した第２記憶部５６の第３識別情報に対応する復号鍵を第５記憶部７０から取得する（ステップＳ５０６）。
【０２４３】
次に、復号部７４は、ステップＳ５０４で取得した暗号化データを、ステップＳ５０６で取得した復号鍵を用いて復号する（ステップＳ５０８）。次に、復号部７４は、この復号によって得られた復号データである第２コード群を、第４記憶部５４へ記憶する（ステップＳ５１０）。
【０２４４】
次に、復号部７４は、複数の第２管理部２８の内、該復号データである第２コード群に対応する第２管理部２８の初期化要求を、初期化部７２へ送信する（ステップＳ５１２）。初期化部７２は、該初期化要求を受信すると、初期化部７２に記憶されている復号データである第２コード群を用いて、対応する第２管理部２８（例えば、第２管理部２８Ａ）を初期化する（ステップＳ５１４）。
【０２４５】
次に、初期化部７２は、初期化完了を削除部６２へ送信する（ステップＳ５１６）。削除部６２は、第４記憶部５４から復号データを削除する（ステップＳ５１８）。そして、繰返し終了する。
【０２４６】
制御部１２Ｄが、図２５に示す初期化処理を実行することによって、複数の第２管理部２８が初期化される。
【０２４７】
第１オブジェクト１８は、上記初期化処理が実行された後に、オブジェクトの生成要求を生成部６８へ送信する。第１オブジェクト１８が第２オブジェクト２２の生成要求を送信したときの、制御部１２Ｄの動作手順は、実施の形態３と同様である（図１８参照）。
【０２４８】
例えば、第２管理部２８Ａまたは第２管理部２８Ｂが第２クラスのロード要求を受信したときには（図１８のステップＳ３１２参照）、第２管理部２８Ａまたは第２管理部２８Ｂはすでに初期化されていて第２クラスを保持していることから、第２クラスのロードを行えばよい（図１８のステップＳ３１４参照）。
【０２４９】
以上説明したように、本実施の形態の情報処理装置１０Ｄは、複数の第２オブジェクト２２の各々に対応する第２コード群を暗号化した暗号化データを、複数の第２記憶部５６に個別に記憶する。また、第５記憶部７０が、第２記憶部５６の第３識別情報と、復号鍵と、を対応づけて記憶する。そして、生成部６８による複数の第２管理部２８（第２管理部２８Ａ、第２管理部２８Ｂ）の初期化処理時には、復号部７４が、第３識別情報に対応する復号鍵を用いて、複数の第２管理部２８の各々に記憶されている暗号化データを復号する。そして、初期化部７２は、復号データを用いて、複数の第２管理部２８の初期化処理を行う。
【０２５０】
このように、本実施の形態では、第５記憶部７０が、複数の第２記憶部５６の各々に記憶されている暗号化データの復号鍵を記憶する。このため、情報処理装置１０Ｄが１つの第２記憶部５６を備えた場合と同様に、複数の第２記憶部５６の各々に記憶されているデータの解析や改ざんを防止することができる。また、第１オブジェクト１８から各第１管理部２６へのアクセスを制限することができる。
【０２５１】
また、本実施の形態の情報処理装置１０Ｄは、復号データを、第１オブジェクト１８及びデバッガからアクセス不可能な第４記憶部５４に記憶する。このため、実行要求元である第１オブジェクト１８からの、該復号データの解析や改ざんを防止することができる。
【０２５２】
また、図２５を用いて説明したように、本実施の形態では、削除部６２は、初期化部７２による初期化処理の終了後に復号データである第２コード群を第４記憶部５４から削除する。このため、第４記憶部５４に格納されている復号データが、第１オブジェクト１８やデバッガ等により解析または改ざんされる可能性をより小さくすることができる。なお、第４記憶部５４による、第１オブジェクト１８やデバッガからの保護機能が強力である場合には、削除部６２によるステップＳ５１８の削除処理を実行しない形態であってもよい。
【０２５３】
（実施の形態６）
実施の形態１では、第１オブジェクト１８がオブジェクトの生成要求を送信する前に、第２管理部２８の初期化処理を実行した。本実施の形態では、第１オブジェクト１８がオブジェクトの生成要求を送信した後に、未初期化の第２管理部２８について初期化処理を実行する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
【０２５４】
図２６は、本実施の形態の情報処理装置１０Ｅを示すブロック図である。
【０２５５】
情報処理装置１０Ｅは、制御部１２Ｅ、第１０記憶部１４、及び第２記憶部１６を備える。
【０２５６】
制御部１２Ｅは、情報処理装置１０Ｅを制御する。制御部１２Ｅは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
【０２５７】
制御部１２Ｅは、第１オブジェクト１８、インタフェース２０、第２オブジェクト２２、生成部７６、第１管理部２６、及び第２管理部２８を備える。制御部１２Ｅは、ＲＯＭまたはＨＤＤ等に格納されたプログラムを実行することで、第１オブジェクト１８、インタフェース２０、第２オブジェクト２２、生成部７６、第１管理部２６、及び第２管理部２８を実現する。
【０２５８】
第１０記憶部１４、及び第２記憶部１６は、実施の形態１と同様である。また、第１オブジェクト１８、インタフェース２０、第２オブジェクト２２、第１管理部２６、及び第２管理部２８は、実施の形態１と同様である。
【０２５９】
生成部７６は、第２オブジェクト２２の生成要求を受信した後に、未初期化の第２管理部２８を初期化する。また、生成部７６は、実施の形態１と同様に、第２クラスから第２オブジェクト２２を生成する。また、生成部７６は、この第２オブジェクト２２及び第３クラスから、インタフェース２０を生成する。そして、生成部２４は、インタフェース２０を第１オブジェクト１８へ送信する。
【０２６０】
図２７は、生成部７６の説明図である。生成部７６は、判定部７８、初期化判定部８０、オブジェクト生成部３１、変換部３２、及び初期化部８２を備える。オブジェクト生成部３１及び変換部３２は、実施の形態１と同様である。また、情報処理装置１０Ｅは、第１管理部２６、第６記憶部８４、及び第３記憶部４２Ｅを備える。第１管理部２６は、実施の形態１と同様である。
【０２６１】
第６記憶部８４は、第２管理部２８がロードする第２クラスの第２識別情報を記憶する。図２８は、第６記憶部８４のデータ構造の一例を示す図である。図２８に示すように、第６記憶部８４は、第２クラスの識別情報（ＩＤ）である第２識別情報（図２８中、第２ＩＤ参照）を記憶する。
【０２６２】
例えば、第２記憶部１６による生成要求先の第２オブジェクト２２が複数あるとする。そして、第２管理部２８が、これらの複数の第２オブジェクト２２の各々の第２クラスをロードするとする。この場合、第６記憶部８４は、各第２オブジェクト２２の第２クラスを識別する第２識別情報を記憶する。すなわち、第２記憶部１６が、２つの第２識別情報を記憶している場合、第２管理部２８は、２つの第２識別情報の各々によって識別される第２クラスをロードし、これらの第２クラス以外のクラスはロードしないことを示す。
【０２６３】
第３記憶部４２Ｅは、初期化済情報、または未初期化情報を記憶する。初期化情報は、第２管理部２８が初期化済であることを示す。未初期化情報は、第２管理部２８が初期化されていないことを示す。
【０２６４】
図２９は、第３記憶部４２Ｅのデータ構造の一例を示す図である。図２９に示すように、例えば、第２管理部２８が初期化されていない場合には、第３記憶部４２Ｅは、未初期化情報として、例えば“ｆａｌｓｅ”を記憶する。一方、第２管理部２８が初期化済である場合には、第３記憶部４２Ｅは、初期化済情報として、例えば、“ｔｒｕｅ”を記憶する。
【０２６５】
図２７に戻り、判定部７８は、第１オブジェクト１８からオブジェクトの生成要求を受信する。判定部７８は、生成要求されたオブジェクトのクラスを、第２管理部２８がロードできるか否かを判定する。具体的には、判定部７８は、生成要求されたオブジェクトのクラスの識別情報が、第６記憶部８４に記憶されているか否かを判定することによって、第２管理部２８からロード可能であるか否かを判定する。
【０２６６】
初期化判定部８０は、第２管理部２８が初期化済であるか否かを判定する。初期化判定部８０は、第３記憶部４２Ｅに、初期化済情報が記憶されているか否かを判定することによって、第２管理部２８が初期化済であるか否かを判定する。
【０２６７】
初期化判定部８０は、第２管理部２８が未初期化であると判定された場合、第２管理部２８の初期化要求を初期化部８２に送信する。
【０２６８】
初期化部８２は、初期化判定部８０から初期化要求を受信すると、第２記憶部１６に記憶されている第２コード群を用いて、第２管理部２８を初期化する。そして、初期化部８２は、第２管理部２８を初期化した後に、第３記憶部４２Ｅに記憶されている未初期化情報を、初期化済情報に変更する。
【０２６９】
図３０は、第１オブジェクト１８が他のオブジェクトの生成要求を送信したときの、制御部１２Ｅの動作手順の一例を示すシーケンス図である。なお、具体例として、第１オブジェクト１８が第２オブジェクト２２の生成要求を送信する場合を説明する。
【０２７０】
まず、第１オブジェクト１８が第２オブジェクト２２の生成要求を生成部７６へ送信する（ステップＳ６００）。第１オブジェクト１８から生成要求を受信すると、生成部７６の判定部７８が、第２クラスをロード可能であるか否かを判定する（ステップＳ６０２）。生成部７６は、第６記憶部８４に該第２クラスの第２識別情報が記憶されているか否かを判定することによって、ステップＳ６０２の判定を行う。
【０２７１】
すなわち、生成部７６は、第６記憶部８４に該第２クラスの第２識別情報が記憶されていると判定すると（ステップＳ６０２：Ｙｅｓ）、初期化判定部８０に第２クラスのロード要求を送信する（ステップＳ６０４）。
【０２７２】
次に、初期化判定部８０は、第３記憶部４２Ｅを用いて、第２管理部２８が初期化済であるか否かを判定する（ステップＳ６０６）。第２管理部２８が未初期化であると判定すると（ステップＳ６０６：Ｎｏ）、初期化判定部８０は、第２管理部２８の初期化要求を初期化部８２へ送信する（ステップＳ６０８）。
【０２７３】
第２管理部２８の初期化要求を受信すると、初期化部８２は、第２記憶部１６に記憶されている第２コード群を用いて、第２管理部２８を初期化する（ステップＳ６１０）。次に、初期化部８２は、該第２管理部２８が初期化済であることを示す初期化済情報を、第３記憶部４２Ｅに記憶する（ステップＳ６１２）。図３１は、初期化済情報である“ｔｒｕｅ”の記憶された第３記憶部４２Ｅを示す図である。
【０２７４】
図３０に戻り、初期化部８２は、初期化完了を初期化判定部８０へ送信する（ステップＳ６１４）。次に、ステップＳ６１６へ進む。
【０２７５】
一方、上記ステップＳ６０６の判定において、第２管理部２８が初期化済であると判定されると（ステップＳ６０６：Ｙｅｓ）、上記ステップＳ６１０〜ステップＳ６１２の処理を行わずに、ステップＳ６１６へ進む。
【０２７６】
ステップＳ６１６では、初期化判定部８０が、第２クラスのロード要求を第２管理部２８へ送信する（ステップＳ６１６）。
【０２７７】
次に、制御部１２Ｅは、実施の形態１のステップＳ１１６〜ステップＳ１４０と同様にして、ステップＳ６１８〜ステップＳ６４２の処理を実行する。
【０２７８】
以上説明したように、本実施の形態の情報処理装置１０Ｅでは、生成部７６は、第１オブジェクト１８から第２オブジェクト２２の生成要求を受信したときに、第２管理部２８が初期化済であるか否かを判定し、未初期化であると判定されたときに、第２管理部２８を初期化する。そして、この初期化の後に、第２オブジェクト２２の生成やインタフェース２０の生成を行う。
【０２７９】
このため、本実施の形態の情報処理装置１０Ｅでは、実施の形態１に比べて、第２管理部２８の初期化処理を、第２オブジェクト２２の生成直前にまで遅延させる。これにより、上記実施の形態の効果に加えて、第２オブジェクト２２の生成直前まで、メモリの使用を削減することができる。なぜなら、第２管理部２８の初期化後は、第２記憶部１６に記憶されている第２データをメモリ上に展開しておくためのメモリが必要となる。情報処理装置１０Ｅでは、この初期化処理を遅延させることにより、それまでの間、メモリ上に展開しておくためのメモリを消費せずに済むからである。
【０２８０】
例えば、何らかの異常や例外処理が発生した時にだけ、生成の必要なオブジェクトがあるとする。この場合、異常や例外処理が発生するまでは、該オブジェクトに関するデータ群をメモリ上に展開することはない。このため、メモリ使用量の削減を図ることができる。
【０２８１】
なお、第２コード群を、実施の形態４と同様に、暗号化した暗号化データとして第２記憶部１６に記憶してもよい。この場合、本実施の形態の情報処理装置１０Ｅに、更に、実施の形態４で説明した受信部６４、復号部５８、削除部６２、及び第４記憶部５４を備えた構成とすればよい（図２０参照）。
【０２８２】
そして、初期化部８２は、第２オブジェクト２２の生成の直前に、第２管理部２８の初期化処理を実行すればよい。これにより、上記効果に加えて、更に、様々な解析や改ざんを防止することができる。
【０２８３】
例えば、第２記憶部１６が、課金処理の実行が必要になった時にだけ生成される第２オブジェクト２２の第２コード群を記憶する。この場合、この第２コード群には、課金処理が含まれるため、できる限り平文で保持することを避けたい。そこで、第２コード群を、実施の形態４と同様に、暗号化した暗号化データとして第２記憶部１６に記憶する。
【０２８４】
これにより、課金処理を行う直前まで、第２コード群を暗号化して保護することが出来、また、メモリ上に平文の第２オブジェクト２２を展開することがない。このため、様々な解析や改ざんを防止できる。
【０２８５】
（実施の形態７）
本実施の形態では、第１オブジェクト１８がオブジェクトの生成要求を送信した後に、未初期化の第２管理部２８について初期化処理を実行する。また、本実施の形態では、初期化処理対象の第２管理部２８が、複数である場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
【０２８６】
図３２は、本実施の形態の情報処理装置１０Ｆを示すブロック図である。
【０２８７】
情報処理装置１０Ｆは、制御部１２Ｆ、第１０記憶部１４Ｂ、及び複数の第２記憶部１６を備える。
【０２８８】
制御部１２Ｆは、情報処理装置１０Ｆを制御する。制御部１２Ｆは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
【０２８９】
制御部１２Ｆは、第１オブジェクト１８、複数のインタフェース２０、複数の第２オブジェクト２２、生成部８６、第１管理部２６Ｂ、及び複数の第２管理部２８を備える。制御部１２Ｆは、ＲＯＭまたはＨＤＤ等に格納されたプログラムを実行することで、第１オブジェクト１８、複数のインタフェース２０、複数の第２オブジェクト２２、生成部８６、第１管理部２６Ｂ、及び複数の第２管理部２８を実現する。
【０２９０】
第１０記憶部１４Ｂ、複数の第２記憶部１６（第２記憶部１６Ａ、第２記憶部１６Ｂ）、及び第１管理部２６Ｂは、実施の形態３と同様である。また、第１オブジェクト１８は、実施の形態１と同様である。
【０２９１】
実施の形態３と同様に、制御部１２Ｆは、複数の第２オブジェクト２２として、第２オブジェクト２２Ａ〜第２オブジェクト２２Ｂを備える。また、実施の形態３と同様に、制御部１２Ｆは、複数のインタフェース２０として、第２オブジェクト２２Ａ及び第２オブジェクト２２Ｂに対応する、インタフェース２０Ａ及びインタフェース２０Ｂを備える。また、実施の形態３と同様に、制御部１２Ｆは、複数の第２管理部２８として、第２オブジェクト２２Ａ及び第２オブジェクト２２Ｂに対応する、第２管理部２８Ａ及び第２管理部２８Ｂを備える。また、本実施の形態では、制御部１２Ｆは、実施の形態３と同様に、複数の第２記憶部１６として、第２記憶部１６Ａ、及び第２記憶部１６Ｂを備える。
【０２９２】
第２オブジェクト２２Ａ、第２オブジェクト２２Ｂ、インタフェース２０Ａ、インタフェース２０Ｂ、第２管理部２８Ａ、第２管理部２８Ｂ、第２記憶部１６Ａ、及び第２記憶部１６Ｂは、実施の形態３と同様である。
【０２９３】
生成部８６は、第２オブジェクト２２の生成要求を受信した後に、未初期化の第２管理部２８を初期化する。また、生成部８６は、実施の形態３と同様に、第２クラスから第２オブジェクト２２（第２オブジェクト２２Ａまたは第２オブジェクト２２Ｂ）を生成する。また、生成部８６は、生成した第２オブジェクト２２（第２オブジェクト２２Ａまたは第２オブジェクト２２Ｂ）、及び第３クラスから、インタフェース２０（インタフェース２０Ａまたはインタフェース２０Ｂ）を生成する。そして、生成部８６は、生成したインタフェース２０（インタフェース２０Ａ、またはインタフェース２０Ｂ）を第１オブジェクト１８へ送信する。
【０２９４】
図３３は、生成部８６の説明図である。生成部８６は、判定部９０、初期化判定部９１、オブジェクト生成部３１、変換部９２、及び初期化部９３を備える。オブジェクト生成部３１は、実施の形態１と同様である。また、情報処理装置１０Ｆは、第６記憶部８８、第１記憶部４４、及び第３記憶部４２Ｆを備える。第１記憶部４４は、実施の形態３と同様である。
【０２９５】
第６記憶部８８は、第２クラスの第２識別情報と、該第２識別情報によって識別される第２クラスをロードする第２管理部２８の第１識別情報と、を対応づけて記憶する。図３４は、第６記憶部８８のデータ構造の一例を示す図である。図３４に示すように、第６記憶部８８は、第２クラスの識別情報（ＩＤ）である第２識別情報（図３４中、第２ＩＤ参照）と、該第２識別情報によって識別される第２クラスをロードする第２管理部２８の識別情報（ＩＤ）である第１識別情報（図３４中、第１ＩＤ参照）と、を対応づけて記憶する。
【０２９６】
第３記憶部４２Ｆは、第２管理部２８の識別情報（ＩＤ）である第１識別情報と、第１識別情報によって識別される第２管理部２８が初期化済であるか否かを示す情報と、を対応づけて記憶する。第２管理部２８が初期化済であるか否かを示す情報として、第３記憶部４２Ｆは、実施の形態３と同様に、初期化情報、または未初期化情報を記憶する。
【０２９７】
図３５は、第３記憶部４２Ｆのデータ構造の一例を示す図である。図３５に示すように、第３記憶部４２Ｆは、第１識別情報（図３５中、第１ＩＤ参照）と、初期化情報または未初期化情報と、を対応づけて記憶する。図３５に示すように、第１識別情報によって識別される第２管理部２８が初期化されていない場合には、第３記憶部４２Ｆは、未初期化情報として、例えば“ｆａｌｓｅ”を記憶する。一方、第１識別情報によって識別される第２管理部２８が初期化済である場合には、第３記憶部４２Ｆは、初期化済情報として、例えば“ｔｒｕｅ”を記憶する。
【０２９８】
図３３に戻り、判定部９０は、第１オブジェクト１８からオブジェクトの生成要求を受信する。判定部９０は、生成要求されたオブジェクトのクラスを、第２管理部２８からロード可能か否かを判定する。
【０２９９】
例えば、判定部９０は、第１オブジェクト１８から第２オブジェクト２２の生成要求を受信する。判定部９０は、複数の第２管理部２８の内、何れかの第２管理部２８から該第２オブジェクト２２の第２クラスをロード可能であるか否かを判定する。
【０３００】
詳細には、まず、判定部９０は、複数の第２管理部２８の内、生成要求された第２オブジェクト２２（第２オブジェクト２２Ａまたは第２オブジェクト２２Ｂ）の第２クラスをロードする第２管理部２８が有るか否かを判定する。具体的には、判定部９０は、生成要求された第２オブジェクト２２の第２クラスの第２識別情報と、該第２識別情報に対応する、第２管理部２８の識別情報である第１識別情報と、が、第６記憶部８８に対応づけて記憶されているか否かを判定する。該第２識別情報と該第１識別情報とが、第６記憶部８８に対応づけて記憶されている場合、判定部９０は、生成要求された第２オブジェクト２２の第２クラスをロード可能と判定する。
【０３０１】
初期化判定部９１は、複数の第２管理部２８の内、判定部９０で判定された第２管理部２８が初期化済であるか否かを判定する。初期化判定部９１は、生成要求された第２オブジェクト２２の第２クラスをロードする第２管理部２８が未初期化である場合、初期化部９３に該第２管理部２８の初期化要求を送信する。
【０３０２】
初期化部９３は、初期化判定部９１から、初期化要求を受信すると、複数の第２記憶部１６の内、初期化対象の第２管理部２８に対応する第２記憶部１６（第２記憶部１６Ａまたは第２記憶部１６Ｂ）に記憶されている第２コード群を用いて、該第２管理部２８を初期化する。そして、初期化部９３は、該第２管理部２８を初期化した後に、第３記憶部４２Ｆに記憶されている未初期化情報を、初期化済情報に変更する。
【０３０３】
図３６は、第１オブジェクト１８が他のオブジェクトの生成要求を送信したときの、制御部１２Ｆの動作手順の一例を示すシーケンス図である。なお、具体例として、第１オブジェクト１８が第２オブジェクト２２Ｂの生成要求を送信する場合を説明する。
【０３０４】
まず、第１オブジェクト１８が第２オブジェクト２２Ｂの生成要求を生成部８６へ送信する（ステップＳ７００）。第１オブジェクト１８から生成要求を受信すると、生成部８６の判定部９０が、第６記憶部８８に基づいて、生成要求された第２オブジェクト２２Ｂの第２クラスを、何れかの第２管理部２８（第２管理部２８Ａまたは第２管理部２８Ｂ）からロード可能か否かを判定する（ステップＳ７０２）。
【０３０５】
そして、判定部９０が第２クラスをロード可能であると判定すると（ステップＳ７０２：Ｙｅｓ）、判定部９０は、第６記憶部８８における、生成要求された第２オブジェクト２２Ｂの第２クラスの第２識別情報と、該第２識別情報に対応する第１識別情報（第２管理部２８Ｂの識別情報）と、を初期化判定部９１へ送信する（ステップＳ７０４）。
【０３０６】
初期化判定部９１は、判定部９０から受信した第１識別情報によって識別される第２管理部２８Ｂが、初期化済であるか否かを判定する（ステップＳ７０６）。ステップＳ７０６では、初期化判定部９１は、第２管理部２８Ｂの第１識別情報に対応づけて、初期化済情報が第６記憶部８８に記憶されているか否かを判定する。
【０３０７】
次に、第２管理部２８Ｂが未初期化であると判定すると（ステップＳ７０６：Ｎｏ）、初期化判定部９１は、第２管理部２８Ｂの初期化要求を初期化部９３へ送信する（ステップＳ７０８）。
【０３０８】
第２管理部２８Ｂの初期化要求を受信すると、初期化部９３は、第２記憶部１６Ｂに記憶されている第２コード群を用いて、第２管理部２８Ｂを初期化する（ステップＳ７１０）。次に、初期化部９３は、該第２管理部２８Ｂが初期化済であることを示す初期化済情報を、第３記憶部４２Ｆに記憶する（ステップＳ７１２）。例えば、初期化部９３は、第３記憶部４２Ｆに、第２管理部２８Ｂの第１識別情報に対応づけて、初期化済情報である“ｔｒｕｅ”を記憶する。
【０３０９】
初期化部９３は、初期化完了を初期化判定部９１へ送信する（ステップＳ７１４）。次に、ステップＳ７１６へ進む。
【０３１０】
一方、上記ステップＳ７０６の判定において、第２管理部２８Ｂが初期化済であると判定されると（ステップＳ７０６：Ｙｅｓ）、上記ステップＳ７１０〜ステップＳ７１２の処理を行わずに、ステップＳ７１６へ進む。
【０３１１】
ステップＳ７１６では、初期化判定部９１が、第２オブジェクト２２Ｂの第２クラスのロード要求を、複数の第２管理部２８の内の第２管理部２８Ｂへ送信する（ステップＳ７１６）。
【０３１２】
次に、第２管理部２８Ｂは、第２クラスを第２記憶部１６Ｂからロードする（ステップＳ７１８）。そして、第２管理部２８Ｂは、ロードした第２クラスを生成部８６に送信する（ステップＳ７２０）。
【０３１３】
第２クラスを受け付けると、生成部８６のオブジェクト生成部３１は、この第２クラスから第２オブジェクト２２Ｂを生成する（ステップＳ７２２）。次に、オブジェクト生成部３１は、第２オブジェクト２２Ｂを変換部９２へ送信する（ステップＳ７２４）。
【０３１４】
変換部９２は、第１記憶部４４から、第２オブジェクト２２Ｂの第２クラスの識別情報である第２識別情報に対応する、インタフェース２０Ｂの第３クラスの識別情報である第３識別情報を取得する（ステップＳ７２６、図１６参照）。
【０３１５】
次に、変換部９２は、ステップＳ７２６で取得した第３識別情報によって識別される第３クラスを第１管理部２６Ｂからロード可能であるか否かを判定する（ステップＳ７２８）。次に、制御部１２Ｆは、実施の形態１のステップＳ１２５〜ステップＳ１４０と同様にして、ステップＳ７３０〜ステップＳ７４６の処理を実行する。
【０３１６】
以上説明したように、本実施の形態の情報処理装置１０Ｆでは、生成部８６は、第１オブジェクト１８から、複数の第２オブジェクト２２の内の何れかの第２オブジェクト２２の生成要求を受信したときに、複数の第２管理部２８の内、生成要求された第２オブジェクト２２の第２クラスをロードする第２管理部２８が初期化済であるか否かを判定する。そして、未初期化であると判定されたときに、この第２管理部２８を初期化する。
【０３１７】
このため、本実施の形態の情報処理装置１０Ｆでは、生成要求された第２オブジェクト２２に対応する第２管理部２８の初期化処理を、該第２オブジェクト２２の生成直前まで遅延させる。これにより、上記実施の形態の効果に加えて、第２オブジェクト２２の生成直前まで、メモリの使用を削減することができる。なぜなら、第２管理部２８の初期化後は、第２記憶部１６に記憶されている第２データをメモリ上に展開しておくためのメモリが必要となる。情報処理装置１０Ｆでは、この初期化処理を遅延させることにより、それまでの間、データを展開しておくためのメモリを消費せずに済むからである。
【０３１８】
（実施の形態８）
実施の形態８では、第２管理部２８を更新する場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
【０３１９】
図３７は、本実施の形態の情報処理装置１０Ｇを示すブロック図である。
【０３２０】
情報処理装置１０Ｇは、制御部１２Ｇ、第１０記憶部１４、及び第２記憶部１６を備える。
【０３２１】
制御部１２Ｇは、情報処理装置１０Ｇを制御する。制御部１２Ｇは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
【０３２２】
制御部１２Ｇは、第１オブジェクト１８、インタフェース２０、第２オブジェクト２２、生成部９４、第１管理部２６、及び第２管理部２８を備える。制御部１２Ｇは、ＲＯＭまたはＨＤＤ等に格納されたプログラムを実行することで、第１オブジェクト１８、インタフェース２０、第２オブジェクト２２、生成部９４、第１管理部２６、及び第２管理部２８を実現する。
【０３２３】
第１０記憶部１４、及び第２記憶部１６は、実施の形態１と同様である。また、第１オブジェクト１８、インタフェース２０、第２オブジェクト２２、第１管理部２６、及び第２管理部２８は、実施の形態１と同様である。
【０３２４】
生成部９４は、第２オブジェクト２２の生成要求を受信すると、第２クラスから第２オブジェクト２２を生成する。また、生成部９４は、この第２オブジェクト２２及び第３クラスから、インタフェース２０を生成する。そして、生成部９４は、インタフェース２０を第１オブジェクト１８へ送信する。
【０３２５】
図３８は、生成部９４の説明図である。生成部９４は、判定部７８、初期化判定部９６、オブジェクト生成部３１、変換部３２、初期化部９８、及び更新部９７を備える。オブジェクト生成部３１、及び変換部３２は、実施の形態１と同様である。判定部７８は、実施の形態６と同様である。
【０３２６】
また、情報処理装置１０Ｇは、第６記憶部８４、及び第７記憶部４２Ｇを備える。第６記憶部８４は、実施の形態６と同様である。
【０３２７】
第７記憶部４２Ｇは、第２管理部２８の識別情報（ＩＤ）である第１識別情報（第１ＩＤ）と、該第１識別情報によって識別される第２管理部２８が初期化済であるか否かを示す情報と、ハッシュ値と、を対応づけて記憶する。初期化済であるか否かを示す情報は、初期化済であることを示す初期化済情報、または未初期化であることを示す未初期化情報である。ハッシュ値は、対応する第１識別情報によって識別される第２管理部２８に対応する第２記憶部１６に記憶されている第２コード群のハッシュ値である。
【０３２８】
図３９は、第７記憶部４２Ｇのデータ構造の一例を示す図である。図３９に示すように、第７記憶部４２Ｇは、第１識別情報（図３９中、第１ＩＤ参照）と、初期化済であるか否かを示す情報と、ハッシュ値と、を対応づけて記憶する。図３９（Ａ）は、未初期化情報である“ｆａｌｓｅ”が記憶された状態を示す。図３９（Ｂ）は、初期化済情報である“ｔｒｕｅ”が記憶された状態を示す。また、図３９（Ｂ）は、第２管理部２８に対応する第２記憶部１６に記憶されている第２コード群のハッシュ値が“Ｈａｓｈ（Ａ）”であることを示す。
【０３２９】
図３８に戻り、初期化判定部９６は、第７記憶部４２Ｇを用いて、第２管理部２８が初期化済であるか否かを判定する。未初期化であると判定すると、初期化判定部９６は、第２管理部２８の初期化要求を初期化部９８に送信する。
【０３３０】
初期化判定部９６は、第２管理部２８が初期化済であると判定すると、第７記憶部４２Ｇを用いて、第２管理部２８に対応する第２記憶部１６が、最新の状態に更新されているか否かを判定する。
【０３３１】
詳細には、初期化判定部９６は、第２オブジェクト２２の生成要求を受信したときに、第２記憶部１６に記憶されている第２コード群からハッシュ値を算出する。また、初期化判定部９６は、第７記憶部４２Ｇに記憶されている、初期化済であるか否かの判定対象の第２管理部２８の第１識別情報に対応するハッシュ値を読取る。そして、初期化判定部９６は、この算出したハッシュ値と、第７記憶部４２Ｇから読取ったハッシュ値と、が不一致である場合に、第２管理部２８が最新の状態では無いと判定する。
【０３３２】
第２管理部２８が最新の状態では無い場合、初期化判定部９６は、更新部９７に、第２管理部２８の更新要求を送信する。
【０３３３】
初期化部９８は、第２記憶部１６に記憶されている第２コード群を用いて、第２管理部２８を初期化する。また、初期化部９８は、第２管理部２８を初期化した後に、第７記憶部４２Ｇにおける、初期化済であるか否かを示す情報を、初期化済情報に変更する。例えば、初期化部９８は、第７記憶部４２Ｇにおける、該第２管理部２８の第１識別情報に対応する、未初期化情報である“ｆａｌｓｅ”を、初期化済情報である“ｔｒｕｅ”に変更する。さらに、第２管理部２８は、この初期化に利用した第２記憶部１６における第２コード群のハッシュ値を算出し、該初期化済情報に対応づけて第７記憶部４２Ｇに記憶する。
【０３３４】
図４０は、第１オブジェクト１８が他のオブジェクトの生成要求を送信したときの、制御部１２Ｇの動作手順の一例を示すシーケンス図である。なお、具体例として、第１オブジェクト１８が第２オブジェクト２２の生成要求を送信する場合を説明する。
【０３３５】
まず、第１オブジェクト１８が第２オブジェクト２２の生成要求を生成部９４へ送信する（ステップＳ８００）。第１オブジェクト１８から生成要求を受信すると、生成部９４の判定部７８が、第２クラスをロード可能であるか否かを判定する（ステップＳ８０２）。判定部７８は、第６記憶部８４に該第２クラスの第２識別情報が記憶されているか否かを判定することによって、ステップＳ８０２の判定を行う。
【０３３６】
判定部７８は、第６記憶部８４に該第２クラスの第２識別情報が記憶されていると判定すると（ステップＳ８０２：Ｙｅｓ）、初期化判定部９６に第２クラスのロード要求を送信する（ステップＳ８０４）。
【０３３７】
次に、初期化判定部９６は、第７記憶部４２Ｇを用いて、第２管理部２８が初期化済であるか否かを判定する（ステップＳ８０６）。第２管理部２８が未初期化であると判定すると（ステップＳ８０６：Ｎｏ）、初期化判定部９６は、第２管理部２８の初期化要求を初期化部９８へ送信する（ステップＳ８０８）。
【０３３８】
第２管理部２８の初期化要求を受信すると、初期化部９８は、第２記憶部１６に記憶されている第２コード群を用いて、第２管理部２８を初期化する（ステップＳ８１０）。次に、初期化部９８は、該第２管理部２８が初期化済であることを示す初期化済情報を、第７記憶部４２Ｇに記憶する（ステップＳ８１２）。次に、初期化部９８は、第２記憶部１６における第２コード群のハッシュ値を算出し、第７記憶部４２Ｇに記憶する（ステップＳ８１４）。
【０３３９】
次に、初期化部９８は、初期化完了を初期化判定部９６へ送信する（ステップＳ８１６）。次に、ステップＳ８１８へ進む。
【０３４０】
一方、上記ステップＳ８０６の判定において、第２管理部２８が初期化済であると判定されると（ステップＳ８０６：Ｙｅｓ）、上記ステップＳ８１０〜ステップＳ８１４の処理を行わずに、ステップＳ８２０へ進む。
【０３４１】
ステップＳ８２０では、初期化判定部９６が、第２管理部２８は最新の状態であるか否かを判定する（ステップＳ８２０）。
【０３４２】
初期化判定部９６は、第２管理部２８が最新の状態であるか否かの判定を、以下のようにして行う。まず、初期化判定部９６は、第２記憶部１６に記憶されている第２コード群のハッシュ値を算出する。第２管理部２８が初期化された後で且つ第２管理部２８が更新された後である場合、例えば、第２記憶部１６に記憶されている第２コード群から算出されるハッシュ値は、“Ｈａｓｈ（Ｂ）”である。次に、初期化判定部９６は、第７記憶部４２Ｇに記憶されている、該第１管理部２６の第１識別情報に対応するハッシュ値を読取る。このハッシュ値は、前回の更新時に更新部９７が第７記憶部４２Ｇに記憶した値である。このため、第７記憶部４２Ｇから読取ったハッシュ値が、例えば“Ｈａｓｈ（Ａ）”である場合、初期化判定部９６が算出したハッシュ値“Ｈａｓｈ（Ｂ）”と、第７記憶部４２Ｇに記憶されているハッシュ値“Ｈａｓｈ（Ａ）”と、が不一致である。これらのハッシュ値が不一致である場合、初期化判定部９６は、第２管理部２８が最新の状態ではないと判定する。
【０３４３】
第２管理部２８が最新の状態であると判定すると（ステップＳ８２０：Ｙｅｓ）、ステップＳ８１８へ進む。
【０３４４】
一方、第２管理部２８が最新の状態ではない場合（ステップＳ８２０：Ｎｏ）、初期化判定部９６は、更新要求を更新部９７へ送信する（ステップＳ８２２）。
【０３４５】
更新要求を受信した更新部９７は、第２記憶部１６から第２コード群を読み出し、該第２コード群を用いて第２管理部２８を更新する（ステップＳ８２４）。次に、更新部９７は、ステップＳ８２０の判別時に算出した、第２記憶部１６の第２コード群のハッシュ値（例えば、ハッシュ値“Ｈａｓｈ（Ｂ）”）を、該第２管理部２８の第１識別情報に対応づけて、第７記憶部４２Ｇに記憶する（ステップＳ８２６）。
【０３４６】
図４１は、ステップＳ８２６の処理後の第７記憶部４２Ｇのデータ構造の一例を示す図である。図４１は、第１識別情報によって識別される第２管理部２８が初期化済であり、直前の更新時に用いた、第２記憶部１６の第２コード群のハッシュ値が“Ｈａｓｈ（Ｂ）”であることを示す。
【０３４７】
図４０に戻り、次に、更新部９７は、更新完了を初期化判定部９６へ送信し（ステップＳ８２８）、ステップＳ８１８へ進む。
【０３４８】
ステップＳ８１８では、初期化判定部９６が、第２クラスのロード要求を第２管理部２８へ送信する（ステップＳ８１８）。
【０３４９】
次に、制御部１２Ｇは、実施の形態１のステップＳ１１６〜ステップＳ１４０と同様にして、ステップＳ８３０〜ステップＳ８５６の処理を実行する。
【０３５０】
以上説明したように、本実施の形態の情報処理装置１０Ｇでは、第２管理部２８が初期化されたときに利用した、第２記憶部１６における第２コード群のハッシュ値を第７記憶部４２Ｇに記憶する。従って、本実施の形態の情報処理装置１０Ｇは、上記実施の形態の効果に加えて、第２管理部２８を最新の状態に更新するときに、最新の第２コード群を用いて更新することができる。
【０３５１】
（実施の形態９）
本実施の形態では、実施の形態２におけるプロキシオブジェクトの生成に利用するインタフェースのロードを、第２管理部で行う場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
【０３５２】
図４２は、本実施の形態における情報処理装置１０Ｈの説明図である。情報処理装置１０Ｈは、制御部１２Ｈ、第１０記憶部１４Ａ、及び第２記憶部１６Ｈを備える。第１記憶部１４Ａは、実施の形態２と同様である。
【０３５３】
制御部１２Ｈは、情報処理装置１０Ｈを制御する。制御部１２Ｈは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
【０３５４】
制御部１２Ｈは、第１オブジェクト１８、プロキシオブジェクト２１、第２オブジェクト２２、生成部３６Ｈ、第１管理部２６Ａ、及び第２管理部２８Ｈを備える。第１オブジェクト１８、プロキシオブジェクト２１、第２オブジェクト２２、及び第１管理部２６Ａは、実施の形態２と同様である。
【０３５５】
制御部１２Ｈは、ＲＯＭまたはＨＤＤ等に格納されたプログラムを実行することで、第１オブジェクト１８、プロキシオブジェクト２１、第２オブジェクト２２、生成部３６Ｈ、第１管理部２６Ａ、及び第２管理部２８Ｈを実現する。
【０３５６】
第２管理部２８Ｈは、第２クラス、及び第４クラスをロードする。第２クラスは、実施の形態２と同様である。第４クラスは、オブジェクト指向プログラミング言語におけるクラスである。第４クラスは、第２オブジェクト２２に含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドを定義したインタフェース（以下、第２インタフェースと称する）のクラスである。
【０３５７】
具体的には、第２管理部２８Ｈは、第２クラスや第４クラスを、第２記憶部１６Ｈからロードする。言い換えると、第２管理部２８Ｈは、第２クラスと、第２インタフェースの第４クラスを生成する。なお、第２管理部２８Ｈは、プログラム実行開始時に初期化される。
【０３５８】
第２記憶部２８Ｈは、第２オブジェクト２２を利用するための第２コード群、及び第２インタフェースを利用するための第４コード群等を予め記憶する。第２コード群は、実施の形態２と同様である。第４コード群には、第４クラスが記述されている。
【０３５９】
生成部３６Ｈは、第１オブジェクト１８から第２オブジェクト２２の生成要求を受信したときに、第２クラスから第２オブジェクト２２を生成する。また、生成部３６Ｈは、第２インフェースの第４クラスに基づいて、第３クラスからプロキシオブジェクト２１を生成する。そして、生成部３６は、該プロキシオブジェクト２１を第１オブジェクト１８へ送信する。
【０３６０】
図４３は、生成部３６Ｈの説明図である。生成部３６Ｈは、判定部３０、オブジェクト生成部３１、変換部３２Ｈ、初期化部３４、及び受信部３３を有する。判定部３０、オブジェクト生成部３１、初期化部３４、及び受信部３３は、実施の形態２と同様である。
【０３６１】
変換部３２Ｈは、第４クラスを第２管理部２８Ｈから取得する。変換部３２Ｈは、第２管理部２８Ｈから取得した第４クラスに基づいて、第１管理部２６Ａからプロキシオブジェクト２１の第３クラスを取得する。変換部３２Ｈは、第３クラスからプロキシオブジェクト２１を生成する。更に、変換部３２Ｈは、プロキシオブジェクト２１を、第１オブジェクト１８へ送信する。
【０３６２】
図４４は、第１オブジェクト１８が他のオブジェクトの生成要求を送信したときの、制御部１２Ｈの動作手順の一例を示すシーケンス図である。なお、具体例として、第１オブジェクト１８が第２オブジェクト２２の生成要求を送信する場合を説明する。
【０３６３】
まず、制御部１２Ｈは、実施の形態２で説明したステップＳ１１０〜ステップＳ１２２（図１１参照）と同様にして、ステップＳ９００〜ステップ９１２の処理を実行する。次に、変換部３２Ｈは、第２管理部２８Ｈから第４クラスをロード可能であるか否かを判定する（ステップＳ９１４）。
【０３６４】
本実施の形態では、第２管理部２８Ｈは第４クラスをロードする。このため、変換部３２Ｈは、第４クラスをロード可能であると判定する（ステップＳ９１４：Ｙｅｓ）。そして、変換部３２Ｈは、第４クラスのロード要求を第２管理部２８Ｈへ送信する（ステップ９１６）。
【０３６５】
第２管理部２８Ｈは、変換部３２Ｈから送信された第４クラスをロードする（ステップＳ９１８）。次に、第２管理部２８Ｈは、第４クラスを生成部３６へ送信する（ステップＳ９２０）。
【０３６６】
生成部３６の変換部３２Ａは、第４クラスを第２管理部２８Ｈから受信すると、プロキシオブジェクト２１の第３クラスの生成要求を第１管理部２６Ａへ送信する（ステップＳ９２２）。
【０３６７】
第３クラスの生成要求を受信すると、第１管理部２６Ａは、変換部３２Ａから受信した第４クラスから、第３クラスを生成する（ステップＳ９２４）。第１管理部２６Ａは、この第３クラスを生成部３６へ送信する（ステップＳ９２６）。
【０３６８】
次に、制御部１２Ｈは、実施の形態２のステップＳ１５４〜ステップＳ１６２（図１１参照）と同様にして、ステップＳ９２８〜ステップＳ９３６の処理を実行する。また、制御部１２Ｈは、実施の形態２のステップＳ１３６〜ステップＳ１４０と同様にして、ステップＳ９３８〜ステップＳ９４２の処理を実行する。
【０３６９】
以上説明したように、本実施の形態の情報処理装置１０Ｈは、実施の形態２におけるプロキシオブジェクトの生成のために第４クラスを利用する場合において、第１管理部２６Ａにある第４クラスに代えて、第２管理部２８Ｈの第４クラスを利用する。
【０３７０】
以下では、第２管理部２８Ｈの第４クラスを利用することによる効果を説明する。
【０３７１】
もし第４クラスが、第１オブジェクト１８の作成者によって改ざんされた場合、改ざんされた第４クラス’から作られたインタフェース２０’（図示省略）にもとづきアクセス制御を行うプロキシオブジェクト２１’（図示省略）は、改ざんされていない場合のプロキシオブジェクト２１と同様のアクセス制御機能を備えない可能性がある。
【０３７２】
第１オブジェクト１８の作成者は、自らが開発したコード群を修正するために、第１０記憶部１４Ａのコードを変更する許可が与えられていることが一般的である。第４クラスが第１管理部２６Ａにある場合、第４クラスは第１０記憶部１４Ａのコード群によって初期化されるから、第１オブジェクト１８の作成者が改ざんできる可能性が高い。一方、第４クラスが第２管理部２８Ｈにある場合、第４クラスは第２記憶部１６Ｈのコード群によって初期化されるが、第２記憶部１６Ｈを変更する許可を適切に制限すれば、第１オブジェクト１８の作成者が改ざんできる可能性は低い。
【０３７３】
このため、第１管理部２６Ａにあるクラス、もしくは、第１０記憶部１４Ａにあるコード群が、第１オブジェクト１８の作成者によって改ざんされた場合でも、第２オブジェクト２２に含まれる複数のメソッドの内、第１オブジェクト１８がアクセス可能なメソッドは、管理部２８Ｈにある改ざんされていない第４クラス（から生成されたインタフェース２０）に含まれるメソッドに（プロキシオブジェクト２１によって）制限される。
【０３７４】
従って、本実施の形態の情報処理装置１０Ｈは、オブジェクトに含まれるメソッド毎に、他のオブジェクトからのアクセスを制限することが出来る。
【０３７５】
なお、上記実施の形態で説明した各記憶部は、ＨＤＤ、光ディスク、メモリカード、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの一般的に利用されているあらゆる記憶媒体により構成することができる。
【０３７６】
次に、本実施の形態に係る、情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ、１０Ｆ、１０Ｇのハードウェア構成について説明する。図４７は、本実施の形態にかかる情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ、１０Ｆ、１０Ｇのハードウェア構成を示す説明図である。
【０３７７】
本実施の形態にかかる情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ、１０Ｆ、１０Ｇは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）５１００などの制御装置と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）５２００やＲＡＭ５３００などの記憶装置と、各部を接続するバス６１００を備える。
【０３７８】
本実施の形態にかかる情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ、１０Ｆ、１０Ｇを実行するためのプログラムは、ＲＯＭ５２００もしくはＲＡＭ５３００等に予め組み込まれて提供される。
【０３７９】
本実施の形態にかかる情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ、１０Ｆ、１０Ｇの各々で実行される上記処理を実行するためのプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅｃｏｒｄａｂｌｅ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
【０３８０】
さらに、本実施の形態にかかる情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ、１０Ｆ、１０Ｇを実行するためのプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態にかかる装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【０３８１】
本実施の形態にかかる情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ、１０Ｆ、１０Ｇの各々で実行される上記処理を実行するためのプログラムは、コンピュータを上述した各部として機能させうる。このコンピュータは、ＣＰＵ５１００がコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み出して実行することができる。
【０３８２】
本発明のいくつかの実施の形態を説明したが、これらの実施の形態は、例として提示したものであり、発明の範囲を限定することは意図していない。
【０３８３】
例えば、上記実施の形態では、オブジェクト指向プログラミング言語として、Ｊａｖａ（登録商標）を例に説明したが、それに限定されるものではない。例えば、Ｃ＃言語で記述されるプログラムであってもよいし、それ以外であってもよい。
【０３８４】
また、上記実施の形態を組み合わせたものであってもよい。例えば、インタフェースや第２記憶部の改ざんによる不正利用を防止するためには、実施の形態９と実施の形態４を組み合わせることで対応できる。
【０３８５】
図４５は、実施の形態９と実施の形態４を組み合わせて構成される情報処理装置１０Ｊを示すブロック図である。情報処理装置１０Ｊは、制御部１２Ｊ、第１０記憶部１４、及び第２記憶部５６Ｊを備える。第１０記憶部１４Ａは、実施の形態９と同様である。
【０３８６】
制御部１２Ｊは、情報処理装置１０Ｊを制御する。制御部１２Ｊは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。制御部１２Ｊは、第１オブジェクト１８、プロキシオブジェクト２１、第２オブジェクト２２、生成部９５、第１管理部２６Ａ、及び、第２管理部２８Ｈを有する。
【０３８７】
制御部１２Ｊは、ＲＯＭまたはＨＤＤ等に格納されたプログラムを実行することで、第１オブジェクト１８、プロキシオブジェクト２１、第２オブジェクト２２、生成部９５、第１管理部２６Ａ、及び第２管理部２８Ｈを実現する。
【０３８８】
第１オブジェクト１８、プロキシオブジェクト２１、第２オブジェクト２２、第１管理部２６Ａ、及び第２管理部２８Ｈは、実施の形態９と同様の構成である。
【０３８９】
第２記憶部５６Ｊは、第２オブジェクト２２を利用するための第２コード群、及びインタフェース２０を利用するための第４コード群等の暗号化データを記憶する。すなわち、第２記憶部５６は、第２オブジェクト２２の第２クラス、および、インタフェース２０の第４クラスの暗号化データを記憶する。
【０３９０】
図４６は、生成部９５の説明図である。生成部９５は、判定部３０、オブジェクト生成部３１、変換部３２Ｈ、削除部６２、初期化部６０、受信部６４、及び復号部５８を有する。判定部３０、オブジェクト生成部３１、及び変換部３２Ｈは、実施の形態９と同様である。また、削除部６２、初期化部６０、受信部６４、及び復号部５８は、実施の形態４と同様である。処理手順は、実施の形態９、および、実施の形態４で示したシーケンス図を組み合わせたものとなる。
【０３９１】
このように、実施の形態を組み合わせることで、各実施の形態における効果も組み合わせることが可能である。この例では、実施の形態９の効果である「インタフェースの改ざんによる不正利用防止」と、実施の形態４の効果である「第２記憶部の改ざんによる不正利用防止」の２つを実現することができる。
【０３９２】
なお、上記実施の形態では、実行要求元のオブジェクトが１個（第１オブジェクト１８）である場合、及び実行要求先のオブジェクト（第２オブジェクト２２）が１または２個である場合を説明したが、この形態に限られない。例えば、実行要求元の第１オブジェクト１８と、実行要求先の第２オブジェクト２２と、の各々が、１または複数（３個以上）であってもよい。
【０３９３】
また、上記実施の形態では、情報処理装置１０や第２記憶部１６の実現方法の一例として、ファイルを用いる場合を説明した（図５のメインファイルＪ１４、図１２のメインファイルＪ１４Ａ、図５及び図１２のライブラリファイルＪ１６参照）。しかし、第２記憶部１６の実現方法は、ファイルに限定されない。例えば、第１０記憶部１４及び第２記憶部１６を、ネットワーク上にあるデータ格納場所（アドレス）を示す情報としてもよい。この場合、各機能部は、ネットワークを介して、このアドレスによって示される場所からコード群やデータを取得すればよい。
【０３９４】
また、実施の形態３〜実施の形態８では、インタフェース２０が制御部として機能する場合を説明した。しかし、実施の形態３〜実施の形態８においても、実施の形態２と同様に、インタフェース２０に代えてプロキシオブジェクト２１を備えた構成としてもよい。
【０３９５】
なお、上記実施形態では第１オブジェクトによる第２オブジェクトに対するアクセスを制限するためには、情報処理装置の一部または全部が改ざんされていないことが必要となる。例えば、これを実現するための方法の１つとして、情報処理装置の一部または全部はＣ言語やＣ＋＋言語といった機械語プログラムで記述されることが望ましい。また、情報処理装置の一部または全部の防止を強化するために、情報処理装置の一部または全部にソフトウェア難読化を適用することが望まれる。
【０３９６】
また、上記実施の形態で説明した各オブジェクト（例えば、第１オブジェクト１８、第２オブジェクト２２）や、各インタフェース（例えば、インタフェース２０）は、同一のコンピュータ上で動作してもよいし、いくつかのコンピュータ上に分散された状態で動作してもよい。
【０３９７】
また、上記実施の形態における情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ、１０Ｆ、１０Ｇ、１０Ｈ、１０Ｊは、１の装置から構成されていてもよいし、ネットワークを介して接続した複数の装置で実現してもよい。
【０３９８】
また、上記実施の形態における情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ、１０Ｆ、１０Ｇ、１０Ｈ、１０Ｊは、具体的には、パーソナルコンピュータである。しかし、情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ、１０Ｆ、１０Ｇ、１０Ｈ、１０Ｊは、パーソナルコンピュータに限られない。例えば、情報処理装置１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ、１０Ｆ、１０Ｇ、１０Ｈ、１０Ｊは、情報処理機器に含まれる演算処理装置、マイコン等であってもよく、プログラムによって上記各機能を実現することが可能な機器、装置であればよい。
【０３９９】
なお、以上説明した新規な実施の形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施の形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０４００】
１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ、１０Ｅ、１０Ｆ、１０Ｇ、１０Ｈ、１０Ｊ  情報処理装置
１２、１２Ａ、１２Ｂ、１２Ｃ、１２Ｄ、１２Ｅ、１２Ｆ、１２Ｇ、１２Ｈ、１２Ｊ  制御部
１６、１６Ａ、１６Ｂ、５６、５６Ａ、５６Ｂ  第２記憶部
１８  第１オブジェクト
２０、２０Ａ、２０Ｂ  インタフェース
２１  プロキシオブジェクト
２２、２２Ａ、２２Ｂ  第２オブジェクト
２４、３６、３６Ｈ、４０、５２、６８、７６、８６、９４、９５  生成部
２６、２６Ａ  第１管理部
２８、２８Ａ、２８Ｂ、２８Ｈ  第２管理部
３４、６０、７２、８２、９３  初期化部
４２Ｆ  第３記憶部
４２Ｇ  第７記憶部
５４  第４記憶部
５８、７４  復号部
６２  削除部
７０  第５記憶部
８０、９１  初期化判定部
【図１】
2015097061.tif 000003
【図２】
2015097061.tif 000004
【図３】
2015097061.tif 000005
【図４】
2015097061.tif 000006
【図５】
2015097061.tif 000007
【図６】
2015097061.tif 000008
【図７】
2015097061.tif 000009
【図８】
2015097061.tif 000010
【図９】
2015097061.tif 000011
【図１０】
2015097061.tif 000012
【図１１】
2015097061.tif 000013
【図１２】
2015097061.tif 000014
【図１３】
2015097061.tif 000015
【図１４】
2015097061.tif 000016
【図１５】
2015097061.tif 000017
【図１６】
2015097061.tif 000018
【図１７】
2015097061.tif 000019
【図１８】
2015097061.tif 000020
【図１９】
2015097061.tif 000021
【図２０】
2015097061.tif 000022
【図２１】
2015097061.tif 000023
【図２２】
2015097061.tif 000024
【図２３】
2015097061.tif 000025
【図２４】
2015097061.tif 000026
【図２５】
2015097061.tif 000027
【図２６】
2015097061.tif 000028
【図２７】
2015097061.tif 000029
【図２８】
2015097061.tif 000030
【図２９】
2015097061.tif 000031
【図３０】
2015097061.tif 000032
【図３１】
2015097061.tif 000033
【図３２】
2015097061.tif 000034
【図３３】
2015097061.tif 000035
【図３４】
2015097061.tif 000036
【図３５】
2015097061.tif 000037
【図３６】
2015097061.tif 000038
【図３７】
2015097061.tif 000039
【図３８】
2015097061.tif 000040
【図３９】
2015097061.tif 000041
【図４０】
2015097061.tif 000042
【図４１】
2015097061.tif 000043
【図４２】
2015097061.tif 000044
【図４３】
2015097061.tif 000045
【図４４】
2015097061.tif 000046
【図４５】
2015097061.tif 000047
【図４６】
2015097061.tif 000048
【図４７】
2015097061.tif 000049