基本クラスとこの基本クラスを拡張する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に移動する方法を理解しなければなりません。 Class2を扱うプログラムの一部がClass3の関係を処理する場合、私はclass2へのキャストなしで基本クラスでは作業できません。
これは正しいと思われますか?
明確化...
学習モデルで考えてみましょう。私たちはコースとCourseClassesを持っています。私たちはまた、オンラインコースとpresencialコースを持つことができます。 Presencialコースでは、このトレーニングの費用に直面することがあります。だからコストはpresencial環境にのみ意味があります。 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
}
}
は今、私はコストに対処する必要がありますし、この瞬間presencialコースまで私には重要ではありませんが、今、唯一的環境をpresencialしても意味がかかります。
私の問題は、courseClassにいくつかのものが必要なため、CourseClassオブジェクトをコストモジュールで処理する必要がありますが、QuantitativeCourseClassは事前認証環境には意味がないため、コストの関係はRangeCourseClassです。
liskovについての質問は、私のチームにこのモデルでいくつかの変更を加えるように説得する方法です。
具体的な例を教えてください。私が見る限り、あなたはLSPを破ることはありません。 Class3を扱うことができますが、 "Base"とは関係ありません。それは依然としてBaseオブジェクトに加えて独自の他のメソッドです。クライアントクラスが "Base"または "Class2"オブジェクトを必要とするかどうかによって異なります。 – DPM
extendsキーワードを忘れてしまったようです。また、私はまだQuantitativeとRangeの意味とコストと "presenciality"との関係が何であるか分かりません。コードにコストを含めることもできます。 – DPM
問題を説明する多くのことを忘れてしまったため、説明が役に立たないようです。あなたのオブジェクトは他のものを継承しません。あなたは「プレセンス」が何を意味するのかを定義しませんでした。 –