Правила программирования на С и С++. Главы 7-8
Страница 18. Затем проектируйте иерархию снизу вверх


 

99. Затем проектируйте иерархию снизу вверх.

После того, как вы спроектировали систему объектов и сообщений, вы можете приступать к иерархии. Откиньтесь на спинку кресла и взгляните на различные объекты, и вы увидите, что многие из них получают похожие сообщения. Если два сообщения, посылаемые к разным объектам, похожи, но не одинаковы, то вам может подойти слегка более общее компромиссное, которое сможет работать и в том, и в другом месте. Обработчики для всех общих сообщений должны быть сконцентрированы в единый базовый класс. Например, имея один объект, получающий сообщения A, B и C, и второй объект, получающий A, B, D и E, вы должны остановиться на маленькой иерархии классов, в которой базовый класс реализует обработчики сообщений для A и B, один производный класс реализует обработчик для C, а второй производный класс - обработчики для D и E. Вы продолжаете этот процесс соединения общих элементов в общие базовые классы до тех пор, пока нечего будет соединять. Теперь у вас есть иерархия базовых классов.

Вы заметите, что чем более общим является класс, тем выше он расположен в иерархии. Например, класс управляющего manager вероятно имеет все свойства класса обобщенного служащего employee, а также несколько дополнительных свойств (таких, как список подчиненных служащих). Тогда для manager имеет смысл наследовать от employee, потому что это добавит возможности, отсутствующие в базовом классе employee.

На этом этапе процесса проектирования вы все еще даже не подумали о том, что же должно быть внутри объектов. Вы по-прежнему имеете дело только с системой обмена сообщениями.

Последним шагом на этом этапе проектирования - после того, как вы сделали эскиз проекта иерархии классов - остается запись определений классов. Вы добавите открытые (public) функции-члены для каждого сообщения, получаемого объектом. Эти обработчики сообщений являются единственными открытыми членами вашего определения класса. Все остальное должно быть закрытым или защищенным. Вскоре об этом подробнее.

99.1. Базовые классы должны иметь более одного производного объекта.

Это просто другая точка зрения на предыдущее правило. Если базовый класс является способом концентрации сходных свойств в одном месте, то есть смысл в том, чтобы никогда не иметь всего один производный класс. Если он у вас один, то возможности этого единственного потомка должны быть переданы родителю.

 
« Предыдущая статья   Следующая статья »