Допустим, я хочу создать абстрактную систему для подсчета разделов в документе. Я разработал два класса: Документ и Раздел, документ имеет список разделов и способ их подсчета.Могу ли я подклассифицировать абстрактный класс, который имеет еще один абстрактный класс, который также является подклассом? (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. Например, у меня есть книги с главами. Книга будет подклассом Документа, а Глава - подклассом Раздела. Оба класса будут содержать дополнительные поля и функциональные возможности, не связанные с подсчетом разделов.
Проблема заключается в том, что поскольку документ содержит разделы, а не главы, добавленная функциональность главы бесполезна для меня, она может только добавить в качестве раздела в книгу.
Я читал об удручающем, но на самом деле думаю, что это неправильный путь. Я думаю, может быть, я совсем не совсем понял.
Мой вопрос приходит к следующему: Как создать такую абстрактную систему, которая может быть повторно использована подклассовыми объектами, и это путь?
Хотя я согласен с тем, что ответ Джона на самом деле отвечает на ваш вопрос, я был бы склонен сделать шаг назад и спросить, может быть, вы не страдаете от того, что я называю «синдром счастья объекта». Вам действительно нужно обрабатывать документы и разделы полиморфно через большой набор возможных топологий документа/раздела? Увеличивает ли добавленная сложность и, следовательно, добавляет стоимость ваших сложных отношений типа «оплачивает себя» с точки зрения многократного повторного использования кода с помощью полиморфизма и наследования, или это просто ООП для ООП? –
Эрик, возможно, вы правы. Может быть, это много, и я добавляю к много сложностей, я действительно думал об этом сам. Но я чувствую, что у меня нет знаний, чтобы знать, так ли это или нет. То, что я действительно хочу сделать, - это иметь абстрактную «систему», которую я могу повторно использовать и не загромождать такими вещами, как персистенция, например. В вышеупомянутом случае Книга имела бы добавленную функциональную способность быть способной к сохранению (используя ORM). –