LSP では、クラスはその基本クラスに置き換え可能であるべきであると述べています。つまり、派生クラスと基本クラスは意味的に同等でなければなりません。
しかし、LSP はインターフェイスを実装するクラスにも適用されるのでしょうか? 言い換えれば、クラスによって実装されたインターフェイス メソッドがユーザーが期待するものと意味的に異なる場合、これは LSP 違反と見なされますか?
ありがとうございました
LSP では、クラスはその基本クラスに置き換え可能であるべきであると述べています。つまり、派生クラスと基本クラスは意味的に同等でなければなりません。
しかし、LSP はインターフェイスを実装するクラスにも適用されるのでしょうか? 言い換えれば、クラスによって実装されたインターフェイス メソッドがユーザーが期待するものと意味的に異なる場合、これは LSP 違反と見なされますか?
ありがとうございました
はい。インターフェイスには、クラスと同じように「is a [noun]」の関係がありますが、名詞が具体的なタイプではなく、「[形容詞句]であるもの」である点が異なります。形容詞句が「アイテムを受け入れることができるかどうかを安全に尋ねることができ、アイテムを受け入れることができるか、受け入れないことを報告することができる」場合、アイテムを受け入れることができるかどうかを安全に尋ねることができなかったオブジェクト、またははいと答えますが、実際にアイテムが与えられた場合、それによって記述されたインターフェースの正当な実装ではない場合、動作が悪くなります。
いいえ
サブタイプにのみ適用されます。簡単な要約については、ウィキペディアの記事を参照してください。
class B
継承または拡張するがある場合は、切り替えることがclass A
でき、すべてが正常に機能するはずです。インターフェイスは、多重継承を許可しない言語でよく使用されるため、2 つのオブジェクトは共通の動作を共有しますが、実際にその動作を実行する方法は両者で異なります。つまり、それらを交換可能に切り替えることはできません。class A
class B