Перейти к содержимому

Методы выделения классов

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

Метод Аббота помогает начать анализ текста. Существительные дают кандидатов в классы или атрибуты, глаголы — кандидатов в операции или связи, прилагательные — кандидатов в свойства, условия — кандидатов в правила. Например, во фразе “студент выбирает свободный интервал консультации” можно увидеть кандидатов “студент”, “интервал консультации”, “консультация”, операцию “выбирает” и свойство “свободный”.

Но результат метода Аббота нельзя принимать буквально. Он даёт сырьё, а не готовую диаграмму. “Свободный” скорее всего станет состоянием или вычисляемым условием интервала, а не отдельным классом. “Выбирает” может быть шагом сценария, а не операцией предметного класса.

Метод именных групп уточняет устойчивые сочетания: “заявка на обслуживание”, “статус заказа”, “платёжная транзакция”, “пользовательская роль”. Иногда всё сочетание обозначает один объект, иногда главное слово становится классом, а зависимое — атрибутом или связью.

Метод шаблонных классов предлагает искать типовые категории: люди, организации, документы, события, транзакции, справочники, места, роли, устройства, соглашения, состояния. Такой метод полезен, когда текст беден или участники описывают процесс слишком общо.

CRC-карточки помогают проверить ответственность. Для каждого кандидата фиксируются имя класса, обязанности и collaborators — другие классы, с которыми он взаимодействует. Если у класса нет обязанностей, возможно, он не нужен. Если обязанностей слишком много, его стоит разделить или вынести часть логики в другой объект.

Пример анализа:

ФрагментКандидатВозможная рольПроверка
Студент создаёт записьСтудентроль или класс пользователянужно ли хранить профиль студента?
Студент создаёт записьЗаписьклассесть статус и жизненный цикл
Свободный интервалИнтервалклассесть время, преподаватель, доступность
Свободный интервалСвободныйсостояние/условиене самостоятельный объект
Система отправляет уведомлениеУведомлениесобытие или объект обменанужно ли хранить историю отправки?

После первичного выделения кандидатов нужна фильтрация:

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

Все методы работают лучше вместе. Метод Аббота даёт стартовый список, именные группы уточняют термины, шаблонные классы помогают не забыть типовые категории, CRC-карточки проверяют ответственность. Итоговый класс должен быть не найденным словом, а обоснованным элементом модели.

После отбора кандидатов полезно сделать короткую таблицу решений: термин, источник, выбранная роль и обоснование. Такая таблица показывает, что модель не получилась случайно. Например, “интервал консультации” стал классом, потому что имеет время, преподавателя, состояние доступности и правила записи; “свободный” стал состоянием, потому что сам по себе не существует; “выбрать” остался шагом сценария.