186 Глава 8. Выявление классов анализа
«это»). Опасность функтоидов всегда существует, когда аналитики,
привыкшие к прямой функциональной декомпозиции, впервые бе
рутся за ОО анализ и проектирование.
• Опасайтесь всемогущих классов – классов, которые, кажется, дела
ют все. Ищите классы, в именах которых есть слова «system» (сис
тема) или «controller» (контроллер)! Для решения этой проблемы
необходимо посмотреть, можно ли разбить обязанности всемогуще
го класса на связные подмножества. Если да, то, вероятно, каждый
из этих связных наборов обязанностей можно выделить в отдель
ный класс. Тогда поведение, предлагаемое исходным всемогущим
классом, можно было бы получить за счет взаимодействия этих
меньших классов.
• Необходимо избегать «глубоких» деревьев наследования – суть про
ектирования хорошей иерархии наследования в том, что каждый
уровень абстракции должен иметь четко определенное назначение.
Очень легко создать много по сути бесполезных уровней. Широко
распространенной ошибкой является использование иерархии для
реализации некоторого рода функциональной декомпозиции, где
каждый уровень абстракции имеет только одну обязанность. Это
нецелесообразно во всех отношениях, поскольку ведет к запутан
ной, сложной для понимания модели. В анализе наследование ис
пользуется только там, где есть явная и четкая иерархия наследо
вания, проистекающая непосредственно из предметной области.
Что касается последнего правила, то следует пояснить, что имеется
в виду под понятием «глубокое» дерево наследования. В анализе, где
классы представляют бизнессущности, «глубокое» – это три и более
уровней наследования. Это объясняется тем, что бизнессущности
имеют тенденцию формировать «широкие», а не «глубокие» иерархии
наследования.
При проектировании, когда дерево составляют классы области реше
ния, определение «глубины» зависит от предполагаемого языка реа
лизации. В Java, C++, C#, Python и Visual Basic под «глубоким» пони
мают дерево наследования, содержащее три или более уровней. Одна
ко в Smalltalk деревья наследования могут быть намного более глубо
кими изза структуры системы Smalltalk.
8.4. Выявление классов
Далее в этой главе обсуждается основной вопрос ОО анализа и проек
тирования – выявление классов анализа.
Как указывает Мейер (Meyer) в книге «Object Oriented Software Con
struction» [Meyer 1], нет простого алгоритма правильного выявления
классов анализа. Наличие подобного алгоритма было бы равнозначно
существованию универсального способа разработки ОО программного