型理論において、限定量化(限定多態性または制約ジェネリシティとも呼ばれる)とは、特定の型のサブタイプのみに範囲が限定(「限定」)された普遍量指定子または存在量指定子を指します。限定量化は、パラメトリック多態性とサブタイピングの相互作用です。限定量化は、従来System F <:の機能設定で研究されてきましたが、 Java、C#、Scalaなどのパラメトリック多態性(ジェネリック)をサポートする最新のオブジェクト指向言語でも利用できます。
概要
限定量化の目的は、多態的関数が型の継承ではなくオブジェクトの特定の動作に依存できるようにすることです。オブジェクト クラスに対してレコード ベースのモデルを想定しており、すべてのクラス メンバーはレコード要素であり、すべてのクラス メンバーは名前付き関数です。オブジェクト属性は、引数を取らずにオブジェクトを返す関数として表されます。特定の動作は、関数名と引数の型、戻り値の型です。限定量化では、このような関数を持つすべてのオブジェクトを考慮します。例としては、min互いに比較可能なすべてのオブジェクトを考慮する多態的関数があります。[引用が必要]
F限界定量化
1989年に導入されたF制限量化または再帰的制限量化は、再帰型に適用される関数のより正確な型付けを可能にします。再帰型とは、何らかの引数またはその戻り値の型として使用する関数を含む型です。 [1]
例
この種の型制約は、Javaではジェネリック インターフェースを使用して表現できます。次の例は、互いに比較できる型を記述し、これを多態関数の型情報として使用する方法を示しています。この関数は単純な境界付き量化を使用し、 F 境界付き量化を使用する関数
Test.minとは対照的に、オブジェクトが相互に比較可能であることを保証しません。Test.fMin
数学的表記では、2つの関数の型は次のようになる。
- 最小: ∀ T, ∀ S ⊆ {比較対象: T → int}. S → S → S
- fMin: ∀ T ⊆ Comparable[T]. T → T → T
どこ
- 比較可能[T] = {比較対象: T → int}
インターフェース Comparable < T > {
int compareTo ( T他の);
}
パブリッククラスIntegerはComparable <Integer>を実装します。
@Override
public int compareTo ( Integer other ) { // ... } }
パブリッククラスStringはComparable <String>を実装します。
@Override
public int compareTo ( String other ) { // ... }
}
public class Test { public static void main ( String [] args ) { final String a = min ( "cat" , "dog" ); final Integer b = min ( 10 , 3 ); final Comparable c = min ( "cat" , 3 ); // 実行時に ClassCastException をスローしますfinal String str = fMin ( "cat" , "dog" ); final Integer i = fMin ( 10 , 3 ); // final Object o = fMin("cat", 3); // コンパイルされません} public static < S extends Comparable > S min ( S a , S b ) { if ( a . compareTo ( b ) <= 0 ) { return a ; } else { return b ; } } public static < T extends Comparable < T >> T fMin ( T a , T b ) { if ( a . compareTo ( b ) <= 0 ) { return a ; } else { return b ; } }
}
参照
注記
- ^ オブジェクト指向プログラミングのためのF境界多態性。Canning、 Cook、Hill、Olthof、Mitchell。http ://dl.acm.org/citation.cfm ?id=99392
参考文献
- Cardelli , Luca ; Wegner, Peter (1985年12 月)。「型、データ抽象化、およびポリモーフィズムの理解について」( PDF)。ACM Computing Surveys。17 ( 4): 471–523。CiteSeerX 10.1.1.117.695。doi : 10.1145 /6041.6042。ISSN 0360-0300。S2CID 2921816 。
- Peter S. Canning、William R. Cook、Walter L. Hill、John C. Mitchell、William Olthoff。「オブジェクト指向プログラミングのための F 境界ポリモーフィズム」。関数型プログラミング言語とコンピュータ アーキテクチャに関する会議、1989 年。
- Benjamin C. Pierce「交差型と境界付き多態性」。Lecture Notes in Computer Science 664、1993年。
- Gilad Bracha、Martin Odersky、David Stoutamire、およびPhilip Wadler。「過去にとって未来を安全にする: Java プログラミング言語への汎用性の追加」。オブジェクト指向プログラミング: システム、言語、アプリケーション(OOPSLA)。ACM、1998 年 10 月。
- Andrew Kennedy およびDon Syme。「.NET 共通言語ランタイムのジェネリックの設計と実装」。プログラミング言語の設計と実装、2001 年。
- ピアス、ベンジャミン C. (2002)。型とプログラミング言語。MIT プレス。ISBN 978-0-262-16209-8。第26章 限定数量化
外部リンク
- ポートランドパターンリポジトリにおける境界付き多態性
- 「Cecil 言語: 仕様と根拠」の「F 境界多態性」
