Tarjetas CRC. Otro ejemplo de utilización.

ejemplo tarjeta crc

Este es uno de los artículos de una serie sobre las tarjetas CRC. Todos ellos forman parte del libro “Descubre las tarjetas CRC”, que puedes descargar en .pdf. Lo encontrarás en la parted derecha de esta blog. Al estar licenciado como Creative Commons, no dudes en hacerlo llegar a aquellas personas a las que les pueda ser útil. Si además te gusta, puedes comprarlo en papel o para tu kindle (sólo 1,02€).

Empecemos…

Este es el segundo post sobre las tarjetas CRC que me he decidido a escribir. Si has llegado a él sin haber leído el primero, ten en cuenta que en este se suponen algunas cosas que en el primero se explican. No dudes en leerlo si no estás seguro. Puedes hacer clic en este vínculo si te decides a leerlo.

Aquella mañana, llegamos al aula y nos encontramos a Víctor leyendo la prensa. Después de los “buenos días” a todos, se levantó y comenzó a hablar como si la sesión anterior no hubiese acabado.

– ¿Qué tal el ejercicio de las tarjetas CRC del sistema parchís? ¿Hubo algo que no quedase claro?.

Julián habló como si hablase por todos.

– Nos quedó claro, pero lo que no vemos claro es que esto se pueda utilizar para analizar sistemas de verdad.
– ¿A qué te refieres con sistemas de verdad?.
– A lo que normalmente nos encontramos en nuestras empresas.
– Entiendo. No vamos a analizar vuestras respectivas empresas, ya que cada uno de vosotros tiene un nivel de dominio de su entorno que los demás no tienen y yo no tengo ninguno. Así que nuestro próximo objetivo será analizar un negocio que ninguno de vosotros conoce, para ver a dónde llegamos sin condicionamiento previo alguno.

Y nos quedamos todos esperando.

– Os paso unas copias del enunciado de un pequeño negocio que me gustaría montar algún día. Lo leeré en voz alta y, si alguno de vosotros no entiende algo, que me pare para que pueda explicarlo.

Nos pasó unas fotocopias. En ellas se podía leer el siguiente texto:

Un empresario visionario se ha puesto en contacto con nosotros porque ha decidido desarrollar una idea de supermercado. La idea básica es que quiere eliminar el proceso de caja y que el cliente escoja el producto de un dispensador ideado a tal fin. El detalle es:

  • Los clientes de nuestro supermercado deberán estar registrados para poder entrar en él. Es imprescindible la información de una tarjeta de crédito en vigor para poder hacer el registro. El registro supone que el cliente tendrá una tarjeta de cliente con toda su información. Se le dará una tarjeta de compra en la que tendrá un saldo que se actualizará cuando compra o ingresa dinero.
  • Para entrar al supermercado, el cliente tendrá que pasar la tarjeta por un detector que le permitirá entrar.
  • El proceso de compra será mucho más simple que el típico: el cliente, con su carrito, irá cogiendo productos de las estanterías. Dichas estanterías no son las típicas, sino que tienen un sistema que detecta fielmente los productos que el cliente coge. Para poder coger un producto, pasará su tarjeta de cliente por el dispensador/estantería y, tras que el sistema valide que no existe ningún problema (falta de pago o crédito superado), permitirá que el cliente coja una unidad de dicho artículo. Se ha pensado que, para los casos en los que se quiera más de una unidad, se habilitarán más formas de compra (en formato pack) y así evitarle al cliente tener que pasar su tarjeta varias veces, según las unidades que quiera.
  • El cliente podrá entonces introducir el producto en el carrito. Para intentar evitar problemas en los que el cliente ha decidido devolver el producto una vez se ha sacado del dispensador, éste tendrá configurado un tiempo de espera/confirmación que será configurable por dispensador, pasillo, zona, departamento o todo el supermercado. En ese tiempo, el cliente puede devolver el producto al dispensador si realmente no lo quiere, evitando así el cargo a su cuenta. Aún así, para aquellos casos en los que se ha expirado el tiempo de devolución al dispensador, se habilitarán en el supermercado lugares de devolución de productos, sean cuales sean. Eso sí, cada zona tendrá este dispensador especial de devolución preparado para las devoluciones de los productos de dicha zona. Estos dispensadores especiales funcionan de la siguiente forma: El cliente pasa primero su tarjeta y luego el código de barras del producto a devolver, dejándolo en la zona habilitada a tal fin.
  • El sistema actualizará el stock de los artículos comprados, dándolos de salida una vez el dispensador a expirado su tiempo de posible devolución, o bien de alta de nuevo cuando se ha devuelto en algún dispensador de devolución.
  • Cuando el cliente pase de nuevo la tarjeta por un detector, esta vez para salir del supermercado, se efectuará automáticamente el cargo en la tarjeta de crédito del cliente.
  • Se quiere que el sistema elabore un pedido provisional a los distribuidores, de forma que la persona encargada de la zona pueda comprobarlos, modificarlos y luego, si así lo desea, enviarlos, con lo que el sistema envía (sea de la forma que el distribuidor desee, fax, email o conexión directa a su sistema de pedidos) el pedido al distribuidor.

-¿Qué? ¿Empezamos?.

– No os olvidéis de lo que aprendimos con el sistema “Parchís”. Recordad que vamos a seguir los mismos pasos, pero aplicados a otro sistema. ¿Por dónde podemos empezar?.

Todos querían aportar su opinión, pero fue Antonia la más decidida.

– Yo creo que lo primero es tener escenarios y elegir uno de ellos para analizar los pasos y empezar a extraer tarjetas a partir de ellos.
– Correcto. Como veo que está claro, haremos una primera lista de escenarios. ¿Me los vais diciendo?.

Después de unos minutos, la lista inicial de escenarios estaba hecha:

Gestionar clientes: altas, bajas, modificaciones.
Acceder al supermercado.
Comprar producto.
Devolver un producto antes de que finalice el tiempo para ello.
Devolver un producto después de haber finalizado el tiempo para ello.
Actualizar stock de productos.
Finalización de compra (salida del supermercado).
Generar pedido provisional a proveedores.
Gestionar pedidos a proveedores.

– Está bien -dijo Víctor. Basta por el momento. Lo que queremos es elegir uno de los escenarios y trabajar con él. ¿Cuál escogemos?.
– Está claro, el primero tiene que ser la gestión de clientes.
-¿Porqué?.
-Pues porque si no tenemos clientes dados de alta, no pueden comprar. Hay una dependencia.
– Es cierto, pero la dependencia existe en la gestión del supermercado. Para nosotros, cuando analizamos el sistema, dicha dependencia no existe. Por tanto, podemos elegir el escenario en base a la importancia del mismo, como ya vimos con el parchís.
– Entonces, propongo que sea “Comprar producto”.

Como estábamos todos de acuerdo, seguimos.

– Ya tenemos el escenario. Ahora, ¿Cuáles son los límites del mismo?. ¿Con qué paso empieza y con qué paso acaba?.
– Empieza cuando el cliente pasa su tarjeta por el dispensador y acaba cuando ha acabado el tiempo para poder devolverlo, lo cual significa que, en principio, lo compra.
– Bien, veo que lo tenemos claro. ¿Cuál es el primer paso?.
– El cliente pasa su tarjeta por el dispensador.

Julián no podía esperar. Así que habló, sin esperar a que Víctor siguiese.

– Pero, ¿qué pasa con el dispensador?. Todavía no sabemos ni siquiera si existe algo así. ¿Cómo vamos a  diseñar un software que utiliza un dispositivo del que no sabemos nada?.

Marcelo, que llevaba un buen rato sin dar su opinión, decidió que era el momento.

– Yo no creo que lo necesitemos, de momento.
– ¿Cómo?.
– Las tarjetas representan, cuando las levantamos, objetos que interactúan con otros objetos para conseguir el objetivo. No nos salimos de ahí, ya que tendremos como información de diseño las tarjetas CRC que tienen eso: el nombre de la clase, sus responsabilidades y sus colaboradores. Del dispensador de productos esperaremos que cumpla una o más responsabilidades, pero, de momento, no estamos mirando el detalle de las mismas. Eso vendrá cuando entremos más al detalle en el diseño preparatorio a la codificación.

Nos quedamos callados. No era para menos. ¡Vamos, que lo había dejado bien clarito!.

– Pues sigamos. Como podéis comprobar, tenemos la tarjeta de compra y el dispensador. ¿Suponen dos tarjetas CRC?.
– Yo creo que sí. Al fin y al cabo hay una interacción entre ambas.
– Ya, pero si un cliente sólo puede tener una tarjeta, de compra también podría ser “Cliente” en vez de “Tarjeta”.
– ¿Qué os parece a los demás?.

Como era de esperar, hubo diferencia de opiniones. Cada parte defendía su postura, así que Víctor puso orden.

– Ambas opiniones me parecen válidas, pero no tengo más remedio que decantarme por una, y va a ser “Tarjeta de compra”. No es que la otra me disguste, pero creo que esta opción es la que más flexibilidad da. Si resulta que luego vemos que no aparece otra tarjeta CRC separada para “Cliente”, le podemos cambiar el nombre si queremos. Pero, de esta forma, me adelanto a la posibilidad de que dicha nueva tarjeta aparezca.
– Sigamos. ¿Cómo interactúan?.
– “Tarjeta de compra” da los datos a “Dispensador”.
– Si fuese así, “Dispensador” sería colaborador de “Tarjeta de compra”.

Víctor dijo esta frase mirando a todos, como quien espera que alguien le lleve la contraria. No hubo respuesta por nuestra parte.

– Imaginemos que es al revés, ¿cómo sería si quien lanza la acción es el dispensador?
– Supongo que sería que el dispensador lee la tarjeta de compra.
– ¿Qué os parece a los demás? ¿Cuál de las dos opciones preferís?.

En este caso no hubo duda. Todos estábamos de acuerdo en que la segunda opción era la que creíamos mejor.

– Respecto a las responsabilidades y colaboradores, según lo que hemos acordado, quedarán así:

ejemplo tarjeta CRC

ejemplo tarjeta crc

– Sigamos. ¿Cuál es el segundo paso?.
– Que el tiempo de devolución ha pasado y, por tanto, se ha cargado el producto a la compra.
– Antes no nos olvidemos de validar que el cliente puede comprar.
– Si. Es un paso importante. ¿Quiénes están involucrados?.
– El dispensador por supuesto. Y alguien más. Alguien que tenga la responsabilidad de devolver al dispensador la información de OK o el error correspondiente.
– Muy bien. Entonces. ¿Cómo llamamos a ese alguien?.
– ¿Validador?.
– Puede ser un nombre. ¿A alguien se le ocurre otro o lo damos por bueno?.
– Yo creo que aquí es cuando aparece la información del cliente, ya que parte de ella es el límite real posible de compra que puede hacer. Es parte de su información.
– No me parece mala idea.

A los demás también les pareció buena idea, así que creamos la tarjeta “Cliente” y le colocamos la responsabilidad “¿Puede comprar?”. Por tanto, el dispensador tendrá también a “Cliente” como colaborador. Decidimos que esta nueva responsabilidad nos permitiría saber tanto si puede efectuar la compra (teniendo en cuenta el producto que elije) y también la causa de si no puede efectuarla. El dispensador recoge esta información, por lo que se le añade una nueva responsabilidad de nombre “Mostrar mensaje”, que utilizará en el caso de que la responsabilidad “¿Puede comprar?” de Cliente devuelva una causa de no poder comprar.

Las tarjetas quedaron así:

ejemplo tarjeta crc

ejemplo tarjeta crc

ejemplo tarjeta crc

– ¡Me gusta como avanza el día de hoy!. Se nota la primera sesión de tarjetas CRC sobre el  parchís ha dado sus frutos. ¡No hay nada como empezar con un sistema que no sea de un sistema de software sino un sistema de la vida real!.

Al ver nuestras caras, volvió a la tierra.

– Perdonad mi entusiasmo. Pero es que cuando esto ocurre me crezco. Sigamos con el siguiente paso.
– Podríamos decir, ahora sí, que el tiempo para confirmar la compra del producto ha expirado y se carga el producto a la compra.
– Yo también lo creo.
– Pues venga otra vez. ¿Implicados?.
– “Dispensador” y “Compra”.
– ¿Y el producto comprado?.
– Dentro de “Compra”.
– Yo creo que mejor sería que tuviese su propia tarjeta. Lo creo lo suficiente importante como para ello.

Al final, decidimos que fuese así, por lo que aparecieron dos nuevas tarjetas CRC: “Compra” y “Producto comprado”. “Dispensador” los tiene como colaboradores y “Compra” tiene la responsabilidad “Añadir producto al carro”. Sobre “Producto comprado”, de momento decidimos que almacenaría los datos actuales del producto, ya que los datos maestros pueden cambiar según el día y necesitamos tener la información propia de la compra de dicho producto.

– Pero, ¿de dónde saca “Dispensador” los datos actuales maestros del producto que está comprando?.
– Buena pregunta. ¿Qué creéis?.
– Que necesitamos la responsabilidad que permita recuperarlos, y no la tenemos.
– Vale. ¿De quién es esa responsabilidad?.
– De “Dispensador”.
– Yo creo mas bien que “Dispensador” la va a utilizar, pero no creo que sea suya.
– Estoy contigo.
– Pues necesitamos una nueva tarjeta, ¿no?.

Al final, creamos otra tarjeta más de nombre “Producto”, la cual tiene la responsabilidad “Devolver datos producto”. Además, “Dispensador” la tendrá como colaborador.

Al final de esta sesión, las tarjetas resultantes fueron estas:

ejemplo tarjeta crc

ejemplo tarjeta crc

ejemplo tarjeta crc

ejemplo tarjeta crc

ejemplo tarjeta crc

– Creo que hoy hemos tenido una sesión muy productiva. Y lo más importante, es que veo que entendéis el concepto de tarjeta CRC mucho más que la sesión del parchís. No dudéis en preguntarme cualquier duda que podáis tener.

– Antes de finalizar, os recuerdo que estamos analizando uno de los escenarios, y que estamos en la fase inicial. Lo que pretendemos es, para este escenario, establecer un primer grupo de tarjetas CRC, que darán lugar a clases, con sus responsabilidades y colaboradores. Por supuesto, si este fuese un proyecto real, más adelante definiríamos en detalle qué suponen cada una de esas responsabilidades, en base a métodos y/o atributos.

No hubieron dudas, así que nos despedimos hasta otra sesión.

Todos los personajes, lugares y escenas que aparecen en este texto son ficticios y cualquier parecido con la realidad es mera coincidencia.

Acerca de Isildur Fuentes

Apasionado de las buenas historias y aikidoka de la tierra.

Publicado el diciembre 21, 2010 en Divulgación, Programación y etiquetado en , , , , , , , , , , , , , , , , , . Guarda el enlace permanente. 2 comentarios.

  1. Muy bueno el ejemplo, y muy bien narrado, me quedo bastante claro lo de las tarjetas CRC, incluso me sentí dentro de la clase y con ganas de opinar. Muchas gracias

    • Hola Belen!. Muchísimas gracias por tu comentario. Me alegra mucho que te haya sido de ayuda. Si lo encuentras práctico, no dudes en descargarte gratis el libro entero.
      Un saludo.

A %d blogueros les gusta esto: