4. Notación UML para Clases
La notación UML (Unified Modeling Language) para clases proporciona un conjunto estándar de símbolos y convenciones que permiten representar clases y sus relaciones de manera clara y consistente. Esta notación es esencial para crear diagramas de clases efectivos que comuniquen correctamente la estructura de un sistema orientado a objetos.
4.1. Representación gráfica de una clase
Section titled “4.1. Representación gráfica de una clase”En UML, una clase se representa mediante un rectángulo dividido en tres compartimentos o secciones. Cada sección tiene un propósito específico y sigue reglas de notación particulares.
Estructura básica
Section titled “Estructura básica”[NombreClase]-----------------| atributos |-----------------| operaciones |-----------------Compartimentos de una clase
Section titled “Compartimentos de una clase”Contiene el nombre de la clase con las siguientes características:
- Se escribe centrado
- La primera letra en mayúscula (convención PascalCase)
- Puede incluir el nombre del paquete:
paquete::NombreClase - Se puede mostrar en negrita o cursiva para indicar propiedades especiales
- Cursiva: Clase abstracta
- Negrita: Clase estática
Contiene los atributos de la clase:
- Cada atributo en una línea separada
- Incluye visibilidad, nombre, tipo y valores iniciales
- Puede omitirse si no es relevante para el diagrama
- Puede incluir restricciones y propiedades adicionales
Contiene las operaciones (métodos) de la clase:
- Cada operación en una línea separada
- Incluye visibilidad, nombre, parámetros y tipo de retorno
- Puede omitirse si no es relevante para el diagrama
- Puede incluir restricciones y propiedades adicionales
Variaciones en la representación
Section titled “Variaciones en la representación”[NombreClase]-----------------[NombreClase]-----------------| atributos |-----------------[<<interfaz>>][NombreInterfaz]-----------------| operaciones |-----------------4.2. Representación de atributos
Section titled “4.2. Representación de atributos”Los atributos en UML siguen una sintaxis específica que permite expresar diversas propiedades y características.
Sintaxis completa de un atributo
Section titled “Sintaxis completa de un atributo”visibilidad nombre: tipo [multiplicidad] = valorPredeterminado {propiedades}Elementos de un atributo
Section titled “Elementos de un atributo”Indica el nivel de acceso al atributo:
- + Público - Accesible desde cualquier clase
- - Privado - Accesible solo desde la propia clase
- # Protegido - Accesible desde la clase y sus subclases
- ~ Paquete - Accesible desde clases del mismo paquete
- nombre: Identificador del atributo (generalmente en camelCase)
- tipo: Tipo de dato del atributo (String, Integer, Boolean, etc.)
- multiplicidad: Indica cuántas instancias puede tener (ej. [0..1], [1..*])
- valorPredeterminado: Valor inicial asignado al atributo
propiedades: Características adicionales entre llaves
- {readOnly} - Atributo de solo lectura
- {unique} - Valor único
- {ordered} - Colección ordenada
Ejemplos de atributos
Section titled “Ejemplos de atributos”- nombre: String+ edad: Integer = 0# saldo: Double {readOnly}- cuentas: Cuenta[0..*] {ordered}~ activo: Boolean = true4.3. Representación de operaciones
Section titled “4.3. Representación de operaciones”Las operaciones (métodos) en UML siguen una sintaxis específica que permite expresar parámetros, tipos de retorno y otras propiedades.
Sintaxis completa de una operación
Section titled “Sintaxis completa de una operación”visibilidad nombre(parametro1: tipo1, ..., parametroN: tipoN): tipoRetorno {propiedades}Elementos de una operación
Section titled “Elementos de una operación”- visibilidad: Nivel de acceso (igual que en atributos)
- nombre: Identificador del método (generalmente en camelCase)
Definidos entre paréntesis:
dirección: Opcional, indica cómo se pasa el parámetro
in: Parámetro de entrada (predeterminado)out: Parámetro de salidainout: Parámetro de entrada y salida
- nombre: Identificador del parámetro
- tipo: Tipo de dato del parámetro
- valorPredeterminado: Valor inicial opcional
- tipoRetorno: Tipo de dato que devuelve la operación
propiedades: Características adicionales entre llaves
- {query} - No modifica el estado del objeto
- {abstract} - Método abstracto (debe implementarse en subclases)
- {static} - Método estático (de clase)
Ejemplos de operaciones
Section titled “Ejemplos de operaciones”+ calcularTotal(): Double- validarDatos(usuario: String, clave: String): Boolean# actualizarSaldo(monto: Double): void+ obtenerHistorial(): Transaccion[*] {query}+ crearInstancia(): Producto {static}Representación de constructores y destructores
Section titled “Representación de constructores y destructores”+ NombreClase(parametros): void // Constructor+ ~NombreClase(): void // Destructor4.4. Estereotipos y etiquetas
Section titled “4.4. Estereotipos y etiquetas”Los estereotipos y etiquetas permiten extender la notación UML para representar conceptos específicos o propiedades adicionales.
Estereotipos
Section titled “Estereotipos”Los estereotipos extienden el vocabulario de UML y se representan entre comillas angulares dobles (<<estereotipo>>).
[<<interfaz>>][InterfazUsuario]-----------------+ autenticar(): Boolean+ cerrarSesion(): void-----------------Estereotipos comunes
Section titled “Estereotipos comunes”| Estereotipo | Descripción | Aplicación |
|---|---|---|
<<interface>> | Define una interfaz | Clase que solo declara métodos sin implementación |
<<abstract>> | Clase abstracta | Clase que no puede ser instanciada directamente |
<<entity>> | Entidad persistente | Clase que representa datos persistentes |
<<control>> | Clase controladora | Clase que implementa lógica de negocio o control |
<<boundary>> | Clase límite | Clase que interactúa con actores externos |
<<utility>> | Clase utilitaria | Clase con métodos estáticos y sin estado |
Etiquetas (Tagged Values)
Section titled “Etiquetas (Tagged Values)”Las etiquetas permiten añadir propiedades personalizadas a los elementos UML.
[Producto]-----------------| - id: String {id}| - precio: Double-----------------{version = 1.0}{author = "Juan Pérez"}Restricciones
Section titled “Restricciones”Las restricciones especifican condiciones que deben cumplirse y se representan entre llaves.
[Cuenta]-----------------| - saldo: Double {saldo >= 0}-----------------| + retirar(monto: Double): Boolean-----------------Ejemplo completo de notación UML
Section titled “Ejemplo completo de notación UML”[<<entity>>][Cliente]-----------------| + id: String {id, unique}| - nombre: String [1]| - apellido: String [1]| - email: String [0..1]| # fechaRegistro: Date = "hoy" {readOnly}| ~ activo: Boolean = true-----------------| + getNombreCompleto(): String {query}| + actualizarDatos(datos: DatosCliente): Boolean| + desactivar(): void| - validarEmail(email: String): Boolean-----------------{version = "2.0"}{author = "Equipo de Desarrollo"}