当您有一个基类和两个扩展该基类的类并且只有一个派生类与另一个对象有关系时,如何对域进行建模。
例子:
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){...}
}
这个模型是否违反了 Liskov 原则?我认为是因为与 class3 的这种关系,所以我们必须弄清楚如何在没有这种关系的情况下建模或将这种关系移动到 Base。如果我有一部分程序处理 Class2 来处理与 Class3 的关系,我无法使用基类而不强制转换为 class2。
这个想法对吗?
澄清...
让我们在学习模型中思考。我们有课程和课程班。我们还可以开设在线课程和预科课程。在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 的东西,但是成本的关系与 RangeCourseClass 因为 QuantitativeCourseClass 对 prensecial 环境没有意义。
关于 liskov 的问题是关于如何说服我的团队对这个模型进行一些修改。