JP2003005968A - プログラム - Google Patents
プログラムInfo
- Publication number
- JP2003005968A JP2003005968A JP2001183770A JP2001183770A JP2003005968A JP 2003005968 A JP2003005968 A JP 2003005968A JP 2001183770 A JP2001183770 A JP 2001183770A JP 2001183770 A JP2001183770 A JP 2001183770A JP 2003005968 A JP2003005968 A JP 2003005968A
- Authority
- JP
- Japan
- Prior art keywords
- class
- concrete class
- interface
- concrete
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Landscapes
- Stored Programmes (AREA)
Abstract
(57)【要約】
【課題】本発明は、継承によりインタフェースを変更あ
るいは追加することのできるプログラムに関し、呼出先
のクラスに変更が加えられた(呼出先のクラスを継承す
るクラスが作成された、あるいは呼出先のクラス自体に
修正が加えられた)ときに容易にインタフェース保証を
行なう。 【解決手段】呼出先クラス生成のための「生成クラス」
を創設するとともに、呼出元クラスおよび呼出先クラス
の双方に、最上位の「抽象クラス」を創設する。
るいは追加することのできるプログラムに関し、呼出先
のクラスに変更が加えられた(呼出先のクラスを継承す
るクラスが作成された、あるいは呼出先のクラス自体に
修正が加えられた)ときに容易にインタフェース保証を
行なう。 【解決手段】呼出先クラス生成のための「生成クラス」
を創設するとともに、呼出元クラスおよび呼出先クラス
の双方に、最上位の「抽象クラス」を創設する。
Description
【0001】
【発明の属する技術分野】本発明は、継承によりインタ
フェースを変更あるいは追加することのできるプログラ
ムに関する。
フェースを変更あるいは追加することのできるプログラ
ムに関する。
【0002】
【従来の技術】近年、上記の継承という機能を有するオ
ブジェクト指向プログラミングによるプログラム開発が
盛んに行なわれている。
ブジェクト指向プログラミングによるプログラム開発が
盛んに行なわれている。
【0003】ここで、プログラム開発で問題となるの
は、インタフェースの生成および呼出しを如何にして保
証するか、という点である。
は、インタフェースの生成および呼出しを如何にして保
証するか、という点である。
【0004】以下、インタフェースの生成および呼出し
の従来例について説明する。
の従来例について説明する。
【0005】図1は、クラス定義から生成までの流れを
示す図である。ここでは、以下の手順で処理が行なわれ
る。
示す図である。ここでは、以下の手順で処理が行なわれ
る。
【0006】(1)ソースコードにクラスを定義する。
【0007】(2)ソースファイルをコンパイルし、オ
ブジェクトファイルを作成する。
ブジェクトファイルを作成する。
【0008】(3)オブジェクトファイルをリンクし、
実行可能なロードモジュールファイルを作成する。
実行可能なロードモジュールファイルを作成する。
【0009】(4)実行可能なロードモジュールファイ
ルからメモリ上にロードする。
ルからメモリ上にロードする。
【0010】(5)静的状態のクラスを生成し、動的状
態のアドレス(メモリ領域)を獲得する。
態のアドレス(メモリ領域)を獲得する。
【0011】(6)使用不要の際は生成時に獲得したア
ドレス(メモリ領域)を破棄する。
ドレス(メモリ領域)を破棄する。
【0012】この図1に示すように、メモリ上に展開さ
れている静的状態のクラスを動的状態にすることを、
「クラスを生成する」と称する。
れている静的状態のクラスを動的状態にすることを、
「クラスを生成する」と称する。
【0013】図2は、「具象クラスA’」と「具象クラ
スB’」の使用関係を示した図である。ここでは、後述
する本発明との対比上、クラスを具象クラスと称する。
ここでは、「具象クラスA’」は「具象クラスB’」を
使用する側であり、呼出し元のクラスである。また、
「具象クラスB’」は「具象クラスA’」から使用され
る側であり、呼出し先のクラスである。
スB’」の使用関係を示した図である。ここでは、後述
する本発明との対比上、クラスを具象クラスと称する。
ここでは、「具象クラスA’」は「具象クラスB’」を
使用する側であり、呼出し元のクラスである。また、
「具象クラスB’」は「具象クラスA’」から使用され
る側であり、呼出し先のクラスである。
【0014】インタフェース呼出しまでの手順は以下の
とおりである。ここでは具象クラスA’が具象クラス
B’を生成して、その具象クラスB’のインタフェース
3を呼び出すときの例について説明する。
とおりである。ここでは具象クラスA’が具象クラス
B’を生成して、その具象クラスB’のインタフェース
3を呼び出すときの例について説明する。
【0015】(1)「具象クラスA’」は「具象クラス
B’」を‘生成して、「具象クラスB’」のアドレスを
獲得する。
B’」を‘生成して、「具象クラスB’」のアドレスを
獲得する。
【0016】(2)「具象クラスA’」は「具象クラス
B’」のアドレスを指定して、インタフェース3のアド
レスを呼出す。
B’」のアドレスを指定して、インタフェース3のアド
レスを呼出す。
【0017】(3)インタフェース3のインタフェース
情報テーブル部から、インタフェース3の実装部が呼出
される。
情報テーブル部から、インタフェース3の実装部が呼出
される。
【0018】(4)「具象クラスA’」は「具象クラス
B’」のアドレスを指定して、「具象クラスB’」のア
ドレスを破棄する。
B’」のアドレスを指定して、「具象クラスB’」のア
ドレスを破棄する。
【0019】図3は、「具象クラスA’」と「具象クラ
スB’」の使用関係、および「具象クラスB’」と「具
象クラスC’」の使用関係を示した図である。
スB’」の使用関係、および「具象クラスB’」と「具
象クラスC’」の使用関係を示した図である。
【0020】ここで、「具象クラスA’」は「具象クラ
スB’」のインタフェース3のアドレスを呼出す使用関
係があり、「具象クラスB’」は「具象クラスC’」の
インタフェース5のアドレスを呼出す使用関係がある。
「具象クラスC’」のインタフェース4は“引数なし”
である。
スB’」のインタフェース3のアドレスを呼出す使用関
係があり、「具象クラスB’」は「具象クラスC’」の
インタフェース5のアドレスを呼出す使用関係がある。
「具象クラスC’」のインタフェース4は“引数なし”
である。
【0021】この場合、クラス間には、以下の依存関係
が存在する。
が存在する。
【0022】(1)「具象クラスB’」のインタフェー
ス情報テーブル部内に「具象クラスC’」のインタフェ
ース情報テーブルがコンパイル時に取込まれている。ま
た「具象クラスB’」のインタフェース2は、引数に
「具象クラスC’」のアドレスが保持されている。
ス情報テーブル部内に「具象クラスC’」のインタフェ
ース情報テーブルがコンパイル時に取込まれている。ま
た「具象クラスB’」のインタフェース2は、引数に
「具象クラスC’」のアドレスが保持されている。
【0023】(2)「具象クラスA’」のインタフェー
ス定義部内に「具象クラスB’」のインタフェース情報
テーブルがコンパイル時に取込まれている。したがっ
て、「具象クラスA’」のインタフェース定義部内に
も、上述の「具象クラスB’」のインタフェース情報テ
ーブルに含まれる「具象クラスC’」のインタフェース
情報テーブルが取込まれていることになる。
ス定義部内に「具象クラスB’」のインタフェース情報
テーブルがコンパイル時に取込まれている。したがっ
て、「具象クラスA’」のインタフェース定義部内に
も、上述の「具象クラスB’」のインタフェース情報テ
ーブルに含まれる「具象クラスC’」のインタフェース
情報テーブルが取込まれていることになる。
【0024】
【発明が解決しようとする課題】次に、図2,図3を参
照して説明したプログラム構造における問題点を説明す
る。
照して説明したプログラム構造における問題点を説明す
る。
【0025】図4は、「具象クラスA”」と「具象クラ
スB”」の使用関係、および「具象クラスB’」と「具
象クラスB”」の継承関係を示した図である。
スB”」の使用関係、および「具象クラスB’」と「具
象クラスB”」の継承関係を示した図である。
【0026】ここでは、この図を参照しながら、図2を
参照して説明したプログラム構造の問題点について説明
する。
参照して説明したプログラム構造の問題点について説明
する。
【0027】ここで、「具象クラスA”」は「具象クラ
スB”」を使用する側であり、呼出し元のクラスであ
る。さらに、「具象クラスA”」は「具象クラスA’」
から継承した下位クラスである。また、「具象クラス
B”」は「具象クラスA”」から使用される側であり、
呼出し先のクラスである。さらに「具象クラスB”」は
「具象クラスB’」から継承した下位クラスである。
スB”」を使用する側であり、呼出し元のクラスであ
る。さらに、「具象クラスA”」は「具象クラスA’」
から継承した下位クラスである。また、「具象クラス
B”」は「具象クラスA”」から使用される側であり、
呼出し先のクラスである。さらに「具象クラスB”」は
「具象クラスB’」から継承した下位クラスである。
【0028】この場合の、インタフェース呼出しの流れ
は以下のとおりである。
は以下のとおりである。
【0029】(1)「具象クラスA”」は「具象クラス
B”」を生成して、「具象クラスB”」のアドレスを獲
得する。
B”」を生成して、「具象クラスB”」のアドレスを獲
得する。
【0030】(2)「具象クラスA”」は「具象クラス
B”」のアドレスを指定して、インタフェース3のアド
レスを呼出す。
B”」のアドレスを指定して、インタフェース3のアド
レスを呼出す。
【0031】(3)インタフェース3のインタフェース
情報テーブル部から、インタフェース3の実装部が呼出
される。
情報テーブル部から、インタフェース3の実装部が呼出
される。
【0032】(4)「具象クラスA”」は「具象クラス
B”」のアドレスを指定して、「具象クラスB”」のア
ドレスが破棄される。
B”」のアドレスを指定して、「具象クラスB”」のア
ドレスが破棄される。
【0033】このインタフェース呼出しの流れから明ら
かなように、生成する対象クラスを「具象クラスB’」
から「具象クラスB”」に変更するとき、呼出し元の
「具象クラスA’」をそのまま再利用することは出来
ず、具象クラスA’のソースコード修正して具象クラス
A’について再コンパイルを行なうか、もしくは「具象
クラスA’」から継承した「具象クラスA”」を新規に
作成する必要がある。
かなように、生成する対象クラスを「具象クラスB’」
から「具象クラスB”」に変更するとき、呼出し元の
「具象クラスA’」をそのまま再利用することは出来
ず、具象クラスA’のソースコード修正して具象クラス
A’について再コンパイルを行なうか、もしくは「具象
クラスA’」から継承した「具象クラスA”」を新規に
作成する必要がある。
【0034】呼出先の具象クラス(ここでは具象クラス
B’)に変更を加えた(ここでは具象クラスB’を継承
する具象クラスB”を作成した)ときに、変更が加えら
れた呼出先のクラスのみでなく、呼出元のクラス(ここ
では具象クラスA’)にも変更を加える(具象クラス
A’のソースコードを修正するか、あるいは具象クラス
A’を継承した具象クラスA”を作成する)必要を生じ
る結果となる。ここでは、2つのクラス間の例で示した
が、このことは、インタフェースの呼出しを保証するた
めには、バージョンアップされたクラス(ここでは具象
クラスB’を継承した具象クラスB”)を新たにコンピ
ュータにインストールするだけでは足りずに、多数のク
ラスの呼出元と呼出先の関係を全て調べてそのバージョ
ンアップされたクラスを呼び出す側のクラスまで全てを
修正し直す必要があることを意味し、プログラム開発に
多大な余計なエネルギーが費やされる結果を招くことに
なる。
B’)に変更を加えた(ここでは具象クラスB’を継承
する具象クラスB”を作成した)ときに、変更が加えら
れた呼出先のクラスのみでなく、呼出元のクラス(ここ
では具象クラスA’)にも変更を加える(具象クラス
A’のソースコードを修正するか、あるいは具象クラス
A’を継承した具象クラスA”を作成する)必要を生じ
る結果となる。ここでは、2つのクラス間の例で示した
が、このことは、インタフェースの呼出しを保証するた
めには、バージョンアップされたクラス(ここでは具象
クラスB’を継承した具象クラスB”)を新たにコンピ
ュータにインストールするだけでは足りずに、多数のク
ラスの呼出元と呼出先の関係を全て調べてそのバージョ
ンアップされたクラスを呼び出す側のクラスまで全てを
修正し直す必要があることを意味し、プログラム開発に
多大な余計なエネルギーが費やされる結果を招くことに
なる。
【0035】図5は、図3に示すプログラム構成におい
て、具象クラスC’のインタフェースが変更された場合
の影響範囲を示す図である。ここでは、具象クラスC’
のインタフェース4の引数を‘引数無し’から‘入出力
データ’に変更した場合について説明する。この場合、
以下に説明するように、具象クラスC’のインタフェー
ス変更により、その具象クラスC’を生成する具象クラ
スB’が影響を受けるだけではなく、具象クラスB’を
生成する具象クラスA’も具象クラスB’を介して間接
的に影響を受けることになる。すなわち、 (1)「具象クラスC’」のインタフェース情報テーブ
ル部内にあるインタフェース4の引数に“入出力デー
タ”のアドレスが追加されることにより、「具象クラス
C’」のインタフェース情報テーブルが変更される。
て、具象クラスC’のインタフェースが変更された場合
の影響範囲を示す図である。ここでは、具象クラスC’
のインタフェース4の引数を‘引数無し’から‘入出力
データ’に変更した場合について説明する。この場合、
以下に説明するように、具象クラスC’のインタフェー
ス変更により、その具象クラスC’を生成する具象クラ
スB’が影響を受けるだけではなく、具象クラスB’を
生成する具象クラスA’も具象クラスB’を介して間接
的に影響を受けることになる。すなわち、 (1)「具象クラスC’」のインタフェース情報テーブ
ル部内にあるインタフェース4の引数に“入出力デー
タ”のアドレスが追加されることにより、「具象クラス
C’」のインタフェース情報テーブルが変更される。
【0036】(2)「具象クラスC’」のインタフェー
ス変更により「具象クラスB’」のインタフェース情報
テーブル部内に取込まれた「具象クラスC’」のインタ
フェース情報テーブルと、変更された「具象クラス
C’」のインタフェース情報テーーブルの内容が不一致
となるため、「具象クラスB’」を再コンパイルし、
「具象クラスB’」のインタフェース情報テーブルを変
更する必要がある。
ス変更により「具象クラスB’」のインタフェース情報
テーブル部内に取込まれた「具象クラスC’」のインタ
フェース情報テーブルと、変更された「具象クラス
C’」のインタフェース情報テーーブルの内容が不一致
となるため、「具象クラスB’」を再コンパイルし、
「具象クラスB’」のインタフェース情報テーブルを変
更する必要がある。
【0037】(3)また、「具象クラスB’」を再コン
パイルすると、「具象クラスA’」のインタフェース定
義部内に取込まれた「具象クラスB’」のインタフェー
ス情報テーブルと、変更された「具象クラスB’」のイ
ンタフェース情報テーブルの内容が不一致となるため、
具象クラスA’についても再コンパイルが必要となる。
パイルすると、「具象クラスA’」のインタフェース定
義部内に取込まれた「具象クラスB’」のインタフェー
ス情報テーブルと、変更された「具象クラスB’」のイ
ンタフェース情報テーブルの内容が不一致となるため、
具象クラスA’についても再コンパイルが必要となる。
【0038】すなわち、「具象クラスC’」のインタフ
ェースを変更したとき、「具象クラスC’」と使用関係
にある「具象クラスB’」についてインタフェース情報
テーブルの内容不一致を解決するために再コンパイルが
必要であるのみでなく、直接的には「具象クラスC’」
と使用関係のない「具象クラスA’」についても、イン
タフェース定義部内に取込まれた「具象クラスB’」の
インタフェース情報テーブルの内容が不一致となるため
「具象クラスA’」の再コンパイルが必要となる。
ェースを変更したとき、「具象クラスC’」と使用関係
にある「具象クラスB’」についてインタフェース情報
テーブルの内容不一致を解決するために再コンパイルが
必要であるのみでなく、直接的には「具象クラスC’」
と使用関係のない「具象クラスA’」についても、イン
タフェース定義部内に取込まれた「具象クラスB’」の
インタフェース情報テーブルの内容が不一致となるため
「具象クラスA’」の再コンパイルが必要となる。
【0039】このことは、直接的な使用関係(図5に示
す1次影響範囲)のみを調べてもインタフェースの呼出
しが保証されないこととなり、間接的な使用関係(図5
の2次影響範囲)まで全て調べ上げてその2次影響範囲
内のクラス全てについて再コンパイルを行なう必要を生
じ、この点も、プログラム開発に多大な負担を強いるこ
ととなり、プログラム開発の効率を大きく低下させる原
因となっている。
す1次影響範囲)のみを調べてもインタフェースの呼出
しが保証されないこととなり、間接的な使用関係(図5
の2次影響範囲)まで全て調べ上げてその2次影響範囲
内のクラス全てについて再コンパイルを行なう必要を生
じ、この点も、プログラム開発に多大な負担を強いるこ
ととなり、プログラム開発の効率を大きく低下させる原
因となっている。
【0040】本発明は、上記事情に鑑み、呼出先のクラ
スに変更が加えられた(呼出先のクラスを継承するクラ
スが生成された、あるいは呼出先のクラス自体に修正が
加えられた)ときに容易にインタフェース保証を行なう
ことのできる構造を持ったプログラムを提供することを
目的とする。
スに変更が加えられた(呼出先のクラスを継承するクラ
スが生成された、あるいは呼出先のクラス自体に修正が
加えられた)ときに容易にインタフェース保証を行なう
ことのできる構造を持ったプログラムを提供することを
目的とする。
【0041】
【課題を解決するための手段】上記目的を達成する本発
明のプログラムのうちの第1のプログラムは、1つもし
くは継承関係を伴う複数のクラスからなる呼出元機能
と、1つもしくは継承関係を伴う複数のクラスからなる
呼出先機能と、呼出元機能から呼び出されて呼出先機能
を生成する生成クラスとを有することを特徴とする。
明のプログラムのうちの第1のプログラムは、1つもし
くは継承関係を伴う複数のクラスからなる呼出元機能
と、1つもしくは継承関係を伴う複数のクラスからなる
呼出先機能と、呼出元機能から呼び出されて呼出先機能
を生成する生成クラスとを有することを特徴とする。
【0042】本発明の第1のプログラムは、呼出元機能
と呼出先機能の他に生成クラスを創設したため、図4を
参照して説明した、呼出先機能に継承クラス(図4に示
す具象クラスB”)が作成された場合に、呼出元機能
(図4に示す具象クラスA”)は何ら修正や再コンパイ
ルを行なうことなく、新たに作成されたクラス(図4に
示す具象クラスB”)をコンパイルするほかは、生成ク
ラスを修正して再コンパイルするだけでインタフェース
が保証される。
と呼出先機能の他に生成クラスを創設したため、図4を
参照して説明した、呼出先機能に継承クラス(図4に示
す具象クラスB”)が作成された場合に、呼出元機能
(図4に示す具象クラスA”)は何ら修正や再コンパイ
ルを行なうことなく、新たに作成されたクラス(図4に
示す具象クラスB”)をコンパイルするほかは、生成ク
ラスを修正して再コンパイルするだけでインタフェース
が保証される。
【0043】また、上記目的を達成する本発明のプログ
ラムのうちの第2のプログラムは、インタフェースを持
たない、継承関係の最上位に位置する抽象クラスと、そ
の抽象クラスの下位に位置する1つ以上の具象クラスと
からなる呼出元機能と、呼出元機能から呼び出されて生
成される、インタフェースを持たない、継承関係の最上
位に位置する抽象クラスと、その抽象クラスの下位に位
置する1つ以上の具象クラスとからなる呼出先機能とを
有することを特徴とする。
ラムのうちの第2のプログラムは、インタフェースを持
たない、継承関係の最上位に位置する抽象クラスと、そ
の抽象クラスの下位に位置する1つ以上の具象クラスと
からなる呼出元機能と、呼出元機能から呼び出されて生
成される、インタフェースを持たない、継承関係の最上
位に位置する抽象クラスと、その抽象クラスの下位に位
置する1つ以上の具象クラスとからなる呼出先機能とを
有することを特徴とする。
【0044】本発明の第2のプログラムは、従来(図5
参照)における具象クラスと同様の具象クラスを持つと
ともに、その具象クラスの上位にインタフェースを持た
ない抽象クラスを配置したため、呼出元クラス(図5に
示す具象クラスC’)を修正したときに再コンパイルす
る必要のあるのは、図5を参照して説明した1次影響範
囲内のみで済み、狭い範囲内のみの再コンパイルでイン
タフェースが保証される。
参照)における具象クラスと同様の具象クラスを持つと
ともに、その具象クラスの上位にインタフェースを持た
ない抽象クラスを配置したため、呼出元クラス(図5に
示す具象クラスC’)を修正したときに再コンパイルす
る必要のあるのは、図5を参照して説明した1次影響範
囲内のみで済み、狭い範囲内のみの再コンパイルでイン
タフェースが保証される。
【0045】さらに、上記目的を達成する本発明のプロ
グラムのうちの第3のプログラムは、インタフェースを
持たない、継承関係の最上位に位置する抽象クラスと、
その抽象クラスの下位に位置する1つ以上の具象クラス
とからなる呼出元機能と、インタフェースを持たない、
継承関係の最上位に位置する抽象クラスと、その抽象ク
ラスの下位に位置する1つ以上の具象クラスとからなる
呼出先機能と、呼出元機能から呼び出されて呼出先機能
を生成する生成クラスとを有することを特徴とする。
グラムのうちの第3のプログラムは、インタフェースを
持たない、継承関係の最上位に位置する抽象クラスと、
その抽象クラスの下位に位置する1つ以上の具象クラス
とからなる呼出元機能と、インタフェースを持たない、
継承関係の最上位に位置する抽象クラスと、その抽象ク
ラスの下位に位置する1つ以上の具象クラスとからなる
呼出先機能と、呼出元機能から呼び出されて呼出先機能
を生成する生成クラスとを有することを特徴とする。
【0046】本発明の第3のプログラムは、本発明の第
1のプログラムと本発明の第2のプログラムとの双方の
特徴を有するものであり、プログラムの開発、修正が大
幅に効率化される。
1のプログラムと本発明の第2のプログラムとの双方の
特徴を有するものであり、プログラムの開発、修正が大
幅に効率化される。
【0047】
【発明の実施の形態】以下、本発明の実施形態について
説明する。
説明する。
【0048】図6は、本発明の一実施形態としてのプロ
グラムが実行される環境の1つを提供するコンピュータ
の外観斜視図である。
グラムが実行される環境の1つを提供するコンピュータ
の外観斜視図である。
【0049】このコンピュータ100は、外観構成上、
本体装置101、その本体装置101からの指示に応じ
て表示画面102a上に画像を表示する画像表示装置1
02、本体装置101に、キー操作に応じた各種の情報
を入力するキーボード103、表示画面102a上の任
意の位置を指定することにより、その位置に表示されて
いる例えばアイコン等に応じた指示を入力するマウス1
04、および表示画面102a上に表示された画像をそ
のままプリントアウトするプリンタ105を備えてい
る。さらにこのコンピュータ100は、通信ケーブル1
06を有し、この通信ケーブル106やさらに図示しな
い通信回線を介して他のコンピュータやインターネット
等に接続されている。ここで、本体装置101は、外観
上、フレキシブルディスク(FD)を装填するためのF
D装填口101a、およびCD−ROMを装填するため
のCD−ROM装填口101bを有する。
本体装置101、その本体装置101からの指示に応じ
て表示画面102a上に画像を表示する画像表示装置1
02、本体装置101に、キー操作に応じた各種の情報
を入力するキーボード103、表示画面102a上の任
意の位置を指定することにより、その位置に表示されて
いる例えばアイコン等に応じた指示を入力するマウス1
04、および表示画面102a上に表示された画像をそ
のままプリントアウトするプリンタ105を備えてい
る。さらにこのコンピュータ100は、通信ケーブル1
06を有し、この通信ケーブル106やさらに図示しな
い通信回線を介して他のコンピュータやインターネット
等に接続されている。ここで、本体装置101は、外観
上、フレキシブルディスク(FD)を装填するためのF
D装填口101a、およびCD−ROMを装填するため
のCD−ROM装填口101bを有する。
【0050】図7は、図6に示す外観を有するコンピュ
ータ100のハードウェア構成図である。
ータ100のハードウェア構成図である。
【0051】このハードウェア構成図には、各種プログ
ラムを実行するCPU111、各種プログラムやデータ
等が保存されたハードディスク装置113、ハードディ
スク装置113に格納されたプログラムが読み出されC
PU111での実行のために展開される主メモリ11
2、FD200が装填され、その装填されたFD200
をアクセスするFDドライブ114、CD−ROM30
0が装填され、その装填されたCD−ROM300をア
クセスするCD−ROMドライブ115、プリンタ10
5(図1参照)との間のデータ通信を担うプリンタイン
タフェース116、および通信ケーブル106および図
示しない通信回線を介在させて他のコンピュータやイン
ターネット等との間の通信を担うインタフェース117
が示されており、これらはバス110を介して相互に接
続されている。
ラムを実行するCPU111、各種プログラムやデータ
等が保存されたハードディスク装置113、ハードディ
スク装置113に格納されたプログラムが読み出されC
PU111での実行のために展開される主メモリ11
2、FD200が装填され、その装填されたFD200
をアクセスするFDドライブ114、CD−ROM30
0が装填され、その装填されたCD−ROM300をア
クセスするCD−ROMドライブ115、プリンタ10
5(図1参照)との間のデータ通信を担うプリンタイン
タフェース116、および通信ケーブル106および図
示しない通信回線を介在させて他のコンピュータやイン
ターネット等との間の通信を担うインタフェース117
が示されており、これらはバス110を介して相互に接
続されている。
【0052】図8は、本発明の第1のプログラムの一実
施形態を示すプログラム構成図である。
施形態を示すプログラム構成図である。
【0053】ここには、「具象クラスA’」と、「具象
クラスB’」および「具象クラスB”」との間の使用関
係、および、「具象クラスB’」と「具象クラスB”」
の継承関係が図示されている。
クラスB’」および「具象クラスB”」との間の使用関
係、および、「具象クラスB’」と「具象クラスB”」
の継承関係が図示されている。
【0054】ここでは、「具象クラスA’」は「具象ク
ラスB’」および「具象クラスB”」を使用する側であ
り、呼出し元のクラスである。一方、「具象クラス
B’」は「具象クラスA’」から使用される側であり、
呼出し先のクラスである。また、「具象クラスB”」も
「具象クラスA’」から使用される側であり、呼出し先
のクラスである。さらに「具象クラスB”」は「具象ク
ラスB’」から継承した下位クラスである。また、「生
成クラス」は生成インタフェースを用意し、当該クラス
(ここでは、具象クラスB’あるいは具象クラスB”)
を生成する機能を持つ。
ラスB’」および「具象クラスB”」を使用する側であ
り、呼出し元のクラスである。一方、「具象クラス
B’」は「具象クラスA’」から使用される側であり、
呼出し先のクラスである。また、「具象クラスB”」も
「具象クラスA’」から使用される側であり、呼出し先
のクラスである。さらに「具象クラスB”」は「具象ク
ラスB’」から継承した下位クラスである。また、「生
成クラス」は生成インタフェースを用意し、当該クラス
(ここでは、具象クラスB’あるいは具象クラスB”)
を生成する機能を持つ。
【0055】すなわち、「具象クラスB”」が未だ存在
しないときは、「生成クラス」には、「具象クラス
B’」が生成されるように記述されており、「具象クラ
スB”」が作成されたときは、「具象クラスB”」が生
成されるように「生成クラス」のソースコードが書き換
えられて再コンパイルされる。
しないときは、「生成クラス」には、「具象クラス
B’」が生成されるように記述されており、「具象クラ
スB”」が作成されたときは、「具象クラスB”」が生
成されるように「生成クラス」のソースコードが書き換
えられて再コンパイルされる。
【0056】この図8のプログラム構成におけるインタ
フェース呼出しまでの流れは以下のとおりである。
フェース呼出しまでの流れは以下のとおりである。
【0057】(1)「具象クラスA’」は「生成クラ
ス」の生成インタフェースを呼出し、「具象クラス
B’」または「具象クラスB”」の当該クラスのアドレ
スを獲得する。
ス」の生成インタフェースを呼出し、「具象クラス
B’」または「具象クラスB”」の当該クラスのアドレ
スを獲得する。
【0058】(2)「具象クラスA’」は「具象クラス
B’」または「具象クラスB”」のアドレスを指定し
て、インタフェース3のアドレスを呼出す。
B’」または「具象クラスB”」のアドレスを指定し
て、インタフェース3のアドレスを呼出す。
【0059】(3)「具象クラスB’」または「具象ク
ラスB”」のインタフェース3のインタフェース情報テ
ーブル部から、インタフェース3の実装部が呼出され
る。
ラスB”」のインタフェース3のインタフェース情報テ
ーブル部から、インタフェース3の実装部が呼出され
る。
【0060】(4)「具象クラスA’」は「具象クラス
B’」または「具象クラスB”」のアドレスを指定し
て、「具象クラスB’」または「具象クラスB”」のア
ドレスが破棄される。
B’」または「具象クラスB”」のアドレスを指定し
て、「具象クラスB’」または「具象クラスB”」のア
ドレスが破棄される。
【0061】このように、この図8のプログラム構成に
よれば、「具象クラスB’」がバージョンアップされて
呼出し先の対象が「具象クラスB”」に変更されても、
呼出し元の「具象クラスA’」はソースコードを変更す
る必要がなく、既存のクラスをそのまま容易に再利用す
ることが可能となる。また、クラスの生成に関するソー
スコードを生成クラス内に隠蔽することによりバージョ
ンアップに伴うソースコード修正をその生成クラスのみ
に局所化することができ、呼出元のクラスは汎化された
生成インタフェースを使用することにより将来的にイン
タフェース保証を受けることが可能となる。
よれば、「具象クラスB’」がバージョンアップされて
呼出し先の対象が「具象クラスB”」に変更されても、
呼出し元の「具象クラスA’」はソースコードを変更す
る必要がなく、既存のクラスをそのまま容易に再利用す
ることが可能となる。また、クラスの生成に関するソー
スコードを生成クラス内に隠蔽することによりバージョ
ンアップに伴うソースコード修正をその生成クラスのみ
に局所化することができ、呼出元のクラスは汎化された
生成インタフェースを使用することにより将来的にイン
タフェース保証を受けることが可能となる。
【0062】図9は、本発明の第2のプログラムの一実
施形態を示すプログラム構成図である。
施形態を示すプログラム構成図である。
【0063】ここには、「抽象クラス」が導入されてお
り、この「抽象クラス」を導入したときの「具象クラス
C’」のインタフェース変更により受ける影響範囲が図
示されている。
り、この「抽象クラス」を導入したときの「具象クラス
C’」のインタフェース変更により受ける影響範囲が図
示されている。
【0064】ここでは、各具象クラスの最上位に、それ
ぞれ「抽象クラスA」と「抽象クラスB」、および「抽
象クラスC」を作成する。これら抽象クラスはインタフ
ェースを持たない。この場合、「具象クラスB’」のイ
ンタフェース情報テーブル部内に「抽象クラスC」のイ
ンタフェース情報テーブル(抽象クラスはインタフェー
スを持たない)がコンパイル時に取込まれる。また、
「具象クラスB’」のインタフェース2の引数に「抽象
クラスC」のアドレスが保持される。さらに、「具象ク
ラスB’」のインタフェース定義部内に「具象クラス
C’」のインタフェース情報テーブルがコンパイル時に
取込まれ、インタフェース5のアドレス呼出しをする。
ぞれ「抽象クラスA」と「抽象クラスB」、および「抽
象クラスC」を作成する。これら抽象クラスはインタフ
ェースを持たない。この場合、「具象クラスB’」のイ
ンタフェース情報テーブル部内に「抽象クラスC」のイ
ンタフェース情報テーブル(抽象クラスはインタフェー
スを持たない)がコンパイル時に取込まれる。また、
「具象クラスB’」のインタフェース2の引数に「抽象
クラスC」のアドレスが保持される。さらに、「具象ク
ラスB’」のインタフェース定義部内に「具象クラス
C’」のインタフェース情報テーブルがコンパイル時に
取込まれ、インタフェース5のアドレス呼出しをする。
【0065】ここで、図5に示す従来例の場合と同様、
「具象クラスC’」のインタフェース4の引数が“引数
無し”から“入出カデータ”にインタフェース変更され
たものとする。
「具象クラスC’」のインタフェース4の引数が“引数
無し”から“入出カデータ”にインタフェース変更され
たものとする。
【0066】このインタフェース変更による他クラスへ
の影響内容は以下のとおりである。
の影響内容は以下のとおりである。
【0067】(1)「具象クラスC’」のインタフェー
ス情報テーブル部内にあるインタフェース4の引数に
“入出カデータ”のアドレスが追加され、「具象クラス
C’」のインタフェース情報テーブルが変更される。
ス情報テーブル部内にあるインタフェース4の引数に
“入出カデータ”のアドレスが追加され、「具象クラス
C’」のインタフェース情報テーブルが変更される。
【0068】(2)この「具象クラスC’」のインタフ
ェース変更があっても、「具象クラスB’」のインタフ
ェース情報テーブル部内に取込まれた「抽象クラスC」
のインタフェース情報テーブル(抽象クラスはインタフ
ェースを持たない)は変更されることはないため、この
点にだけ着目すれば「具象クラスB’」の再コンパイル
は不要に見える。しかし、「具象クラスB’」のインタ
フェース定義部内に取込まれた「具象クラスC’」のイ
ンタフェース情報テーブルと、変更された「具象クラス
C’」のインタフェース情報テーブルの内容が不一致と
なるため「具象クラスB’」の再コンパイルが必要であ
る。尚、このとき「具象クラスB’」のインタフェース
情報テーブルが変更されることは無い。
ェース変更があっても、「具象クラスB’」のインタフ
ェース情報テーブル部内に取込まれた「抽象クラスC」
のインタフェース情報テーブル(抽象クラスはインタフ
ェースを持たない)は変更されることはないため、この
点にだけ着目すれば「具象クラスB’」の再コンパイル
は不要に見える。しかし、「具象クラスB’」のインタ
フェース定義部内に取込まれた「具象クラスC’」のイ
ンタフェース情報テーブルと、変更された「具象クラス
C’」のインタフェース情報テーブルの内容が不一致と
なるため「具象クラスB’」の再コンパイルが必要であ
る。尚、このとき「具象クラスB’」のインタフェース
情報テーブルが変更されることは無い。
【0069】(3)「具象クラスA’」のインタフェー
ス定義部内に取込まれた「具象クラスB’」のインタフ
ェース情報テーブルについては変更されていないため、
「具象クラスA’」の再コンパイルは不要である。
ス定義部内に取込まれた「具象クラスB’」のインタフ
ェース情報テーブルについては変更されていないため、
「具象クラスA’」の再コンパイルは不要である。
【0070】このように、図9のプログラム構成によれ
ば、継承関係にあるクラス単位の最上位に抽象クラスが
用意され、この抽象クラスはインタフェースを持たない
ため将来的にもインタフェース変更は発生しない。この
ため、この抽象クラスを2つのクラス間のインタフェー
スに使用することにより、将来に渡りインタフェースを
保証することが可能となる。再コンパイルの有無は、直
接関係する1次影響範囲の必要最小限に閉じられる。
ば、継承関係にあるクラス単位の最上位に抽象クラスが
用意され、この抽象クラスはインタフェースを持たない
ため将来的にもインタフェース変更は発生しない。この
ため、この抽象クラスを2つのクラス間のインタフェー
スに使用することにより、将来に渡りインタフェースを
保証することが可能となる。再コンパイルの有無は、直
接関係する1次影響範囲の必要最小限に閉じられる。
【0071】図10は、本発明の第3のプログラムの一
実施形態を示すプログラム構成図である。この図10に
は、図8に示す第1のプログラムの一実施形態と図9に
示す第2のプログラムの一実施形態とが組み合わされた
最終形態が図示されている。
実施形態を示すプログラム構成図である。この図10に
は、図8に示す第1のプログラムの一実施形態と図9に
示す第2のプログラムの一実施形態とが組み合わされた
最終形態が図示されている。
【0072】この最終形態では前述の抽象クラスに、継
承関係のあるクラス単位に役割を持たせた機能を表す普
遍的な一意な機能名が定義されている。この機能名を生
成インタフェース内で生成するクラスの識別に使用する
ことで、継承関係のクラス単位に当該クラスを生成する
ことが可能となる。また、生成に関するインタフェース
を一本化することができ、容易にインタフェースの保証
が可能となる。
承関係のあるクラス単位に役割を持たせた機能を表す普
遍的な一意な機能名が定義されている。この機能名を生
成インタフェース内で生成するクラスの識別に使用する
ことで、継承関係のクラス単位に当該クラスを生成する
ことが可能となる。また、生成に関するインタフェース
を一本化することができ、容易にインタフェースの保証
が可能となる。
【0073】この図10のインタフェース呼出しの流れ
は、図8,図9を参照して説明済であるため、重複説明
は省略する。
は、図8,図9を参照して説明済であるため、重複説明
は省略する。
【0074】
【発明の効果】以上、説明したように、本発明によれば
ソフトウェア部品の再利用を行なう際にクラスのインタ
フェースを将来に渡り保証することができ、開発の効率
化と生産性の向上、および保守のコスト低減に大きく寄
与する。
ソフトウェア部品の再利用を行なう際にクラスのインタ
フェースを将来に渡り保証することができ、開発の効率
化と生産性の向上、および保守のコスト低減に大きく寄
与する。
【0075】すなわち、本発明の第1のプログラムによ
れば、ソースコードのプログラム修正が不要となり、容
易に再利用が可能となる。
れば、ソースコードのプログラム修正が不要となり、容
易に再利用が可能となる。
【0076】また、本発明の第2のプログラムによれ
ば、実行可能なオブジェクトコードの再コンパイルが不
要となり、混在するバージョン下でのシステム動作が可
能となる。
ば、実行可能なオブジェクトコードの再コンパイルが不
要となり、混在するバージョン下でのシステム動作が可
能となる。
【図1】クラス定義から生成までの流れを示す図であ
る。
る。
【図2】「具象クラスA’」と「具象クラスB’」の使
用関係を示した図である。
用関係を示した図である。
【図3】「具象クラスA’」と「具象クラスB’」の使
用関係、および「具象クラスB’」と「具象クラス
C’」の使用関係を示した図である。
用関係、および「具象クラスB’」と「具象クラス
C’」の使用関係を示した図である。
【図4】「具象クラスA”」と「具象クラスB”」の使
用関係、および「具象クラスB’」と「具象クラス
B”」の継承関係を示した図である。
用関係、および「具象クラスB’」と「具象クラス
B”」の継承関係を示した図である。
【図5】図3に示すプログラム構成において、具象クラ
スC’のインタフェースが変更された場合の影響範囲を
示す図である。
スC’のインタフェースが変更された場合の影響範囲を
示す図である。
【図6】本発明の一実施形態としてのプログラムが実行
される環境の1つを提供するコンピュータの外観斜視図
である。
される環境の1つを提供するコンピュータの外観斜視図
である。
【図7】図6に示す外観を有するコンピュータのハード
ウェア構成図である。
ウェア構成図である。
【図8】本発明の第1のプログラムの一実施形態を示す
プログラム構成図である。
プログラム構成図である。
【図9】本発明の第2のプログラムの一実施形態を示す
プログラム構成図である。
プログラム構成図である。
【図10】本発明の第3のプログラムの一実施形態を示
すプログラム構成図である。
すプログラム構成図である。
100 コンピュータ
101 本体装置
102 画像表示装置
103 キーボード
104 マウス
105 プリンタ
111 CPU
112 主メモリ
113 ハードディスク装置
Claims (3)
- 【請求項1】 1つもしくは継承関係を伴う複数のクラ
スからなる呼出元機能と、 1つもしくは継承関係を伴う複数のクラスからなる呼出
先機能と、 前記呼出元機能から呼び出されて前記呼出先機能を生成
する生成クラスとを有することを特徴とするプログラ
ム。 - 【請求項2】 インタフェースを持たない、継承関係の
最上位に位置する抽象クラスと、該抽象クラスの下位に
位置する1つ以上の具象クラスとからなる呼出元機能
と、 該呼出元機能から呼び出されて生成される、インタフェ
ースを持たない、継承関係の最上位に位置する抽象クラ
スと、該抽象クラスの下位に位置する1つ以上の具象ク
ラスとからなる呼出先機能とを有することを特徴とする
プログラム。 - 【請求項3】 インタフェースを持たない、継承関係の
最上位に位置する抽象クラスと、該抽象クラスの下位に
位置する1つ以上の具象クラスとからなる呼出元機能
と、 インタフェースを持たない、継承関係の最上位に位置す
る抽象クラスと、該抽象クラスの下位に位置する1つ以
上の具象クラスとからなる呼出先機能と、 前記呼出元機能から呼び出されて前記呼出先機能を生成
する生成クラスとを有することを特徴とするプログラ
ム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001183770A JP2003005968A (ja) | 2001-06-18 | 2001-06-18 | プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001183770A JP2003005968A (ja) | 2001-06-18 | 2001-06-18 | プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2003005968A true JP2003005968A (ja) | 2003-01-10 |
Family
ID=19023662
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001183770A Withdrawn JP2003005968A (ja) | 2001-06-18 | 2001-06-18 | プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2003005968A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008123259A (ja) * | 2006-11-13 | 2008-05-29 | Nippon Shoken Technology Kk | Java言語プログラムを用いた大規模業務系の影響分析ツール |
JP2008134699A (ja) * | 2006-11-27 | 2008-06-12 | Nippon Shoken Technology Kk | Java言語プログラムを用いた大規模業務系の影響分析ツール |
-
2001
- 2001-06-18 JP JP2001183770A patent/JP2003005968A/ja not_active Withdrawn
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008123259A (ja) * | 2006-11-13 | 2008-05-29 | Nippon Shoken Technology Kk | Java言語プログラムを用いた大規模業務系の影響分析ツール |
JP2008134699A (ja) * | 2006-11-27 | 2008-06-12 | Nippon Shoken Technology Kk | Java言語プログラムを用いた大規模業務系の影響分析ツール |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8291375B2 (en) | Attribute-based component programming system and methodology for object-oriented languages | |
US7380242B2 (en) | Compiler and software product for compiling intermediate language bytecodes into Java bytecodes | |
US6789254B2 (en) | Java classes comprising an application program interface for platform integration derived from a common codebase | |
US7694277B2 (en) | Cross version customization of design environment | |
US6185728B1 (en) | Development system with methods for type-safe delegation of object events to event handlers of other objects | |
US5872977A (en) | Object-oriented method and apparatus for creating a makefile | |
US6865733B2 (en) | Standardized interface between Java virtual machine classes and a host operating environment | |
US20030101438A1 (en) | Semantics mapping between different object hierarchies | |
US20090164973A1 (en) | Contract programming for code error reduction | |
US20040268301A1 (en) | Adding new compiler methods to an integrated development environment | |
US9459986B2 (en) | Automatic generation of analysis-equivalent application constructs | |
JP2006092544A (ja) | プリオペレーティングシステム環境におけるモジュールの動的リンク | |
Gregersen et al. | Dynamic update of Java applications—balancing change flexibility vs programming transparency | |
US6834391B2 (en) | Method and apparatus for automated native code isolation | |
US20060143597A1 (en) | Method and a software product for adapting a .NET framework compliant reflection mechanism to a java environment | |
US7155703B2 (en) | Virtual method protection | |
WO2008113291A1 (fr) | Procédé et système pour appeler des fonctions | |
US20080222607A1 (en) | Extending Portability of Java Code Through the Use of AOP | |
US7219341B2 (en) | Code analysis for selective runtime data processing | |
US20040123308A1 (en) | Hybird of implicit and explicit linkage of windows dynamic link labraries | |
Cherubin et al. | libVersioningCompiler: An easy-to-use library for dynamic generation and invocation of multiple code versions | |
US8762976B2 (en) | Static extensibility models with dynamic languages and scripts | |
CN113168320A (zh) | 用类选择性替换遗留加载模块程序以在java虚拟机中执行 | |
JP2003005968A (ja) | プログラム | |
Jezek et al. | Magic with Dynamo--Flexible Cross-Component Linking for Java with Invokedynamic |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20080902 |