CRC-карточки

 

Одним из наиболее полезных приемов, соответствующих хороше­му стилю ООП, является исследование взаимодействия объектов, поскольку его цель состоит в том, чтобы исследовать работу про­граммы, а не данные. CRC-диаграммы (Class-Responsibility-Col­laboration, класс-обязанность-кооперация), придуманные Уордом Каннингемом (Ward Cunningham) в конце 80-х годов, выдержали проверку временем и стали высокоэффективным инструментом ре­шения этой задачи (рис. 4.6). И хотя они не входят в состав UML, все же являются очень популярными среди высококвалифициро­ванных разработчиков в области объектных технологий.

Для использования CRC-карточек вы и ваши коллеги должны со­браться за столом. Возьмите различные сценарии и проиграйте их с помощью карточек, поднимая их над столом, в то время когда они активны, и передавая их по кругу в предположении, что они посылают сообщение. Эту технологию почти невозможно описать в книге, но легко продемонстрировать; лучший способ научиться этому состоит в том, чтобы попросить кого-нибудь, кто имеет такой опыт, показать вам это


Важным моментом в CRC-методике является определение ответст­венностей. Ответственность (responsibility) - это краткое описание того, что объект должен делать: операция, которую выполняет объект, некоторый объем знаний, который объект поддерживает, или какие-либо важные решения, принимаемые объектом. Идея состоит в том, чтобы вы могли взять любой класс и сформулиро­вать его разумно ограниченные обязанности. Такой образ действия поможет вам яснее представить себе архитектуру классов.

Вторая буква «С» (в CRC) означает взаимодействие (collaboration): другие классы, с которыми должен работать рассматриваемый класс. Это дает вам некоторое представление о связях между клас­сами, но все еще на высоком уровне.

Одно из главных преимуществ CRC-карточек состоит в том, что они способствуют живому обсуждению проектов в среде разработ­чиков. Если в процессе работы над шаблоном поведения вы хотите посмотреть, как классы его реализуют, то вычерчивание диаграмм взаимодействия, описанных в этой главе, может занять слишком много времени. Обычно требуется просмотреть варианты, а рисова­ние и стирание вариантов на диаграммах может быть очень утоми­тельным. С помощью CRC-карточек разработчики моделируют взаимодействие, поднимая карточки и передавая их по кругу. Это позволяет быстро просчитать варианты.

В процессе работы вы создаете представление об ответственностях и записываете их на карточки. Размышления об ответственностях важны, поскольку рассеивают представление о классах как о бес­словесных хранителях данных и помогают членам команды лучше понять поведение каждого класса на высшем уровне. Ответствен­ность может соответствовать операции, атрибуту или, что более точно, неограниченной группе атрибутов и операций.


Мой опыт показывает, что распространенной ошибкой разработчи­ков является создание ими длинных списков низкоуровневых от­ветственностей. Это приводит к непониманию сути. Ответственно­сти должны свободно помещаться на одной карточке. Спросите себя, следует ли разделить класс или лучше отрегулировать ответствен­ности, переместив их на более высокий уровень операторов.

Многие разработчики подчеркивают важность ролевой игры, ког­да каждый член команды играет роль одного или нескольких клас­сов. Я никогда не видел, чтобы Уорд Каннингем так поступал, и ду­маю, что ролевая игра находится в начале своего пути.

CRC были посвящены целые книги, но не думаю, что они действи­тельно стали сердцем методологии. Первой работой по CRC была статья, написанная Кентом Беком (Kent Beck) [4]. Дополнитель­ную информацию по CRC-карточкам можно найти в [44].