IT系企業に勤務 · 執筆者は5,973件の回答を行い、840.5万回閲覧されています · 更新日時:2年前
共通部分に対する特殊部分の追加そのものはコンポジションで実現できます。今はオブジェクト指向言語でもそのほうが推奨される場合もあります。もしくは言語によっては構造的サブタイピングや交差型でデータメンバを増やすだけですむときもあります。
問題はそのデータ型に対して実行できる操作の集合(aka vtable)の包含関係によって、データのアイデンティティを保ちつつ、代入互換の制約(動的型言語では動的型チェックもしくはダックタイピングによるエラー検出)、つまりサブタイプ関係を設定したい場合(抽象データ型、インターフェースの継承)ですが、関数型プログラミング言語の型クラスと呼ばれる機能やRustのtraitがその目的に沿います。型クラス機能が使用する言語に無ければクラスやインターフェイスを併用するのがたぶん幸せです。
質問は、型システムに関わるもので、OOPの話ではない、と思うかもしれませんが、適用可能操作の集合(aka vtable)に基づくサブタイピングは、ダックタイピングを含めて、実践的な意味において、OOPの少なくともある一つの本質的中核機能だと考える立場です。
閲覧数:1,865回 ·
高評価を見る
· 1/2件の回答