如何建立一个域,当你有一个基类和2个类扩展这个基类并且只有一个派生类与另一个对象有关系时。OO设计建模
例子:
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的情况下使用基类。
这是否正确?
澄清...
让我们在学习模型中思考。我们有课程和课程类。我们也可以有一个在线课程和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环境。
我的问题是:我需要在Cost模块中处理CourseClass对象,因为我需要courseClass的一些东西,但成本的关系与RangeCourseClass相关,因为QuantitativeCourseClass对于非本质环境没有意义。
关于liskov的问题是关于如何促使我的团队在此模型中进行一些修改。
你能提供一个更具体的例子吗?据我所知,你并没有破坏LSP。请注意,您可能正在处理Class3,但它与“Base”没有任何关系。它仍然是一个Base对象加上其他方法。它只是取决于客户端类是否需要“Base”或“Class2”对象 – DPM 2012-03-16 14:59:27
它似乎忘记了extends关键字。另外,我还不确定数量和范围的含义以及它们与成本和“先行性”的关系。你也可以在代码中包含成本。 – DPM 2012-03-16 15:33:03
你的澄清似乎没有帮助,因为你忘了很多事情,说明你的问题。你的对象不会从其他任何东西继承,并且你没有定义什么“presencial”的意思。 – 2012-03-16 16:43:18