リヒターの置換原理とは何ですか? (例えば)

藏色散人
リリース: 2023-04-05 20:30:02
転載
8350 人が閲覧しました

リスコフ置換原理

リスコフ置換原理 LSP では、基底クラスとサブクラスの関係について説明します。この関係が存在する場合にのみ、リヒター置換関係が存在します。 2 つの特定のクラス A と B の間の関係が LSP の設計に違反する場合 (B から A への継承関係であると仮定)、特定の状況に応じて次の 2 つの再構築ソリューションのいずれかを選択できます。

<?php
//举例说明继承的风险,我们需要完成一个两数相减的功能,由类A来负责。
class a{
public $width;
public $height;
public function func1($a, $b){  
        return $a - $b;  
    }
}
$a = new a();
echo $a->func1(100,50);
//运行结果100-50=50
ログイン後にコピー

その後、新しい関数を追加する必要があります。2 つの数値の加算を完了し、それを 100 で合計します。クラス B がこれを担当します。つまり、クラス B は 2 つの関数を完了する必要があります。

クラス B を使用してクラス A を継承するコードは次のとおりです。

class b extends a{  
    public function func1($a, $b){  
        return $a + $b;
    }  
      
    public function func2($a, $b){  
        return $this->func1($a, $b) + 100;
    } 
}
$b = new b();
echo $b->func2(100, 50);
ログイン後にコピー

クラス B が誤って親クラスのメソッドを書き換えたと仮定します。メソッドに名前を付けるときに、減算関数を実行するすべてのコードがクラス B の書き換えられたメソッドを呼び出します。これにより、本来は正常に実行されていた関数 fun1 でエラーが発生します (エラーの理由は、減算が加算になり、他のユーザーが実行したためです) コードが 1 人の人間によって書かれたものだと常に考えないでください! そして、人々はコードを 1 行ずつ読む時間はなく、ルールに従ってコードを適用するだけです)。

リスコフ置換原則は一般的に次のとおりです。 サブクラスは親クラスの機能を拡張できますが、親クラスの元の機能を変更することはできません。 これには次の 4 つの意味レベルが含まれます:

1. サブクラスは親クラスの抽象メソッドを実装できますが、親クラスの非抽象メソッドをオーバーライドすることはできません。

2. 独自の独自のメソッドをサブクラスに追加できます。

3. サブクラスのメソッドが親クラスのメソッドをオーバーライドする場合、メソッドの前提条件 (つまり、メソッドの仮パラメータ) は、親クラスのメソッドの入力パラメータよりも緩くなります。

4. サブクラスのメソッドが親クラスの抽象メソッドを実装する場合、メソッドの事後条件 (メソッドの戻り値) は親クラスの事後条件よりも厳しくなります。

これは信じられないことのように思えます。なぜなら、私たち自身のプログラミングではリスコフ置換原則に違反することがよくあることがわかりますが、それでもプログラムは正常に実行されます。それで、誰もがこの疑問を抱くでしょう、もし私がリスコフ置換原則に従わないと主張したら、どのような結果になるでしょうか?

その結果、作成したコードで問題が発生する可能性が大幅に高まります。

以上がリヒターの置換原理とは何ですか? (例えば)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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