本研究では、昨年度の本研究の研究成果であるライブラリ関数のバージョン管理機能を発展させ、オブジェクトの動的バージョン管理による実行中のソフトウェアの発展機構を実現した。 オブジェクトのバージョン管理を実現するにあたっては、オブジェクトのバージョンをrevisionとvariationの2種類に分類して実現方式を検討した。Variationの実行時のバージョン管理の方式として、代理オブジェクトを用いたメカニズムを考案し実現した。本方式では、複数のバージョンを持つオブジェクトを使用するユーザプログラムを、そのオブジェクトの特定のバージョンと直接リンクするわけではなく、代理オブジェクトとリンクする。その代理オブジェクトが、ユーザプログラムからの要請に応じて、必要なオブジェトのバージョンをアクセスし、その結果をユーザプログラムに返す。これにより、オブジェクトが複数のバージョンを持つことが可能となり、それらを実行時に選択して使用することが可能となった。 Revisionのバージョン管理では、基本的には、variationの切り替えと同様に代理オブジェクトを用いた。さらに、オブジェクトの新バージョンを作成する時に、既存のバージョンの状態、すなわちインスタンス変数の値を受け継ぐために、Derivationをもとにしたメカニズムを考案し実現した。本方式では、既存のオブジェクトに変更を加えたい場合には、新バージョンのオブジェクトを表すクラスを、既存のオブジェクトのクラスの導出クラスとして定義する。さらに、オブジェクトの新バージョンを、既存のバージョンを親オブジェクトとする導出クラスのインスタンスとして生成する。これにより、既存のバージョンの状態を失うことなく、新バージョンへ切り替えることが可能となった。
|