Практические правила создания классов анализа_1

• Опасайтесь всемогущих классов – классов, которые, кажется, делают все. Ищите классы, в именах которых есть слова «system» (система) или «controller» (контроллер)! Для решения этой проблемы необходимо посмотреть, можно ли разбить обязанности всемогущего класса на связные подмножества. Если да, то, вероятно, каждый из этих связных наборов обязанностей можно выделить в отдельный класс. Тогда поведение, предлагаемое исходным всемогущим классом, можно было бы получить за счет взаимодействия этих меньших классов.
• Необходимо избегать «глубоких» деревьев наследования – суть проектирования хорошей иерархии наследования в том, что каждый уровень абстракции должен иметь четко определенное назначение.
Очень легко создать много по сути бесполезных уровней. Широко распространенной ошибкой является использование иерархии для реализации некоторого рода функциональной декомпозиции, где каждый уровень абстракции имеет только одну обязанность. Это нецелесообразно во всех отношениях, поскольку ведет к запутанной, сложной для понимания модели. В анализе наследование используется только там, где есть явная и четкая иерархия наследования, проистекающая непосредственно из предметной области.
Что касается последнего правила, то следует пояснить, что имеется в виду под понятием «глубокое» дерево наследования. В анализе, где классы представляют бизнес-сущности, «глубокое» – это три и более уровней наследования. Это объясняется тем, что бизнес-сущности имеют тенденцию формировать «широкие», а не «глубокие» иерархии наследования.
При проектировании, когда дерево составляют классы области решения, определение «глубины» зависит от предполагаемого языка реализации. В Java, C++, C#, Python и Visual Basic под «глубоким» понимают дерево наследования, содержащее три или более уровней. Однако в Smalltalk деревья наследования могут быть намного более глубокими из-за структуры системы Smalltalk.

Запись опубликована в рубрике Компьютеры и интернет с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code