“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 ideas, diseñ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:
✅ Miembro, Libro, Prestamo
⚠️ 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:
-
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?” -
Préstamoresponde:“Tienes 1 préstamo activo → puedes pedir prestado.”
-
Miembrobusca el libro:“¿Dónde está ‘Código limpio’?”
→ Pregunta Libro: ¿Estás disponible? -
Libro verifica: ¿Tengo un préstamo activo (no devuelto)?
→ Pregunta Préstamo: ¿Hay un préstamo activo para mí? -
Préstamo responde: ¡No — estás disponible!
-
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
-
-
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”
-
Miembro (Curtis) dice: “Quiero devolver ‘Código limpio’.”
-
Miembro encuentra el correspondiente Préstamo (probablemente mediante una consulta a Préstamo con el libro y el miembro).
-
Préstamo se marca a sí mismo como devuelto.
-
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
-
Miembro → Biblioteca: “Encuentra el libro titulado ‘Código limpio’.”
-
Biblioteca busca en su colección y devuelve el Libro (o
nulosi no se encuentra). -
Miembro ahora sabe que el libro existe → pregunta Biblioteca: “¿Puedo tomar prestado este libro?”
-
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))
-
-
Si es así → Biblioteca crea un nuevo Prestamo y actualiza tanto Libro como Prestamo.
-
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
-
Usa tarjetas físicas (tarjetas de índice 3×5 o notas adhesivas) — es más atractivo.
-
Una clase por tarjeta — manténlo simple.
-
Escribe grande y legible — otros deberían poder leerlo fácilmente.
-
Juega los roles en voz alta — pasa las tarjetas como si fueran objetos reales.
-
Empieza con 3–6 escenarios principales (por ejemplo, pedir prestado, devolver, buscar).
-
No busques la perfección — el objetivo es iteración, no un diseño final. Mejóralo conforme avances.
-
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.
-
Invita a todos a participar — incluso los no programadores pueden ayudar a detectar responsabilidades faltantes.
-
Dibuja un diagrama de clases simple después — para visualizar las relaciones y confirmar la consistencia.
-
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:
Cliente,Pedido,Elemento del menú,Barista,Caja registradora -
Escenarios: Hacer pedido → Agregar bebida → Aplicar descuento → Pagar → Imprimir recibo
🪙 Máquina expendedora
-
Clases:
Máquina expendedora,Producto,Moneda,Distribuidor,Calculadora de Cambio -
Escenarios: Insertar moneda → Seleccionar artículo → Entregar producto → Devolver cambio
🎮 Juego de Preguntas
-
Clases:
Cuestionario,Pregunta,Jugador,Seguimiento de Puntuación,Sesión de Juego -
Escenarios: Iniciar cuestionario → Responder pregunta → Verificar corrección → Mostrar puntuación final
🚗 Estacionamiento
-
Clases:
Estacionamiento,Coche,Lugar de estacionamiento,Boleto,Carrera -
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! 🎮🧩💻
- Cómo dibujar tarjetas CRC en Visual Paradigm: Esta guía paso a paso proporciona instrucciones sobre cómo crear tarjetas CRC utilizando las herramientas dedicadas de diagramación del software.
- Comprender los diagramas de tarjetas CRC en Visual Paradigm: Una visión general que explica cómo se utilizan estos diagramas para modelar sistemas orientados a objetos y sus interacciones.
- Cómo crear un diagrama de tarjetas CRC en Visual Paradigm: Un tutorial detallado encontrado en el Círculo de la Comunidad que cubre la creación y personalización de diagramas CRC.
- Introducción a los diagramas CRC en Visual Paradigm: Una guía completa centrada en el uso de diagramas CRC para el diseño orientado a objetos y la modelización más amplia de sistemas.
- Generar tarjetas CRC a partir de diagramas de clases: Este debate comunitario explora métodos para aprovechar los diagramas de clases existentes para generar tarjetas automáticamente mediante ingeniería inversa.
- Sincronizar tarjetas CRC con diagramas de clases: Un recurso técnico que discute la modelización bidireccional para garantizar la consistencia del diseño entre las tarjetas y los modelos de clases.
- Introducción a los diagramas de tarjetas CRC (guía PDF): Un recurso técnico descargable que explica los conceptos fundamentales y aplicaciones de las tarjetas CRC en el análisis de sistemas.
- Establecer enlaces entre tarjetas CRC y diagramas de clases: Este artículo destaca técnicas para mantener la trazabilidad y el enlace entre diferentes niveles de modelado.
- Plantilla de tarjetas CRC en la galería de Visual Paradigm: Un recurso que presenta una plantilla descargable diseñada para apoyar el diseño orientado a objetos en etapas tempranas.
- Mover tarjetas CRC entre diagramas: Una guía que detalla cómo transferir tarjetas entre diferentes diagramas mientras se mantiene la consistencia de los datos.









