RTIM1
5.7 他のシステムへの応用
本論文では関数型言語を使ってシステムを記述しているが,システムを抽象値を使って 記述し抽象解釈によってそれを実行する概念は関数型言語に依存しない。オブジェクト指 向の設計,開発にこの概念を応用し,ISDR 法の関数の詳細化や解釈のようにモデルの詳 細化や解釈を付けることが可能である。
オブジェクト指向の開発とISDR法を融合する方法には以下の方法が考えられる。
オブジェクトモデルや動的モデル,機能モデルを抽象的に記述し,段階的詳細化法に よってモデルを洗練する
クラス図を抽象値を用いて記述し,そのメソッド を段階的に構築する。
前者の場合,モデルの抽象的な記述は,抽象値を用いてモデルを記述するだけではなく,オ ブジェクトや状態自体をISDR法の抽象値としてみなすこともできる。そうすると,それ らの間の関係を詳細化することでモデル自体の詳細化の定義ができ,すべてのバージョン のモデルを用いて抽象解釈を定義可能である。
また,抽象的に記述された各モデルの解釈法の概念は次のようになる。すなわち,バー ジョンnのモデルまたはそのインスタンスをMnとしそれに対する環境を環境Eとすると,
その解釈IはそれまでのバージョンのMをそれぞれのバージョンの環境で評価した結果の
最大(max)の環境となる。
e
I
n
M E = max(I M
0 E
0
; I M
1 E
1
; ...; I M
n E
n )
ただし,Mi vM,Mi vMが成り立つ。
後者の場合の具体的な手順は次のようになる。
1. 属性がとりうる値の集合をそれぞれ1つの抽象値として定義し,それらを用いてすべ ての属性,操作を定義しそれらの型を明らかにする。
2. 以下の手順ですべてのクラスを必要なだけ詳細化する。
(a) ある操作に対し,それに対する振舞いがより明確になる様な抽象領域を考え,そ の領域に抽象値を一段階具体化する。
(b) その値を用いて関連するメソッド を実装するためのアルゴリズムを考え,必要 ならそのためのクラスを追加する。
(c) 関連するメソッド を新しい抽象値を用いて実装する。
(d) 新しく定義した関数について,具象化したド メインで型を推論する。
(e) すべてのバージョンのプログラムを用いて,抽象解釈する。
ここで,詳細化のプロセスでは新しく定義した関数は型推論されるので,それに関するメ ソッド の型が以前のバージョンと一致しているかどうか調べる事によって,詳細化の誤り を調べる事ができる。
このように構成したプログラム中のメソッド の実行はド メイン中の値とその具体化関係 を利用して行う。それぞれのメソッド は抽象値を入出力データとしているので,このまま 抽象解釈することで実行することができる。ただし,これらは部分関数になっているので,
定義されていない部分に関してはド メインの構造をもちいてデータを抽象化して,その抽
象度にあわせてインスタンスを生成する事により抽象実行を続ける。すなわち,メソッド の抽象実行はつぎの順序で行う。
1. 呼び出すメソッド にあわせて実引数を抽象化する。
2. その値を用いてメソッド を実行する。
3. もし,その引数についてメソッド の定義してなかった場合,メソッド のバージョンを 一つ下げてそれを 1.からの手順にしたがって抽象実行する。
ここで,1. で呼び出すメソッド は,そのインスタンス変数に入っている値に関して定義し てるバージョンを呼び出す。図 5.9に設計,実装プロセスと実行環境の概念を示す。
h : A D
{ X: D , Y: D } 3 3
Class B f : A D 3 3
3
g : D A 3 3
Class A f : A D 3 3
Class C 3
3 3
3
詳細化 詳細化
データの世界
instance of C 3
instance of B 3
{X=Int, Y=Int}
{X=Pos, Y=Pos}
{X=Neg, Y=Neg}
{X=7, Y=-9}
-1 -568
3 0
8721
...
...
Nat Int Neg
3
3 3
3
{ A: D } h : A D
{ X: D , Y: D } 2 2
Class B f : A D 2 2
2
g : D A 2 2
{ X: D } 2
Class A f : A D 2 2
2 2
Class C
2 2
2
2
2 2
2
h : A D
{ X: D , Y: D } 4 4
Class B f : A D 4 4
4
g : D A 4 4
Class A f : A D 4 4
Class C 4
4 4
4
4
4 4
4
instance of E 4
必要に応じて抽象化する.
Massage
メソッドの呼出し
実引数を抽象化し,自分自身のオブジェク より以前のバージョンのメソッドをよびだす。
もし,その処理の中で変数の書き換えが あったらオブジェクトをそのレベルまで抽象化 する。
実行環境
{ B: D } 3
Class E s : B E 3 3
3
3
{ A: D } 3 { X: D } 3 { A: D } 4 { X: D } 4
{ B: D } 3
Class E s : B E 3 3
3
3
図 5.9: 設計,実装プロセスと実行環境