Operaciones: Ejemplos
dibujar
+ dibujar
set (nombre : String)
getID(): Integer
arrancar() {guarded}
Formato parámetro:
[direccion] nombre : tipo [= valor-por-defecto]
direccion puede ser : in, out o inout
Clases Parametrizadas
«bind»
G
Tabla
count
capacity
put(G)
item() : G
Empleados
(Gp:) Tabla
Clase
Parametrizada
Instanciación
Clases Estereotipadas
Clases del modelo o entidad, controlador e interface
Relaciones
Dependencia
Un cambio en la especificación de un elemento afecta a otro elemento
Estereotipos para dependencias
<>: relación de uso, el más común entre clases y se da por
defecto
<>: cliente y proveedor representan el mismo concepto en diferentes modelos
<>: entre una clase genérica y una instanciación
<>: dependencia de clase amiga
<>: un paquete importa los elementos de otro.
<>: similar a <>
<>: para casos de uso
<>: para casos de uso
Relaciones
Generalización
“Es-un-tipo-de”
En el caso de un modelo de diseño o implementación denota una relación de herencia
Relaciones
Asociación
Relación estructural que especifica que los objetos de un tipo están conectados con los de otro.
Multiplicidad (mínimo..máximo)
Ejemplos: 0..1, 1, 0..*, *, 1..*, 1..10, 2..25
Agregación
Caso especial de asociación
Relación estructural parte-de
(Gp:) Empresa
(Gp:) 1..1
(Gp:) *
(Gp:) Departamento
(Gp:) 1..1
(Gp:) *
Asociaciones
Navegabilidad
Asociaciones son bidireccionales
Posibilidad de limitar la navegación de una asociación a una sola dirección
Determina si una clase de la asociación tiene “conocimiento” de la otra.
Nivel de diseño o implementación
Navegabilidad
class Pedido {
private Hashtable _itemsPedido;
private Date fecha;
private boolean esCompleto;
…}
class ItemPedido {
private Producto producto;
private int cantidad;
…}
Class Producto {
private Money precio;
private String descripción;
}
Navegabilidad (UML 2.0)
A
B
A
B
A
B
A
B
A
B
Navegabilidad indefinida
Navegable de A a B, de B a A indefinida
Navegable en ambos sentidos
Navegable sólo de A a B
No navegable en ningún sentido
Navegabilidad (Práctica habitual)
A
B
A
B
A
B
A
B
A
B
Navegabilidad en ambos sentidos
Navegable sólo de A a B
No se usa
No se usa
No se usa
Visibilidad
Pública: + propietario
Protegida: # propietario
Privada: – propietario
Paquete: ~ propietario
Asociaciones calificadas
Nivel Conceptual: “Dentro del mismo pedido no pueden existir dos líneas con el mismo producto”
Nivel Análisis: “El acceso a ItemPedido es indexado por productos”
Nivel Implementación: “Se usa una tabla para almacenar las líneas de pedido”
Asociaciones calificadas
Class Pedido {
private Hashtable _lineasPedido;
public ItemPedido getItemPedido(Producto unProducto);
public void addItemPedido (Integer cantidad,
Producto elProducto);
…
}
Agregación
Dos criterios:
Dependencia:
¿La existencia de una parte va ligada a la del agregado?
Exclusividad:
¿Una parte puede pertenecer a más de un agregado?
Habría cuatro posibles tipos de agregación; en UML hay dos: agregación y composición
Composición
Forma “fuerte” de agregación
Una parte pertenece a un único agregado (exclusividad)
Si se elimina un agregado se eliminan todas sus partes (dependiente)
Una parte se puede añadir o eliminar en cualquier instante al agregado.
Composición
agregado
partes
2
Clases Asociación
Una asociación que también es una clase
Una asociación que posee sus propias características.
Una clase asociación añade una restricción:
“Sólo puede existir una instancia de la asociación entre cualquiera par de objetos participantes”
No podríamos modelar que una persona tiene diferentes contratos para una misma compañía a lo largo del tiempo.
Ejemplo de clase asociación
Distinta semántica
Asociaciones derivadas
Asociación Derivada
Restricciones para Asociaciones
{or}
{subset}
Restricciones para Asociaciones
Persona
Empresa
*
0..1
empleado
*
0..1
{ Persona.patrón=
Persona.jefe.patrón }
patrón
jefe
operario
“Un empleado trabaja para la misma empresa que su jefe”
Página anterior | Volver al principio del trabajo | Página siguiente |