リスコフ置換原理

PHPz
リリース: 2024-08-25 22:30:36
オリジナル
950 人が閲覧しました

Liskov Substitution Principle

オブジェクトは、コードの正確さに影響を与えることなく、そのサブタイプに置き換え可能である必要があります

これを継承(Is-a関係)で理解しましょう
例: ダチョウは鳥、せむしは車など

例: レーシングカーは車です

リーリー リーリー

RacingCar は車クラスの getCabinWidth() をオーバーライドしますが、それを未実装のままにします。なぜなら、レーシング カーにはキャビン幅がないからです (F1 レーシング カーを見ると、内部スペースはありません。あるのは、ドライバーが座るコックピット)
したがって、レーシングカーの室内空間はコックピットと呼ばれます。
注: レーシングカーには、一般的な車と一致しない仕様がある可能性があります

リーリー

for ループは 3 回目の反復で失敗するため、これは公開されたデザインです。
これを修正するには、継承そのものである根本を攻撃する必要があります。


解決策 1 : (階層の破壊)

継承を解除する必要があります。代わりに、Car と RacingCar の両方に共通の親を考え出します

Vehicle という非常に汎用的な親クラスを作成します

リーリー リーリー リーリー リーリー

**階層の破壊: 置換が失敗した場合は階層を破壊します


解決策 2:聞かないで教えてください

Amazon の別の例を見てみましょう
Amazon では、すべてのサードパーティ製品に対して x 額の割引を提供しています。
すべての自社製品を 1.5 倍提供します (Amazon ベーシック製品は Amazon の自社製品です)

リーリー リーリー リーリー

if ステートメントは、リスコフ置換原則に反しています(オブジェクト Product をそのサブタイプ InHouseProduct に置き換えることができるはずなので)、InHouseProduct の割引額の更新に関与していることに注意してください。ただし、ここでの if ステートメントでは、手動でしてはいけない割引額の更新

InHouseProduct クラスを少し変更すると、この問題が解決されます

リーリー

そして最後に、PricingUtils クラスから if ステートメントを削除します

リーリー

尋ねないでください: ここでは、utils クラスにすべての割引を出力するように指示しています。utils クラスは何も尋ねる必要はありません (以前 if ステートメントで尋ねていたように)


以上がリスコフ置換原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!