OOPの特定の失敗は、Rectangleを継承するクラスSquareで示されます。論理的には、SquareはRectangleの特殊化であるため、Rectangleから継承する必要がありますが、Squareの長さまたは幅を変更しようとすると、すべてがバラバラになります。
そのケースで何が問題になっているのかを説明する特定の用語はありますか?
OOPの特定の失敗は、Rectangleを継承するクラスSquareで示されます。論理的には、SquareはRectangleの特殊化であるため、Rectangleから継承する必要がありますが、Squareの長さまたは幅を変更しようとすると、すべてがバラバラになります。
そのケースで何が問題になっているのかを説明する特定の用語はありますか?
回答:
円楕円問題(時々として知られているソフトウェア開発における正方形長方形の問題は)オブジェクトモデルでサブタイプの多型を使用する場合に発生する可能性が落とし穴の数を示します。問題は、オブジェクト指向プログラミングを使用するときに最もよく発生します。
これは、リスコフ置換原理として知られる頭字語SOLIDの L です。この問題は、その原則の違反として発生します。
問題は、円と楕円(または同様に、正方形と長方形)を表すクラス間にどのサブタイプまたは継承関係が存在するかに関するものです。より一般的には、派生クラスで見つかった(より強力な)不変式を無効にする方法でオブジェクトを変更するメソッドが基本クラスに含まれている場合に発生する可能性のある問題を示しています。
私はそれをリスコフ代替原理の違反と見なします- Square
サブクラスは長さと幅が独立しているという不変式に特に違反します。
Liskov Substitution Principleよりも基本的なレベルでは、これはカテゴリエラーまたはカテゴリミスです。
モデリング動作のコンテキストでは、正方形は単に長方形のタイプではありません。
これに気付くと、最初の仮定(正方形は長方形の一種)がプレイから削除されるため、問題は解消されます。
この答えの問題は、学校から幾何学をしている誰にでも掘り下げられることで、正方形は長方形の一種であるということです。ただし、これは非常に特定のコンテキスト(内部角度のプロパティに基づく幾何学的形状の分類)でのみ当てはまることを理解することが非常に重要です。動作に関しては、正方形は長方形ではありません。間違ったコンテキストで分類の1つのセットを表示することは、カテゴリの間違いです。