Pregunta

Siempre me he preguntado cómo usa la gente las tarjetas CRC (colaboración con responsabilidad de clase).Leí sobre ellos en libros, encontré información vaga en Internet, pero nunca la entendí realmente.Creo que alguien debería hacer un vídeo de youtube mostrando una sesión con tarjetas CRC, ya que uno de mis libros lo describía como muy difícil de formular en texto, que debería ser "enseñado por alguien que ya lo domine".Lamentablemente, no conozco a nadie por aquí que utilice tarjetas CRC y me gustaría saber más.

ACTUALIZAR

Se agradecería cualquier enlace a vídeos que muestren a personas elaborando esta técnica.

¿Fue útil?

Solución

Intentaré dar una respuesta.Por lo tanto, las tarjetas CRC se utilizan generalmente para modelar en un entorno orientado a objetos para comprender mejor el sistema que se debe desarrollar (pero creo que eso ya lo sabrá).Las tarjetas CRC llegan al final, cuando llegas justo antes de la implementación real.Los diferentes pasos para llegar a ese nivel podrían ser los siguientes:

  1. El punto de partida es realizar la obtención de requisitos.Aquí se sugiere involucrar al cliente de manera temprana y continua (eche un vistazo a los enfoques ágiles, es decir,Programación extrema)
  2. Luego, los requisitos se pueden modelar con diagramas de casos de uso (UML) o con historias de usuarios (enfoque de programación ágil y extrema).El problema clave aquí es encontrar los objetos involucrados correctos.Por supuesto, esto depende mucho del dominio en el que te encuentres.Si sigue el camino "difícil", puede aplicar técnicas como la "extracción de sustantivos".Entonces, analiza el documento de especificaciones y extrae todos los sustantivos (incluidos los nombres compuestos y los que tienen adjetivos).Analízalas todas y descarta las irrelevantes.
  3. Una vez que tengas los sustantivos correctos -> objetos, puedes comenzar a crear tus tarjetas CRC.Entonces, ¿qué se hace en una sesión del CRC?La tarea principal es encontrar y asignar las responsabilidades de los objetos (previamente) encontrados que luego se colocan en pequeñas fichas (nuestras tarjetas CRC).Las "responsabilidades" son principalmente las funcionalidades centrales de un objeto específico y la parte de "colaboración" son los otros objetos necesarios para cumplir ciertas funcionalidades (estas son las dependencias entre los diferentes objetos de su modelo).Los puntos importantes para la asignación de responsabilidades es que las responsabilidades estén bien distribuidas en todo el sistema de alguna manera equilibrada.Otro punto muy importante es evitar la duplicación de responsabilidades entre los objetos (aquí es donde ayudan las tarjetas CRC).
    Una sesión de CRC debe comenzar con una reunión de lluvia de ideas, con una discusión activa entre los desarrolladores y debe realizarse directamente en las fichas reales.

Espero haber podido ayudarte de alguna manera.

Saludos,
Juri

Otros consejos

Es difícil resumirlo en una respuesta SO, pero lo intentaré.Uno de los desafíos del diseño de objetos es equilibrar el pensamiento desde una perspectiva general con el pensamiento desde la perspectiva de un objeto individual.Necesita la perspectiva general para completar el cálculo, pero necesita la perspectiva del objeto individual para subdividir efectivamente la lógica y los datos.

Mantener este equilibrio es donde entran las tarjetas CRC.Cuando están sentados en la mesa, puedes ver el cálculo como un todo.Sin embargo, cuando tomas una sola carta, te animas física y cinestésicamente a adoptar el punto de vista de ese objeto en particular. Tengo que hacer esta pequeña parte de este cálculo con recursos limitados, ¿cómo voy a lograrlo?

Con el tiempo, la capacidad de mantener ambas perspectivas simultáneamente parece calar en el cerebro.Cada vez se escribe menos en las tarjetas.Entonces las cartas están en blanco.Después de un rato, la gente simplemente señala dónde estaría la tarjeta si se molestaran en sacar una en blanco de la pila.Con el tiempo, las personas obtienen los beneficios del estilo de pensamiento sin necesidad de tarjetas.Sin embargo, cuando se habla con alguien que no domina el equilibrio, sacar tarjetas en reales puede ser una ayuda útil para la comunicación.

La mayor debilidad que encuentro en las tarjetas es la falta de retroalimentación.Puedes engañarte acerca de cómo resultará el código.Sugeriría usar tarjetas solo hasta que surja una pregunta interesante, recurrir a las pruebas/código para confirmar y luego continuar con el diseño.

Ward y yo hicimos un video hace unos 15 años de una sesión de diseño, pero no lo encuentro en línea en ninguna parte y no tengo una copia.No estoy seguro de que sea útil como herramienta de enseñanza en ningún caso.No conozco otros videos, pero podrían ser interesantes, especialmente si comparas los estilos de varios diseñadores diferentes.

ir a la fuente - Kent Beck, Ward Cunningham, ¿alguna vez has oído hablar de ellos?

Creo que tu declaración "No conozco a nadie por aquí que utilice tarjetas CRC" resume bastante bien el estado de las tarjetas CRC en desarrollo.Las tarjetas CRC, en mi opinión, fueron un paso en el camino desde el desarrollo tradicional basado en planes hacia el desarrollo ágil.El mundo ha avanzado.En lugar de centrarme en cómo usar las tarjetas CRC, investigaría técnicas como TDD, que puede utilizar técnicas como UML y tarjetas CRC como artefactos intermedios pero que se concentra en el código y, más particularmente, en las pruebas.Esta es la dirección que han tomado los inventores de las tarjetas CRC y te recomiendo que tú también la tomes.

En mi opinión, la forma más fácil de usarlos sin enredarse es escribir pequeñas tarjetas CRC en los encabezados de los archivos, como esta:

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

Luego, cada vez que necesite agregar una función, verifique su tarjeta y asegúrese de no incumplir ninguno de los contratos que indicó en ella.Por ejemplo, de repente dependiendo de UIMouseEvent, por ejemplo, eso no está en ninguna parte de la Tarjeta, por lo que no está permitido incluirlo.

en su libro Diseño de objetos:roles, responsabilidades y colaboraciones publicado en 2003 Rebecca Wirfs-Brock y Alan McKean analizan las tarjetas CRC con cierto detalle.Realmente enfatizan la diferencia que hace en todo el procedimiento el hecho de que debe ser una experiencia muy táctil y afloja el pensamiento de las personas al pasar un objeto físico cuando intentan desarrollar un diseño/requisito.

El subtítulo de ese capítulo sugiere que el uso de las tarjetas es parte de la fase de "diseño exploratorio", por lo que probablemente ocurre antes de realizar mucha codificación, pero no veo ninguna razón por la que no sigas recurriendo a ellas en cada iteración de un proyecto ágil y recordarte hacia dónde pensabas que ibas y revisarlo si es necesario (como grupo, por supuesto).

Me parece recordar que incluso sugieren pasar una pelota por la sala para que solo la persona que tiene la pelota pueda hablar, así que tal vez no se trate tanto de las tarjetas CRC como de hacer que todos en una sala hablen sobre los roles y responsabilidades de objetos que importan?

Si desea leer un estudio de caso de las tarjetas CRC en acción (además del artículo original de Kent y Ward, por supuesto), eche un vistazo a El libro de cartas de la CDN.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top