抽象型

抽象型（ちゅうしょうがた、）とは、コンピュータプログラミングの型システムのうち、名前的型システム () における型の一種であり、直接インスタンス化することができないという特徴を持つ。対義語は具象型（）であり、具象型はインスタンス化することができる。抽象型の変数に格納された実際の値は、何らかの (existential type) を持つ。
抽象型は実装を提供しないか、あるいは不完全な実装を提供する。具体的な形態や仕様はプログラミング言語ごとに異なるが、いくつかの言語において、実装を持たない抽象型はインタフェース (interface) や (protocol) などと呼ばれている。クラスベースのオブジェクト指向プログラミング言語では、抽象型は抽象クラス (abstract class) として実装され、具象型は具象クラス (concrete class) として実装される。
例えばJavaでの抽象型は、抽象クラスとインタフェースである。ただし抽象クラスはcodice_1という宣言が付与されたクラスのことであり、抽象メソッドを含むこともあれば、含まないこともある。また、メソッドのシグネチャを一切含まない空のインタフェースを定義することもできる。
抽象型の表記方法.
抽象クラスは、以下のようないくつかの方法で生成され、示され、シミュレートされる。
抽象型の性質.
抽象型は、静的型付けのオブジェクト指向言語において重要な機能である。動的型付け言語の場合は、ダック・タイピングがあるので抽象型は不要であり、等価な機能は存在しないものが多かったが、名前的型付け (nominal typing) の安全性や利便性を享受する観点から抽象型を導入した事例もある。
派生型のないクラスを「リーフクラス」とし、それ以外を抽象クラスに分類している書籍もある。
抽象型は、派生型が実装すべきメソッド群をプロトコルとして規定することができる。抽象型のインスタンスは直接生成できず、派生型は全ての必要な機能を実装しなければならない。このことはプログラムの正当性を保証する役割を担っている。
抽象型の種類.
抽象クラス（実装継承と型継承の混合）
インタフェース（純粋な型継承）
プロトコル（純粋な型継承）
トレイト（Mix-inでの機能）
型クラス（アドホック多相由来のジェネリック・サブタイピング）