この記事には複数の問題があります。改善
やノートページでの議論にご協力ください。この項目では、型システムにおける抽象型について説明しています。実装と独立したデータ型については「抽象データ型」をご覧ください。
抽象型(ちゅうしょうがた、英: abstract type)とは、コンピュータプログラミングの型システムのうち、名前的型システム (nominal / nominative type system) [注釈 1][1]における型の一種であり、直接インスタンス化することができないという特徴を持つ。対義語は具象型(英: concrete type)であり、具象型はインスタンス化することができる。抽象型の変数に格納された実際の値は、何らかの存在型(英語版) (existential type) を持つ[2]。
抽象型は実装を提供しないか、あるいは不完全な実装を提供する。具体的な形態や仕様はプログラミング言語ごとに異なるが、いくつかの言語において、実装を持たない抽象型はインタフェース (interface) やプロトコル(英語版) (protocol) などと呼ばれている。クラスベースのオブジェクト指向プログラミング言語では、抽象型は抽象クラス (abstract class) [注釈 2]として実装され、具象型は具象クラス (concrete class) として実装される。
例えばJavaでの抽象型は、抽象クラスとインタフェースである。ただし抽象クラスはabstractという宣言が付与されたクラスのことであり、抽象メソッドを含むこともあれば、含まないこともある[3]。また、メソッドのシグネチャを一切含まない空のインタフェースを定義することもできる。 抽象クラスは、以下のようないくつかの方法で生成され、示され、シミュレートされる。 抽象型は、静的型付けのオブジェクト指向言語において重要な機能である。動的型付け言語の場合は、ダック・タイピングがあるので抽象型は不要であり、等価な機能は存在しないものが多かったが、名前的型付け (nominal typing) の安全性や利便性を享受する観点から抽象型を導入した事例もある[4]。 派生型のないクラスを「リーフクラス」とし、それ以外を抽象クラスに分類している書籍もある[5]。 抽象型は、派生型が実装すべきメソッド群をプロトコルとして規定することができる。抽象型のインスタンスは直接生成できず、派生型は全ての必要な機能を実装しなければならない。このことはプログラムの正当性を保証する役割を担っている。 この節は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
抽象型の表記方法
JavaやC#では、クラス定義の際に明示的にキーワード abstract を付与することで抽象クラスであることを示す。
クラス定義の中で、クラスがそのプロトコルの一部として受容することを宣言されているが、実装は提供されないメソッド(抽象メソッド、C++では純粋仮想関数と呼ぶ)を含む場合、そのクラスは抽象クラスである。
抽象型を継承するが、実装が必要な機能(抽象メソッド)をすべてオーバーライドしないクラスもまた抽象クラスである。
Smalltalkなどの動的型付き言語では、自分自身 (this) へ送信するメソッドが実装されていない場合、そのクラスは抽象クラスと見なせる。(ただし、このような実装は単なるバグの可能性もあり、実行してみるまでエラーであることが検出できない。)
抽象型の性質
抽象型の種類
Size:30 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef