[解決済み] リスコフ置換原理の例として、どのようなものがありますか?
2022-03-16 10:31:01
質問
Liskov Substitution Principle (LSP) は、オブジェクト指向設計の基本原則であると聞きました。どのようなもので、どのような使用例があるのでしょうか?
どのように解決するのですか?
最近聞いたポッドキャストでボブおじさんが言っていた)LSPを説明する素晴らしい例は、自然言語では正しく聞こえることが、コードでは全くうまくいかないことがあるということです。
数学では
Square
は
Rectangle
. 確かにこれは矩形の特殊化です。このquot;is a"を見ると、これを継承でモデル化したくなりますね。しかし、もしあなたがコードで
Square
から派生した
Rectangle
であれば
Square
を期待する場所であれば、どこでも使えるはずです。
Rectangle
. そのため、奇妙な動作になることがあります。
があったとします。
SetWidth
と
SetHeight
メソッドを
Rectangle
これは完全に論理的です。しかし、もしあなたの
Rectangle
への参照は
Square
であれば
SetWidth
と
SetHeight
というのは、一方を設定するともう一方もそれに合わせて変化してしまうからです。この場合
Square
はリスコフ代入テストに失敗します。
Rectangle
という抽象的なものであり
Square
を継承しています。
Rectangle
はダメなやつです。
もう一つの貴重な作品をご覧ください。 SOLID Principles モチベーションポスター .
関連
-
[解決済み] Inversion of Controlとは?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] mixinとは何か、なぜ有用なのか?
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み] インターフェースとベースクラス
-
[解決済み] JavaScriptでクラスを定義するために使用できるテクニックと、そのトレードオフとは?
-
[解決済み] Java のコア・ライブラリにおける GoF デザイン・パターンの例
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
-
[解決済み] メソッドチェイニング - なぜ良い習慣なのか、そうでないのか?
-
[解決済み] オブジェクト指向分析・設計によるエレベータのモデル化 [終了しました]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] 関数型プログラミングとオブジェクト指向プログラミングの比較【終了しました
-
[解決済み] インターフェースとベースクラス
-
[解決済み] チューリングコンプリートとは?
-
[解決済み] コヒーシ ョンとカップリングの違い
-
[解決済み] 不変量とは何ですか?
-
[解決済み] 実装ではなくインターフェースにプログラムする」とはどういう意味ですか?
-
[解決済み] nullを返すのは設計ミス?[クローズド]
-
[解決済み] Dependency InjectionはEncapsulationを犠牲にしなければならないのか?