CRC cards / Minsk PHP MeetUp #8

16
CRC-карточки, используем в своей работе

description

В ООП важно исследовать взаимодействие объектов т.к. тогда мы исследуем процесс работы самой программы, а не просто данные которые есть в системе. Когда пользователь нажимает кнопку “Заказать”, программа оживляет объекты и они живут своею жизнью, взаимодействуют друг с другом, выполняют свою работу. Как нам представить этот процесс? Для этой задачи и были придуманы CRC-карты и CRC-диаграммы.

Transcript of CRC cards / Minsk PHP MeetUp #8

Page 1: CRC cards / Minsk PHP MeetUp #8

CRC-карточки,

используем в своей

работе

Page 2: CRC cards / Minsk PHP MeetUp #8

Обо мне

Alexander [email protected]

Skype: asoft4webFB: https://

www.facebook.com/alexander.nemanov

Page 3: CRC cards / Minsk PHP MeetUp #8

Цель доклада

• Раскрыть общие понятия о CRC-карточках• Показать как CRC-карточки используются в

процессе Объектно-Ориентированного Проектирования / Моделирования

• Применение CRC-карточки в рефакторинге

Page 4: CRC cards / Minsk PHP MeetUp #8

CRC-карты обзорCRC: Class – Responsibilities – Collaborators (класс – ответственность – взаимодействие) были взяты основные принципы объектно-ориентированного моделирования

• CRC-карты используются для представления: Классов Ответственности класса Взаимодействие между классами

• CRC-карты это творческий подход к Объектному Ориентированному Моделированию

• Карты создаются в процессе исследований сценариев работы программы, базирующейся на моделировании поведения системы

Page 5: CRC cards / Minsk PHP MeetUp #8

Создатели

Уорд Каннингем

Кент Бек• Октябрь, 1989• OOPSLA '89 Conference

proceedings on Object-oriented programming systems, languages and applications

Page 6: CRC cards / Minsk PHP MeetUp #8

Почему используем CRC-карты• Портативные… комп не нужен. Можно пользоваться в любом

месте• Карты позволяют разработчикам прочувствовать и реально

увидеть (на физическом уровне), как и какие объекты живут в разных сценариях

• Карты полезны для обучения Объектно-Ориентированным парадигмам

• Можно использовать в качестве наглядного пособия для обучения методологии разработки программного обеспечения

Page 7: CRC cards / Minsk PHP MeetUp #8

Основные понятия• Class: скелет объекта• Collaboration (Взаимодействие): процесс в котором

несколько классов объединяются что бы обеспечить поведение более высокого уровня

• Object (Объект): Сущность которая может делать какие-то вещи. Объект имеет: состояния, поведения и т.д.

• Responsibility (Ответственность): Поведение объекта за которое он (объект) несет ответственность

• Subclass (Подкласс): Класс который наследуется от одного или более классов

• Superclass (Супер-класс): Класс от которого наследуются

Page 8: CRC cards / Minsk PHP MeetUp #8

CRC-карточка

OrderПроверить наличие позиции OrderLine

Определить цену Customer

Проверить правильность оплаты Shipping

Отправить по адресу доставки

Имя класса ВзаимодействиеОтветственность

Page 9: CRC cards / Minsk PHP MeetUp #8

CRC-карты в проектировании

Задачи проектирования.Собрать всю необходимую информацию для начала имплементирования User Story.• Определить классы• Определить ответственность классов• Как и когда классы взаимодействуют друг с другом

Page 10: CRC cards / Minsk PHP MeetUp #8

Ищем классыПервая “C” (class) – класс

• Первым шагом в объектно-ориентированном проектировании является выделение классов в предметной области Это и есть первый шаг нашей “игры”

• Изучаем User Story или доступное ТЗ • Ищем существительные

Именно существительные идентифицируют будущие классы

• Записываем имя класса вверху наших карточек• Раздаем карточки участникам нашей “игры”

Page 11: CRC cards / Minsk PHP MeetUp #8

“Игра” в CRC-карты• Команда разбивает User Story на отдельные сценарии• Рассматриваем один сценарий в одно время• Сценарий зачитывается• Когда объект определенного класса создается, мы

поднимаем над столом его карточку По объект “живет” мы держим карточку над столом

• Пока разбирается сценарий все участники определяют: Ответственность Новые классы Как классы взаимодействуют друг с другом

• Все данные записываются на карточке• И так со всеми сценариями в User Story

Page 12: CRC cards / Minsk PHP MeetUp #8

Ответственность – ты где?“R” (Responsibilities): Ответственность – краткое описание того, что объект должен делать

Операция которую выполняет объект

Объем знаний который поддерживает объект

Какие-либо решения, которые объект принимает

• Ищем глаголы в User Cases Глаголы это – ответственность

• Часть ответственности очевидна• Остальную ответственность определяем когда “играем” со

сценариями Не обязательно находить все ответственности до начало игры. Для

старта достаточно нескольких

Page 13: CRC cards / Minsk PHP MeetUp #8

Иерархия классов, атрибуты• В процессе, как только становится видным что нужен: супер-

класс, подкласс – добавляем их к нашим карточкам

• На самом деле определить атрибуты классов это не задача CRC “игры” Это детали имплементации Если они находятся, записываем на обратной стороне карточки

• Ищем прилагательные Прилагательные – это атрибуты

Page 14: CRC cards / Minsk PHP MeetUp #8

Связи, связи, связиВторая буква “C” взаимодействие (collaboration): другие классы с которыми работает рассматриваемый класс.

• Когда подняты две и более карточки, ищем связь между этими классами

• Крепкие связи между классами, если они вместе подняты на одном шаге сценария

Page 15: CRC cards / Minsk PHP MeetUp #8

CRC-карты в рефакторинге• Собираем из кода как можно больше информации и

записываем на карточке• Эмулируем каждое поведение программы при помощи

карточек– Вместо диаграмм взаимодействия– Быстрый просчет всех вариантов

• Рефакторинг– Особенно обращаем внимание на ответственность

Лучше один раз попробовать, чем услышать

Page 16: CRC cards / Minsk PHP MeetUp #8

?