Un diagrama de clases describe los tipos de objetos (sus atributos, operaciones y restricciones) que hay en el sistema y las relaciones estticas que existen entre ellos.
Bsicamente hay dos tipos de relaciones:
-
Asociaciones: Un Cliente hace un Pedido
-
Subtipos: Un Profesor es un subtipo de Persona
# Componentes: Clases
Representadas por rectngulos divididos en tres secciones:
-
Nombre de la Clase: La parte superior muestra el nombre de la clase.
-
Atributos: La seccin del medio lista las propiedades o datos que la clase mantiene.
-
Mtodos: La seccin inferior detalla las operaciones o funciones que la clase puede realizar.
En cdigo:
public class Pedido {
// Atributos privados
private Date fecha;
private int cantidad;
private double precio;
// Constructor
public Pedido(Date fecha, int cantidad, double precio) {
this.fecha = fecha;
this.cantidad = cantidad;
this.precio = precio;
}
// Mtodos pblicos
public void despacha() {
// Implementacin del mtodo despacha
}
public void cierra() {
// Implementacin del mtodo cierra
}
// Podramos agregar los mtodos de acceso (getters) y
// modificacin (setters) de los atributos privados
}
# Relaciones: Asociacin
Una lnea simple que conecta dos clases y representa una relacin entre ellas, como la colaboracin o interaccin.
La multiplicidad indica la cantidad de objetos que participan. El *” entre Cliente y Pedido indica que Cliente puede tener muchos Pedidos asociados; el 1” indica que un Pedido viene de un solo Cliente.
public class Cliente {
private String nombre;
private String direccion;
private List<Pedido> pedidos; // Lista de pedidos asociados
public Cliente(String nombre, String direccion) {
this.nombre = nombre;
this.direccion = direccion;
this.pedidos = new ArrayList<>();
}
public void addPedido(Pedido pedido) {
pedidos.add(pedido);
}
}
Si agregamos Navegabilidad (con Pedido apuntando a Cliente):
# Herencia
Una lnea que termina en un tringulo apuntando hacia una superclase, indicando que una clase hereda de otra.
public class ClienteCorporativo extends Cliente {
private String nombreContacto;
private double limiteCredito;
public ClienteCorporativo(String nombre, String direccion, String contacto, double limite) {
super(nombre, direccion);
this.nombreContacto = contacto;
this.limiteCredito = limite;
}
}
# Agregacin y Composicin
Agregacin (Relacin Dbil)
Un objeto est relacionado con otros, teniendo los segundos una existencia propia. Si se borra la librera, los libros pueden seguir existiendo.
Composicin (Relacin Fuerte)
La existencia de uno depende del otro; la parte no puede existir sin el todo. Se borra el polgono, se borran sus puntos.
# Interfaces y Visibilidad
Una interfaz es una clase sin implementacin (operaciones sin cuerpo ni atributos). Se usa <<interface>> y lneas punteadas para la implementacin.
Smbolos de Visibilidad:
- + Pblico
- - Privado
- # Protegido
# Diagrama Completo
Propsito y Uso
-
Diseo: Esenciales para definir la estructura del cdigo antes de implementarlo.
-
Documentacin: Detalla cmo est construido el sistema para el mantenimiento futuro.
-
Comunicacin: Facilita el entendimiento comn entre desarrolladores y analistas.
# Conclusin
El diagrama de clases es un instrumento vital en UML y en la ingeniera de software, no solo ayuda a los desarrolladores a pensar y disear de manera estructurada y organizada, sino que tambin asegura que el equipo de desarrollo comparta una comprensin comn del diseo del sistema.