terminal

codeando_simple

terminal

menu

terminal

search_module

guest@codeandosimple: ~/system/search $ grep -r "" .

Press [ENTER] to execute search

Status

Engine: Ready

Database: Online

Index: V2.1.0_LATEST

bash cat uml-clases.md
guest@codeandosimple: ~/blog/uml $ cat diagrama-clases.md

Diagrama de Clases_

// "Somos lo que hacemos repetidamente. La excelencia, entonces, no es un acto, es un hbito." - Aristteles

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.

Representacin de una clase

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.

Relacin de Asociacin
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):

Navegabilidad en Asociacin

# Herencia

Una lnea que termina en un tringulo apuntando hacia una superclase, indicando que una clase hereda de otra.

Relacin de Herencia
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.

Agregacin

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.

Composicin

# Interfaces y Visibilidad

Una interfaz es una clase sin implementacin (operaciones sin cuerpo ni atributos). Se usa <<interface>> y lneas punteadas para la implementacin.

Interfaz en UML

Smbolos de Visibilidad:

  • + Pblico
  • - Privado
  • # Protegido

# Diagrama Completo

Diagrama de clases 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.