При создании иерархии наследования я запутался. Абстрактный базовый класс должен содержать только часто используемые вещи для унаследованных классов. Но знать, какие методы, поля и свойства обычно используются, невозможно при проектировании. Поэтому я не стесняюсь группировать их с абстрактными классами, которые наследуются иерархически. Это то, что я делаю, не обращая внимания на то, какие мои настоящие классы будут в иерархии, потому что я легко найду место во всеобъемлющей иерархии. А также очень возможно найти некоторые ненужные абстрактные классы в середине иерархии.
Но я не знаю, это правильный способ проектирования? И какие недостатки могут возникнуть в неидеальной абстрактной иерархии. Я должен дать четкий пример для этого. Подумай о шахматах и фигурах. Если мне нужно определить фигуры, такие как пешка, ферзь, король и т. Д. Посмотрите на диаграмму UML ниже.
Я разделил иерархию на 2 скользящих и не скользящих части после абстрактного класса Piece, потому что я считаю, что для скольжения и отсутствия скольжения потребуются разные обычно используемые элементы.
Но я также могу разделить их по направлению, потому что некоторые фигуры могут идти в 8 направлениях, некоторые - в 4 направлениях, а некоторые - в 2 или 3 направления. Группировка их направленно вызывает некоторые новые вопросы. Где они будут в иерархии? они придут после скользящих занятий? Если это возможно, можно найти четыре направленные группировки по скользящим и не скользящим группам, и мы знаем, что невозможно наследовать по 2 классам. Так что для таких ситуаций мне приходится выбирать интерфейсы? если направления никогда не будут под обоими, так что можно использовать абстрактные классы. Это нормально, если я снова найду новую общую группу, которая не требует наследования от 2 классов, так что я могу определить ее по указаниям.
В конце разработки все мои части могут найти идеальные конечные узлы в иерархии, и это будет очень полезно для будущего, когда будет достаточно комплексное построение, и мне не нужно что-то менять в иерархии.
Но что может быть недостатком в создании слишком большой всеобъемлющей иерархии?
Может быть, в автозаполнении IDE может отображаться множество ненужных и странно названных абстрактных базовых классов, которые смущают других? какие могут быть другие недостатки?