:
オブジェクトベース言語
:
アドバンスドなクラスベースの特徴
:
サブタイプなしのサブクラス
オブジェクトプロトコル
サブクラスがサブタイプを含まない時でさえも、クラスによって 誘導される タイプと、そのサブクラスの一つによって誘導されるタイプを関係づけることが できる。この関係は、subsumption property を成立させない。
節 3.4 の例にあるように、いつも
のサブタイプを quantify over することはできない。以下のようなパラメトリックな定義もあまり役に立たない。
ObjectOperator
is ... end;
に対して
を instantiate することはできるが、
では well-formed ではない。
サブプロトコルの関係を導入する。以下のように 2 つの演算子を導入する。
ObjectOperator
MaxProtocol[X]
is
var
n:Integer
;
method
max(other:X):X
;
end;
ObjectOperator
MinMaxProtocol[X]
is
var
n:Integer
;
method
max(other:X): X
;
method
min(other:X): X
;
end;
この例を一般化して、いつも再帰タイプ
(演算子
に対する
の再帰的な出現を抽象化することにより)から統一的に pass することができる。
演算子
はタイプ上の関数で、
の不動点が
となる。
と
の 2 つの関係を定義する。一つは、
は
の post-fixpoint である。
と表すことができる。
二つ目は、
はタイプ演算子の間での高階サブタイプ関係を意味する。
と
については以下を満たす。
2 つの関係は共に、サブプロトコルの概念の基礎を成す。
もし
ならば、
が
のサブプロトコルである。
もし
ならば、
が
の サブプロトコルである。
この関係は、演算子同士の関係であり、タイプ間の関係ではない。
以下のパラメータ化の形を適用する。
よって、
に対して
を instantiate することができ、
に対して
を instantiate することができる。
最初のパラメータ化は、 F-bounded parameterization[35,38,75] と呼ばれ、 二番目のパラメータ化は、higher-order bounded parameterization と呼ばれる。 パート III でフォーマルに取り扱う。[4] では、パラメータ化のこれら 2 つの形 を比較している。
タイプ演算子を使う代わりにサブプロトコルを提供している プログラミング言語では、タイプに関してマッチング関係(matching relation)を 定義している(
と表記)
3
。 マッチング関係の性質はサブプロトコルの定義と一致する。
マッチング関係を利用することにより、
(F-bounded interpretation)
(higher-order interpretation)
となる。よって
である。
マッチング関係では、subsumption property は成立しない (
かつ
でも
ではない)。
しかし、マッチング関係は、全てのタイプのパラメータ化のために役にたつ。
の instantiation は「正しい」となる。
要約すると、
Self
を contravariant ポジションに置いたとしても、 サブタイピングはなくなるが、
のような バイナリメソッドの継承 を表現することができる。不幸にも、subsumption はこのコンテキストでは失われる が、サブタイプ上での quantification はもはやあまり役立たない。
これらの欠点はサブプロトコル関係の存在や、 この関係によるパラメータ化の能力により、部分的に埋め合わせると考えられる。
:
オブジェクトベース言語
:
アドバンスドなクラスベースの特徴
:
サブタイプなしのサブクラス
平成12年8月22日