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