「サブクラス (計算機科学)」の版間の差分

削除された内容 追加された内容
編集の要約なし
編集の要約なし
1行目:
[[オブジェクト指向プログラミング]]において '''サブクラス'''とはその[[スーパークラス (計算機科学)|スーパークラス]]のメンバ([[フィールド (計算機科学)|フィールド]]と[[メソッド]])を[[継承]]する[[クラス (コンピュータ)|クラス]]のことである。
 
しかし、オブジェクト指向プログラミングにおいて、サブクラスを単に、スーパークラスの機能を拡張したものであるとだけ理解するのは、賢明ではない。
サブクラスは、スーパークラスの特殊化したものであると定義することで、見通しの良いプログラムが構築できる。サブクラスは、そのスーパークラスの一種であると考えるのが正しい。
 
しかし、オブジェクト指向プログラミングにおいて、サブクラスを単に、スーパークラスの機能を拡張したものであるとだけ理解するのは、賢明ではない。
サブクラスは、スーパークラスの特殊化したものであると定義することで、見通しの良いプログラムが構築できる。サブクラスは、そのスーパークラスの一種であると考えるのが正しい
 
*任意のクラスを継承するサブクラスとは、そのスーパークラスを特化したものである。
9 ⟶ 8行目:
 
 
例えば、「[[ネコ]]」が[[クラス (コンピュータ)|クラス]]であった場合、そのサブクラスは、「[[ペルシャ猫]]」や「[[マンクス|マンクス猫]]」などである。
例えば、「[[猫]]」のサブクラスとして「[[チーター]]」を定義することはオブジェクト指向に反する。猫にできることは「チーター」には何でもできる上に、チーターは猫にはできないことができる。チーターは猫を拡張したものであるから猫のサブクラスである…などと考えることは間違いである。
猫のサブクラスは、「[[ペルシャ猫]]」や「[[マンクス|マンクス猫]]」などである。
 
マンクス猫は猫の一種である。一方、「猫はマンクス猫の一種である」と言うことはできない。'''このような関係を、[[Is-a|Is-a関係]]と呼ぶ'''。
*Manx is a Cat. は正しい。
*Cat is a Manx. は正しくない。
18 ⟶ 16行目:
 
 
[[オブジェクト指向]]においては、サブクラスはスーパークラスの一種である(Subclass is a superclass.)という関係が、必ず成立しなければならない。(詳しくは [[{{main|Is-a]] も参照。)}}
 
 
サブクラス-スーパークラス間の関係がクラス-[[インスタンス]]間との関係とに混同しないこと。「マンクス猫のインスタンス」は「ある特定のマンクス猫」のことである。例えばサザエさんちのタマであるとか、具体的な生きているマンクス猫の個体のことである。一方、クラスとは、抽象的なマンクスネコのことである。つまり、マンクス猫のクラスとは、個別のマンクス猫のことではない。マンクス猫のクラスは、マンクス猫とは何かということを示す定義のことである。特定のマンクス猫(マンクス猫クラスのインスタンス)が狐によって尻尾を噛みつかれたとしても、マンクス猫クラスは変わらないだろう。まさにその特定のマンクス猫が変わるだけである。
 
サブクラスとスーパークラスはしばしば、[[C++]]開発者[[ビャーネ・ストロヴストルップ]]によって作られた造語として、それぞれ''派生''(''{{lang|en|derived}}'')クラス、''基底''(''{{lang|en|base}}'')クラスと呼ばれる。彼は伝統的命名法よりもより直感でこれらの造語を見いだした。<ref>[[ビャーネ・ストロヴストルップ|Stroustrup, Bjarne]]. ''The Design and Evolution of C++''. Addison-Wesley. Reading, Mass. 1994. ISBN 0-201-54330-3. Page 49</ref>