4.3.5. クラス優先順位リストの決定

UP


4.3.5. クラス優先順位リストの決定

クラスのdefclassフォームは、 そのクラスとそのdirectスーパークラスの全体の順序を提供します。 その順番はローカルの優先順位と呼ばれます。 これはそのクラスとそのdirectスーパークラスを順序付けしたリストです。 クラスCのクラス優先順位リストは、 Cとそのdirectスーパークラスの全体の順序であり、 これは各Cとそのdirectスーパークラスの ローカルの優先順位を含みます。

あるクラスは、そのdirectスーパークラスの先に立ち、 あるdirectスーパークラスは、 defclassフォームのスーパークラスのリストの右側に指定された その他の全てのdirectスーパークラスに先立ちます。 全てのクラスCに対して、次のような定義をします。

R_C = {(C,C1), (C1,C2), , ..., (Cn-1,Cn)}

ただしC1,...,CnCdefclassフォームを参考に 順序付けられたdirectスーパークラスです。 これらの順序付けられたペアは、 クラスCとそのdirectスーパークラスの全体の順番を生成します。

ここでS_CCとそのスーパークラスの集合とします。 ここでRは次のようになります。

R = U_{CはS_Cの要素} R_C

(TeXで書くとR = \bigcup_{C \in S_C} R_C

R_CCはS_Cの要素が矛盾するかどうかによって、 Rの集合が部分的な順序を生成するかもしれませんし、しないかもしれません。 それらが矛盾しないことを仮定するとRは部分順序を生成します。 もしR_Cが矛盾しているときは、Rに一貫性が無いと言います。

Cのクラス優先順位リストの計算をするために、 Rによって生成された部分順序を反映したS_Cの要素に対して トポロジカルソートを行います。 トポロジカルソートが、Rに関して他のクラスが先行しない 2つ以上のクラスの集合からクラスを選択しなければならないとき、 選択されるクラスは、以下に述べるように決定的に選ばれます。

もしRが矛盾していたとき、エラーが発生します。


TOP, Github