基本クラスとこの基本クラスを拡張する2つのクラスがあり、派生クラスの1つだけが別のオブジェクトとの関係を持っている場合に、ドメインをモデル化する方法。
例:
public abstract class Base
{
public abstract void method();
}
public class1 extends Base
{
public void method()
{
do some stuff
}
}
public class2 extends Base
{
private Class3 class3;
public void method()
{
do other stuff
}
public Class3 getClass3(){...}
public void setClass3(Class3 class3){...}
}
このモデルはリスコフの原則を破っていますか?class3とのこの関係のためにそう思うので、この関係なしでモデル化する方法、またはこの関係をBaseに移動する方法を理解する必要があります。Class3との関係を処理するためにClass2を処理するプログラムの一部がある場合、class2にキャストしないと基本クラスを操作できません。
これは正しい考えですか?
明確にする...
学習モデルで考えてみましょう。コースとコースクラスがあります。オンラインコースやプレセンシャルコースもあります。プレセンシャルコースでは、このトレーニングの費用に直面する可能性があります。したがって、コストは実在する環境にのみ意味があります。CourseClassesには、範囲の日付または定性的な日付を含めることができます。
今日私はこのモデルを持っています:
Course
{
...
}
public abstract class CourseClass
{
private Course course;
// getter and setter to course
public abstract Enrollment enroll(Person student);
}
public class QuantitativeCourseClass
{
public Enrollment enroll(Person student)
{
// enroll for quantitative
}
}
public class RangeCourseClass
{
public Enrollment enroll(Person student)
{
// enroll for range
}
}
今、私はコストに対処する必要があり、この瞬間まで、プレゼンスのコースは私にとって重要ではありませんが、今では、コストはプレゼンスの環境にのみ意味があります。
私の問題は次のとおりです。courseClassのいくつかのものが必要なため、コストモジュールでCourseClassオブジェクトを処理する必要がありますが、QuantitativeCourseClassは財務環境に意味がないため、コストの関係はRangeCourseClassとの関係です。
リスコフについての質問は、このモデルにいくつかの変更を加えるために私のチームをどのように説得するかについてです。