В ООП важно исследовать взаимодействие объектов т.к. тогда мы исследуем процесс работы самой программы, а не просто данные которые есть в системе. Когда пользователь нажимает кнопку “Заказать”, программа оживляет объекты и они живут своею жизнью, взаимодействуют друг с другом, выполняют свою работу. Как нам представить этот процесс? Для этой задачи и были придуманы CRC-карты и CRC-диаграммы.
3. Цель доклада
• Раскрыть общие понятия о CRC-карточках
• Показать как CRC-карточки используются в
процессе Объектно-Ориентированного
Проектирования / Моделирования
• Применение CRC-карточки в рефакторинге
4. CRC-карты обзор
CRC: Class – Responsibilities – Collaborators (класс – ответственность
– взаимодействие) были взяты основные принципы объектно-
ориентированного моделирования
• CRC-карты используются для представления:
Классов
Ответственности класса
Взаимодействие между классами
• CRC-карты это творческий подход к Объектному
Ориентированному Моделированию
• Карты создаются в процессе исследований сценариев работы
программы, базирующейся на моделировании поведения
системы
5. Создатели
Уорд Каннингем
Кент Бек
• Октябрь, 1989
• OOPSLA '89 Conference
proceedings on Object-
oriented programming
systems, languages and
applications
6. Почему используем CRC-карты
• Портативные… комп не нужен. Можно пользоваться в любом
месте
• Карты позволяют разработчикам прочувствовать и реально
увидеть (на физическом уровне), как и какие объекты живут в
разных сценариях
• Карты полезны для обучения Объектно-Ориентированным
парадигмам
• Можно использовать в качестве наглядного пособия для
обучения методологии разработки программного
обеспечения
7. Основные понятия
• Class: скелет объекта
• Collaboration (Взаимодействие): процесс в котором
несколько классов объединяются что бы обеспечить
поведение более высокого уровня
• Object (Объект): Сущность которая может делать какие-то
вещи. Объект имеет: состояния, поведения и т.д.
• Responsibility (Ответственность): Поведение объекта за
которое он (объект) несет ответственность
• Subclass (Подкласс): Класс который наследуется от одного
или более классов
• Superclass (Супер-класс): Класс от которого наследуются
8. CRC-карточка
Order
Проверить наличие позиции OrderLine
Определить цену Customer
Проверить правильность оплаты Shipping
Отправить по адресу доставки
Имя класса Взаимодействие
Ответственность
9. CRC-карты в проектировании
Задачи проектирования.
Собрать всю необходимую информацию для начала
имплементирования User Story.
• Определить классы
• Определить ответственность классов
• Как и когда классы взаимодействуют друг с другом
10. Ищем классы
Первая “C” (class) – класс
• Первым шагом в объектно-ориентированном
проектировании является выделение классов в предметной
области
Это и есть первый шаг нашей “игры”
• Изучаем User Story или доступное ТЗ
• Ищем существительные
Именно существительные идентифицируют будущие классы
• Записываем имя класса вверху наших карточек
• Раздаем карточки участникам нашей “игры”
11. “Игра” в CRC-карты
• Команда разбивает User Story на отдельные сценарии
• Рассматриваем один сценарий в одно время
• Сценарий зачитывается
• Когда объект определенного класса создается, мы
поднимаем над столом его карточку
По объект “живет” мы держим карточку над столом
• Пока разбирается сценарий все участники определяют:
Ответственность
Новые классы
Как классы взаимодействуют друг с другом
• Все данные записываются на карточке
• И так со всеми сценариями в User Story
12. Ответственность – ты где?
“R” (Responsibilities): Ответственность – краткое описание того,
что объект должен делать
Операция которую выполняет объект
Объем знаний который поддерживает объект
Какие-либо решения, которые объект принимает
• Ищем глаголы в User Cases
Глаголы это – ответственность
• Часть ответственности очевидна
• Остальную ответственность определяем когда “играем” со
сценариями
Не обязательно находить все ответственности до начало игры. Для
старта достаточно нескольких
13. Иерархия классов, атрибуты
• В процессе, как только становится видным что нужен: супер-
класс, подкласс – добавляем их к нашим карточкам
• На самом деле определить атрибуты классов это не задача
CRC “игры”
Это детали имплементации
Если они находятся, записываем на обратной стороне карточки
• Ищем прилагательные
Прилагательные – это атрибуты
14. Связи, связи, связи
Вторая буква “C” взаимодействие (collaboration): другие классы
с которыми работает рассматриваемый класс.
• Когда подняты две и более карточки, ищем связь между
этими классами
• Крепкие связи между классами, если они вместе подняты на
одном шаге сценария
15. CRC-карты в рефакторинге
• Собираем из кода как можно больше информации и
записываем на карточке
• Эмулируем каждое поведение программы при помощи
карточек
– Вместо диаграмм взаимодействия
– Быстрый просчет всех вариантов
• Рефакторинг
– Особенно обращаем внимание на ответственность
Лучше один раз попробовать, чем
услышать