(57)【要約】【課題】オブジェクト指向プログラムにおいて、あるクラスのデータの属性が変更になった場合でも、親クラスを継承する子クラスのプログラムの再コンパイルを不要とするオブジェクト指向プログラムの開発および運用システムを提供することにある。【解決手段】コンパイラおよび実行時モジュールを備え、コンパイル時には自クラスの情報と継承関係を示す情報を生成し、実行時に継承するクラスを解決し、オブジェクトデータを確定するコンパイル装置であって、コンパイラが継承関係を示す情報と親クラスの情報を呼び出す初期化コードを生成する手段を備え、実行時モジュールが、クラスの継承関係を示す情報を基にして、オブジェクトデータを生成する手段とを備えることを特徴とする。【選択図】図２
2010186362.tif 000002
【特許請求の範囲】
【請求項１】
コンパイラ装置と実行時モジュール装置とを備え、コンパイル時には自クラスの情報と継承関係を示す情報を生成し、実行時には継承するクラスを解決してオブジェクトデータを確定するオブジェクト指向プログラム開発システムであって、
前記コンパイラ装置は、
継承関係を示す情報を生成する継承情報生成手段と、
親クラスの情報を呼び出す初期化コードを生成する初期化コード生成手段と
を有し、
前記実行時モジュール装置は、
クラスの継承関係を示す情報を基にして、オブジェクトデータを生成するオブジェクトデータ生成手段
を有する
オブジェクト指向プログラム開発システム。
【請求項２】
コンパイラ装置と実行時モジュール装置とを備え、コンパイル時には自クラスの情報と継承関係を示す情報を生成し、実行時には継承するクラスを解決してオブジェクトデータを確定するオブジェクト指向プログラム開発システムのコンパイラ装置により生成されたオブジェクトファイルの構造であって、
継承関係を示す情報と、
親クラスの情報を呼び出す初期化コードと、
自クラスの変数情報と
を有し、
親クラスの変更からは独立していることを特徴とするオブジェクトファイルの構造。
【請求項３】
コンパイラ装置と実行時モジュール装置とを備え、コンパイル時には自クラスの情報と継承関係を示す情報を生成し、実行時には継承するクラスを解決してオブジェクトデータを確定するオブジェクト指向プログラム開発システムのコンパイラ装置であって、
継承関係を示す情報を生成する継承情報生成手段と、
親クラスの情報を呼び出す初期化コードを生成する初期化コード生成手段と
を有し、
前記継承情報生成手段が生成した継承関係を示す情報と、前記初期化コード生成手段が生成した初期化コードと、自クラスの変数情報とを含むオブジェクトファイルを生成することを特徴とするコンパイラ装置。
【請求項４】
請求項３に記載したコンパイラ装置であって、
継承クラスの変数のアドレスを求める計算を実行する命令コードを生成するアドレス計算命令コード生成手段をさらに有することを特徴とするコンパイラ装置。
【請求項５】
コンパイラ装置と実行時モジュール装置とを備え、コンパイル時には自クラスの情報と継承関係を示す情報を生成し、実行時には継承するクラスを解決してオブジェクトデータを確定するオブジェクト指向プログラム開発システムの実行時モジュール装置であって、
クラスを参照して初期化済みか否かを判定するクラス初期化判定手段と、
該クラス初期化判定手段により初期化済みでないと判定された場合に、親クラスの初期化コードを呼び出す親クラス初期化コード呼出手段と、
該初期化コード呼出手段により呼び出された初期化コードにより親の自クラス情報を参照してクラスデータの情報を取得する親クラスデータ取得手段と、
全ての親クラスのクラスデータの情報を取得した後、動的な領域を確保してオブジェクトデータを生成するオブジェクトデータ生成手段と
を有する実行時モジュール装置。
【請求項６】
コンパイラ装置と実行時モジュール装置とを備え、コンパイル時には自クラスの情報と継承関係を示す情報を生成し、実行時には継承するクラスを解決してオブジェクトデータを確定するオブジェクト指向プログラム開発システムの実行時モジュール装置が生成したオブジェクトデータにおける各継承クラスのデータの情報保持方法であって、
クラスの数、クラス名、クラスデータのオフセットを各クラスごとに設定するオブジェクトデータ管理情報設定ステップと、
該オブジェクトデータ管理情報設定ステップにて設定された情報に基づいて自クラスデータ中の変数を特定する変数特定ステップと
からなり、継承クラスのデータを連続領域として割り付けてオブジェクトデータを動的に確保する情報保持方法。
【請求項７】
コンパイラ装置と実行時モジュール装置とを備え、コンパイル時には自クラスの情報と継承関係を示す情報を生成し、実行時には継承するクラスを解決してオブジェクトデータを確定するオブジェクト指向プログラム運用システムであって、
前記コンパイラ装置は、
継承関係を示す情報を生成する継承情報生成手段と、
親クラスの情報を呼び出す初期化コードを生成する初期化コード生成手段と
を有し、
前記実行時モジュール装置は、
クラスの継承関係を示す情報を基にして、オブジェクトデータを生成するオブジェクトデータ生成手段
を有する
オブジェクト指向プログラム運用システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のクラスと継承関係をもつオブジェクト指向プログラムにおいて、ある親クラスで定義されているデータの属性が変更になっても、それを継承するクラスのプログラムを再コンパイルすることなく、アプリケーションを動作させることができる、コンパイルおよび実行方式に関するものである。
【背景技術】
【０００２】
オブジェクト指向プログラミングの特徴として「継承」がある。継承とは、あるクラスがもつ性質を他のクラスが受け継ぐことである。継承により既存のクラスを利用して新しいクラスを作成するとプログラムコードのコーディングの重複が避けられるため保守資産の増加を抑えられ、システム開発にかかる労力を低減できる。また、既存のクラスを利用することで品質が保証されている信頼性の高いクラスを作成できる。
【０００３】
このようにオブジェクト指向プログラムは、既存のクラスを継承することで、システム開発に利点をもたらす半面、親クラスの変更がそれを継承する子クラスに影響するため、変更された親クラスとそれを継承する全ての子クラスのプログラムを再コンパイルする必要がある。再コンパイルを行うということは、既存のバイナリコードが変更になるため、その部分の再テストや動作確認が必要となる。
【０００４】
特許文献１には、ソフトウェア構造解析システムが開示されている。オブジェクト指向プログラミングによってプログラムされたソフトウェアについて、たとえクラスの定義や構造が変更される場合であっても、それらクラスとオブジェクトとの関係構造を明確に表示してその構造解析を支援するシステムである。
【０００５】
特許文献２には、クラス継承関係導出システムが開示されている。オブジェクト指向ソフトウェアの開発におけるクラス継承関係を自動的に導出して、ソフトウェアの高品質化と高性能化、開発の効率化を図るものである。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平６−１２４１９７号公報
【特許文献２】特開平７−１２１３７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明はこのような点に鑑み、オブジェクト指向プログラムにおいて、あるクラスのデータの属性が変更になった場合でも、親クラスを継承する子クラスのプログラムの再コンパイルを不要とするシステムを提供することを目的とする。これにより、親クラスに変更が発生した場合でも、再コンパイルはその親クラスだけで済むため、その親クラスを継承する子クラスの再テストや動作確認が不要となり、アプリケーションの品質を確保することができる。また、各クラスを独立したライブラリとして作成することができ、アプリケーションのライブラリ管理を容易にすることができる。
【課題を解決するための手段】
【０００８】
上記課題を解決するために本発明は、コンパイラおよび実行時モジュールを備え、コンパイル時には自クラスの情報と継承関係を示す情報を生成し、実行時に継承するクラスを解決し、オブジェクトデータを確定するコンパイル装置であって、コンパイラが継承関係を示す情報と親クラスの情報を呼び出す初期化コードを生成する手段を備え、実行時モジュールが、クラスの継承関係を示す情報を基にして、オブジェクトデータを生成する手段とを備える。
【０００９】
前記コンパイラ装置により生成されたオブジェクトファイルの構造は、継承関係を示す情報と、親クラスの情報を呼び出す初期化コードと、自クラスの変数情報とを有し、親クラスの変更からは独立するものである。
【００１０】
前記コンパイラ装置は、継承関係を示す情報を生成する継承情報生成手段と、親クラスの情報を呼び出す初期化コードを生成する初期化コード生成手段とを有し、前記継承情報生成手段が生成した継承関係を示す情報と、前記初期化コード生成手段が生成した初期化コードと、自クラスの変数情報とを含むオブジェクトファイルを生成する。
【００１１】
該コンパイラ装置は、さらに継承クラスの変数のアドレスを求める計算を実行する命令コードを生成するアドレス計算命令コード生成手段を有することが望ましい。
【００１２】
前記実行時モジュール装置は、クラスを参照して初期化済みか否かを判定するクラス初期化判定手段と、該クラス初期化判定手段により初期化済みでないと判定された場合に、親クラスの初期化コードを呼び出す親クラス初期化コード呼出手段と、該初期化コード呼出手段により呼び出された初期化コードにより親の自クラス情報を参照してクラスデータの情報を取得する親クラスデータ取得手段と、全ての親クラスのクラスデータの情報を取得した後、動的な領域を確保してオブジェクトデータを生成するオブジェクトデータ生成手段とを有する。
【００１３】
前記実行時モジュール装置が生成したオブジェクトデータにおける各継承クラスのデータの情報保持方法は、クラスの数、クラス名、クラスデータのオフセットを各クラスごとに設定するオブジェクトデータ管理情報設定ステップと、該オブジェクトデータ管理情報設定ステップにて設定された情報に基づいて自クラスデータ中の変数を特定する変数特定ステップとからなり、継承クラスのデータを連続領域として割り付けてオブジェクトデータを動的に確保する。
【００１４】
さらに、オブジェクト指向プログラム運用システムは、コンパイラ装置と実行時モジュール装置とを備え、コンパイル時には自クラスの情報と継承関係を示す情報を生成し、実行時には継承するクラスを解決してオブジェクトデータを確定するオブジェクト指向プログラム運用システムであって、前記コンパイラ装置は、継承関係を示す情報を生成する継承情報生成手段と、親クラスの情報を呼び出す初期化コードを生成する初期化コード生成手段とを有し、前記実行時モジュール装置は、クラスの継承関係を示す情報を基にして、オブジェクトデータを生成するオブジェクトデータ生成手段を有するものである。
【発明の効果】
【００１５】
本発明によれば、オブジェクト指向プログラムにおいて親クラスのデータの属性に変更が発生した場合でも、再コンパイルはその親クラスだけで済むため、その親クラスを継承する子クラスの再テストや動作確認が不要となり、アプリケーションの品質を確保することができる。
【００１６】
また、各クラスを独立したライブラリとして作成することができるため、アプリケーションのライブラリ管理を容易にすることが可能となる。
【図面の簡単な説明】
【００１７】
【図１】本発明における各クラスの継承の構造または形態を模式的に表したブロック図である。
【図２】本発明によるコンパイル装置を用いて生成したクラスのオブジェクトファイルの構造である。
【図３】本発明でコンパイルして生成したオブジェクトファイルの実行時におけるクラス初期化処理のフローチャートである。
【図４】継承クラスのデータの情報の保持方法である。
【図５】オブジェクトデータを参照するためのアドレスの解決式である。
【図６】本発明を適用するコンピュータシステムの例を示すブロック図である。
【発明を実施するための形態】
【００１８】
以下、本発明を実施する場合の実施形態を、図面を用いて詳細に説明する。
【００１９】
図１は本発明における各クラスの継承の構造または形態を模式的に表したブロック図である。図２は本発明によるコンパイル装置を用いて生成したクラスのオブジェクトファイルの構造、図３は本発明でコンパイルして生成したオブジェクトファイルの実行時におけるクラス初期化処理のフローチャート、図４は継承クラスのデータの情報の保持方法、図５はオブジェクトデータを参照するためのアドレスの解決式である。図６は、本発明を適用するコンピュータシステムの例を示すブロック図である。
【００２０】
図１において、１０１は各クラスの継承における最上位のクラスであり、変数Ａというクラスデータを持っている。１０２および１０３は親クラス１を継承するクラス（子クラス）であり、それぞれ変数Ｂ１と変数Ｂ２というクラスデータを持っている。１０４は子クラス１を継承するクラス（孫クラス）であり、変数Ｃを持っている。
【００２１】
上記のような継承関係にあるクラスの場合、子クラスや孫クラスでは継承する全ての親クラスと同じデータの属性のオブジェクトデータを保持しており、参照・更新が可能な状態にある。たとえば、孫クラス１は親クラス１の変数Ａと子クラス１の変数Ｂ１と自分自身の変数Ｃと同じオブジェクトデータを保持しており、親クラス１の変数Ａを参照する場合は、親クラス１に実装された参照メソッドを呼び出す必要がある。
【００２２】
このようなオブジェクトデータを保持する仕組みは、従来はコンパイル時にクラスの継承関係を解決し、全ての親クラスのデータ属性をオブジェクトファイル中に生成して、実行時に領域を確保していた。
【００２３】
このため、もし親クラス１の変数Ａの属性に変更が発生した場合は、親クラス１を継承するクラスが保持しているオブジェクトデータの変数Ａは変更された内容を反映する必要があるため、一般にはコンパイルする必要がある。
【００２４】
本発明では、コンパイル時には自クラスのデータの属性だけをオブジェクトファイル中に生成し、実行時にクラスの継承関係を解決し、親クラスのデータ属性を参照して、オブジェクトデータの領域を確保する。
【００２５】
このようにクラスの継承関係と親クラスのデータ属性の参照を実行時に行うところが従来との違いである。
【００２６】
図２において、２０１は本発明により生成された孫クラス１のオブジェクトファイル構造を示す。これは定義部と手続き部で構成する。
【００２７】
本発明により各クラスのオブジェクトファイルには継承する親クラスの変数情報を保持せずに、自クラスの変数情報だけを保持する。
【００２８】
２０２は孫クラス１が直接または間接的に継承している親クラスの初期化コードのアドレスを格納した初期化コードテーブルである。
【００２９】
実行時にあるクラスが初めて参照された場合、クラスで定義されたデータの領域確保やクラスの情報を管理するテーブルなどを活性化状態として登録する。これをクラスの初期化と呼ぶ。初期化コードとは、各クラスのオブジェクトファイルに生成された自クラス情報を取得するための小さな命令コードであり、クラスの初期化の際に呼び出される。２０３は孫クラス１に定義された変数Ｃの属性や継承するクラス名などを保持する自クラス情報、２０４は孫クラス１の初期化コードである。
【００３０】
このように本発明で生成されるオブジェクトファイルは、親クラスの変更に対してそれを継承するクラスに影響を及ぼさないように独立性を保った構造となっている。
【００３１】
図３は本発明でコンパイルして生成したオブジェクトファイルの実行時におけるクラス初期化処理のフローチャートを示す。
【００３２】
まず、あるプログラムでクラスを参照した場合、そのクラスが初期化済みか否かを判定する(３０１)。クラスが初期化済みの場合、初期化処理は行わない。
【００３３】
初期化済みでない場合、初期化コードテーブル(２０２)を使って、直接の親クラスの初期化コードを呼び出す(３０２)。初期化コードを呼び出すと親の自クラス情報（２０３）を求めることができ、これを参照してクラスデータの情報を取得する(３０３)。
【００３４】
さらに上位の親クラスがある場合はその初期化コードテーブルを参照し、初期化コードを呼び出して、そのクラスデータの情報を取得する。これを初期化コードテーブルのエントリ数分だけ繰り返す(３０４)。
【００３５】
こうして全ての親クラスのクラスデータの情報を取得した後、動的な領域を確保してオブジェクトデータを生成する(３０５)。
【００３６】
図４では、オブジェクトデータにおける各継承クラスのデータの情報保持方法を示す。
【００３７】
４０１は孫クラス１の動的に確保したオブジェクトデータの形態を示す。このデータは継承クラスである子クラス１のデータと親クラス１のデータを連続領域として割り付けられる。
【００３８】
４０２はオブジェクトデータを管理する情報を示しており、ここにはクラスの数、クラス名、クラスデータのオフセット（相対位置を表す数値）が各クラスごとに設定される。この情報を基に自クラスデータ中の変数を特定することが可能になる。図４の４０２にあっては、自クラスがクラス名「孫クラス１」、クラスデータのオフセットが「０」である。クラスデータのオフセットが０ということはとりもなおさず、このクラスが自クラスであることを意味する。この自クラスに対して継承クラスである「子クラス１」と「親クラス１」とは、そのクラスデータのオフセットがそれぞれ、ｘ１、ｘ２である。
【００３９】
たとえば、孫クラス１のオブジェクトデータにおける子クラス１の変数Ｂ１のアドレスを求める場合は、図５のような式で求めることができる。すなわち、子クラス１の変数Ｂのアドレスは、孫クラス１のオブジェクトデータアドレス、ｘ１（子クラス１のクラスデータのオフセット）、子クラス１内の変数Ｂのオフセット、これら三つの値の和として計算される。クラスデータの変数を参照するメソッドの手続きで、この計算を実行する命令コードをコンパイラが生成しておくことで、クラスデータの変数のアドレスを特定することができる。
【００４０】
このように、それぞれのクラスのオブジェクトファイル中には親クラスのデータの属性を保持することなく、メソッドの手続きの命令コードでは直接アドレスを参照せずにオフセットからアドレスを求める方式にすることで親クラスに依存しない構造のものとなる。
【００４１】
図６は、本発明を適用するコンピュータシステムの例を示すブロック図である。情報処理装置１０においてＣＰＵ（中央処理装置）２０は装置各部を制御する。ＲＯＭ３０は、ＣＰＵ２０において実行される各種のプログラムや、変数、初期値などを記憶する。ＲＡＭ４０は、ＣＰＵ２０において生成される各種演算データなどを一時的に記憶する。
【００４２】
コンパイラ装置５０は、ソースプログラムを読み込んでオブジェクトファイル２０１を生成する装置である。この装置は、実際にはＣＰＵ２０が必要なプログラムを読み込んでそれを実行することにより実現される装置である。図６においては、コンパイラ装置５０も、実行時モジュール装置８０も、実はＣＰＵがその役割を果たす。その意味では、重複してはいるが、便宜上実際のハードウェア構成とソフトウェアにより実現される手段とを同様に扱って、ブロック図を描くことにより、本発明の本質を説明しようとするものである。この意味において、図６は、機能ブロック図であるといえる。
【００４３】
オブジェクトファイル２０１は、コンパイラ装置５０によって生成されたファイルであるのでオブジェクトファイルとネーミングしてあるが、本発明においては、オブジェクトファイル２０１をそのままの形で実行させるのではなく、オブジェクトファイル２０１を実行時モジュール装置８０により実行時に加工して、オブジェクトデータ４０１を生成して、それを実行するものである。なお、実行時モジュール装置８０もまた、必要なプログラムをＣＰＵ２０が読み込んで実行することにより実現される手段であることはコンパイラ装置５０と同様である。
【００４４】
情報処理装置１０には、入力装置６０、出力装置７０、記憶装置９０が、周辺機器として接続されて、必要に応じて用いられる。
【産業上の利用可能性】
【００４５】
オブジェクト指向プログラムの開発システム、及びその運用システムに利用できる。
【符号の説明】
【００４６】
１０  情報処理装置
２０  ＣＰＵ
５０  コンパイラ部
８０  実行時モジュール部
１０１  最上位のクラス
１０２  親クラス１を継承するクラス（子クラス）
１０３  親クラス１を継承するクラス（子クラス）
１０４  子クラス１を継承するクラス（孫クラス）
２０１  本発明により生成されたオブジェクトファイル構造
２０２  初期化コードテーブル
２０３  孫クラス１の自クラス情報
２０４  孫クラス１の初期化コード
４０１  オブジェクトデータの形態
４０２  オブジェクトデータを管理する情報
【図１】
2010186362.tif 000003
【図２】
2010186362.tif 000004
【図３】
2010186362.tif 000005
【図４】
2010186362.tif 000006
【図５】
2010186362.tif 000007
【図６】
2010186362.tif 000008