以下に添付図面を参照して、本実施の形態の詳細を説明する。
(実施の形態1)
図1は、本実施の形態の情報処理装置10を示すブロック図である。
情報処理装置10は、制御部12、第10記憶部14、及び第2記憶部16を備える。
制御部12は、情報処理装置10を制御する。制御部12は、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
制御部12は、第1オブジェクト18、インタフェース20、第2オブジェクト22、生成部24、第1管理部26、及び第2管理部28を有する。制御部12は、ROM(Read Only Memory)またはHDD(Hard Disk Drive)等に格納されたプログラムを実行することで、第1オブジェクト18、インタフェース20、第2オブジェクト22、生成部24、第1管理部26、及び第2管理部28を実現する。
本実施の形態では、第1オブジェクト18、インタフェース20、第2オブジェクト22、生成部24、第1管理部26、及び第2管理部28を、ソフトウェアにより実現する場合を説明する。なお、生成部24、第1管理部26、及び第2管理部28の少なくとも一部を、IC(Integrated Circuit)などのハードウェアにより実現してもよいし、ソフトウェアおよびハードウェアを併用して実現してもよい。
第1オブジェクト18及び第2オブジェクト22は、オブジェクト指向プログラミング言語におけるオブジェクトである。第1オブジェクト18は、他のオブジェクトに含まれるメソッドの実行要求元のオブジェクトである。第2オブジェクト22は、第1オブジェクト18からの呼び出し先のオブジェクトである。言い換えると、第2オブジェクト22は、第1オブジェクト18による、該第2オブジェクト22に含まれるメソッドの実行要求先のオブジェクトである。第2オブジェクト22は、複数のメソッドを含む。
本実施の形態では、第1オブジェクト18は、第2オブジェクト22に含まれるメソッドの実行要求元のオブジェクトである場合を説明する。
インタフェース20は、第1オブジェクト18から第2オブジェクト22に含まれる複数のメソッドへのアクセスを制限する制限部として機能する。インタフェース20は、オブジェクト指向プログラミング言語におけるインタフェースである。本実施の形態では、インタフェース20は、第2オブジェクト22に含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドを定義した情報である。
第1管理部26は、第1クラス、及び、第3クラスをロードする。第2管理部28は、第2クラスをロードする。第1クラス、第3クラス、及び第2クラスは、オブジェクト指向プログラミング言語におけるクラスである。第1クラスは、第1オブジェクト18のクラスである。第2クラスは、第2オブジェクト22のクラスである。
第3クラスは、制限部のクラスである。本実施の形態では、第3クラスは、制限部として機能するインタフェース20のクラスである。第3クラスには、第2オブジェクト22に含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドが、第2オブジェクト22の作成者によって予め記述されている。
第1管理部26は、第1オブジェクト18の第1クラス、及びインタフェース20の第3クラスを、第10記憶部14からロードする。第1管理部26は、プログラム実行開始時に初期化される。
第2管理部28は、第2オブジェクト22の第2クラスを第2記憶部16からロードする。第2管理部28は、第1オブジェクト18などから初期化要求を受信すると、後述する初期化部によって初期化される(詳細後述)。
生成部24は、第1オブジェクト18から第2オブジェクト22の生成要求を受信する。生成部24は、この生成要求を受信したときに、第2クラスから第2オブジェクト22を生成する。また、生成部24は、第2オブジェクト22及び第3クラスから、インタフェース20を生成する。そして、生成部24は、インタフェース20を第1オブジェクト18へ送信する。
インタフェース20を生成する、とは、インタフェース20のクラスである第3クラスを用いて、第2オブジェクト22をインタフェース20に変換することを意味する。なお、請求項に記載の「制限部を生成する」という記述は、本実施形態では生成部24が、第2オブジェクト22をインタフェース20に変換する部分に該当する。
生成部24からインタフェース20を受信すると、第1オブジェクト18は、このインタフェース20を介して、第2オブジェクト22へメソッドの実行要求を送信する。なお、第2オブジェクト22へのメソッドの実行要求の送信を、“第2オブジェクト22へアクセスする”と称して説明する場合がある。
ここで、上述したように、インタフェース20は、第2オブジェクト22に含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドを定義した情報である。このため、第1オブジェクト18は、第2オブジェクト22に含まれる複数のメソッドの内、インタフェース20に定義されているメソッドにのみ、にアクセスすることができる。このため、第1オブジェクト18は、インタフェース20によって第2オブジェクト22に含まれるメソッドへのアクセスを制限される。
第2オブジェクト22は、第1オブジェクト18からインタフェース20を介してアクセスされたメソッドを実現する。すなわち、第1オブジェクト18は、第2オブジェクト22に含まれる複数のメソッドの内、インタフェース20で定義されたメソッドを実行することができる。
第10記憶部14は、第1オブジェクト18を利用するための第1コード群、インタフェース20を利用するための第3コード群、等を予め記憶する。第1コード群には、第1クラスが記述されている。第3コード群には、第3クラスが記述されている。
第2記憶部16は、第2オブジェクト22を利用するための第2コード群を記憶する。第2コード群には、第2クラスが記述されている。
図2は、生成部24の説明図である。生成部24は、判定部30、オブジェクト生成部31、変換部32、初期化部34、及び受信部33を有する。
判定部30は、第1オブジェクト18からオブジェクトの生成要求を受信する。判定部30は、生成要求されたオブジェクトのクラスを、第2管理部28がロードできるか否かを判定する。
生成要求されたオブジェクトのクラスを、第2管理部28がロード可能である場合には、第2管理部28は、生成要求されたクラスを第2記憶部16からロードする。第2管理部28は、ロードしたクラスをオブジェクト生成部31へ送信する。
オブジェクト生成部31は、第2管理部28から取得したクラスから、オブジェクトを生成する。第2管理部28から取得したクラスが第2クラスである場合、オブジェクト生成部31は、第2クラスから第2オブジェクト22を生成する。そして、オブジェクト生成部31は、この第2オブジェクト22を変換部32へ送信する。
変換部32は、第3クラスを用いて、第2オブジェクト22をインタフェース20に変換する。具体的には、変換部32は、インタフェース20の第3クラスを第1管理部26から取得する。次に、変換部32は、この第3クラスを用いて、第2オブジェクト22をインタフェース20に変換する。変換部32は、インタフェース20を、第1オブジェクト18へ送信する。
受信部33は、第2管理部28の初期化要求を第1オブジェクト18などから受信すると、この初期化要求を初期化部34へ送信する。
初期化部34は、受信部33から初期化要求を受信すると、第2記憶部16に記憶されている、第2コード群を用いて、第2管理部28を初期化する。
図3は、制御部12が実行する初期化処理の手順の一例を示すフローチャートである。制御部12は、第1オブジェクト18がオブジェクトの生成要求を送信する前に、この初期化処理を実行する。
まず、受信部33が初期化要求を受信したか否かを判断する(ステップS100)。ステップS100で否定判断すると(ステップS100:No)、本ルーチンを終了する。一方、受信部33が初期化要求を受信すると(ステップS100:Yes)、受信部33は初期化部34に初期化要求を送信する(ステップS102)。
初期化要求を受信した初期化部34は、第2記憶部16に記憶されている第2コード群を用いて、第2管理部28を初期化する(ステップS104)。そして、本ルーチンを終了する。
制御部12が図3に示す初期化処理を実行することによって、第2管理部28は、第2記憶部16に記憶されている第2コード群を利用可能な状態となる。
図4は、第1オブジェクト18が他のオブジェクトの生成要求を送信したときの、制御部12の動作手順の一例を示すシーケンス図である。なお、具体例として、第1オブジェクト18が第2オブジェクト22の生成要求を送信する場合を説明する。
まず、第1オブジェクト18が第2オブジェクト22の生成要求を生成部24へ送信する(ステップS110)。第1オブジェクト18から生成要求を受信すると、生成部24の判定部30が、第2クラスをロード可能であるか否かを判定する(ステップS112)。
本実施の形態では、第2管理部28は第2オブジェクト22の第2クラスをロードする。このため、判定部30は、第2クラスをロード可能であると判定する(ステップS112:Yes)。そして、判定部30は、第2クラスのロード要求を第2管理部28へ送信する(ステップS114)。
第2管理部28は、判定部30から送信されたロード要求の対象である第2クラスを第2記憶部16からロードする(ステップS116)。そして、第2管理部28は、ロードした第2クラスを生成部24に送信する(ステップS118)。
第2クラスを受け付けると、生成部24のオブジェクト生成部31は、この第2クラスから第2オブジェクト22を生成する(ステップS120)。次に、オブジェクト生成部31は、第2オブジェクト22を変換部32へ送信する(ステップS122)。
変換部32は、第3クラスをロード可能であるか否かを判定する(ステップS124)。
本実施の形態では、第1管理部26は第3クラスをロードする。このため、変換部32は、第3クラスをロード可能であると判定する(ステップS124:Yes)。そして、変換部32は、第3クラスのロード要求を第1管理部26へ送信する(ステップS125)。
第1管理部26は、変換部32から送信されたロード要求の対象である第3クラスを第10記憶部14からロードする(ステップS126)。そして、第1管理部26は、ロードした第3クラスを生成部24に送信する(ステップS128)。
生成部24の変換部32は、第1管理部26から第3クラスを受信すると、第3クラスを用いて、オブジェクト生成部31で生成された第2オブジェクト22をインタフェース20に変換する(ステップS130)。次に、変換部32は、インタフェース20を第1オブジェクト18へ送信する(ステップS132)。
第1オブジェクト18は、変換部32から受信したインタフェース20を介して、第2オブジェクト22へアクセスする(ステップS134)。ステップS134の処理により、第1オブジェクト18は、第2オブジェクト22に含まれる複数のメソッドの内、インタフェース20で定義されたメソッドを実行する。すなわち、第2オブジェクト22に含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドは、インタフェース20に定義されたメソッドに制限される。
一方、上記ステップS112の判定において、ステップS112で第1オブジェクト18から受信した生成要求が、第2管理部28でロードできないクラスのオブジェクトの生成要求であったとする。この場合、判定部30は否定判定する(ステップS112:No)。そして、判定部30は、例外を第1オブジェクト18へ投げる(ステップS136)。生成部24からの例外を捕まえると、第1オブジェクト18は、例外処理を実行する(ステップS140)。
また、上記ステップS124の判定において、変換部32が受信したロード要求が第1管理部26でロードできないクラスのロード要求であったとする。この場合、変換部32は否定判定する(ステップS124:No)。そして、変換部32は、例外を第1オブジェクト18へ投げる(ステップS138)。生成部24からの例外を捕まえると、第1オブジェクト18は、例外処理を実行する(ステップS140)。
次に、本実施の形態の情報処理装置10をオブジェクト指向プログラミング言語の1つであるJava(登録商標)で実現した場合を説明する。図5は、情報処理装置10をJava(登録商標)で実現したブロック図である。
情報処理装置10をJava(登録商標)で実現した情報処理装置(J10)は、プログラム(J12)、メインファイル(J14)、及びライブラリファイル(J16)を備える。プログラム(J12)、メインファイル(J14)、及びライブラリファイル(J16)は、各々、図1に示す制御部12、第10記憶部14、及び第2記憶部16に相当する。
プログラム(J12)は、Main(J18)、LibImpl(J22)、LibIfc(J20)、ObjectFactory(J24)、DefaultClassLoader(J26)、及びCustomClassLoader(J28)を有する。Main(J18)、LibImpl(J22)、LibIfc(J20)、ObjectFactory(J24)、DefaultClassLoader(J26)、及びCustomClassLoader(J28)は、各々、図1に示す第1オブジェクト18、第2オブジェクト22、インタフェース20、生成部24、第1管理部26、及び第2管理部28に相当する。
メインファイル(J14)は、少なくともMain(J18)と、LibIfc(J20)を利用するためのコード群(第1コード群、第3コード群)を記憶する。ライブラリファイル(J16)は、少なくともLibImpl(J22)を利用するための第2コード群を記憶する。
DefaultClassLoader(J26)は、プログラムの実行開始時にメインファイル(J14)にある第1コード群を用いて初期化される。Main(J18)の実行時には、すでに、メインファイル(J14)に記述されているクラス(第1クラス、第3クラス)をロードできるものとする。
また、DefaultClassLoader(J26)は、オブジェクトの生成要求を受信すると、オブジェクトのクラス、または、インタフェースのクラスをロードする。
詳細には、DefaultClassLoader(J26)は、メインファイル(J14)に記述されているMain(J18)の第1クラスと、LibIfc(J20)の第3クラスをロードすることが出来る。しかし、DefaultClassLoader(J26)は、ライブラリファイル(J16)に記述されているLibImpl(J22)の第2クラスをロードすることは出来ない。
同様に、CustomClassLoader(J28)は、ライブラリファイル(J16)に記述されている第2コード群を用いて初期化される。初期化されることによって、CustomClassLoader(J28)は、ライブラリファイル(J16)に記述されている第2クラスをロードできる。
また、CustomClassLoader(J28)は、オブジェクトの生成要求を受信すると、オブジェクト、または、インタフェースのクラスをロードする。
詳細には、CustomClassLoader(J28)は、ライブラリファイル(J16)に記述されているLibImpl(J22)の第2クラスをロードできる。
ObjectFactory(J24)は、様々なオブジェクトから他のオブジェクトの生成要求を受信する。そして、ObjectFactory(J24)は、DefaultClassLoader(J26)がロードするクラス(第1クラス、第3クラス)、または、CustomClassLoader(J28)がロードするクラス(第2クラス)から、生成要求されたオブジェクトを生成する。そして、ObjectFactory(J24)は、生成したオブジェクトをインタフェースに変換し、生成要求元のオブジェクトに送信する。
例えば、Main(J18)が、LibImpl(J22)の生成要求をObjectFactory(J24)へ送信したとする。この場合、ObjectFactory(J24)は、LibImpl(J22)に対応するLibIfc(J20)を生成し、Main(J18)に送信する。LibImpl(J22)からLibIfc(J20)への変換は、例えば、キャストを用いて行う。
すなわち、Main(J18)は、LibImpl(J22)を知る方法がなく、LibIfc(J20)のみを知ることができる。このため、Main(J18)は、LibIfc(J20)を経由することで、LibImpl(J22)における所定のメソッドにのみアクセスする。
図6は、第2オブジェクト22に相当するLibImpl(J22)の構成例を示す図である。図6に示すように、第2オブジェクト22に相当するLibImpl(J22)が、3つのメソッド(sub1、sub2、sub3)を含み、いずれのメソッドも“public”属性を有するとする。
図7は、インタフェース20に相当するLibIfc(J20)を、Java(登録商標)言語を用いて実装した構成例を示す図である。図7に示すように、インタフェース20は、第2オブジェクト22に含まれる複数のメソッド(sub1、sub2、sub3)の内、第1オブジェクト18に相当するMain(J18)がアクセス可能なメソッドとしてメソッド(sub1)のみを定義している。
上述したように、第1オブジェクト18に相当するMain(J18)は、インタフェース20に相当するLibIfc(J20)を経由しなければ、第2オブジェクト22に相当するLibImpl(J22)のメソッドを実行することができない。このため、Main(J18)は、LibImpl(J22)に含まれる複数のメソッド(sub1、sub2、sub3)の内、LibIfc(J20)で定義されたメソッド(sub1)を実行することができる。しかし、Main(J18)は、LibImpl(J22)に含まれる複数のメソッド(sub1、sub2、sub3)の内、LibIfc(J20)で定義されていないメソッド(sub2、sub3)を実行することは出来ない。
具体的には、本実施の形態では、Main(J18)の第1クラスは、DefaultClassLoader(J26)にロードされる。一方、LibImpl(J22)の第2クラスは、CustomClassLoader(J28)にロードされる。すなわち、Main(J18)の第1クラスとLibImpl(J22)の第2クラスとは、異なるClassLoaderによってロードされる。
このため、Main(J18)は、DefaultClassLoader(J26)でロードされないLibImpl(J22)の第2クラスを取得することは出来ない。
また、Main(J18)が、LibImpl(J22)の生成要求をObjectFactory(J24)に送信しても、Main(J18)は、LibImpl(J22)を受信することは出来ない。すなわち、Main(J18)は、ObjectFactory(J24)からLibIfc(J20)を受信する。
このため、Main(J18)は、LibIfc(J20)を経由しなければ、LibImpl(J22)に含まれるメソッドを実行することが出来ない。LibIfc(J20)には、LibImpl(J22)の作成者が他のオブジェクトからのアクセス可能なメソッドとして定義したメソッド(sub1)のみが定義されている。このため、Main(J18)は、LibImpl(J22)に含まれるメソッド(sub1)を実行することは出来る。しかし、Main(J18)は、LibImpl(J22)に含まれるメソッド(sub2、sub3)を実行することはできない。
一方、従来では、このようなメソッド毎の制限を行うことは出来なかった。
図8は、従来の情報処理装置10Zを示す図である。従来の情報処理装置10Zは、制御部12Zと、記憶部1400と、を備える。制御部12Zは、他のオブジェクトのメソッドの実行要求元である第1オブジェクト1800と、複数のメソッドを含む第2オブジェクト2200と、管理部2600と、を含む。
記憶部1400は、制御部12Zに含まれる第1オブジェクト1800と第2オブジェクト2200を実行するためのコード群を記憶する。すなわち、該コード群は、第1オブジェクト1800のクラスと、第2オブジェクト2200のクラスと、を記述したコード群である。管理部2600は、様々なオブジェクトから他のオブジェクトの生成要求を受け取ると、記憶部1400にあるコード群から、そのオブジェクトを生成する。
このように、従来では、第1オブジェクト1800は、第2オブジェクト2200に含まれる全てのメソッドに対して、自由にアクセスすることができた。例えば、第2オブジェクト2200が、図6に示す3つのメソッド(sub1、sub2,sub3)を含むとする。また、上述したように、これらの3つのメソッド(sub1、sub2,sub3)は、“public”属性を有する。
この場合、第2オブジェクト2200の作成者が、他のオブジェクトに対してメソッド(sub1)についてのみアクセスを許可したいと考えていた場合であっても、アクセスを制限することが出来なかった。すなわち、例えば、情報処理装置10ZがJava(登録商標)で記述されている場合には、Java(登録商標)言語仕様により、public属性を持つメソッドへのアクセスは、すべてのオブジェクトから可能である。このため、第1オブジェクト1800は、第2オブジェクト2200の全てのメソッド(sub1、sub2,sub3)へアクセス可能であった。
具体的には、従来では、第1オブジェクト1800のクラスと第2オブジェクト2200のクラスは、同じ管理部2600によってロードされる。このため、第1オブジェクト1800は、管理部2600に問い合わせることで、第2オブジェクト2200に含まれる全てのメソッド(sub1、sub2,sub3)を知ることが出来た。すなわち、第1オブジェクト1800は、第2オブジェクト2200に含まれる全てのメソッド(sub1、sub2,sub3)へアクセスすることが出来た。
なお、従来では、第2オブジェクト2200の作成者が第1オブジェクト1800の作成者に対して1つのメソッド(例えば、sub1)のみしか公開していない場合であっても、例えば、情報処理装置10ZがJava(登録商標)で記述されている場合には、Java(登録商標)言語仕様から、第2オブジェクト2200が保持する全てのメソッドを知ることは容易である。
例えば、Java(登録商標)言語の場合、各オブジェクトは、自分自身をロードする管理部であるクラスローダを知ることができる(this.getClass.getClassLoader)。また、各オブジェクトは、その管理部に問い合わせることで、その管理部がロードするすべてのクラスを取得することができる(ClassLoader.loadClass)。そして、各オブジェクトは、取得したクラスから、そのクラスが持つメソッドを知ることができる(Class.getDeclaredMethods)。そして、取得したメソッド名を用いることで、各オブジェクトは他のオブジェクトのメソッドの全てにアクセスすることが可能であった。
具体的には、第1オブジェクト1800は、第1オブジェクト1800をロードする管理部2600から、第2オブジェクト2200に含まれる全てのメソッド(sub1、sub2、sub3)の識別情報を取得することが出来た。そして、第1オブジェクト1800は、取得した識別情報によって識別される全てのメソッド(sub1、sub2、sub3)にアクセスすることが出来た。
このように、従来では、メソッドの実行要求先の第2オブジェクト2200に含まれるメソッド毎に、実行要求元の第1オブジェクト1800からのアクセスを制限することは出来なかった。
一方、本実施の形態では、メソッドの実行要求を受け付ける側の第2オブジェクト22に含まれるメソッド毎に、実行要求元の第1オブジェクト18からのアクセスを制限することが出来る。
以上説明したように、本実施の形態の情報処理装置10は、異なる管理部(第1管理部26、第2管理部28)によって、各オブジェクト(第1オブジェクト18、第2オブジェクト22)に対応するクラス(第1クラス、第2クラス)を個別にロードする。そして、生成部24は、第2オブジェクト22ではなく、インタフェース20を第1オブジェクト18へ送信する。インタフェース20は、第2オブジェクト22に含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドを定義した情報である。第1オブジェクト18は、インタフェース20を介して、第2オブジェクト22へアクセスする。
このため、第1オブジェクト18は、第2オブジェクト22に含まれる複数のメソッドの内、インタフェース20で定義されたメソッドのみを実行する。すなわち、第2オブジェクト22に含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドは、インタフェース20に定義されたメソッドに制限される。
従って、本実施の形態の情報処理装置10では、オブジェクトに含まれるメソッド毎に、他のオブジェクトからのアクセスを制限することが出来る。
(実施の形態2)
本実施の形態では、制限部として、実施の形態1におけるインタフェース20に代えてプロキシオブジェクトを用いる場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
図9は、本実施の形態における情報処理装置10Aの説明図である。情報処理装置10Aは、制御部12A、第10記憶部14A、及び第2記憶部16を備える。第2記憶部16は、実施の形態1と同様である。
制御部12Aは、情報処理装置10Aを制御する。制御部12Aは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
制御部12Aは、第1オブジェクト18、プロキシオブジェクト21、第2オブジェクト22、生成部36、第1管理部26A、及び第2管理部28を備える。第1オブジェクト18、第2オブジェクト22、及び第2管理部28は、実施の形態1と同様である。
制御部12Aは、ROMまたはHDD等に格納されたプログラムを実行することで、第1オブジェクト18、プロキシオブジェクト21、第2オブジェクト22、生成部36、第1管理部26A、及び第2管理部28を実現する。
プロキシオブジェクト21は、第1オブジェクト18から第2オブジェクト22に含まれるメソッドの実行要求を受け付けたときに、第2オブジェクト22に含まれるメソッドの内、第1オブジェクト18がアクセス可能なメソッドの呼出要求を第2オブジェクト22へ転送するオブジェクトである。すなわち、プロキシオブジェクト21は、第1オブジェクト18から第2オブジェクト22に含まれる複数のメソッドへのアクセスを制限する制限部として機能する。
第1管理部26Aは、第1クラス、第3クラス、及び第4クラスをロードする。第1クラスは、実施の形態1と同様である。本実施の形態では、第3クラスは、制御部として機能するプロキシオブジェクト21のクラスである。
第4クラスは、オブジェクト指向プログラミング言語におけるクラスである。第4クラスは、第2オブジェクト22に含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドを定義したインタフェース(以下、第2インタフェースと称する)のクラスである。
具体的には、第1管理部26Aは、第1クラスや第4クラスを、第10記憶部14Aからロードする。また、第1管理部26Aは、第4クラスを用いて、プロキシオブジェクト21の第3クラスを新たに生成する。
言い換えると、第1管理部26Aは、第1クラスと、第2インタフェースの第4クラスを生成する。また、第1管理部26Aは、第2インタフェースの第4クラスに基づき、プロキシオブジェクト21の第3クラスを新たに生成する。なお、第1管理部26Aは、プログラム実行開始時に初期化される。
第10記憶部14Aは、第1オブジェクト18を利用するための第1コード群、及び第2インタフェースを利用するための第4コード群等を予め記憶する。第1コード群は、実施の形態1と同様である。第4コード群には、第4クラスが記述されている。
生成部36は、第1オブジェクト18から第2オブジェクト22の生成要求を受信したときに、第2クラスから第2オブジェクト22を生成する。また、生成部36は、第2インフェースの第4クラスに基づいて、新たに生成される第3クラスからプロキシオブジェクト21を生成する。そして、生成部36は、該プロキシオブジェクト21を第1オブジェクト18へ送信する。
請求項記載の「制限部を生成する」という記述は、本実施形態では、生成部36がプロキシオブジェクト21を生成する部分に該当する。
図10は、生成部36の説明図である。生成部36は、判定部30、オブジェクト生成部31、変換部32A、初期化部34、及び受信部33を有する。判定部30、オブジェクト生成部31、初期化部34、及び受信部33は、実施の形態1と同様である。
変換部32Aは、第4クラスを第1管理部26Aから取得する。変換部32Aは、第4クラスに基づいて、第1管理部26Aからプロキシオブジェクト21の第3クラスを取得する。変換部32Aは、第3クラスからプロキシオブジェクト21を生成する。更に、変換部32は、プロキシオブジェクト21を、第1オブジェクト18へ送信する。
図11は、第1オブジェクト18が他のオブジェクトの生成要求を送信したときの、制御部12Aの動作手順の一例を示すシーケンス図である。なお、具体例として、第1オブジェクト18が第2オブジェクト22の生成要求を送信する場合を説明する。
まず、制御部12Aは、実施の形態1と同様に、ステップS110〜ステップS122の処理を実行する。次に、変換部32Aは、第1管理部26Aから第4クラスをロード可能であるか否かを判定する(ステップS141)。
本実施の形態では、第1管理部26Aは第4クラスをロードする。このため、変換部32Aは、第4クラスをロード可能であると判定する(ステップS141:Yes)。そして、変換部32Aは、第4クラスのロード要求を第1管理部26Aへ送信する(ステップS142)。
第1管理部26Aは、変換部32Aから送信されたロード要求の対象である第4クラスを第10記憶部14Aからロードする(ステップS144)。次に、第1管理部26Aは、第4クラスを生成部36へ送信する(ステップS146)。
生成部36の変換部32Aは、第4クラスを第1管理部26Aから受信すると、プロキシオブジェクト21の第3クラスの生成要求を第1管理部26Aへ送信する(ステップS148)。
第3クラスの生成要求を受信すると、第1管理部26Aは、ステップS144でロードした第4クラスから、第3クラスを生成する(ステップS150)。第1管理部26Aは、この第3クラスを生成部36へ送信する(ステップS152)。
生成部36の変換部32Aは、第1管理部26Aから受信した第3クラスからプロキシオブジェクト21を生成する(ステップS154)。このプロキシオブジェクト21は、メソッドとして、第2インタフェースの第4クラスにおいて定義されたメソッドのみを有する。
変換部32Aは、プロキシオブジェクト21を第1オブジェクト18へ送信する(ステップS156)。第1オブジェクト18は、変換部32Aから受信したプロキシオブジェクト21へ、メソッドの実行を要求する(ステップS158、ステップS160)。
プロキシオブジェクト21は、メソッドの実行要求を第1オブジェクト18から受信すると、実行要求によって特定されるメソッドの内、第4クラスにおいて定義されたメソッドの実行要求を第2オブジェクト22へ転送する(ステップS162)。すなわち、プロキシオブジェクト21は、第2オブジェクト22に含まれる複数のメソッドの内、第2インタフェースで定義されたメソッドを実行する。なお、プロキシオブジェクト21は、メソッドとして、第2インタフェースで定義されたメソッドのみを有する。このため、プロキシオブジェクト21は、第2オブジェクト22に含まれる複数のメソッドの内、第2インタフェースで定義されたメソッド以外のメソッドを実行することは出来ない。
このため、第2オブジェクト22に含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドは、プロキシオブジェクト21に含まれるメソッドに制限される。
一方、上記ステップS141の判定において、変換部32Aが受信したロード要求が第1管理部26Aでロードできないクラスのロード要求であったとする。この場合、変換部32Aは否定判定する(ステップS141:No)。そして、変換部32Aは、例外を第1オブジェクト18へ投げる(ステップS138)。生成部24からの例外を捕まえると、第1オブジェクト18は、例外処理を実行する(ステップS140)。
次に、本実施の形態の情報処理装置10Aをオブジェクト指向プログラミング言語の1つであるJava(登録商標)で実現した場合を説明する。図12は、情報処理装置10AをJava(登録商標)で実現したブロック図である。
情報処理装置10AをJava(登録商標)で実現した情報処理装置(J10A)は、プログラム(J12A)、メインファイル(J14)、及びライブラリファイル(J16)を備える。プログラム(J12A)、メインファイル(J14A)、及びライブラリファイル(J16)は、各々、図9に示す制御部12A、第10記憶部14A、及び第2記憶部16に相当する。
プログラム(J12A)は、Main(J18)、LibImpl(J22)、Proxyオブジェクト(J21)、ObjectFactory(J36)、DefaultClassLoader(J26A)、及びCustomClassLoader(J28)を有する。Main(J18)、LibImpl(J22)、Proxyオブジェクト(J21)、ObjectFactory(J36)、DefaultClassLoader(J26A)、及びCustomClassLoader(J28)は、各々、図9に示す第1オブジェクト18、第2オブジェクト22、プロキシオブジェクト21、生成部36、第1管理部26A、及び第2管理部28に相当する。
Main(J18)、LibImpl(J22)、CustomClassLoader(J28)、及びライブラリファイル(J16)は、実施の形態1の図5と同様である。
メインファイル(J14A)は、少なくともMain(J18)と、第2インタフェース(図示なし)を利用するためのコード群(第1コード群、第4コード群)を記憶する。
DefaultClassLoader(J26A)は、メインファイル(J14A)に記憶されているコードやデータを用いて初期化されている。このため、DefaultClassLoader(J26A)は、メインファイル(J14A)に記憶されているクラス(第1クラス、第4クラス)をロード可能な状態になっている。また、DefaultClassLoader(J26A)は、各クラスの生成要求に応じて第1クラス、または、第4クラスを生成する。
さらに、DefaultClassLoader(J26A)は、生成要求に応じて、第4クラスからProxyオブジェクト(J21)の第3クラスを生成することもできる。なお、Proxyオブジェクト21を利用するためのコード群(第3コード群)はメインファイル(J14A)に存在していてもよいし、しなくてもよい。
すなわち、DefaultClassLoader(J26A)は、Main(J18)の第1クラスと、第2インタフェースの第4クラスと、Proxyオブジェクト(J21)の第3クラスを生成することが出来る。また、DefaultClassLoader(J26A)は、ライブラリファイル(J16)にあるLibImpl(J22)の第2クラスは、生成することが出来ない。
なお、第1管理部26Aに対して送信する、Proxyオブジェクト(J21)の第3クラスの生成要求は、例えば、Java(登録商標)言語の標準ライブラリが持つjava.lang.reflect.Proxy.getProxyClassメソッドを用いて行うことができる。
同様に、CustomClassLoader(J28)は、ライブラリファイル(J16)にあるコードやデータを用いて初期化されている。このため、CustomClassLoader(J28)は、ライブラリファイル(J16)に記述されている第2クラスをロード可能な状態となっている。また、CustomClassLoader(J28)は、ライブラリファイル(J16)に記述されているLibImpl(J22)の第2クラスを生成することが出来る。
ObjectFactory(J36)は、様々なオブジェクトからの生成要求に従って、Proxyオブジェクト(J21)やLibImpl(J22)を生成する。
例えば、Main(J18)がObjectFactory(J36)に対して、LibImpl(J22)の生成要求を送信する。この場合、ObjectFactory(J36)は、LibImpl(J22)を生成する。また、ObjectFactory(J36)は、第2インタフェースの第4クラスに基づいて、Proxyオブジェクト(J21)を作成し、Main(J18)に送信する。
Proxyオブジェクト(J21)の生成には、例えば、上述のjava.lang.reflect.Proxy.getProxyClassメソッドを用いる。ObjectFactory(J36)は、DefaultClassLoader(J26A)から第3クラスを生成する。そして、ObjectFactory(J36)は、Proxyオブジェクト(J21)として、LibImpl(J22)へメソッド呼び出しを転送するjava.lang.reflect.InvocationHandlerオブジェクトを作成する。また、ObjectFactory(J36)は、上記java.lang.reflect.InvocationHandlerオブジェクトを用いて、第3クラスのインスタンスを作成する。
ここで、Main(J18)は、Proxyオブジェクト(J21)のメソッドを呼び出すことはできるが、Proxyオブジェクト(J21)からLibImpl(J22)を取得することはできない。このため、Main(J18)は、Proxyオブジェクト(J21)が提供するメソッドを利用して、LibImpl(J22)を間接的に呼び出すことでのみ、LibImpl(J22)における所定のメソッドを実行する。
次に、Main(J18)が、Java(登録商標)言語のもつリフレクションを用いることができる場合においても、LibImpl(J22)のメソッドへのアクセスを制限出来ることを説明する。
オブジェクトは、リフレクションを用いることで、任意のオブジェクトのメソッドの一覧を取得することができる。例えば、あるオブジェクトが、LibImpl(J22)に対してgetClass().getDeclaredMethods()を呼び出す。これにより、該オブジェクトは、LibImplのメソッドの一覧を取得し、呼び出すことができる。
しかし、Main(J18)がProxyオブジェクト(J21)に対してメソッドの一覧を取得しても、Main(J18)は、第2インタフェースの第4クラスに定義されたメソッド、および基本クラス(java.lang.Object)のメソッドしか取得できない。そのため、Main(J18)は、第2インタフェースの第4クラスで定義されていないメソッドを呼び出すことはできない。
また、オブジェクトは、リフレクションを用いることで、任意のオブジェクトのクラスを持つクラスローダを取得することができる。例えば、あるオブジェクトが、LibImpl(J22)に対してgetClass().getClassLoader()を呼び出す。これにより、該オブジェクトは、LibImpl(J22)のクラスをロードするクラスローダ、すなわちCustomClassLoader(J28)を取得し、ライブラリファイルJ16内の任意のクラスやインタフェースを利用することが出来る。
しかし、Main(J18)がProxyオブジェクト(J21)の第3クラスを持つクラスローダを取得しても、DefaultClassLoader(J26A)が取得される。そのため、Main(J18)は、CustomClassLoader(J28)のロードする第2クラス、すなわちライブラリファイル(J16)に記述されているコードやデータを利用することはできない。
以上説明したように、本実施の形態の情報処理装置10Aは、実施の形態1のインタフェース20に代えて、プロキシオブジェクト21を備える。プロキシオブジェクト21は、第1オブジェクト18から第2オブジェクト22に含まれるメソッドの実行要求を受け付けたときに、第2オブジェクト22に含まれるメソッドの内、第1オブジェクト18がアクセス可能なメソッドの呼出要求を第2オブジェクト22へ転送するプロキシオブジェクトである。
このため、第2オブジェクト22に含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドは、プロキシオブジェクト21に含まれるメソッドに制限される。
従って、本実施の形態の情報処理装置10Aは、オブジェクトに含まれるメソッド毎に、他のオブジェクトからのアクセスを制限することが出来る。
(実施の形態3)
本実施の形態では、メソッドの実行要求先の第2オブジェクト22が複数である場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
図13は、本実施の形態の情報処理装置10Bを示すブロック図である。
情報処理装置10Bは、制御部12B、第10記憶部14B、及び第2記憶部16を備える。
制御部12Bは、情報処理装置10Bを制御する。制御部12Bは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
制御部12Bは、第1オブジェクト18、複数のインタフェース20、複数の第2オブジェクト22、生成部40、第1管理部26B、及び複数の第2管理部28を有する。制御部12Bは、ROMまたはHDD等に格納されたプログラムを実行することで、第1オブジェクト18、複数のインタフェース20、複数の第2オブジェクト22、第1管理部26B、及び複数の第2管理部28を実現する。
第1オブジェクト18は、実施の形態1と同様である。制御部12Bは、メソッドの実行要求先の複数の第2オブジェクト22を有する。ちなみに、これらの複数の第2オブジェクト22は、すべて同じクラスから生成されたオブジェクトでもよいし、まったく異なるクラスから生成されたオブジェクトでもよいし、一部が同じクラスから、他は別のクラスから生成されたオブジェクトであってもよい。本実施の形態では、複数の第2オブジェクト22として、各々異なるクラスから生成された第2オブジェクト22A及び第2オブジェクト22Bを有する場合を説明する。
第2オブジェクト22A及び第2オブジェクト22Bは、メソッドの実行要求先のオブジェクトである。第2オブジェクト22A及び第2オブジェクト22Bは、各々、複数のメソッドを含む。なお、これらの第2オブジェクト22A及び第2オブジェクト22Bを総称する場合、複数の第2オブジェクト22と称して説明する。
制御部12Bは、複数の第2オブジェクト22(第2オブジェクト22A及び第2オブジェクト22B)の各々に対応する複数のインタフェース20を備える。これらの複数のインタフェース20は、複数の第2オブジェクト22の各々に含まれるメソッドへのアクセスを、該複数の第2オブジェクト22毎に個別に制限する。
本実施の形態では、制御部12Bは、複数のインタフェース20として、インタフェース20A及びインタフェース20Bを備える。インタフェース20A及びインタフェース20Bは、オブジェクト指向プログラミング言語におけるインタフェースである。これらのインタフェース20A及びインタフェース20Bを総称する場合、複数のインタフェース20と称して説明する。
インタフェース20Aは、第2オブジェクト22Aに含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドを定義した情報である。すなわち、インタフェース20Aは、第1オブジェクト18から第2オブジェクト22Aに含まれる複数のメソッドへのアクセスを制限する制限部として機能する。
インタフェース20Bは、第2オブジェクト22Bに含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドを定義した情報である。すなわち、インタフェース20Bは、第1オブジェクト18から第2オブジェクト22Bに含まれる複数のメソッドへのアクセスを制限する制限部として機能する。
第1管理部26Bは、第1クラス、インタフェース20Aの第3クラス、及びインタフェース20Bの第3クラスをロードする。第1管理部26Bは、プログラム実行開始時に初期化される。
本実施の形態では、制御部12Bは、複数の第2管理部28を備える。本実施の形態では、複数の第2管理部28として、第2管理部28A及び第2管理部28Bを備える。これらの複数の第2管理部28は、複数の第2オブジェクト22の各々の第2クラスを個別にロードする。
具体的には、第2管理部28Aは、第2オブジェクト22Aの第2クラスをロードする。第2管理部28Bは、第2オブジェクト22Bの第2クラスをロードする。上述したように、第2管理部28A及び第2管理部28Bを総称する場合、複数の第2管理部28と称して説明する。
なお、本実施の形態では、制御部12Bは、上述したように、各々異なるクラスから生成された複数の第2オブジェクト22として、2つの第2オブジェクト22A、第2オブジェクト22Bを有する場合を説明する。そして、制御部12Bは、これらの2つの第2オブジェクト22に対応する、2つのインタフェース20(インタフェース20A、インタフェース20B)、2つの第2管理部28(第2管理部28A、第2管理部28B)、及び2つの第2記憶部16(第2記憶部16A、第2記憶部16B)を備える。
第2記憶部16Aは、第2オブジェクト22Aを利用するための第2コード群を記憶する。この第2コード群には、第2オブジェクト22Aの第2クラスが記述されている。第2記憶部16Bは、第2オブジェクト22Bを利用するための第2コード群を記憶する。この第2コード群には、第2オブジェクト22Bの第2クラスが記述されている。すなわち、第2記憶部16Aに記憶されている第2クラスは第2オブジェクト22Aの生成に用いるクラスであり、第2記憶部16Bに記憶されている第2クラスは第2オブジェクト22Bの生成に用いるクラスであり、これらの第2クラスは、異なるクラスである。
第2管理部28Aは、第2オブジェクト22Aの第2クラスを第2記憶部16Aからロードする。第2管理部28Bは、第2オブジェクト22Bの第2クラスを第2記憶部16Bからロードする。
インタフェース20Aは、第1オブジェクト18から第2オブジェクト22Aに含まれる複数のメソッドへのアクセスを制限する制限部として機能する。本実施の形態では、インタフェース20Aは、第2オブジェクト22Aに含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドを定義した情報である。
インタフェース20Bは、第1オブジェクト18から第2オブジェクト22Bに含まれる複数のメソッドへのアクセスを制限する制限部として機能する。本実施の形態では、インタフェース20Bは、第2オブジェクト22Bに含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドを定義した情報である。
なお、本実施の形態において、実行要求先の第2オブジェクト22は、異なるクラスから生成された複数の第2オブジェクト22であればよく、3つ以上であってもよい。この場合には、複数の第2オブジェクト22の各々に対応する数の、複数のインタフェース20、複数の第2管理部28、及び複数の第2記憶部16を備えた構成とすればよい。
第10記憶部14Bは、第1オブジェクト18を利用するための第1コード群、インタフェース20Aを利用するための第3コード群、インタフェース20Bを利用するための第3コード群等を予め記憶する。第1コード群には、第1クラスが記載されている。インタフェース20Aを利用するための第3コード群には、インタフェース20Aの第3クラスが記載されている。インタフェース20Bを利用するための第3コード群には、インタフェース20Bの第3クラスが記載されている。
第1管理部26Bは、生成要求された第2オブジェクト22Aの第2クラスを第10記憶部14Bからロードする。また、第1管理部26Bは、生成要求されたインタフェース20Aの第3クラスを第10記憶部14Bからロードする。また、第1管理部26Bは、生成要求されたインタフェース20Bの第3クラスを第10記憶部14Bからロードする。すなわち、第1管理部26Bは、第1オブジェクト18の第1クラス、インタフェース20Aの第2クラス、及びインタフェース20Bの第3クラスを生成できる。
第2管理部28Aは、第2オブジェクト22Aの第2クラスを第2記憶部16Aからロードする。そして、第2管理部28Aは、ロードした第2オブジェクト22Aの第2クラスを生成部40へ送信する。すなわち、第2管理部28Aは、少なくとも第2オブジェクト22Aの第2クラスを生成することが出来る。
第2管理部28Bは、第2オブジェクト22Bの第2クラスを第2記憶部16Bからロードする。そして、第2管理部28Bは、ロードした第2オブジェクト22Bの第2クラスを生成部40へ送信する。すなわち、第2管理部28Bは、少なくとも第2オブジェクト22Bの第2クラスを生成することが出来る。
生成部40は、第2オブジェクト22Aの生成要求を受信したときに、第2オブジェクト22Aの第2クラスから第2オブジェクト22Aを生成する。また、生成部40は、この第2オブジェクト22A、及びインタフェース20Aの第3クラスから、インタフェース20Aを生成する。そして、生成部40は、インタフェース20Aを第1オブジェクト18へ送信する。
一方、生成部40は、第2オブジェクト22Bの生成要求を受信したときに、第2オブジェクト22Bの第2クラスから第2オブジェクト22Bを生成する。また、生成部40は、この第2オブジェクト22B、及びインタフェース20Bの第3クラスから、インタフェース20Bを生成する。そして、生成部40は、インタフェース20Bを第1オブジェクト18へ送信する。
図14は、生成部40の説明図である。生成部40は、判定部46、オブジェクト生成部47、変換部48、初期化部50、及び受信部49を有する。また、本実施の形態では、情報処理装置10Bは、第3記憶部42及び第1記憶部44を備える。
第3記憶部42は、複数の第2管理部28の内、初期化部50が初期化した第2管理部28の第1識別情報を記憶する。すなわち、第3記憶部42は、複数の第2管理部28の内、制御部12Bで利用可能な状態の第2管理部28の第1識別情報を記憶する。第1識別情報は、複数の第2管理部28の各々を一意に識別可能な情報である。
図15は、第3記憶部42のデータ構成の一例を示す図である。図15に示すように、第3記憶部42は、初期化された第2管理部28の識別情報(ID)である第1識別情報(図中、第1ID参照)を記憶する。
第1記憶部44は、第2識別情報と、第3識別情報と、を対応づけて記憶する。第2識別情報は、複数の第2オブジェクト22の各々に対応する第2クラスを一意に識別する情報である。第3識別情報は、複数の第2オブジェクト22の各々に対応するインタフェース20の第3クラスを一意に識別する情報である。
図16は、第1記憶部44のデータ構成の一例を示す図である。図16に示すように、第1記憶部44は、第2識別情報(図中、第2ID参照)と、第3識別情報(図中、第3ID参照)と、を対応づけて記憶する。この第3識別情報は、対応する第2識別情報によって識別される第2クラスの第2オブジェクト(第2オブジェクト22Aまたは第2オブジェクト22B)に対応する、インタフェース20(インタフェース20Aまたはインタフェース20B)の第3クラスの識別情報である。
図14に戻り、判定部46は、第1オブジェクト18からオブジェクトの生成要求を受信する。判定部46は、生成要求されたオブジェクトのクラスを、複数の第2管理部28の内の何れかの第2管理部28がロードできるか否かを判定する。
複数の第2オブジェクト22の内、生成要求されたオブジェクトのクラスを、複数の第2管理部28の内の何れかがロード可能である場合には、該クラスをロード可能な第2管理部28は、生成要求された第2オブジェクト22Aまたは第2オブジェクト22Bに対応する第2クラスを、対応する第2記憶部16(第2記憶部16Aまたは第2記憶部16B)からロードする。複数の第2管理部28の内、該第2クラスをロードした第2管理部28は、ロードした第2クラスをオブジェクト生成部47へ送信する。
オブジェクト生成部47は、第2管理部28Aまたは第2管理部28Bから取得した第2クラスから、オブジェクトを生成する。第2管理部28Aから、第2オブジェクト22Aの第2クラスを取得した場合、オブジェクト生成部47は、この第2クラスから第2オブジェクト22Aを生成する。そして、この第2オブジェクト22Aを変換部48へ送信する。
第2管理部28Bから、第2オブジェクト22Bの第2クラスを取得した場合、オブジェクト生成部47は、この第2クラスから第2オブジェクト22Bを生成する。そして、この第2オブジェクト22Bを変換部48へ送信する。
変換部48は、第1記憶部44から、オブジェクト生成部47で生成された第2オブジェクト22Aまたは第2オブジェクト22Bの第2クラスの第2識別情報に対応する、第3識別情報を読取る。そして、変換部48は、読取った第3識別情報によって識別される、インタフェース20(インタフェース20Aまたはインタフェース20B)の第3クラスを、該第3クラスをロードする第1管理部26Bから取得する。そして、変換部48は、この第3クラスを用いて、オブジェクト生成部47が生成した第2オブジェクト22(第2オブジェクト22Aまたは第2オブジェクト22B)を、対応するインタフェース20(インタフェース20Aまたはインタフェース20B)に変換する。変換部48は、変換したインタフェース20(インタフェース20Aまたはインタフェース20B)を、第1オブジェクト18へ送信する。
受信部49は、第2管理部28の初期化要求を第1オブジェクト18から受信すると、この初期化要求を初期化部50へ送信する。初期化要求を受信すると、初期化部50は、複数の第2管理部28(第2管理部28A及び第2管理部28B)の各々を初期化する。具体的には、初期化部50は、第2記憶部16Aに記憶されている第2コード群を用いて、第2管理部28Aを初期化する。また、初期化部50は、第2記憶部16Bに記憶されている第2コード群を用いて、第2管理部28Bを初期化する。
図17は、制御部12Bが実行する初期化処理の手順の一例を示すフローチャートである。制御部12Bは、第1オブジェクト18がオブジェクトの生成要求を送信する前に、この初期化処理を実行する。
まず、受信部49が初期化要求を受信したか否かを判断する(ステップS300)。ステップS300で否定判断すると(ステップS300:No)、本ルーチンを終了する。一方、受信部49が初期化要求を受信すると(ステップS300:Yes)、受信部49は初期化部50に初期化要求を送信する(ステップS302)。
初期化要求を受信した初期化部50は、情報処理装置10Bの備える複数の第2記憶部16(第2記憶部16A、第2記憶部16B)毎に、ステップS304〜ステップS306の処理を繰り返し実行する。そして、本ルーチンを終了する。
ステップS304では、初期化部50が、情報処理装置10Bに設けられている複数の第2管理部28の内、処理対象の第2記憶部16(第2記憶部16Aまたは第2記憶部16B)に対応する第2管理部28(第2管理部28Aまたは第2管理部28B)を初期化する(ステップS304)。
次に、初期化部50は、ステップS304で初期化した第2管理部28(第2管理部28Aまたは第2管理部28B)の第1識別情報を、第3記憶部42に登録する(ステップS306(図15参照))。そして、繰返しを終了する。
図18は、第1オブジェクト18が他のオブジェクトの生成要求を送信したときの、制御部12Bの動作手順の一例を示すシーケンス図である。
なお、具体例として、第1オブジェクト18が第2オブジェクト22Bの生成要求を送信する場合を説明する。なお、第1オブジェクト18が第2オブジェクト22Aの生成要求を送信する場合も同様の処理が行われる。
まず、第1オブジェクト18が第2オブジェクト22Bの生成要求を生成部40へ送信する(ステップS110)。第1オブジェクト18から生成要求を受信すると、生成部40の判定部46は、複数の第2管理部28の内の何れか(第2管理部28Aまたは第2管理部28B)が、第2オブジェクト22Bの第2クラスをロード可能であるか否かを判定する(ステップS310)。
本実施の形態では、第2管理部28Bが第2オブジェクト22Bの第2クラスをロードする。このため、判定部46は、第2オブジェクト22Bの第2クラスをロード可能であると判定する(ステップS310:Yes)。そして、判定部46は、第2オブジェクト22Bの第2クラスのロード要求を第2管理部28Bへ送信する(ステップS312)。
次に、制御部12Bは、実施の形態1のステップS116〜ステップS122と同様にして、ステップS314〜ステップS320の処理を実行する。
すなわち、第2管理部28Bは、判定部46から送信されたロード要求の対象である、第2オブジェクト22Bの第2クラスを第2記憶部16Bからロードする(ステップS314)。そして、第2管理部28Bは、ロードした第2クラスを生成部40に送信する(ステップS316)。
第2オブジェクト22Bの第2クラスを受け付けると、生成部40のオブジェクト生成部47は、この第2クラスから第2オブジェクト22Bを生成する(ステップS318)。次に、オブジェクト生成部47は、第2オブジェクト22Bを変換部48へ送信する(ステップS320)。
次に、変換部48は、オブジェクト生成部47から受信した第2オブジェクト22Bの第2クラスの第2識別情報に対応する、インタフェース20Bの第3識別情報を、第1記憶部44から取得する(ステップS322)。
次に、変換部48は、ステップS322で取得した第3識別情報によって識別される第3クラスを、ロード可能か否かを判定する(ステップS324)。例えば、変換部48は、ステップS322で取得した第3識別情報によって識別される第3クラスが、インタフェース20Bの第3クラスの第3識別情報である場合、この第3識別情報によって識別される第3クラスを、第1管理部26Bからロード可能であるか否かを判定する。
次に、制御部12Bは、実施の形態1のステップS124〜ステップS140と同様にして、ステップS324〜ステップS336の処理を実行する。
すなわち、変換部48は、第3クラスをロード可能であると判定すると(ステップS324:Yes)、この第3クラスのロード要求を第1管理部26Bへ送信する(ステップS326)。例えば、変換部48は、インタフェース20Bの第3クラスのロード要求を第1管理部26Bへ送信する。
第1管理部26Bは、変換部48から送信されたロード要求の対象である、インタフェース20Bの第3クラスを第10記憶部14Bからロードする(ステップS328)。そして、第1管理部26Bは、ロードした第3クラスを生成部40に送信する(ステップS330)。
生成部40の変換部48は、第1管理部26Bからインタフェース20Bの第3クラスを受信すると、この第3クラスを用いて、オブジェクト生成部47で生成された第2オブジェクト22Bをインタフェース20Bに変換する(ステップS332)。次に、変換部48は、インタフェース20Bを第1オブジェクト18へ送信する(ステップS334)。
第1オブジェクト18は、変換部48から受信したインタフェース20Bを介して、第2オブジェクト22Bへアクセスする(ステップS336)。
一方、上記ステップS310の判定において、第1オブジェクト18から受信した生成要求が、複数の第2管理部28(第2管理部28A、第2管理部28B)の何れにおいてもロードできないクラスのオブジェクトの生成要求であったとする。この場合、判定部46は否定判定する(ステップS310:No)。そして、判定部46は、例外を第1オブジェクト18へ投げる(ステップS338)。生成部40からの例外を捕まえると、第1オブジェクト18は、例外処理を実行する(ステップS342)。
また、上記ステップS324の判定において、変換部48が受信したロード要求が第1管理部26Bでロードできないクラスのロード要求であったとする。この場合、変換部48は否定判定する(ステップS324:No)。そして、変換部48は、例外を第1オブジェクト18へ投げる(ステップS340)。生成部40からの例外を捕まえると、第1オブジェクト18は、例外処理を実行する(ステップS342)。
なお、上記では、具体例として、第1オブジェクト18が第2オブジェクト22Bの生成要求を送信する場合を説明した。しかし、第1オブジェクト18が第2オブジェクト22Aの生成要求を送信する場合についても、同様の処理が行われる。すなわち、第1オブジェクト18が第2オブジェクト22Aの生成要求を生成部40へ送信した場合、判定部46、オブジェクト生成部47、変換部48、第2管理部28、及び第1管理部26Bは、各々、生成要求された第2オブジェクト22Aに対応する情報(第2オブジェクト22Aの第2クラス、インタフェース20Aの第3クラス、第2オブジェクト22A、第2記憶部16A)について、処理を行えばよい。
以上説明したように、本実施の形態では、実行要求先の第2オブジェクト22として、複数の第2オブジェクト22(第2オブジェクト22A、第2オブジェクト22B)を想定している。また、本実施の形態では、情報処理装置10Bは、複数の第2オブジェクト22の各々に対応する数の、複数のインタフェース20(インタフェース20A、インタフェース20B)、複数の第2管理部28(第2管理部28A、第2管理部28B)、複数の第2記憶部16(第2記憶部16A、第2記憶部16B)を備える。また、第1管理部26Bは、第1オブジェクト18の第1クラス、インタフェース20Aの第3クラス、インタフェース20Bの第3クラスをロードする。
また、情報処理装置10Bは、第1記憶部44と、第3記憶部42と、を備える。第1記憶部44は、複数の第2オブジェクト22の各々に対応する第2クラスを一意に識別する第2識別情報と、複数の第2オブジェクト22の各々に対応するインタフェース20の第3クラスを一意に識別する第3識別情報と、を対応づけて記憶する。
このように、本実施の形態の情報処理装置10Bは、実行要求先とされうる第2オブジェクト22を複数備える。また、情報処理装置10Bは、複数の第2オブジェクト22の第2クラスを、複数の第2管理部28によって個別にロードする。そして、制御部12Bは、第1記憶部44に記憶されている、実行要求先の第2オブジェクト22の第2クラスの第2識別情報に対応する第3識別情報を取得することで、複数の第2管理部28の内、実行要求先の第2オブジェクト22に対応するインタフェース20の第3クラスを容易に取得することができる。このため、本実施の形態の情報処理装置10Bは、実行要求先の第2オブジェクト22が1つである場合と同様に、複数の第2オブジェクト22の各々に含まれるメソッドへのアクセスを制限することができる。
従って、本実施の形態の情報処理装置10Bは、上記実施の形態1の効果に加えて更に、複数の第2オブジェクト22の各々に含まれるメソッド毎に、他のオブジェクトからのアクセスを制限することができる。
(実施の形態4)
本実施の形態では、暗号化データを第2記憶部16に記憶する場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
図19は、本実施の形態の情報処理装置10Cを示すブロック図である。
情報処理装置10Cは、制御部12C、第10記憶部14、及び第2記憶部56を備える。第10記憶部14は、実施の形態1と同様である。
制御部12Cは、情報処理装置10Cを制御する。制御部12Cは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
制御部12Cは、第1オブジェクト18、インタフェース20、第2オブジェクト22、生成部52、第1管理部26、及び第2管理部28を有する。制御部12Cは、ROMまたはHDD等に格納されたプログラムを実行することで、第1オブジェクト18、インタフェース20、第2オブジェクト22、生成部52、第1管理部26、及び第2管理部28を実現する。第1オブジェクト18、インタフェース20、第2オブジェクト22、第1管理部26、及び第2管理部28は、実施の形態1と同様の構成である。
第2記憶部56は、第2クラスを記述した第2コード群の暗号化データを記憶する。すなわち、第2記憶部56は、第2オブジェクト22の第2クラスの暗号化データを記憶する。
生成部52は、第2オブジェクト22の生成要求を受信したときに、第2クラスから第2オブジェクト22を生成する。このとき、生成部52は、暗号化データの復号を行う(詳細後述)。また、生成部52は、実施の形態1の生成部24と同様に、第2オブジェクト22及び第3クラスから、インタフェース20を生成する。そして、生成部52は、インタフェース20を第1オブジェクト18へ送信する。
図20は、生成部52の説明図である。生成部52は、判定部30、オブジェクト生成部31、変換部32、削除部62、初期化部60、受信部64、及び復号部58を有する。判定部30、オブジェクト生成部31、及び変換部32は、実施の形態1と同様である。図20に示すように、情報処理装置10Cは、更に第4記憶部54を備える。
第4記憶部54は、平文の(暗号化されていない)第2コード群を記憶する。第4記憶部54は、第1オブジェクト18、及びプログラムの不具合の発見や修正を支援するソフトウェアであるデバッガ等からはアクセス不可能である。
受信部64は、第2管理部28の初期化要求を第1オブジェクト18などから受信すると、この初期化要求を復号部58へ送信する。
復号部58は、第2記憶部56から暗号化データを読み出し、復号する。そして、復号部58は、復号データを、第4記憶部54へ記憶する。このため、第4記憶部54には、復号された、第2オブジェクト22の第2コード群が記憶される。
初期化部60は、初期化要求を受信すると、第4記憶部54に記憶されている、第2コード群を用いて、第2管理部28を初期化する。削除部62は、第4記憶部54に記憶された第2コード群を削除する。
図21は、制御部12Cが実行する初期化処理の手順の一例を示すシーケンス図である。制御部12Cは、第1オブジェクト18がオブジェクトの生成要求を送信する前に、この初期化処理を実行する。
図21には、第2管理部28を初期化する場合の手順を示した。
まず、受信部64が、第1オブジェクト18などから初期化要求を受信する(ステップS400)。初期化要求を受信すると、受信部64は、復号部58に初期化要求を送信する(ステップS402)。
復号部58は、第2記憶部56から第2コード群の暗号化データを取得する(ステップS404)。そして、復号部58は、暗号化データを復号する(ステップS406)。次に、復号部58は、復号によって得た復号データである第2コード群を、第4記憶部54へ記憶する(ステップS408)。
次に、復号部58は、初期化部60に初期化要求を送信する(ステップS410)。初期化部60は、第4記憶部54に記憶されている復号データである第2コード群を用いて、第2管理部28を初期化する(ステップS412)。次に、初期化部60は、初期化完了を削除部62へ送信する(ステップS414)。
削除部62は、ステップS406で復号された復号データである第2コード群を、第4記憶部54から削除する(ステップS416)。そして、本シーケンスを終了する。
制御部12Cが、図21に示す初期化処理を実行することによって、第2管理部28は、第2コード群に記載された第2クラスを利用可能な状態となる。
第1オブジェクト18は、上記初期化処理が実行された後に、オブジェクトの生成要求を生成部52へ送信する。第1オブジェクト18が第2オブジェクト22の生成要求を送信したときの、制御部12Cの動作手順は、実施の形態1と同様である(図4参照)。
例えば、第2管理部28が第2クラスのロード要求を受信したときには(図4のステップS114参照)、第2管理部28はすでに初期化されていて第2クラスを保持していることから、第2クラスのロードを行えばよい(図4のステップS116参照)。
以上説明したように、本実施の形態の情報処理装置10Cは、第2コード群を暗号化した暗号化データを第2記憶部56に記憶する。そして、生成部52による第2管理部28の初期化処理時には、暗号化データを復号した復号データを用いて、第2管理部28の初期化処理を行う。
従って、本実施の形態の情報処理装置10Cは、上記実施の形態の効果に加えて、第2記憶部56に記憶されているデータの解析や改ざんを防止することができる。また、情報処理装置10Cは、復号データを、第1オブジェクト18及びデバッガからアクセス不可能な第4記憶部54に記憶する。このため、実行要求元である第1オブジェクト18からの、該復号データの解析や改ざんを防止することができる。
(実施の形態5)
本実施の形態では、メソッドの実行要求先の第2オブジェクト22が複数であり、複数の第2オブジェクト22の各々の第2コード群の暗号化データを、複数の第2記憶部56で個別に記憶する場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
図22は、本実施の形態の情報処理装置10Dを示すブロック図である。
情報処理装置10Dは、制御部12D、第10記憶部14B、及び複数の第2記憶部56を備える。第10記憶部14Bは、実施の形態3と同様である。
制御部12Dは、情報処理装置10Dを制御する。制御部12Dは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
制御部12Dは、第1オブジェクト18、複数のインタフェース20、複数の第2オブジェクト22、生成部68、第1管理部26B、及び複数の第2管理部28を有する。制御部12Dは、ROMまたはHDD等に格納されたプログラムを実行することで、第1オブジェクト18、複数のインタフェース20、複数の第2オブジェクト22、生成部68、第1管理部26B、及び複数の第2管理部28を実現する。第1オブジェクト18は、実施の形態1と同様の構成である。
制御部12Dは、複数の第2オブジェクト22、複数のインタフェース20、複数の第2管理部28、及び複数の第2記憶部56を備える。
実施の形態3と同様に、制御部12Dは、複数の第2オブジェクト22として、第2オブジェクト22A〜第2オブジェクト22Bを備える。また、実施の形態3と同様に、制御部12Dは、複数のインタフェース20として、第2オブジェクト22A及び第2オブジェクト22Bに対応する、インタフェース20A及びインタフェース20Bを備える。また、実施の形態3と同様に、制御部12Dは、複数の第2管理部28として、第2オブジェクト22A及び第2オブジェクト22Bに対応する、第2管理部28A及び第2管理部28Bを備える。
第2オブジェクト22A、第2オブジェクト22B、インタフェース20A、インタフェース20B、第2管理部28A、及び第2管理部28Bは、実施の形態3と同様である。
本実施の形態では、制御部12Dは、複数の第2記憶部56を備える。第2記憶部56は、実施の形態4と同様である。本実施の形態では、制御部12Dは、複数の第2記憶部56として、第2記憶部56A及び第2記憶部56Bを備える。第2記憶部56A及び第2記憶部56Bを総称する場合、複数の第2記憶部56と称して説明する。
複数の第2記憶部56は、複数の第2オブジェクト22の各々に対応する第2コード群の暗号化データを、個別に記憶する。
詳細には、第2記憶部56Aは、第2オブジェクト22Aの第2クラスを記述した第2コード群の暗号化データを記憶する。すなわち、第2記憶部56Aは、第2オブジェクト22Aの第2クラスの暗号化データを記憶する。第2記憶部56Bは、第2オブジェクト22Bの第2クラスを記述した第2コード群の暗号化データを記憶する。すなわち、第2記憶部56Bは、第2オブジェクト22Bの第2クラスの暗号化データを記憶する。
生成部68は、複数の第2オブジェクト22の内の何れか(第2オブジェクト22Aまたは第2オブジェクト22B)の生成要求を受信したときに、対応する第2クラスから、生成要求された第2オブジェクト22(第2オブジェクト22Aまたは第2オブジェクト22B)を生成する。また、生成部68は、実施の形態3の生成部40と同様に、生成した第2オブジェクト22(第2オブジェクト22Aまたは第2オブジェクト22B)、及び対応する第3クラス(インタフェース20Aの第3クラス、またはインタフェース20Bの第3クラス)から、対応するインタフェース20(インタフェース20Aまたはインタフェース20B)を生成する。そして、生成部68は、生成したインタフェース20Aまたはインタフェース20Bを、第1オブジェクト18へ送信する。
図23は、生成部68の説明図である。生成部68は、判定部46、オブジェクト生成部47、変換部48、削除部62、初期化部72、受信部64、及び復号部74を有する。判定部46、オブジェクト生成部47、及び変換部48は、実施の形態3と同様である。削除部62、及び受信部64は、実施の形態4と同様である。
図23に示すように、情報処理装置10Dは、第1記憶部44、第4記憶部54、第3記憶部42、第2記憶部56、及び第5記憶部70を備える。第1記憶部44及び第3記憶部42は、実施の形態3と同様である。第4記憶部54及び第2記憶部56は、実施の形態4と同様である。
第5記憶部70は、複数の第2記憶部56の各々を識別する第3識別情報と、各第2記憶部56に記憶されている暗号化データの復号鍵と、を対応づけて記憶する。
なお、第5記憶部70に記憶されている復号鍵は、対応する第3識別情報毎に異なる復号鍵であってもよいし、同じ復号鍵であってもよい。
図24は、第5記憶部70のデータ構造の一例を示す図である。図24に示すように、第5記憶部70は、第2記憶部56の識別情報(ID)である第3識別情報(図中、第3ID参照)と、復号鍵と、を対応づけて記憶する。
図23に戻り、復号部74は、複数の第2記憶部56の各々から、暗号化データを読み出す。また、復号部74は、複数の第2記憶部56の各々の第3識別情報に対応する復号鍵を、第5記憶部70から取得する。そして、復号部74は、読み出した復号鍵を用いて、対応する第2記憶部56に記憶されている暗号化データを復号する。復号部58は、この復号データを、第4記憶部54へ記憶する。
初期化部72は、初期化要求を受信すると、第4記憶部54に記憶されている復号データである第2コード群を用いて、対応する第2管理部28を初期化する。詳細には、初期化部72は、第2記憶部56Aに記憶されていた暗号化データから復号した第2コード群を用いて、第2管理部28Aを初期化する。また、初期化部72は、第2記憶部56Bに記憶されていた暗号化データから復号した第2コード群を用いて、第2管理部28Bを初期化する。
図25は、制御部12Dが実行する初期化処理の手順の一例を示すシーケンス図である。制御部12Dは、第1オブジェクト18がオブジェクトの生成要求を送信する前に、この初期化処理を実行する。すなわち、第1オブジェクト18は、オブジェクトの生成要求を生成部68へ送信する前に、生成要求する第2オブジェクト22に対応する第2管理部28の初期化要求を、生成部68へ送信する。
図25には、複数の第2管理部28の全て(第2管理部28A及び第2管理部28B)を初期化する場合の手順を示した。
まず、受信部64が、第2管理部28の初期化要求を受信する(ステップS500)。受信部64は、復号部74に初期化要求を送信する(ステップS502)。
次に、生成部68は、情報処理装置10Dに設けられている複数の第2記憶部56毎に、ステップS504〜ステップS518の処理を繰り返し実行する。
詳細には、まず、復号部74が、複数の第2記憶部56の内、初期化処理を行っていない第2管理部28に対応する第2記憶部56に記憶されている暗号化データを、取得する(ステップS504)。次に、復号部74は、ステップS504で暗号化データを取得した第2記憶部56の第3識別情報に対応する復号鍵を第5記憶部70から取得する(ステップS506)。
次に、復号部74は、ステップS504で取得した暗号化データを、ステップS506で取得した復号鍵を用いて復号する(ステップS508)。次に、復号部74は、この復号によって得られた復号データである第2コード群を、第4記憶部54へ記憶する(ステップS510)。
次に、復号部74は、複数の第2管理部28の内、該復号データである第2コード群に対応する第2管理部28の初期化要求を、初期化部72へ送信する(ステップS512)。初期化部72は、該初期化要求を受信すると、初期化部72に記憶されている復号データである第2コード群を用いて、対応する第2管理部28(例えば、第2管理部28A)を初期化する(ステップS514)。
次に、初期化部72は、初期化完了を削除部62へ送信する(ステップS516)。削除部62は、第4記憶部54から復号データを削除する(ステップS518)。そして、繰返し終了する。
制御部12Dが、図25に示す初期化処理を実行することによって、複数の第2管理部28が初期化される。
第1オブジェクト18は、上記初期化処理が実行された後に、オブジェクトの生成要求を生成部68へ送信する。第1オブジェクト18が第2オブジェクト22の生成要求を送信したときの、制御部12Dの動作手順は、実施の形態3と同様である(図18参照)。
例えば、第2管理部28Aまたは第2管理部28Bが第2クラスのロード要求を受信したときには(図18のステップS312参照)、第2管理部28Aまたは第2管理部28Bはすでに初期化されていて第2クラスを保持していることから、第2クラスのロードを行えばよい(図18のステップS314参照)。
以上説明したように、本実施の形態の情報処理装置10Dは、複数の第2オブジェクト22の各々に対応する第2コード群を暗号化した暗号化データを、複数の第2記憶部56に個別に記憶する。また、第5記憶部70が、第2記憶部56の第3識別情報と、復号鍵と、を対応づけて記憶する。そして、生成部68による複数の第2管理部28(第2管理部28A、第2管理部28B)の初期化処理時には、復号部74が、第3識別情報に対応する復号鍵を用いて、複数の第2管理部28の各々に記憶されている暗号化データを復号する。そして、初期化部72は、復号データを用いて、複数の第2管理部28の初期化処理を行う。
このように、本実施の形態では、第5記憶部70が、複数の第2記憶部56の各々に記憶されている暗号化データの復号鍵を記憶する。このため、情報処理装置10Dが1つの第2記憶部56を備えた場合と同様に、複数の第2記憶部56の各々に記憶されているデータの解析や改ざんを防止することができる。また、第1オブジェクト18から各第1管理部26へのアクセスを制限することができる。
また、本実施の形態の情報処理装置10Dは、復号データを、第1オブジェクト18及びデバッガからアクセス不可能な第4記憶部54に記憶する。このため、実行要求元である第1オブジェクト18からの、該復号データの解析や改ざんを防止することができる。
また、図25を用いて説明したように、本実施の形態では、削除部62は、初期化部72による初期化処理の終了後に復号データである第2コード群を第4記憶部54から削除する。このため、第4記憶部54に格納されている復号データが、第1オブジェクト18やデバッガ等により解析または改ざんされる可能性をより小さくすることができる。なお、第4記憶部54による、第1オブジェクト18やデバッガからの保護機能が強力である場合には、削除部62によるステップS518の削除処理を実行しない形態であってもよい。
(実施の形態6)
実施の形態1では、第1オブジェクト18がオブジェクトの生成要求を送信する前に、第2管理部28の初期化処理を実行した。本実施の形態では、第1オブジェクト18がオブジェクトの生成要求を送信した後に、未初期化の第2管理部28について初期化処理を実行する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
図26は、本実施の形態の情報処理装置10Eを示すブロック図である。
情報処理装置10Eは、制御部12E、第10記憶部14、及び第2記憶部16を備える。
制御部12Eは、情報処理装置10Eを制御する。制御部12Eは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
制御部12Eは、第1オブジェクト18、インタフェース20、第2オブジェクト22、生成部76、第1管理部26、及び第2管理部28を備える。制御部12Eは、ROMまたはHDD等に格納されたプログラムを実行することで、第1オブジェクト18、インタフェース20、第2オブジェクト22、生成部76、第1管理部26、及び第2管理部28を実現する。
第10記憶部14、及び第2記憶部16は、実施の形態1と同様である。また、第1オブジェクト18、インタフェース20、第2オブジェクト22、第1管理部26、及び第2管理部28は、実施の形態1と同様である。
生成部76は、第2オブジェクト22の生成要求を受信した後に、未初期化の第2管理部28を初期化する。また、生成部76は、実施の形態1と同様に、第2クラスから第2オブジェクト22を生成する。また、生成部76は、この第2オブジェクト22及び第3クラスから、インタフェース20を生成する。そして、生成部24は、インタフェース20を第1オブジェクト18へ送信する。
図27は、生成部76の説明図である。生成部76は、判定部78、初期化判定部80、オブジェクト生成部31、変換部32、及び初期化部82を備える。オブジェクト生成部31及び変換部32は、実施の形態1と同様である。また、情報処理装置10Eは、第1管理部26、第6記憶部84、及び第3記憶部42Eを備える。第1管理部26は、実施の形態1と同様である。
第6記憶部84は、第2管理部28がロードする第2クラスの第2識別情報を記憶する。図28は、第6記憶部84のデータ構造の一例を示す図である。図28に示すように、第6記憶部84は、第2クラスの識別情報(ID)である第2識別情報(図28中、第2ID参照)を記憶する。
例えば、第2記憶部16による生成要求先の第2オブジェクト22が複数あるとする。そして、第2管理部28が、これらの複数の第2オブジェクト22の各々の第2クラスをロードするとする。この場合、第6記憶部84は、各第2オブジェクト22の第2クラスを識別する第2識別情報を記憶する。すなわち、第2記憶部16が、2つの第2識別情報を記憶している場合、第2管理部28は、2つの第2識別情報の各々によって識別される第2クラスをロードし、これらの第2クラス以外のクラスはロードしないことを示す。
第3記憶部42Eは、初期化済情報、または未初期化情報を記憶する。初期化情報は、第2管理部28が初期化済であることを示す。未初期化情報は、第2管理部28が初期化されていないことを示す。
図29は、第3記憶部42Eのデータ構造の一例を示す図である。図29に示すように、例えば、第2管理部28が初期化されていない場合には、第3記憶部42Eは、未初期化情報として、例えば“false”を記憶する。一方、第2管理部28が初期化済である場合には、第3記憶部42Eは、初期化済情報として、例えば、“true”を記憶する。
図27に戻り、判定部78は、第1オブジェクト18からオブジェクトの生成要求を受信する。判定部78は、生成要求されたオブジェクトのクラスを、第2管理部28がロードできるか否かを判定する。具体的には、判定部78は、生成要求されたオブジェクトのクラスの識別情報が、第6記憶部84に記憶されているか否かを判定することによって、第2管理部28からロード可能であるか否かを判定する。
初期化判定部80は、第2管理部28が初期化済であるか否かを判定する。初期化判定部80は、第3記憶部42Eに、初期化済情報が記憶されているか否かを判定することによって、第2管理部28が初期化済であるか否かを判定する。
初期化判定部80は、第2管理部28が未初期化であると判定された場合、第2管理部28の初期化要求を初期化部82に送信する。
初期化部82は、初期化判定部80から初期化要求を受信すると、第2記憶部16に記憶されている第2コード群を用いて、第2管理部28を初期化する。そして、初期化部82は、第2管理部28を初期化した後に、第3記憶部42Eに記憶されている未初期化情報を、初期化済情報に変更する。
図30は、第1オブジェクト18が他のオブジェクトの生成要求を送信したときの、制御部12Eの動作手順の一例を示すシーケンス図である。なお、具体例として、第1オブジェクト18が第2オブジェクト22の生成要求を送信する場合を説明する。
まず、第1オブジェクト18が第2オブジェクト22の生成要求を生成部76へ送信する(ステップS600)。第1オブジェクト18から生成要求を受信すると、生成部76の判定部78が、第2クラスをロード可能であるか否かを判定する(ステップS602)。生成部76は、第6記憶部84に該第2クラスの第2識別情報が記憶されているか否かを判定することによって、ステップS602の判定を行う。
すなわち、生成部76は、第6記憶部84に該第2クラスの第2識別情報が記憶されていると判定すると(ステップS602:Yes)、初期化判定部80に第2クラスのロード要求を送信する(ステップS604)。
次に、初期化判定部80は、第3記憶部42Eを用いて、第2管理部28が初期化済であるか否かを判定する(ステップS606)。第2管理部28が未初期化であると判定すると(ステップS606:No)、初期化判定部80は、第2管理部28の初期化要求を初期化部82へ送信する(ステップS608)。
第2管理部28の初期化要求を受信すると、初期化部82は、第2記憶部16に記憶されている第2コード群を用いて、第2管理部28を初期化する(ステップS610)。次に、初期化部82は、該第2管理部28が初期化済であることを示す初期化済情報を、第3記憶部42Eに記憶する(ステップS612)。図31は、初期化済情報である“true”の記憶された第3記憶部42Eを示す図である。
図30に戻り、初期化部82は、初期化完了を初期化判定部80へ送信する(ステップS614)。次に、ステップS616へ進む。
一方、上記ステップS606の判定において、第2管理部28が初期化済であると判定されると(ステップS606:Yes)、上記ステップS610〜ステップS612の処理を行わずに、ステップS616へ進む。
ステップS616では、初期化判定部80が、第2クラスのロード要求を第2管理部28へ送信する(ステップS616)。
次に、制御部12Eは、実施の形態1のステップS116〜ステップS140と同様にして、ステップS618〜ステップS642の処理を実行する。
以上説明したように、本実施の形態の情報処理装置10Eでは、生成部76は、第1オブジェクト18から第2オブジェクト22の生成要求を受信したときに、第2管理部28が初期化済であるか否かを判定し、未初期化であると判定されたときに、第2管理部28を初期化する。そして、この初期化の後に、第2オブジェクト22の生成やインタフェース20の生成を行う。
このため、本実施の形態の情報処理装置10Eでは、実施の形態1に比べて、第2管理部28の初期化処理を、第2オブジェクト22の生成直前にまで遅延させる。これにより、上記実施の形態の効果に加えて、第2オブジェクト22の生成直前まで、メモリの使用を削減することができる。なぜなら、第2管理部28の初期化後は、第2記憶部16に記憶されている第2データをメモリ上に展開しておくためのメモリが必要となる。情報処理装置10Eでは、この初期化処理を遅延させることにより、それまでの間、メモリ上に展開しておくためのメモリを消費せずに済むからである。
例えば、何らかの異常や例外処理が発生した時にだけ、生成の必要なオブジェクトがあるとする。この場合、異常や例外処理が発生するまでは、該オブジェクトに関するデータ群をメモリ上に展開することはない。このため、メモリ使用量の削減を図ることができる。
なお、第2コード群を、実施の形態4と同様に、暗号化した暗号化データとして第2記憶部16に記憶してもよい。この場合、本実施の形態の情報処理装置10Eに、更に、実施の形態4で説明した受信部64、復号部58、削除部62、及び第4記憶部54を備えた構成とすればよい(図20参照)。
そして、初期化部82は、第2オブジェクト22の生成の直前に、第2管理部28の初期化処理を実行すればよい。これにより、上記効果に加えて、更に、様々な解析や改ざんを防止することができる。
例えば、第2記憶部16が、課金処理の実行が必要になった時にだけ生成される第2オブジェクト22の第2コード群を記憶する。この場合、この第2コード群には、課金処理が含まれるため、できる限り平文で保持することを避けたい。そこで、第2コード群を、実施の形態4と同様に、暗号化した暗号化データとして第2記憶部16に記憶する。
これにより、課金処理を行う直前まで、第2コード群を暗号化して保護することが出来、また、メモリ上に平文の第2オブジェクト22を展開することがない。このため、様々な解析や改ざんを防止できる。
(実施の形態7)
本実施の形態では、第1オブジェクト18がオブジェクトの生成要求を送信した後に、未初期化の第2管理部28について初期化処理を実行する。また、本実施の形態では、初期化処理対象の第2管理部28が、複数である場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
図32は、本実施の形態の情報処理装置10Fを示すブロック図である。
情報処理装置10Fは、制御部12F、第10記憶部14B、及び複数の第2記憶部16を備える。
制御部12Fは、情報処理装置10Fを制御する。制御部12Fは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
制御部12Fは、第1オブジェクト18、複数のインタフェース20、複数の第2オブジェクト22、生成部86、第1管理部26B、及び複数の第2管理部28を備える。制御部12Fは、ROMまたはHDD等に格納されたプログラムを実行することで、第1オブジェクト18、複数のインタフェース20、複数の第2オブジェクト22、生成部86、第1管理部26B、及び複数の第2管理部28を実現する。
第10記憶部14B、複数の第2記憶部16(第2記憶部16A、第2記憶部16B)、及び第1管理部26Bは、実施の形態3と同様である。また、第1オブジェクト18は、実施の形態1と同様である。
実施の形態3と同様に、制御部12Fは、複数の第2オブジェクト22として、第2オブジェクト22A〜第2オブジェクト22Bを備える。また、実施の形態3と同様に、制御部12Fは、複数のインタフェース20として、第2オブジェクト22A及び第2オブジェクト22Bに対応する、インタフェース20A及びインタフェース20Bを備える。また、実施の形態3と同様に、制御部12Fは、複数の第2管理部28として、第2オブジェクト22A及び第2オブジェクト22Bに対応する、第2管理部28A及び第2管理部28Bを備える。また、本実施の形態では、制御部12Fは、実施の形態3と同様に、複数の第2記憶部16として、第2記憶部16A、及び第2記憶部16Bを備える。
第2オブジェクト22A、第2オブジェクト22B、インタフェース20A、インタフェース20B、第2管理部28A、第2管理部28B、第2記憶部16A、及び第2記憶部16Bは、実施の形態3と同様である。
生成部86は、第2オブジェクト22の生成要求を受信した後に、未初期化の第2管理部28を初期化する。また、生成部86は、実施の形態3と同様に、第2クラスから第2オブジェクト22(第2オブジェクト22Aまたは第2オブジェクト22B)を生成する。また、生成部86は、生成した第2オブジェクト22(第2オブジェクト22Aまたは第2オブジェクト22B)、及び第3クラスから、インタフェース20(インタフェース20Aまたはインタフェース20B)を生成する。そして、生成部86は、生成したインタフェース20(インタフェース20A、またはインタフェース20B)を第1オブジェクト18へ送信する。
図33は、生成部86の説明図である。生成部86は、判定部90、初期化判定部91、オブジェクト生成部31、変換部92、及び初期化部93を備える。オブジェクト生成部31は、実施の形態1と同様である。また、情報処理装置10Fは、第6記憶部88、第1記憶部44、及び第3記憶部42Fを備える。第1記憶部44は、実施の形態3と同様である。
第6記憶部88は、第2クラスの第2識別情報と、該第2識別情報によって識別される第2クラスをロードする第2管理部28の第1識別情報と、を対応づけて記憶する。図34は、第6記憶部88のデータ構造の一例を示す図である。図34に示すように、第6記憶部88は、第2クラスの識別情報(ID)である第2識別情報(図34中、第2ID参照)と、該第2識別情報によって識別される第2クラスをロードする第2管理部28の識別情報(ID)である第1識別情報(図34中、第1ID参照)と、を対応づけて記憶する。
第3記憶部42Fは、第2管理部28の識別情報(ID)である第1識別情報と、第1識別情報によって識別される第2管理部28が初期化済であるか否かを示す情報と、を対応づけて記憶する。第2管理部28が初期化済であるか否かを示す情報として、第3記憶部42Fは、実施の形態3と同様に、初期化情報、または未初期化情報を記憶する。
図35は、第3記憶部42Fのデータ構造の一例を示す図である。図35に示すように、第3記憶部42Fは、第1識別情報(図35中、第1ID参照)と、初期化情報または未初期化情報と、を対応づけて記憶する。図35に示すように、第1識別情報によって識別される第2管理部28が初期化されていない場合には、第3記憶部42Fは、未初期化情報として、例えば“false”を記憶する。一方、第1識別情報によって識別される第2管理部28が初期化済である場合には、第3記憶部42Fは、初期化済情報として、例えば“true”を記憶する。
図33に戻り、判定部90は、第1オブジェクト18からオブジェクトの生成要求を受信する。判定部90は、生成要求されたオブジェクトのクラスを、第2管理部28からロード可能か否かを判定する。
例えば、判定部90は、第1オブジェクト18から第2オブジェクト22の生成要求を受信する。判定部90は、複数の第2管理部28の内、何れかの第2管理部28から該第2オブジェクト22の第2クラスをロード可能であるか否かを判定する。
詳細には、まず、判定部90は、複数の第2管理部28の内、生成要求された第2オブジェクト22(第2オブジェクト22Aまたは第2オブジェクト22B)の第2クラスをロードする第2管理部28が有るか否かを判定する。具体的には、判定部90は、生成要求された第2オブジェクト22の第2クラスの第2識別情報と、該第2識別情報に対応する、第2管理部28の識別情報である第1識別情報と、が、第6記憶部88に対応づけて記憶されているか否かを判定する。該第2識別情報と該第1識別情報とが、第6記憶部88に対応づけて記憶されている場合、判定部90は、生成要求された第2オブジェクト22の第2クラスをロード可能と判定する。
初期化判定部91は、複数の第2管理部28の内、判定部90で判定された第2管理部28が初期化済であるか否かを判定する。初期化判定部91は、生成要求された第2オブジェクト22の第2クラスをロードする第2管理部28が未初期化である場合、初期化部93に該第2管理部28の初期化要求を送信する。
初期化部93は、初期化判定部91から、初期化要求を受信すると、複数の第2記憶部16の内、初期化対象の第2管理部28に対応する第2記憶部16(第2記憶部16Aまたは第2記憶部16B)に記憶されている第2コード群を用いて、該第2管理部28を初期化する。そして、初期化部93は、該第2管理部28を初期化した後に、第3記憶部42Fに記憶されている未初期化情報を、初期化済情報に変更する。
図36は、第1オブジェクト18が他のオブジェクトの生成要求を送信したときの、制御部12Fの動作手順の一例を示すシーケンス図である。なお、具体例として、第1オブジェクト18が第2オブジェクト22Bの生成要求を送信する場合を説明する。
まず、第1オブジェクト18が第2オブジェクト22Bの生成要求を生成部86へ送信する(ステップS700)。第1オブジェクト18から生成要求を受信すると、生成部86の判定部90が、第6記憶部88に基づいて、生成要求された第2オブジェクト22Bの第2クラスを、何れかの第2管理部28(第2管理部28Aまたは第2管理部28B)からロード可能か否かを判定する(ステップS702)。
そして、判定部90が第2クラスをロード可能であると判定すると(ステップS702:Yes)、判定部90は、第6記憶部88における、生成要求された第2オブジェクト22Bの第2クラスの第2識別情報と、該第2識別情報に対応する第1識別情報(第2管理部28Bの識別情報)と、を初期化判定部91へ送信する(ステップS704)。
初期化判定部91は、判定部90から受信した第1識別情報によって識別される第2管理部28Bが、初期化済であるか否かを判定する(ステップS706)。ステップS706では、初期化判定部91は、第2管理部28Bの第1識別情報に対応づけて、初期化済情報が第6記憶部88に記憶されているか否かを判定する。
次に、第2管理部28Bが未初期化であると判定すると(ステップS706:No)、初期化判定部91は、第2管理部28Bの初期化要求を初期化部93へ送信する(ステップS708)。
第2管理部28Bの初期化要求を受信すると、初期化部93は、第2記憶部16Bに記憶されている第2コード群を用いて、第2管理部28Bを初期化する(ステップS710)。次に、初期化部93は、該第2管理部28Bが初期化済であることを示す初期化済情報を、第3記憶部42Fに記憶する(ステップS712)。例えば、初期化部93は、第3記憶部42Fに、第2管理部28Bの第1識別情報に対応づけて、初期化済情報である“true”を記憶する。
初期化部93は、初期化完了を初期化判定部91へ送信する(ステップS714)。次に、ステップS716へ進む。
一方、上記ステップS706の判定において、第2管理部28Bが初期化済であると判定されると(ステップS706:Yes)、上記ステップS710〜ステップS712の処理を行わずに、ステップS716へ進む。
ステップS716では、初期化判定部91が、第2オブジェクト22Bの第2クラスのロード要求を、複数の第2管理部28の内の第2管理部28Bへ送信する(ステップS716)。
次に、第2管理部28Bは、第2クラスを第2記憶部16Bからロードする(ステップS718)。そして、第2管理部28Bは、ロードした第2クラスを生成部86に送信する(ステップS720)。
第2クラスを受け付けると、生成部86のオブジェクト生成部31は、この第2クラスから第2オブジェクト22Bを生成する(ステップS722)。次に、オブジェクト生成部31は、第2オブジェクト22Bを変換部92へ送信する(ステップS724)。
変換部92は、第1記憶部44から、第2オブジェクト22Bの第2クラスの識別情報である第2識別情報に対応する、インタフェース20Bの第3クラスの識別情報である第3識別情報を取得する(ステップS726、図16参照)。
次に、変換部92は、ステップS726で取得した第3識別情報によって識別される第3クラスを第1管理部26Bからロード可能であるか否かを判定する(ステップS728)。次に、制御部12Fは、実施の形態1のステップS125〜ステップS140と同様にして、ステップS730〜ステップS746の処理を実行する。
以上説明したように、本実施の形態の情報処理装置10Fでは、生成部86は、第1オブジェクト18から、複数の第2オブジェクト22の内の何れかの第2オブジェクト22の生成要求を受信したときに、複数の第2管理部28の内、生成要求された第2オブジェクト22の第2クラスをロードする第2管理部28が初期化済であるか否かを判定する。そして、未初期化であると判定されたときに、この第2管理部28を初期化する。
このため、本実施の形態の情報処理装置10Fでは、生成要求された第2オブジェクト22に対応する第2管理部28の初期化処理を、該第2オブジェクト22の生成直前まで遅延させる。これにより、上記実施の形態の効果に加えて、第2オブジェクト22の生成直前まで、メモリの使用を削減することができる。なぜなら、第2管理部28の初期化後は、第2記憶部16に記憶されている第2データをメモリ上に展開しておくためのメモリが必要となる。情報処理装置10Fでは、この初期化処理を遅延させることにより、それまでの間、データを展開しておくためのメモリを消費せずに済むからである。
(実施の形態8)
実施の形態8では、第2管理部28を更新する場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
図37は、本実施の形態の情報処理装置10Gを示すブロック図である。
情報処理装置10Gは、制御部12G、第10記憶部14、及び第2記憶部16を備える。
制御部12Gは、情報処理装置10Gを制御する。制御部12Gは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
制御部12Gは、第1オブジェクト18、インタフェース20、第2オブジェクト22、生成部94、第1管理部26、及び第2管理部28を備える。制御部12Gは、ROMまたはHDD等に格納されたプログラムを実行することで、第1オブジェクト18、インタフェース20、第2オブジェクト22、生成部94、第1管理部26、及び第2管理部28を実現する。
第10記憶部14、及び第2記憶部16は、実施の形態1と同様である。また、第1オブジェクト18、インタフェース20、第2オブジェクト22、第1管理部26、及び第2管理部28は、実施の形態1と同様である。
生成部94は、第2オブジェクト22の生成要求を受信すると、第2クラスから第2オブジェクト22を生成する。また、生成部94は、この第2オブジェクト22及び第3クラスから、インタフェース20を生成する。そして、生成部94は、インタフェース20を第1オブジェクト18へ送信する。
図38は、生成部94の説明図である。生成部94は、判定部78、初期化判定部96、オブジェクト生成部31、変換部32、初期化部98、及び更新部97を備える。オブジェクト生成部31、及び変換部32は、実施の形態1と同様である。判定部78は、実施の形態6と同様である。
また、情報処理装置10Gは、第6記憶部84、及び第7記憶部42Gを備える。第6記憶部84は、実施の形態6と同様である。
第7記憶部42Gは、第2管理部28の識別情報(ID)である第1識別情報(第1ID)と、該第1識別情報によって識別される第2管理部28が初期化済であるか否かを示す情報と、ハッシュ値と、を対応づけて記憶する。初期化済であるか否かを示す情報は、初期化済であることを示す初期化済情報、または未初期化であることを示す未初期化情報である。ハッシュ値は、対応する第1識別情報によって識別される第2管理部28に対応する第2記憶部16に記憶されている第2コード群のハッシュ値である。
図39は、第7記憶部42Gのデータ構造の一例を示す図である。図39に示すように、第7記憶部42Gは、第1識別情報(図39中、第1ID参照)と、初期化済であるか否かを示す情報と、ハッシュ値と、を対応づけて記憶する。図39(A)は、未初期化情報である“false”が記憶された状態を示す。図39(B)は、初期化済情報である“true”が記憶された状態を示す。また、図39(B)は、第2管理部28に対応する第2記憶部16に記憶されている第2コード群のハッシュ値が“Hash(A)”であることを示す。
図38に戻り、初期化判定部96は、第7記憶部42Gを用いて、第2管理部28が初期化済であるか否かを判定する。未初期化であると判定すると、初期化判定部96は、第2管理部28の初期化要求を初期化部98に送信する。
初期化判定部96は、第2管理部28が初期化済であると判定すると、第7記憶部42Gを用いて、第2管理部28に対応する第2記憶部16が、最新の状態に更新されているか否かを判定する。
詳細には、初期化判定部96は、第2オブジェクト22の生成要求を受信したときに、第2記憶部16に記憶されている第2コード群からハッシュ値を算出する。また、初期化判定部96は、第7記憶部42Gに記憶されている、初期化済であるか否かの判定対象の第2管理部28の第1識別情報に対応するハッシュ値を読取る。そして、初期化判定部96は、この算出したハッシュ値と、第7記憶部42Gから読取ったハッシュ値と、が不一致である場合に、第2管理部28が最新の状態では無いと判定する。
第2管理部28が最新の状態では無い場合、初期化判定部96は、更新部97に、第2管理部28の更新要求を送信する。
初期化部98は、第2記憶部16に記憶されている第2コード群を用いて、第2管理部28を初期化する。また、初期化部98は、第2管理部28を初期化した後に、第7記憶部42Gにおける、初期化済であるか否かを示す情報を、初期化済情報に変更する。例えば、初期化部98は、第7記憶部42Gにおける、該第2管理部28の第1識別情報に対応する、未初期化情報である“false”を、初期化済情報である“true”に変更する。さらに、第2管理部28は、この初期化に利用した第2記憶部16における第2コード群のハッシュ値を算出し、該初期化済情報に対応づけて第7記憶部42Gに記憶する。
図40は、第1オブジェクト18が他のオブジェクトの生成要求を送信したときの、制御部12Gの動作手順の一例を示すシーケンス図である。なお、具体例として、第1オブジェクト18が第2オブジェクト22の生成要求を送信する場合を説明する。
まず、第1オブジェクト18が第2オブジェクト22の生成要求を生成部94へ送信する(ステップS800)。第1オブジェクト18から生成要求を受信すると、生成部94の判定部78が、第2クラスをロード可能であるか否かを判定する(ステップS802)。判定部78は、第6記憶部84に該第2クラスの第2識別情報が記憶されているか否かを判定することによって、ステップS802の判定を行う。
判定部78は、第6記憶部84に該第2クラスの第2識別情報が記憶されていると判定すると(ステップS802:Yes)、初期化判定部96に第2クラスのロード要求を送信する(ステップS804)。
次に、初期化判定部96は、第7記憶部42Gを用いて、第2管理部28が初期化済であるか否かを判定する(ステップS806)。第2管理部28が未初期化であると判定すると(ステップS806:No)、初期化判定部96は、第2管理部28の初期化要求を初期化部98へ送信する(ステップS808)。
第2管理部28の初期化要求を受信すると、初期化部98は、第2記憶部16に記憶されている第2コード群を用いて、第2管理部28を初期化する(ステップS810)。次に、初期化部98は、該第2管理部28が初期化済であることを示す初期化済情報を、第7記憶部42Gに記憶する(ステップS812)。次に、初期化部98は、第2記憶部16における第2コード群のハッシュ値を算出し、第7記憶部42Gに記憶する(ステップS814)。
次に、初期化部98は、初期化完了を初期化判定部96へ送信する(ステップS816)。次に、ステップS818へ進む。
一方、上記ステップS806の判定において、第2管理部28が初期化済であると判定されると(ステップS806:Yes)、上記ステップS810〜ステップS814の処理を行わずに、ステップS820へ進む。
ステップS820では、初期化判定部96が、第2管理部28は最新の状態であるか否かを判定する(ステップS820)。
初期化判定部96は、第2管理部28が最新の状態であるか否かの判定を、以下のようにして行う。まず、初期化判定部96は、第2記憶部16に記憶されている第2コード群のハッシュ値を算出する。第2管理部28が初期化された後で且つ第2管理部28が更新された後である場合、例えば、第2記憶部16に記憶されている第2コード群から算出されるハッシュ値は、“Hash(B)”である。次に、初期化判定部96は、第7記憶部42Gに記憶されている、該第1管理部26の第1識別情報に対応するハッシュ値を読取る。このハッシュ値は、前回の更新時に更新部97が第7記憶部42Gに記憶した値である。このため、第7記憶部42Gから読取ったハッシュ値が、例えば“Hash(A)”である場合、初期化判定部96が算出したハッシュ値“Hash(B)”と、第7記憶部42Gに記憶されているハッシュ値“Hash(A)”と、が不一致である。これらのハッシュ値が不一致である場合、初期化判定部96は、第2管理部28が最新の状態ではないと判定する。
第2管理部28が最新の状態であると判定すると(ステップS820:Yes)、ステップS818へ進む。
一方、第2管理部28が最新の状態ではない場合(ステップS820:No)、初期化判定部96は、更新要求を更新部97へ送信する(ステップS822)。
更新要求を受信した更新部97は、第2記憶部16から第2コード群を読み出し、該第2コード群を用いて第2管理部28を更新する(ステップS824)。次に、更新部97は、ステップS820の判別時に算出した、第2記憶部16の第2コード群のハッシュ値(例えば、ハッシュ値“Hash(B)”)を、該第2管理部28の第1識別情報に対応づけて、第7記憶部42Gに記憶する(ステップS826)。
図41は、ステップS826の処理後の第7記憶部42Gのデータ構造の一例を示す図である。図41は、第1識別情報によって識別される第2管理部28が初期化済であり、直前の更新時に用いた、第2記憶部16の第2コード群のハッシュ値が“Hash(B)”であることを示す。
図40に戻り、次に、更新部97は、更新完了を初期化判定部96へ送信し(ステップS828)、ステップS818へ進む。
ステップS818では、初期化判定部96が、第2クラスのロード要求を第2管理部28へ送信する(ステップS818)。
次に、制御部12Gは、実施の形態1のステップS116〜ステップS140と同様にして、ステップS830〜ステップS856の処理を実行する。
以上説明したように、本実施の形態の情報処理装置10Gでは、第2管理部28が初期化されたときに利用した、第2記憶部16における第2コード群のハッシュ値を第7記憶部42Gに記憶する。従って、本実施の形態の情報処理装置10Gは、上記実施の形態の効果に加えて、第2管理部28を最新の状態に更新するときに、最新の第2コード群を用いて更新することができる。
(実施の形態9)
本実施の形態では、実施の形態2におけるプロキシオブジェクトの生成に利用するインタフェースのロードを、第2管理部で行う場合を説明する。なお、上記実施の形態と共通する部分については、同一の符号を付して適宜説明を省略する。
図42は、本実施の形態における情報処理装置10Hの説明図である。情報処理装置10Hは、制御部12H、第10記憶部14A、及び第2記憶部16Hを備える。第1記憶部14Aは、実施の形態2と同様である。
制御部12Hは、情報処理装置10Hを制御する。制御部12Hは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。
制御部12Hは、第1オブジェクト18、プロキシオブジェクト21、第2オブジェクト22、生成部36H、第1管理部26A、及び第2管理部28Hを備える。第1オブジェクト18、プロキシオブジェクト21、第2オブジェクト22、及び第1管理部26Aは、実施の形態2と同様である。
制御部12Hは、ROMまたはHDD等に格納されたプログラムを実行することで、第1オブジェクト18、プロキシオブジェクト21、第2オブジェクト22、生成部36H、第1管理部26A、及び第2管理部28Hを実現する。
第2管理部28Hは、第2クラス、及び第4クラスをロードする。第2クラスは、実施の形態2と同様である。第4クラスは、オブジェクト指向プログラミング言語におけるクラスである。第4クラスは、第2オブジェクト22に含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドを定義したインタフェース(以下、第2インタフェースと称する)のクラスである。
具体的には、第2管理部28Hは、第2クラスや第4クラスを、第2記憶部16Hからロードする。言い換えると、第2管理部28Hは、第2クラスと、第2インタフェースの第4クラスを生成する。なお、第2管理部28Hは、プログラム実行開始時に初期化される。
第2記憶部28Hは、第2オブジェクト22を利用するための第2コード群、及び第2インタフェースを利用するための第4コード群等を予め記憶する。第2コード群は、実施の形態2と同様である。第4コード群には、第4クラスが記述されている。
生成部36Hは、第1オブジェクト18から第2オブジェクト22の生成要求を受信したときに、第2クラスから第2オブジェクト22を生成する。また、生成部36Hは、第2インフェースの第4クラスに基づいて、第3クラスからプロキシオブジェクト21を生成する。そして、生成部36は、該プロキシオブジェクト21を第1オブジェクト18へ送信する。
図43は、生成部36Hの説明図である。生成部36Hは、判定部30、オブジェクト生成部31、変換部32H、初期化部34、及び受信部33を有する。判定部30、オブジェクト生成部31、初期化部34、及び受信部33は、実施の形態2と同様である。
変換部32Hは、第4クラスを第2管理部28Hから取得する。変換部32Hは、第2管理部28Hから取得した第4クラスに基づいて、第1管理部26Aからプロキシオブジェクト21の第3クラスを取得する。変換部32Hは、第3クラスからプロキシオブジェクト21を生成する。更に、変換部32Hは、プロキシオブジェクト21を、第1オブジェクト18へ送信する。
図44は、第1オブジェクト18が他のオブジェクトの生成要求を送信したときの、制御部12Hの動作手順の一例を示すシーケンス図である。なお、具体例として、第1オブジェクト18が第2オブジェクト22の生成要求を送信する場合を説明する。
まず、制御部12Hは、実施の形態2で説明したステップS110〜ステップS122(図11参照)と同様にして、ステップS900〜ステップ912の処理を実行する。次に、変換部32Hは、第2管理部28Hから第4クラスをロード可能であるか否かを判定する(ステップS914)。
本実施の形態では、第2管理部28Hは第4クラスをロードする。このため、変換部32Hは、第4クラスをロード可能であると判定する(ステップS914:Yes)。そして、変換部32Hは、第4クラスのロード要求を第2管理部28Hへ送信する(ステップ916)。
第2管理部28Hは、変換部32Hから送信された第4クラスをロードする(ステップS918)。次に、第2管理部28Hは、第4クラスを生成部36へ送信する(ステップS920)。
生成部36の変換部32Aは、第4クラスを第2管理部28Hから受信すると、プロキシオブジェクト21の第3クラスの生成要求を第1管理部26Aへ送信する(ステップS922)。
第3クラスの生成要求を受信すると、第1管理部26Aは、変換部32Aから受信した第4クラスから、第3クラスを生成する(ステップS924)。第1管理部26Aは、この第3クラスを生成部36へ送信する(ステップS926)。
次に、制御部12Hは、実施の形態2のステップS154〜ステップS162(図11参照)と同様にして、ステップS928〜ステップS936の処理を実行する。また、制御部12Hは、実施の形態2のステップS136〜ステップS140と同様にして、ステップS938〜ステップS942の処理を実行する。
以上説明したように、本実施の形態の情報処理装置10Hは、実施の形態2におけるプロキシオブジェクトの生成のために第4クラスを利用する場合において、第1管理部26Aにある第4クラスに代えて、第2管理部28Hの第4クラスを利用する。
以下では、第2管理部28Hの第4クラスを利用することによる効果を説明する。
もし第4クラスが、第1オブジェクト18の作成者によって改ざんされた場合、改ざんされた第4クラス’から作られたインタフェース20’(図示省略)にもとづきアクセス制御を行うプロキシオブジェクト21’(図示省略)は、改ざんされていない場合のプロキシオブジェクト21と同様のアクセス制御機能を備えない可能性がある。
第1オブジェクト18の作成者は、自らが開発したコード群を修正するために、第10記憶部14Aのコードを変更する許可が与えられていることが一般的である。第4クラスが第1管理部26Aにある場合、第4クラスは第10記憶部14Aのコード群によって初期化されるから、第1オブジェクト18の作成者が改ざんできる可能性が高い。一方、第4クラスが第2管理部28Hにある場合、第4クラスは第2記憶部16Hのコード群によって初期化されるが、第2記憶部16Hを変更する許可を適切に制限すれば、第1オブジェクト18の作成者が改ざんできる可能性は低い。
このため、第1管理部26Aにあるクラス、もしくは、第10記憶部14Aにあるコード群が、第1オブジェクト18の作成者によって改ざんされた場合でも、第2オブジェクト22に含まれる複数のメソッドの内、第1オブジェクト18がアクセス可能なメソッドは、管理部28Hにある改ざんされていない第4クラス(から生成されたインタフェース20)に含まれるメソッドに(プロキシオブジェクト21によって)制限される。
従って、本実施の形態の情報処理装置10Hは、オブジェクトに含まれるメソッド毎に、他のオブジェクトからのアクセスを制限することが出来る。
なお、上記実施の形態で説明した各記憶部は、HDD、光ディスク、メモリカード、RAM(Random Access Memory)などの一般的に利用されているあらゆる記憶媒体により構成することができる。
次に、本実施の形態に係る、情報処理装置10、10A、10B、10C、10D、10E、10F、10Gのハードウェア構成について説明する。図47は、本実施の形態にかかる情報処理装置10、10A、10B、10C、10D、10E、10F、10Gのハードウェア構成を示す説明図である。
本実施の形態にかかる情報処理装置10、10A、10B、10C、10D、10E、10F、10Gは、CPU(Central Processing Unit)5100などの制御装置と、ROM(Read Only Memory)5200やRAM5300などの記憶装置と、各部を接続するバス6100を備える。
本実施の形態にかかる情報処理装置10、10A、10B、10C、10D、10E、10F、10Gを実行するためのプログラムは、ROM5200もしくはRAM5300等に予め組み込まれて提供される。
本実施の形態にかかる情報処理装置10、10A、10B、10C、10D、10E、10F、10Gの各々で実行される上記処理を実行するためのプログラムは、インストール可能な形式又は実行可能な形式のファイルでCD−ROM(Compact Disk Read Only Memory)、フレキシブルディスク(FD)、CD−R(Compact Disk Recordable)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
さらに、本実施の形態にかかる情報処理装置10、10A、10B、10C、10D、10E、10F、10Gを実行するためのプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態にかかる装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
本実施の形態にかかる情報処理装置10、10A、10B、10C、10D、10E、10F、10Gの各々で実行される上記処理を実行するためのプログラムは、コンピュータを上述した各部として機能させうる。このコンピュータは、CPU5100がコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み出して実行することができる。
本発明のいくつかの実施の形態を説明したが、これらの実施の形態は、例として提示したものであり、発明の範囲を限定することは意図していない。
例えば、上記実施の形態では、オブジェクト指向プログラミング言語として、Java(登録商標)を例に説明したが、それに限定されるものではない。例えば、C#言語で記述されるプログラムであってもよいし、それ以外であってもよい。
また、上記実施の形態を組み合わせたものであってもよい。例えば、インタフェースや第2記憶部の改ざんによる不正利用を防止するためには、実施の形態9と実施の形態4を組み合わせることで対応できる。
図45は、実施の形態9と実施の形態4を組み合わせて構成される情報処理装置10Jを示すブロック図である。情報処理装置10Jは、制御部12J、第10記憶部14、及び第2記憶部56Jを備える。第10記憶部14Aは、実施の形態9と同様である。
制御部12Jは、情報処理装置10Jを制御する。制御部12Jは、オブジェクト指向プログラミング言語で記述されたプログラムを実行する。制御部12Jは、第1オブジェクト18、プロキシオブジェクト21、第2オブジェクト22、生成部95、第1管理部26A、及び、第2管理部28Hを有する。
制御部12Jは、ROMまたはHDD等に格納されたプログラムを実行することで、第1オブジェクト18、プロキシオブジェクト21、第2オブジェクト22、生成部95、第1管理部26A、及び第2管理部28Hを実現する。
第1オブジェクト18、プロキシオブジェクト21、第2オブジェクト22、第1管理部26A、及び第2管理部28Hは、実施の形態9と同様の構成である。
第2記憶部56Jは、第2オブジェクト22を利用するための第2コード群、及びインタフェース20を利用するための第4コード群等の暗号化データを記憶する。すなわち、第2記憶部56は、第2オブジェクト22の第2クラス、および、インタフェース20の第4クラスの暗号化データを記憶する。
図46は、生成部95の説明図である。生成部95は、判定部30、オブジェクト生成部31、変換部32H、削除部62、初期化部60、受信部64、及び復号部58を有する。判定部30、オブジェクト生成部31、及び変換部32Hは、実施の形態9と同様である。また、削除部62、初期化部60、受信部64、及び復号部58は、実施の形態4と同様である。処理手順は、実施の形態9、および、実施の形態4で示したシーケンス図を組み合わせたものとなる。
このように、実施の形態を組み合わせることで、各実施の形態における効果も組み合わせることが可能である。この例では、実施の形態9の効果である「インタフェースの改ざんによる不正利用防止」と、実施の形態4の効果である「第2記憶部の改ざんによる不正利用防止」の2つを実現することができる。
なお、上記実施の形態では、実行要求元のオブジェクトが1個(第1オブジェクト18)である場合、及び実行要求先のオブジェクト(第2オブジェクト22)が1または2個である場合を説明したが、この形態に限られない。例えば、実行要求元の第1オブジェクト18と、実行要求先の第2オブジェクト22と、の各々が、1または複数(3個以上)であってもよい。
また、上記実施の形態では、情報処理装置10や第2記憶部16の実現方法の一例として、ファイルを用いる場合を説明した(図5のメインファイルJ14、図12のメインファイルJ14A、図5及び図12のライブラリファイルJ16参照)。しかし、第2記憶部16の実現方法は、ファイルに限定されない。例えば、第10記憶部14及び第2記憶部16を、ネットワーク上にあるデータ格納場所(アドレス)を示す情報としてもよい。この場合、各機能部は、ネットワークを介して、このアドレスによって示される場所からコード群やデータを取得すればよい。
また、実施の形態3〜実施の形態8では、インタフェース20が制御部として機能する場合を説明した。しかし、実施の形態3〜実施の形態8においても、実施の形態2と同様に、インタフェース20に代えてプロキシオブジェクト21を備えた構成としてもよい。
なお、上記実施形態では第1オブジェクトによる第2オブジェクトに対するアクセスを制限するためには、情報処理装置の一部または全部が改ざんされていないことが必要となる。例えば、これを実現するための方法の1つとして、情報処理装置の一部または全部はC言語やC++言語といった機械語プログラムで記述されることが望ましい。また、情報処理装置の一部または全部の防止を強化するために、情報処理装置の一部または全部にソフトウェア難読化を適用することが望まれる。
また、上記実施の形態で説明した各オブジェクト(例えば、第1オブジェクト18、第2オブジェクト22)や、各インタフェース(例えば、インタフェース20)は、同一のコンピュータ上で動作してもよいし、いくつかのコンピュータ上に分散された状態で動作してもよい。
また、上記実施の形態における情報処理装置10、10A、10B、10C、10D、10E、10F、10G、10H、10Jは、1の装置から構成されていてもよいし、ネットワークを介して接続した複数の装置で実現してもよい。
また、上記実施の形態における情報処理装置10、10A、10B、10C、10D、10E、10F、10G、10H、10Jは、具体的には、パーソナルコンピュータである。しかし、情報処理装置10、10A、10B、10C、10D、10E、10F、10G、10H、10Jは、パーソナルコンピュータに限られない。例えば、情報処理装置10、10A、10B、10C、10D、10E、10F、10G、10H、10Jは、情報処理機器に含まれる演算処理装置、マイコン等であってもよく、プログラムによって上記各機能を実現することが可能な機器、装置であればよい。
なお、以上説明した新規な実施の形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施の形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。