サブタイピングとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > サブタイピングの意味・解説 

サブタイピング (計算機科学)

(サブタイピング から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/10/16 08:48 UTC 版)

サブタイピング: subtyping)や部分型[1]とは、ポリモーフィズムの形態であり、上位と定義された型を、その下位と定義された型で、型安全性に則って代替できるというプログラミング言語理論英語版の概念および実装を意味している。


  1. ^ Benjamin C. Pierce「第Ⅲ部 部分型付け」『型システム入門 −プログラミング言語と型の理論−』オーム社、2013年3月26日。ISBN 978-4274069116 
  2. ^ Benjamin C. Pierce「15.1 包摂」『型システム入門 −プログラミング言語と型の理論−』オーム社、2013年3月26日。ISBN 978-4274069116 


「サブタイピング (計算機科学)」の続きの解説一覧

サブタイピング

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/05 07:11 UTC 版)

ポリモーフィズム」の記事における「サブタイピング」の解説

詳細は「サブタイピング (計算機科学)」を参照 いくつかのプログラミング言語では、特定の多相性状況において使用できる型の範囲制限するためにサブタイピングを採用している。サブタイピングを使用すると、ある型Tのオブジェクト受け取関数は、Tのサブタイプである型Sのオブジェクト渡され場合でも正しく動作するリスコフの置換原則)。この型の関係性はしばしばS <: Tと表記される一般的にサブタイプ多相=インクルージョン多相は動的に解決される後述)。 次のJavaの例ではAnimalサブタイプとしてCatDog用意するメソッドletsHear()Animal型の引数受け取るが、そのサブタイプ引数渡して問題なく動作するabstract class Animal { abstract String talk();}class Cat extends Animal { String talk() { return "Meow!"; }}class Dog extends Animal { String talk() { return "Woof!"; }}class Test { static void letsHear(final Animal a) { System.out.println(a.talk()); } public static void main(String[] args) { letsHear(new Cat()); letsHear(new Dog()); }} オブジェクト指向言語継承によってサブタイピングを提供する典型的な実装では、各クラスそれぞれ仮想関数テーブルvtable)と呼ばれる関数テーブル持ち、各オブジェクトは自らのクラスvtableへのポインタを持つ。多相なメソッド呼び出すときには、このvtable参照する多くオブジェクト指向言語では、仮想関数呼び出しに1番目の引数(thisオブジェクト)の vtable だけを参照する単一ディスパッチ採用している。つまりその他の引数実行時の型は仮想関数呼び出しに全く無関係である。一方でCommon Lispなどでは、メソッド呼び出しが「全ての引数に対して多相的となる多重ディスパッチ採用している。

※この「サブタイピング」の解説は、「ポリモーフィズム」の解説の一部です。
「サブタイピング」を含む「ポリモーフィズム」の記事については、「ポリモーフィズム」の概要を参照ください。


サブタイピング

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/05 08:46 UTC 版)

継承 (プログラミング)」の記事における「サブタイピング」の解説

詳細は「サブタイピング (計算機科学)」を参照 サブタイピング(subtyping)とは、スーパークラスインスタンスを、サブクラスインスタンス安全に代替できること指針にした継承用法である。基底クラス変数への、派生クラスインスタンス安全な代入可能性(substitutability)を保証している。これはIs-a関係とも言われる。サブタイピングでは、派生側でのフィールド追加抑制され基底側からメソッド実装引き継ぎ抑制されており、基底側からメソッド定義(メソッドシグネチャ)の引き継ぎ重視されている。派生インスタンス代入され基底変数メソッド名から派生メソッド内容呼び出される言語機能は、メソッドオーバーライドと呼ばれ、その機能概念動的ディスパッチ英語版)と呼ばれる。サブタイピングは動的ディスパッチ焦点当てた継承解釈できる具象メソッド(定義+実装)の引き継ぎ実装継承implementation inheritance)またはコード継承code inheritance)と呼ばれており、抽象メソッド(定義だけ)の引き継ぎ界面継承interface inheritance)と呼ばれている。 Is-a関係サブタイピング主体継承関係は、UMLクラス図では汎化/特化の関係に投影されている。抽象メソッドだけで構成される純粋抽象クラスは、インターフェース呼ばれており、それとの継承関係はUMLクラス図では実現/実装の関係に投影されている。 サブタイピングのコーディング例はこうなる。 #include #include #include class Base {public: virtual ~Base() {} virtual std::string greet() const = 0;};class Derived : public Base { virtual ~Derived() { std::cout << "Destructor of Derived is called." << std::endl; } virtual std::string greet() const { return "Hello!"; }};int main() { Base* b = new Derived(); // OK std::cout << "Message: " << b->greet() << std::endl; std::cout << "Is instance of Derived? " << std::boolalpha << (typeid(*b) == typeid(Derived)) << std::endl; delete b; return 0;}

※この「サブタイピング」の解説は、「継承 (プログラミング)」の解説の一部です。
「サブタイピング」を含む「継承 (プログラミング)」の記事については、「継承 (プログラミング)」の概要を参照ください。

ウィキペディア小見出し辞書の「サブタイピング」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「サブタイピング」の関連用語

サブタイピングのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



サブタイピングのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのサブタイピング (計算機科学) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのポリモーフィズム (改訂履歴)、継承 (プログラミング) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS