de_DEen_USes_ESfa_IRfr_FRhi_INid_IDjapl_PLpt_PT

Dominar el diseño orientado a objetos con tarjetas CRC: Un estudio de caso amigable para principiantes

“La mejor manera de aprender el diseño orientado a objetos no es memorizando patrones — es interpretando los roles.”

En este artículo, repasaremos unintroducción paso a paso a las tarjetas CRC (clase–responsabilidad–colaborador) utilizando un ejemplo del mundo real, amigable para principiantes: unSistema de préstamo de libros de biblioteca. Ya sea que estés comenzando tu viaje hacia el diseño de software o dirigiendo un taller de equipo, las tarjetas CRC ofrecen una forma sencilla, potente y colaborativa para modelar sistemas orientados a objetos.


🎯 ¿Qué son las tarjetas CRC?

Tarjetas CRC son una técnica ligera de modelado, física (o digital), utilizada en el diseño orientado a objetos. Cada tarjeta representa unaclase y contiene tres elementos clave:

Campo Descripción
Clase El nombre de la clase (por ejemplo,Libro)
Responsabilidades Lo que la clasesabe o hace
Colaboradores Otras clases con las que esta clase necesita trabajar

Son especialmente efectivas paralluvia de ideasdiseñar, y validando estructuras de clases temprano en el desarrollo — antes de escribir una sola línea de código.


📚 Estudio de caso: Sistema de préstamo de libros de biblioteca

Imaginemos una pequeña biblioteca pública donde los miembros pueden:

  • Buscar libros por título

  • Pedir prestados libros disponibles (hasta un límite)

  • Devolver libros cuando terminen

El sistema debe registrar:

  • Qué libros están prestados

  • Por quién

  • Cuándo vencen

Usaremos el método de tarjetas CRCmétodo de tarjetas CRC para descubrir y refinar las clases en este sistema — paso a paso.


✅ Paso 1: Encontrar clases candidatas (lluvia de ideas de sustantivos)

Comience leyendo el escenario y extraigasustantivos — estos son posibles clases.

A partir de la descripción, identificamos:

  • Biblioteca

  • Miembro (o Usuario)

  • Libro

  • Préstamo (o préstamo)

  • Fecha de vencimiento (posiblemente demasiado pequeño)

  • Tarjeta de biblioteca (podría formar parte del Miembro)

Filtramos y mantenemos solo los más significativos:

✅ MiembroLibroPrestamo

⚠️ Nota: No te preocupes por tener todos los clases correctas desde el principio — esa es la belleza de las tarjetas CRC. Descubrirás las que faltan mediante el juego de roles!


✏️ Paso 2: Crear tarjetas CRC iniciales

Ahora, asignamosresponsabilidades y colaboradores a cada clase.

📘 Clase: Libro

Responsabilidades Colaboradores
Saber su título
Saber su autor
Saber su ISBN
Saber si actualmente está disponible Prestamo
Ser prestado Prestamo
Ser devuelto Prestamo

💬 El libro no ‘sabe’ quién lo ha tomado prestado — solo sabe si tiene un préstamo activo.


👤 Clase: Miembro

Responsabilidades Colaboradores
Conocer el nombre
Conocer el ID del miembro
Conocer cuántos libros están actualmente prestados Préstamo
Prestar un libro (si está permitido) Libro, Préstamo
Devolver un libro Libro, Préstamo
Verificar si se ha alcanzado el límite de préstamo Préstamo

💬 El miembro gestiona su propio comportamiento de préstamo y verifica los límites a través de la clase Préstamo.


📅 Clase: Préstamo

Responsabilidades Colaboradores
Registrar qué libro fue prestado Libro
Registrar qué miembro lo prestó Miembro
Registrar la fecha de préstamo
Calcular la fecha de vencimiento
Saber si está vencido
Marcar como devuelto Libro

💬 La clase Préstamo contiene la relación entre un Miembro y un Libro, incluyendo detalles de tiempo.


🎭 Paso 3: Representa un escenario — “Pedir prestado un libro”

Ahora viene la parte divertida: representación de rolesel escenario como si las cartas fueran objetos reales.

📖 Escenario: Curtis quiere pedir prestado “Código limpio”, que está disponible.

Vamos a recorrerlo paso a paso:

  1. Miembro (Curtis)dice:“Quiero pedir prestado ‘Código limpio’.”
    → Primera verificación: “¿Tengo menos de 3 libros ya?”
    → Pregunta Préstamo“¿Cuántos préstamos activos tengo?”

  2. Préstamoresponde:“Tienes 1 préstamo activo → puedes pedir prestado.”

  3. Miembrobusca el libro:“¿Dónde está ‘Código limpio’?”
    → Pregunta Libro¿Estás disponible?

  4. Libro verifica: ¿Tengo un préstamo activo (no devuelto)?
    → Pregunta Préstamo¿Hay un préstamo activo para mí?

  5. Préstamo responde: ¡No — estás disponible!

  6. Miembro crea un nuevo Préstamo objeto:

    • Enlaza con este Libro y Miembro

    • Establece la fecha de préstamo = hoy

    • Calcula la fecha de devolución = hoy + 14 días

  7. Libro se actualiza: Ahora tengo un préstamo activo → ya no estoy disponible.

✅ Resultado: El proceso de préstamo se siente natural, distribuido y lógico.


🔄 Paso 4: Otro escenario — “Devolver un libro”

📖 Escenario: Curtis devuelve “Código limpio”

  1. Miembro (Curtis) dice: “Quiero devolver ‘Código limpio’.”

  2. Miembro encuentra el correspondiente Préstamo (probablemente mediante una consulta a Préstamo con el libro y el miembro).

  3. Préstamo se marca a sí mismo como devuelto.

  4. Préstamo dice Libro“Ahora estás disponible nuevamente.”

✅ Limpio, claro y cohesivo — ninguna clase está realizando trabajo fuera de su responsabilidad.


🔍 Paso 5: Refinar y agregar clases faltantes

Después de representar roles, notamos una brecha:

❓ ¿Quién encuentra el libro por título?

Actualmente, Miembro está preguntando Libro directamente — pero Libro no sabe cómo buscar!
Necesitamos un coordinador central.

➕ Nueva clase: Biblioteca

Responsabilidades Colaboradores
Agregar un nuevo libro a la colección Libro
Buscar libro por título Libro
Registrar un nuevo miembro Miembro
Procesar solicitud de préstamo de libro Miembro, Libro, Préstamo
Procesar devolución de libro Miembro, Libro, Préstamo
Conocer todos los préstamos actuales Préstamo

💬 La Biblioteca actúa como el centro principal — conoce todos los libros, todos los miembros y todos los préstamos.


✨ Flujo actualizado: “Pedir un libro” con Biblioteca

  1. Miembro → Biblioteca“Encuentra el libro titulado ‘Código limpio’.”

  2. Biblioteca busca en su colección y devuelve el Libro (o nulo si no se encuentra).

  3. Miembro ahora sabe que el libro existe → pregunta Biblioteca“¿Puedo tomar prestado este libro?”

  4. Biblioteca verifica:

    • ¿Está disponible el libro? (a través de Libro.estáDisponible())

    • ¿El miembro está dentro del límite de préstamos? (a través de Prestamo.contarPrestamosActivos(miembro))

  5. Si es así → Biblioteca crea un nuevo Prestamo y actualiza tanto Libro como Prestamo.

  6. Libro queda fuera de disponibilidad; Préstamo rastrea la relación.

✅ Ahora el flujo tiene sentido — el Biblioteca gestiona la descubrimiento y coordinación.


🧩 Resumen final de las tarjetas CRC (simplificado para principiantes)

Clase Responsabilidades clave Colaboradores clave
Biblioteca Gestiona libros, miembros y préstamos; maneja préstamos/devoluciones Libro, Miembro, Préstamo
Miembro Conoce la información personal; inicia el préstamo/devolución Biblioteca, Préstamo
Libro Almacena metadatos; rastrea la disponibilidad Biblioteca, Préstamo
Préstamo Rastrea el historial de préstamos; calcula fechas de vencimiento; gestiona el estado de devolución Miembro, Libro, Biblioteca

✅ Principio de diseño: Cada clase tiene un propósito claro, y las responsabilidades son cohesivas y bien distribuidas.


🌟 ¿Por qué las tarjetas CRC funcionan tan bien (conclusiones para principiantes)?

Beneficio Explicación
Diseño centrado en responsabilidades Te obliga a pensar: “¿Qué sabe o hace esta clase?” en lugar de simplemente almacenar datos.
Descubrimiento natural de clases faltantes El juego de roles revela brechas (como la falta deBiblioteca) — no se necesita adivinar.
Retroalimentación inmediata mediante juego de roles Si un flujo se siente incómodo, sabes que la responsabilidad está en el lugar equivocado.
Bajo protocolo y colaborativo Sin herramientas complejas — solo tarjetas de índice, notas adhesivas o una pizarra. Ideal para equipos.
Conecta los requisitos con el código Convierte las historias de usuarios en interacciones reales entre clases.

🛠️ Consejos rápidos para tu primera sesión de CRC

  1. Usa tarjetas físicas (tarjetas de índice 3×5 o notas adhesivas) — es más atractivo.

  2. Una clase por tarjeta — manténlo simple.

  3. Escribe grande y legible — otros deberían poder leerlo fácilmente.

  4. Juega los roles en voz alta — pasa las tarjetas como si fueran objetos reales.

  5. Empieza con 3–6 escenarios principales (por ejemplo, pedir prestado, devolver, buscar).

  6. No busques la perfección — el objetivo es iteración, no un diseño final. Mejóralo conforme avances.

  7. Usa nombres simples y específicos del dominio — evita jerga técnica. Usa “Miembro” en lugar de “Patrón” si tu equipo está de acuerdo.

  8. Invita a todos a participar — incluso los no programadores pueden ayudar a detectar responsabilidades faltantes.

  9. Dibuja un diagrama de clases simple después — para visualizar las relaciones y confirmar la consistencia.

  10. Mantén la diversión — trátalo como un juego. Cuanto más comprometido esté tu equipo, mejores serán los resultados.


🔄 Pruébalo tú mismo: Próximos dominios para explorar

Una vez que domines el sistema de biblioteca, intenta aplicar las tarjetas CRC a otros dominios amigables para principiantes:

☕ Sistema de pedidos de cafetería

  • Clases: ClientePedidoElemento del menúBaristaCaja registradora

  • Escenarios: Hacer pedido → Agregar bebida → Aplicar descuento → Pagar → Imprimir recibo

🪙 Máquina expendedora

  • Clases: Máquina expendedoraProductoMonedaDistribuidorCalculadora de Cambio

  • Escenarios: Insertar moneda → Seleccionar artículo → Entregar producto → Devolver cambio

🎮 Juego de Preguntas

  • Clases: CuestionarioPreguntaJugadorSeguimiento de PuntuaciónSesión de Juego

  • Escenarios: Iniciar cuestionario → Responder pregunta → Verificar corrección → Mostrar puntuación final

🚗 Estacionamiento

  • Clases: EstacionamientoCocheLugar de estacionamientoBoletoCarrera

  • Escenarios: Entrar al garaje → Estacionar el auto → Salir → Pagar cuota → Obtener ticket

Cada uno de estos sistemas se basa en los mismos principios:

  • Identificar sustantivos → asignar responsabilidades → representar roles → perfeccionar → repetir.


📌 Pensamientos finales: Las tarjetas CRC son más que una técnica — son una mentalidad

El verdadero poder de las tarjetas CRC no está en las tarjetas en sí — está en el diálogoque generan.

Cuando escribes una tarjeta y dices, “¿Quién hace esto?” o “¿Con quién necesita hablar?”, ya estás pensando como un diseñador orientado a objetos.

🔥 Consejo profesional: Usa tarjetas CRC durante la planificación de sprints, los spikes técnicos o incluso en entrevistas para demostrar tu pensamiento de diseño.

No son solo para desarrolladores — son para cualquiera involucrado en la creación de software: gerentes de producto, diseñadores, testers y estudiantes.


📎 ¿Quieres más?

👉 Descarga una plantilla imprimible de tarjetas CRC (PDF o digital) para usar en tu próximo taller.
👉 Prueba una sesión en vivo de CRC con un compañero de equipo — asigna roles: “Tú eres el Miembro”, “Tú eres el Libro”, etc.
👉 Comparte tus resultados — publica tus tarjetas en redes sociales con #CRCcards o #OODesignJourney.


🏁 Conclusión

El Sistema de préstamo de libros de bibliotecaes uno de los ejemplos más clásicos y efectivos de tarjetas CRC — no porque sea complejo, sino porque essencillo, fácil de relacionar y revelador.

Siguiendo solocinco pasos— lluvia de ideas, creación de tarjetas, juego de roles, refinamiento e iteración — puedes:

  • Descubrir clases de forma natural

  • Asignar responsabilidades de forma clara

  • Detectar fallos de diseño temprano

  • Construir un modelo mental compartido como equipo

Y lo mejor de todo: no necesitas ser un desarrollador senior para hacerlo.
Solo necesitas curiosidad, unas cuantas tarjetas y disposición para jugar.


✅ Ahora te toca a ti: Toma algunas notas adhesivas, elige un sistema sencillo (como una cafetería o una máquina expendedora) y prueba el método CRC.

📌 Recuerda: Un buen diseño no se trata de escribir código perfecto — se trata de hacer las preguntas correctas.

Y con las tarjetas CRC, ya estás haciéndolas.


📌 Bono: Plantilla imprimible de tarjetas CRC (versión de texto)

┌────────────────────┐
│    [NOMBRE DE CLASE]    │
├────────────────────┤
│ Responsabilidades:  │
│ -                  │
│ -                  │
│ -                  │
├────────────────────┤
│ Colaboradores:     │
│ -                  │
│ -                  │
└────────────────────┘

Imprime esto en tarjetas de 3×5 o utilízalo en una herramienta digital como Miro, Figma o Google Slides.


📚 ¿Siguiente paso?
¿Quieres una explicación completa delSistema de pedidos de cafeteríausando el mismo estilo CRC?
👉 Solo di la palabra — te enviaré el siguiente estudio de caso, paso a paso, con tarjetas, escenarios y juego de roles!

¡Feliz diseño! 🎮🧩💻