En los lenguajes orientados a objetos como JAVA es fundamental comprender como las clases existentes se relacionan. UML permite definir tres tipos de relaciones fundamentales que son:
- Asociación
- Agregación
- Composición
- Herencia
Notación de las relaciones entre clases
Tienen las siguientes partes:- Nombre de la relación (un verbo).
- La ocurrencia de cada clase (rangos ubicados en los extremos).
- El rol de cada clase en la relación.
La multiplicidad es el número de instancias de una clase que se relacionan con una instancia de otra clase.
Multiplicidad | Simbología |
---|---|
Uno y solo uno | 1 |
Cero o uno | 0 .. 1 |
Desde "N" hasta "M" | N .. M |
Varios | * |
Cero a varios | 0 .. * |
Uno a varios | 1 .. * |
Asociación
Es una relación entre dos clases que requieren relacionarse (como una orden y un cliente), mediante UML y el diagrama de clases de representa mediante una línea y en algunos casos incluye una flecha siguiendo la estructura de una oración. Esta flecha apunta al objeto y el otro extremo representa al sujeto.Relación unidireccional
Código ejemplo
package com.asociacionSimple;
public class Moneda {
private Integer idMoneda;
private String nombre;
private String simbolo;
public Moneda(Integer idMoneda, String nombre, String simbolo) {
this.idMoneda = idMoneda;
this.nombre = nombre;
this.simbolo = simbolo;
}
public String getSimbolo() {return simbolo;}
public void setSimbolo(String simbolo) {
this.simbolo = simbolo;
}
public Integer getIdMoneda() {return idMoneda;}
public void setIdMoneda(Integer idMoneda) {
this.idMoneda = idMoneda;
}
public String getNombre() {return nombre;}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
package com.asociacionSimple;
public class Producto {
private Integer idProducto;
private String codigo;
private Float precio;
private Integer stock;
private Moneda moneda;
public Producto(Integer idProducto, String codigo, Float precio, Integer stock) {
this.idProducto = idProducto;
this.codigo = codigo;
this.precio = precio;
this.stock = stock;
}
public Moneda getMoneda() {return moneda;}
public void setMoneda(Moneda moneda) {
this.moneda = moneda; //Análogo a "agregar moneda"
}
public Integer getIdProducto() {return idProducto;}
public void setIdProducto(Integer idProducto) {
this.idProducto = idProducto;
}
public String getCodigo() {return codigo;}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public Float getPrecio() {return precio;}
public void setPrecio(Float precio) {
this.precio = precio;
}
public Integer getStock() {return stock;}
public void setStock(Integer stock) {
this.stock = stock;
}
}
Relación bidireccional
Agregación
Es un tipo especial de asociación entre clases conocido como: “contiene a” o “es contenido en”. Ambas clases tiene una vida independiente, pero una de estas (llamada invitado) trabaja en orden a otra (huésped). Esto le permite a huésped usar características de invitado en la ejecución de algunas tareas.Se representa con una línea con rombo blanco, donde el rombo esta en el huésped y el otro lado en el invitado.
Código ejemplo
package com.agregacion;
public class Punto {
private Integer x;
private Integer y;
public Punto(Integer x, Integer y) {
this.x = x;
this.y = y;
}
public Integer getY() {return y;}
public void setY(Integer y) {this.y = y;}
public Integer getX() {return x;}
public void setX(Integer x) {this.x = x;}
}
package com.agregacion;
public class Figura {
//Cuadrilatero asumido
private Punto p1;
private Punto p2;
private Punto p3;
private Punto p4;
public Figura(Punto p1, Punto p2, Punto p3, Punto p4) {
this.p1 = p1;
this.p2 = p2;
this.p3 = p3;
this.p4 = p4;
}
public Punto getP1() {return p1;}
public void setP1(Punto p1) {this.p1 = p1;}
public Punto getP2() {return p2;}
public void setP2(Punto p2) {this.p2 = p2;}
public Punto getP3() {return p3;}
public void setP3(Punto p3) {this.p3 = p3;}
public Punto getP4() {return p4;}
public void setP4(Punto p4) {this.p4 = p4;}
}
Composición de clases
Tipo especial de agregación. Conocida como "es parte de" o "es un todo de". En este caso las dos partes necesitan de ellas para existir (una no existe sin la otra), de manera que existe una clase (todo) que utiliza características de otra (parte) para la ejecución de alguna tarea.Se representa con un rombo relleno, que esta junto al "todo" y al otro extremo la "parte".
Código ejemplo
package com.composicion;
public class Vehiculo {
private Motor motor;
private Transmision transmision;
private Rueda ruedaDelantera;
private Rueda ruedaTrasera;
public Vehiculo(String motor, String transmision, String ruedaDelantera, String ruedaTrasera) {
this.motor = new Motor(motor);
this.transmision = new Transmision(transmision);
this.ruedaDelantera = new Rueda(ruedaDelantera);
this.ruedaTrasera = new Rueda(ruedaTrasera);
}
public Motor getMotor() {
return motor;
}
public void setMotor(Motor motor) {
this.motor = motor;
}
public Transmision getTransmision() {
return transmision;
}
public void setTransmision(Transmision transmision) {
this.transmision = transmision;
}
public Rueda getRuedaDelantera() {
return ruedaDelantera;
}
public void setRuedaDelantera(Rueda ruedaDelantera) {
this.ruedaDelantera = ruedaDelantera;
}
public Rueda getRuedaTrasera() {
return ruedaTrasera;
}
public void setRuedaTrasera(Rueda ruedaTrasera) {
this.ruedaTrasera = ruedaTrasera;
}
}
Gracias por los ejemplos,muy claros. Saludos
ResponderEliminar