Справочная таблица: Проектирование класса
Данная справочная таблица позволяет проверить правильность моделирования класса проекта.
Взаимосвязи
Основное описание


Элементы справочной таблицы
Общие
  • Имя класса дает четкое представление о его предназначении.
  • Описание класса дает четкое представление о его предназначении.
  • Класс представляет собой единую хорошо определенную абстракцию.
  • Все атрибуты и операции класса существенны для выполнения его функций.
  • Каждый класс соответствует компактному и целостному набору функций.
  • Функции класса четко определены и сформулированы, и при этом напрямую относятся к предназначению класса.
  • Все классы относительно полны в себе и практически не зависят от других классов.
  • Все функции класса описаны на одном уровне абстракции, например, на высоком (уровень приложения) или на низком (уровень реализации), но не на обоих сразу.
  • У всех классов в рамках одной и той же иерархической структуры наследования есть уникальные атрибуты, операции и взаимосвязи (т.е., они наследуют все общие атрибуты, операции и взаимосвязи).
  • Спланирован полный жизненный цикл экземпляра класса. Все объекты создаются, используются и удаляются в рамках реализаций одного или нескольких прецедентов.
  • Класс отвечает требованиям к поведению, указанным в реализациях прецедентов.
  • Выполнены все требования к классу, изложенные в спецификациях требований.
  • Требования, предъявляемые к классу (в соответствии с описанием класса и набором объектов на диаграммах последовательностей), совместимы с конечным автоматом класса.
  • Все функции класса связаны между собой таким образом, что класс не может существовать в системах, в которых используется только подмножество его функций.
  • Не существует двух классов с одним и тем же предназначением.
Обобщение/специализация
  • Иерархическая структура обобщения сбалансирована таким образом, что ни для одного из классов она не слишком мелка и не слишком глубока.
  • В иерархической структуре наследования отражено явное сходство между классами.
  • Ни один базовый класс не представляет собой совокупность атрибутов производных классов.
  • В иерархии наследования нет промежуточных абстрактных классов с ортогональными свойствами. Примером такой ситуации может служить наличие двух копий подкласса на обеих сторонах дерева наследования.
  • Для передачи общих абстракций проекта используется механизм наследования, т.е. структура классов используется многократно.
Соглашения о присвоении имен
  • Имена классов соответствуют их задачам.
  • Имена классов соответствуют соглашениям о присвоении имен, указанным в рекомендациях по проектированию.
Операции
  • Имена всех операций понятны и соответствуют сути операций.
  • Конечный автомат и набор операций соответствуют друг другу.
  • Конечный автомат и операции полностью описывают поведение класса.
  • Параметры всех операций правильны с точки зрения их имен, количества и типов.
  • Правильно заданы спецификации реализации всех операций, для которых нужны такие спецификации.
  • Сигнатуры операций соответствуют стандартам используемого языка программирования.
  • Каждая операция используется в реализации по крайней мере одного прецедента.
Атрибуты
  • Все взаимосвязи класса необходимы для выполнения каких-либо операций.
  • Каждый атрибут соответствует одной и только одной концепции.
  • Всем атрибутам присвоены понятные имена, четко передающие их назначение.
Взаимосвязи
  • Имена ролей аггрегирований и ассоциаций правильно передают характер взаимосвязи между соответствующими классами.
  • Правильно определена множественность взаимосвязей.
Конечные автоматы
  • Конечный автомат максимально прост, но при этом реализует все необходимое поведение.
  • В конечном автомате нет избыточных состояний и переходов.
  • Для конечного автомата задан простой и понятный контекст.
  • Все зависимые объекты видны ссылающемуся на них объекту.
  • Конечный автомат эффективен и выполняет свою работу с оптимальным балансом времени и ресурсов.
  • Конечный автомат доступен для понимания.
    • Имена состояний и переходов понятны в контексте предметной области системы.
    • Имена состояний указывают на то, что происходит или произойдет, а не на то, что уже произошло.
    • Имена всех состояний и переходов уникальны в пределах конечного автомата (это не обязательно, но значительно упрощает отладку).
    • Логические группы состояний объединены в составные состояния.
    • Для упрощения автомата применяются составные состояния.
    • Метки переходов указывают на причины выполнения переходов.
    • В переходах состояний нет кода длиннее 25 строк; для упрощения структуры вместо длинного кода используются функции.
    • Максимальный уровень вложенности в конечном автомате не слишком глубок и не затрудняет понимания; обычно даже для самых сложных поведений достаточно одного-двух уровней.
  • Вместо параллельных вложенных состояний используются активные классы. Активные классы в подавляющем большинстве случаев проще и понятнее параллельных вложенных состояний.
  • В системах реального времен для реализации логических нитей управления применяются капсулы.
  • Предусмотрены действия в состояниях ошибок и обслуживания.
  • Вместо расширенных переменных состояния применяются вложенные состояния. В переходах не применяются сторожевые условия, в которых целевое состояние перехода определяется по нескольким переменным.
  • Конечный автомат не является имитацией блок-схемы.
  • Конечный автомат не перегружен вложенными автоматами, в которых предусмотрено только одно вложенное состояние. Применение таких автоматов допустимо только в ограниченных количествах и только в качестве временных заготовок для реализации компонентов в будущем.