1
可以說我想設計一個抽象系統來計算文檔中的部分。我設計了兩個類,文檔和部分,該文檔有一個部分列表和一個方法來計數它們。我可以繼承具有另一個也是子類的抽象類的抽象類嗎? (C#)
public abstract class Document {
List<Section> sections;
public void addSection(Section section) {
sections.Add(section);
}
public int sectionCount() {
return sections.count;
}
}
public abstract class Section {
public string Text;
}
現在,我希望能夠在multipe場景中使用此代碼。例如,我有書籍和章節。 Book是Document的子類,Chapter是Section的子類。這兩個類都將包含額外的字段和功能,與計算章節無關。
我偶然發現現在的問題是,由於文檔中包含的部分,而不是章節,第一章的新增功能是對我沒用,只能添加爲部分圖書。
我正在閱讀關於向下傾斜的內容,但真的認爲這不是正確的方法。我想也許我完全採取了錯誤的做法。
我的問題是這樣的:我如何設計這樣一個抽象系統,可以被子類對象重用,並且這是要走的路嗎?
雖然我同意Jon的回答實際上回答了你的問題,但我會傾向於退後一步,詢問你是否可能沒有受到我稱之爲「對象幸福綜合徵」的痛苦。您是否真的需要通過多種可能的文檔/節拓撲來對文檔和節進行多態處理?在通過多態和繼承進行大規模代碼重用方面,複雜類型關係的「複雜性」增加了複雜性,從而增加了成本?還是僅僅爲了OOP而使用OOP? – 2009-06-19 16:03:26
埃裏克,你可能是對的。也許這很重要,我會加入很多複雜的問題,我其實自己也在想這個。但我覺得我不知道這是否是這種情況。我真正想要完成的是有一個抽象的「系統」,我可以重複使用它,並且不會像例如持久性那樣混亂。在上述情況下,Book將具有能夠自我保持的附加功能(使用ORM)。 – 2009-06-22 07:05:17