CRC cards / Minsk PHP MeetUp #8
-
Upload
alexander-nemanov -
Category
Technology
-
view
197 -
download
0
description
Transcript of CRC cards / Minsk PHP MeetUp #8
CRC-карточки,
используем в своей
работе
Цель доклада
• Раскрыть общие понятия о CRC-карточках• Показать как CRC-карточки используются в
процессе Объектно-Ориентированного Проектирования / Моделирования
• Применение CRC-карточки в рефакторинге
CRC-карты обзорCRC: Class – Responsibilities – Collaborators (класс – ответственность – взаимодействие) были взяты основные принципы объектно-ориентированного моделирования
• CRC-карты используются для представления: Классов Ответственности класса Взаимодействие между классами
• CRC-карты это творческий подход к Объектному Ориентированному Моделированию
• Карты создаются в процессе исследований сценариев работы программы, базирующейся на моделировании поведения системы
Создатели
Уорд Каннингем
Кент Бек• Октябрь, 1989• OOPSLA '89 Conference
proceedings on Object-oriented programming systems, languages and applications
Почему используем CRC-карты• Портативные… комп не нужен. Можно пользоваться в любом
месте• Карты позволяют разработчикам прочувствовать и реально
увидеть (на физическом уровне), как и какие объекты живут в разных сценариях
• Карты полезны для обучения Объектно-Ориентированным парадигмам
• Можно использовать в качестве наглядного пособия для обучения методологии разработки программного обеспечения
Основные понятия• Class: скелет объекта• Collaboration (Взаимодействие): процесс в котором
несколько классов объединяются что бы обеспечить поведение более высокого уровня
• Object (Объект): Сущность которая может делать какие-то вещи. Объект имеет: состояния, поведения и т.д.
• Responsibility (Ответственность): Поведение объекта за которое он (объект) несет ответственность
• Subclass (Подкласс): Класс который наследуется от одного или более классов
• Superclass (Супер-класс): Класс от которого наследуются
CRC-карточка
OrderПроверить наличие позиции OrderLine
Определить цену Customer
Проверить правильность оплаты Shipping
Отправить по адресу доставки
Имя класса ВзаимодействиеОтветственность
CRC-карты в проектировании
Задачи проектирования.Собрать всю необходимую информацию для начала имплементирования User Story.• Определить классы• Определить ответственность классов• Как и когда классы взаимодействуют друг с другом
Ищем классыПервая “C” (class) – класс
• Первым шагом в объектно-ориентированном проектировании является выделение классов в предметной области Это и есть первый шаг нашей “игры”
• Изучаем User Story или доступное ТЗ • Ищем существительные
Именно существительные идентифицируют будущие классы
• Записываем имя класса вверху наших карточек• Раздаем карточки участникам нашей “игры”
“Игра” в CRC-карты• Команда разбивает User Story на отдельные сценарии• Рассматриваем один сценарий в одно время• Сценарий зачитывается• Когда объект определенного класса создается, мы
поднимаем над столом его карточку По объект “живет” мы держим карточку над столом
• Пока разбирается сценарий все участники определяют: Ответственность Новые классы Как классы взаимодействуют друг с другом
• Все данные записываются на карточке• И так со всеми сценариями в User Story
Ответственность – ты где?“R” (Responsibilities): Ответственность – краткое описание того, что объект должен делать
Операция которую выполняет объект
Объем знаний который поддерживает объект
Какие-либо решения, которые объект принимает
• Ищем глаголы в User Cases Глаголы это – ответственность
• Часть ответственности очевидна• Остальную ответственность определяем когда “играем” со
сценариями Не обязательно находить все ответственности до начало игры. Для
старта достаточно нескольких
Иерархия классов, атрибуты• В процессе, как только становится видным что нужен: супер-
класс, подкласс – добавляем их к нашим карточкам
• На самом деле определить атрибуты классов это не задача CRC “игры” Это детали имплементации Если они находятся, записываем на обратной стороне карточки
• Ищем прилагательные Прилагательные – это атрибуты
Связи, связи, связиВторая буква “C” взаимодействие (collaboration): другие классы с которыми работает рассматриваемый класс.
• Когда подняты две и более карточки, ищем связь между этими классами
• Крепкие связи между классами, если они вместе подняты на одном шаге сценария
CRC-карты в рефакторинге• Собираем из кода как можно больше информации и
записываем на карточке• Эмулируем каждое поведение программы при помощи
карточек– Вместо диаграмм взаимодействия– Быстрый просчет всех вариантов
• Рефакторинг– Особенно обращаем внимание на ответственность
Лучше один раз попробовать, чем услышать
?