Методы выделения классов
Классы не должны появляться из головы. Их нужно выводить из предметной области, сценариев, процессов, потоков данных и бизнес-правил. Для этого используются несколько практических методов.
Метод Аббота помогает начать анализ текста. Существительные дают кандидатов в классы или атрибуты, глаголы — кандидатов в операции или связи, прилагательные — кандидатов в свойства, условия — кандидатов в правила. Например, во фразе “студент выбирает свободный интервал консультации” можно увидеть кандидатов “студент”, “интервал консультации”, “консультация”, операцию “выбирает” и свойство “свободный”.
Но результат метода Аббота нельзя принимать буквально. Он даёт сырьё, а не готовую диаграмму. “Свободный” скорее всего станет состоянием или вычисляемым условием интервала, а не отдельным классом. “Выбирает” может быть шагом сценария, а не операцией предметного класса.
Метод именных групп уточняет устойчивые сочетания: “заявка на обслуживание”, “статус заказа”, “платёжная транзакция”, “пользовательская роль”. Иногда всё сочетание обозначает один объект, иногда главное слово становится классом, а зависимое — атрибутом или связью.
Метод шаблонных классов предлагает искать типовые категории: люди, организации, документы, события, транзакции, справочники, места, роли, устройства, соглашения, состояния. Такой метод полезен, когда текст беден или участники описывают процесс слишком общо.
CRC-карточки помогают проверить ответственность. Для каждого кандидата фиксируются имя класса, обязанности и collaborators — другие классы, с которыми он взаимодействует. Если у класса нет обязанностей, возможно, он не нужен. Если обязанностей слишком много, его стоит разделить или вынести часть логики в другой объект.
Пример анализа:
| Фрагмент | Кандидат | Возможная роль | Проверка |
|---|---|---|---|
| Студент создаёт запись | Студент | роль или класс пользователя | нужно ли хранить профиль студента? |
| Студент создаёт запись | Запись | класс | есть статус и жизненный цикл |
| Свободный интервал | Интервал | класс | есть время, преподаватель, доступность |
| Свободный интервал | Свободный | состояние/условие | не самостоятельный объект |
| Система отправляет уведомление | Уведомление | событие или объект обмена | нужно ли хранить историю отправки? |
После первичного выделения кандидатов нужна фильтрация:
- это самостоятельное понятие или атрибут;
- есть ли у объекта идентичность;
- есть ли жизненный цикл;
- связаны ли с ним правила;
- участвует ли он в сценариях;
- нужен ли он системе, а не только человеку в описании;
- не является ли он технической сущностью преждевременно.
Все методы работают лучше вместе. Метод Аббота даёт стартовый список, именные группы уточняют термины, шаблонные классы помогают не забыть типовые категории, CRC-карточки проверяют ответственность. Итоговый класс должен быть не найденным словом, а обоснованным элементом модели.
После отбора кандидатов полезно сделать короткую таблицу решений: термин, источник, выбранная роль и обоснование. Такая таблица показывает, что модель не получилась случайно. Например, “интервал консультации” стал классом, потому что имеет время, преподавателя, состояние доступности и правила записи; “свободный” стал состоянием, потому что сам по себе не существует; “выбрать” остался шагом сценария.