¿Cómo crear un diagrama de clases UML?
Respuesta corta: Para crear un diagrama de clases UML, abre una herramienta como draw.io, identifica las clases de tu sistema y escribe en cada una sus atributos y métodos con su visibilidad (+ pública, - privada, # protegida). Después dibuja las relaciones: la herencia con una línea continua y un triángulo hueco que apunta a la clase padre, la composición con un rombo relleno y la agregación con un rombo vacío. También puedes pedírselo a una IA en código Mermaid y revisar el resultado.
Un diagrama de clases es el diagrama más usado del lenguaje de modelado UML (Unified Modeling Language). Muestra las clases de un sistema orientado a objetos, sus atributos, sus métodos y cómo se relacionan entre sí. Sirve para pensar el diseño antes de programar, para explicárselo a tu equipo y, cada vez más, para darle contexto a una IA que va a escribir el código contigo.
Así se construye un diagrama de clases: primero las clases, luego sus atributos y métodos, después las relaciones. Al final, una IA lo convierte en código.
Crear un diagrama de clases UML paso a paso
Vamos a modelar una aplicación de venta de libros: una biblioteca con libros, vendedores y clientes. Usaremos draw.io, que es gratuito y funciona en el navegador sin crear cuenta. Si trabajas en VS Code, la extensión Draw.io Integration te deja editar el mismo diagrama dentro del editor.
1. Crea un diagrama en blanco
Entra en app.diagrams.net, elige dónde guardar el archivo (tu equipo, Google Drive o GitHub) y crea un diagrama en blanco. En el panel de formas de la izquierda, abre Más formas y activa la biblioteca UML: ahí tienes la caja de clase con sus tres compartimentos y todas las flechas que vas a necesitar.
2. Identifica las clases necesarias
Una clase es una plantilla que describe un tipo de objeto: qué datos guarda y qué sabe hacer. Para encontrarlas, busca los sustantivos importantes de tu problema. En nuestra biblioteca son estos:
- Biblioteca: la clase principal, que contiene todos los libros de la aplicación.
- Libro: un libro con sus características, como el título o el precio.
- Persona: una clase abstracta con los datos comunes de vendedores y clientes. No se crean personas sueltas, solo vendedores o clientes.
- Vendedor: hereda de Persona y añade lo que solo tiene un vendedor, como su comisión.
- Cliente: también hereda de Persona y añade lo propio de un cliente, como su dirección.
3. Define los atributos y métodos
Cada clase se dibuja como una caja con tres partes: el nombre arriba, los atributos en el medio y los métodos abajo.

Delante de cada atributo y de cada método va un símbolo que indica quién puede usarlo:
| Símbolo | Visibilidad | Quién puede acceder |
|---|---|---|
+ | Pública | Cualquier parte de la aplicación |
- | Privada | Solo la propia clase |
# | Protegida | La propia clase y las que heredan de ella |
~ | De paquete | Las clases del mismo paquete |
Los atributos se escriben así:
- nombreAtributo: TipoDeDatoY los métodos, así:
+ nombreMetodo(parametro: TipoDeDato): TipoQueDevuelveLos colores no tienen ningún significado en UML. Puedes usarlos para agrupar clases, pero el diagrama tiene que entenderse igual en blanco y negro.
4. Establece las relaciones
El último paso es unir las clases con el tipo de flecha correcto:

En el ejemplo, Vendedor y Cliente heredan de Persona, así que se unen a ella con una línea continua y un triángulo hueco que apunta a Persona. La Biblioteca se une a las clases que contiene con un rombo, que siempre va pegado a la clase que contiene a las demás.
Estas son las seis relaciones que vas a usar, con su forma en el dibujo y en Mermaid:
| Relación | Cómo se dibuja | En Mermaid | Ejemplo |
|---|---|---|---|
| Herencia | Línea continua y triángulo hueco hacia el padre | Persona <|-- Cliente | Un cliente es una persona |
| Implementación | Línea discontinua y triángulo hueco | Pagable <|.. Pedido | Un pedido cumple la interfaz Pagable |
| Asociación | Línea continua, con flecha opcional | Cliente --> Libro | Un cliente compra libros |
| Dependencia | Línea discontinua con flecha | Pedido ..> Factura | Un pedido usa una factura un momento |
| Agregación | Rombo vacío en el contenedor | Biblioteca o-- Vendedor | El vendedor existe aunque cierre la biblioteca |
| Composición | Rombo relleno en el contenedor | Biblioteca *-- Libro | Si borras la biblioteca, se borran sus libros |
Añade la multiplicidad en los extremos de la línea cuando importe cuántos objetos participan: 1, 0..1, * o 1..*. Por ejemplo, una biblioteca tiene 1..* libros.
El diagrama no es un dibujo que se hace una vez. Cuando empieces a programar aparecerán atributos y clases que no habías previsto: añádelos. Lo importante es que el diagrama siga contando la verdad sobre tu código.
