Diagramas de Perfil, Estereotipos y Extensiones
El Diagrama de Perfil (Profile Diagram) es un diagrama estructural introducido formalmente en UML 2.0 que permite adaptar y extender el metamodelo estándar de UML para dominios, tecnologías o plataformas específicas (como Spring Boot, Java EE, .NET, bases de datos relacionales o arquitecturas cloud).
En lugar de crear un lenguaje de modelado completamente nuevo, los perfiles permiten crear un Lenguaje Específico de Dominio (DSL) ligero reutilizando la semántica y herramientas de UML.
1. Conceptos Fundamentales de los Perfiles UML #
Un perfil se compone de tres mecanismos principales de extensión:
| Concepto | Sintaxis / Notación | Descripción |
|---|---|---|
Perfil (<<profile>>) | Paquete con marca <<profile>> | Paquete especial que encapsula un conjunto coordinado de estereotipos y restricciones. |
Estereotipo (<<stereotype>>) | Clase con marca <<stereotype>> | Especialización de una metaclase UML que define una nueva semántica para un elemento existente. |
Metaclase (<<metaclass>>) | Clase del metamodelo UML | Elemento base de UML que es extendido (por ejemplo Class, Property, Operation, Component). |
| Valores Etiquetados (Tagged Values) | {clave = valor} | Propiedades y metadatos adicionales introducidos por el estereotipo. |
Extensión (<<extend>>) | Flecha con punta sólida rellenada | Relación que une un estereotipo con la metaclase UML que extiende. |
2. Definición de un Perfil en UML #
En la siguiente figura se define un perfil de arquitectura para aplicaciones empresariales con tres estereotipos aplicables a la metaclase Class:
1@startuml 2package "Perfil Empresarial" <<profile>> { 3 class Class <<metaclass>> 4 class Interface <<metaclass>> 5 6 class "Service" <<stereotype>> { 7 +transaccional: Boolean = true 8 +timeoutMs: Integer = 5000 9 } 10 11 class "Repository" <<stereotype>> { 12 +tabla: String 13 +cacheable: Boolean = false 14 } 15 16 class "RESTController" <<stereotype>> { 17 +basePath: String 18 +version: String = "v1" 19 } 20 21 Class <|-- "Service" : <<extend>> 22 Class <|-- "Repository" : <<extend>> 23 Class <|-- "RESTController" : <<extend>> 24} 25@enduml
3. Aplicación del Perfil en Diagramas de Clases #
Una vez definido el perfil, los estereotipos se aplican entre comillas angulares dobles (<< >>) sobre clases concretas del modelo de diseño:
1@startuml 2class UsuarioController <<RESTController>> { 3 +obtenerPorId(id: Long): ResponseEntity 4 +crearUsuario(dto: UsuarioDTO): ResponseEntity 5} 6 7class UsuarioService <<Service>> { 8 -repositorio: UsuarioRepository 9 +registrar(nombre: String, email: String): Usuario 10 +buscarPorId(id: Long): Optional<Usuario> 11} 12 13class UsuarioRepository <<Repository>> { 14 +findById(id: Long): Optional<Usuario> 15 +save(usuario: Usuario): Usuario 16} 17 18UsuarioController --> UsuarioService : invoca 19UsuarioService --> UsuarioRepository : persiste 20@enduml
4. Equivalencia en Código Fuente (Java, TypeScript, Python) #
Los estereotipos UML y sus tagged values se traducen de forma natural en anotaciones o decoradores en los lenguajes de programación modernos:
5. Buenas Prácticas al Usar Perfiles #
- No reinventar la rueda: Utiliza los elementos estándar de UML siempre que sea posible; define estereotipos solo cuando agreguen significado semántico relevante para el equipo.
- Definir valores por defecto en tagged values: Ahorra redundancia en los diagramas estableciendo valores predeterminados sensatos.
- Consistencia con el framework de destino: Alinea los nombres de tus estereotipos con las anotaciones y convenciones del framework tecnológico que empleará el equipo de desarrollo.