Байланысты: Бьерн Страуструп. Язык программирования С . М Бином, 2011
11.3.3.5 Перестройка иерархии классов Шаги 1 и 3 требуют исследования классов и их иерархии, чтобы убедиться, что они адекватно отвечают
нашим требованиям. Обычно это не так, и приходится проводить перестройку для улучшения
структуры, проекта или реализации.
Самая типичная перестройка иерархии классов состоит в выделении общей части двух классов в новый
класс или в разбиении класса на два новых. В обоих случаях в результате получится три класса:
базовый класс и два производных. Когда следует проводить такую перестройку? Каковы общие
показания, что такая перестройка будет полезной?
К сожалению нет простого и универсального ответа на эти вопросы. Это и не удивительно, поскольку
то, что предлагается, не является мелочью при реализации, а изменяет основные понятия системы.
Важной и нетривиальной задачей является поиск общности среди классов и выделение общей части.
Нет точного определения общности, но следует обращать внимание на общность для понятий системы,
а не просто для удобства реализации. Указаниями, что два класса имеют нечто общее, что возможно
выделить в общий базовый класс, служат схожие способы использования, сходство наборов операций,
сходство реализаций и просто тот факт, что часто в процессе обсуждения проекта оба класса
появляются одновременно. С другой стороны, если есть несколько наборов операций класса с
различными способами использования, если эти наборы обеспечивают доступ к раздельным
подмножествам объектов реализации, и, если класс возникает в процессе обсуждения несвязанных
тем, то этот класс является явным кандидатом для разбиения на части.
В силу тесной связи между понятиями и классами проблемы перестройки иерархии классов
высвечиваются на поверхности проблем именования классов и использования имен классов в процессе
обсуждения проекта. Если имена классов и их упорядоченность, задаваемая иерархией классов,
кажутся неудобными при обсуждении проекта, значит, по всей видимости, есть возможность улучшения
иерархии. Заметим, что подразумевается, что анализ иерархии классов лучше проводить не в одиночку.
Если вы оказались в таком положении, когда не с кем обсудить проект, хорошим выходом будет
попытаться составить учебное описание системы, используя имена классов.