如何建立一個域,當你有一個基類和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