Quora Userさんのプロフィール写真

共通部分に対する特殊部分の追加そのものはコンポジションで実現できます。今はオブジェクト指向言語でもそのほうが推奨される場合もあります。もしくは言語によっては構造的サブタイピングや交差型でデータメンバを増やすだけですむときもあります。

問題はそのデータ型に対して実行できる操作の集合(aka vtable)の包含関係によって、データのアイデンティティを保ちつつ、代入互換の制約(動的型言語では動的型チェックもしくはダックタイピングによるエラー検出)、つまりサブタイプ関係を設定したい場合(抽象データ型、インターフェースの継承)ですが、関数型プログラミング言語の型クラスと呼ばれる機能やRustのtraitがその目的に沿います。型クラス機能が使用する言語に無ければクラスやインターフェイスを併用するのがたぶん幸せです。


質問は、型システムに関わるもので、OOPの話ではない、と思うかもしれませんが、適用可能操作の集合(aka vtable)に基づくサブタイピングは、ダックタイピングを含めて、実践的な意味において、OOPの少なくともある一つの本質的中核機能だと考える立場です。

この質問に対する他の1件の回答を表示