Как разработать дизайн с использованием карт CRC?

StackOverflow https://stackoverflow.com/questions/98878

  •  01-07-2019
  •  | 
  •  

Вопрос

Мне всегда было интересно, как люди используют карты CRC (сотрудничество по классовой ответственности).Я читал о них в книгах, находил туманную информацию в Интернете, но так и не понял ее по-настоящему.Я думаю, что кто-то должен сделать на YouTube видео, показывающее сеанс с карточками CRC, поскольку в одной из моих книг описано, что это очень сложно сформулировать в тексте, и что этому должен «учить тот, кто уже владеет этим».К сожалению, я не знаю здесь никого, кто использует карты CRC, и мне хотелось бы узнать больше.

ОБНОВЛЯТЬ

Будем признательны за любые ссылки на видео, показывающие, как люди используют эту технику.

Это было полезно?

Решение

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

  1. Отправной точкой является выявление требований.Здесь предлагается привлекать клиента на ранней и постоянной основе (взгляните на Agile-подходы, т.е.Экстремальное программирование)
  2. Затем требования можно смоделировать либо с помощью диаграмм вариантов использования (UML), либо с помощью пользовательских историй (гибкий экстремальный подход к программированию).Ключевой проблемой здесь является поиск нужных задействованных объектов.Конечно, это во многом зависит от домена, в котором вы находитесь.Если вы пойдете «сложным» путем, вы можете применить такие методы, как «извлечение существительного».Итак, вы анализируете документ спецификации и извлекаете все существительные (включая составные имена и имена с прилагательными).Проанализируйте их все и отбросьте ненужные.
  3. Когда у вас есть правильные существительные -> объекты, вы можете приступить к созданию карточек CRC.Так что же делается в сеансе CRC?Основная задача — найти и распределить обязанности по найденным вами (ранее) объектам, которые затем записываются на небольшие учетные карточки (наши CRC-карточки).«Обязанности» — это в основном основные функции конкретного объекта, а часть «сотрудничества» — это другие объекты, необходимые для выполнения определенных функций (это зависимости между различными объектами в вашей модели).Важным моментом при распределении обязанностей является то, что обязанности распределяются по всей системе каким-то сбалансированным образом.Еще один очень важный момент — избегать дублирования обязанностей между объектами (в этом помогают карты CRC).
    Сессия CRC должна начинаться с мозгового штурма, активного обсуждения среди разработчиков, и ее следует проводить непосредственно на фактических учетных карточках.

Надеюсь, я смог вам как-то помочь.

С уважением,
Юрий

Другие советы

Трудно обобщить ТАК-ответ, но я попробую.Одной из проблем проектирования объектов является балансирование мышления с общей точки зрения и мышления с точки зрения отдельного объекта.Вам нужна общая перспектива, чтобы завершить вычисление, но вам нужна перспектива отдельного объекта, чтобы эффективно разделить логику и данные.

Для поддержания этого баланса на помощь приходят карты CRC.Когда они сидят на столе, вы можете увидеть вычисления в целом.Однако, когда вы берете одну карту, вы физически и кинестетически побуждаетесь принять точку зрения на этот единственный объект — у меня есть эта маленькая часть этого вычисления, связанная с ограниченными ресурсами, как я собираюсь это сделать?

Со временем способность одновременно придерживаться обеих точек зрения, похоже, проникает в мозг.На картах пишется все меньше и меньше.Тогда карточки пустые.Через некоторое время люди просто указывают на то, где была бы карта, если бы они потрудились взять пустую карту из стопки.В конце концов, люди получают преимущества от стиля мышления, вообще не нуждаясь в картах.Однако при разговоре с кем-то, кто еще не освоил баланс, вытаскивание реальных карт может оказаться полезным средством общения.

Самый большой недостаток карт, который я нахожу, — это отсутствие обратной связи.Вы можете обмануть себя относительно того, каким будет код.Я бы предложил использовать карточки только до тех пор, пока не возникнет интересный вопрос, обратиться к тестам/коду для подтверждения, а затем возобновить проектирование.

Примерно 15 лет назад мы с Уордом сняли видео о сеансе дизайна, но я нигде не нашел его в Интернете и у меня нет копии.В любом случае я не уверен, что это будет полезно в качестве учебного пособия.Не знаю других видео, но они могут быть интересными, особенно если вам придется сравнить стили нескольких разных дизайнеров.

идти к источник - Кент Бек, Уорд Каннингем, слышали о них когда-нибудь?

Я думаю, что ваше заявление «Я не знаю никого здесь, кто использует карты CRC» в значительной степени подводит итог состоянию разработки карт CRC.Карты CRC, на мой взгляд, были шагом на пути от традиционной плановой разработки к гибкой разработке.Мир двинулся дальше.Вместо того, чтобы сосредоточиться на том, как использовать карты CRC, я бы исследовал такие методы, как ТДД, который может использовать такие методы, как карты UML и CRC, в качестве промежуточных артефактов, но концентрируется на коде и, в частности, на тестах.Это направление, которое выбрали изобретатели карт CRC, и я бы рекомендовал вам следовать также.

На мой взгляд, самый простой способ использовать их, не запутываясь, — это записать небольшие карточки CRC в заголовки файлов следующим образом:

///////////////////////
//* CRC CARD
//*  Class: UISliderEvent
//*  Responsability: Event that holds the value and id of a Slider's movement
//*  Collaborators: UISlider, UIEvent
//////////////////////

Затем каждый раз, когда вам нужно добавить функцию, проверяйте свою карту и убедитесь, что вы не нарушаете ни один из указанных в ней контрактов.Например, внезапно в зависимости от UIMouseEvent, его нигде нет на карте, поэтому его нельзя включать.

В их книге Дизайн объекта:роли, обязанности и сотрудничество опубликовано в 2003 г. Ребекка Вирфс-Брок И Алан МакКин более подробно обсуждают карты CRC.Они действительно подчеркивают разницу во всей процедуре: это должен быть очень тактильный опыт, и это освобождает людей от необходимости проходить мимо физического объекта при попытке конкретизировать дизайн/требования.

Подзаголовок этой главы предполагает, что использование карточек является частью фазы «исследовательского проектирования», поэтому оно, вероятно, предшествует написанию большого количества кода, но я не вижу причин, по которым вы бы не возвращались к ним на каждой итерации Agile-проект и напоминать себе, куда, по вашему мнению, вы собираетесь идти, и пересматривать это, если необходимо (конечно, как группа).

Кажется, я помню, что они даже предлагали передавать мяч по комнате, чтобы говорить мог только тот, у кого мяч, так что, возможно, дело не столько в карточках CRC, сколько в том, чтобы заставить всех в комнате говорить о ролях и обязанностях каждого. объекты, которые имеют значение?

Если вы хотите прочитать тематическое исследование карт CRC в действии (конечно, в дополнение к оригинальной статье Кента и Уорда), взгляните на Картотека CRC.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top