Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
z Relación de dependencia.
Clase A Clase B
{Significa que un elemento es
estructuralmente
dependiente de otro class A {
elemento.
B b;
{Esto es, cambios en un ….
elemento afectarán a
}
cambios en el elemento
dependiente.
Diagramas de diseño
z Relación de
Clase A
implementación.
Interfaz I
{Significa que un +métodoX()
elemento implementa a
otro. class A
{UML no define con implements I
precisión el significado {
de “implementar”. métodoX() {
{Habitualmente utilizado …;
en interfaces
}
….
}
Diagramas de diseño
z Relación de nesting
{Aún no una traducción
oficial (¿anidamiento?).
<<nesting>>
contenido dentro de
otro. class Class1
{No existe en StarUML {
(estereotipar). ….
class Class2 {
…;
}
}
Diagramas de diseño
z Estereotipos:
cd Estereotipos
Página Controlador
elemento.
{Añade algo nuevo: una
semántica o
comportamiento,
restricciones, métodos Vista
link
atributos.
{Útil para capturar
detalles de la Estereotipos:
plataforma de •Web page.
implementación. •Servlet
•JSP.
•Link
Diagramas de diseño
zEjercicio:
{Una clase Venta contiene una lista de objetos
LineaDeVenta.
{Deseamos implementar nuestro propio iterador
(en Java) para recorrer todas las líneas de
venta.
{Suponemos que las líneas de venta se
almacenan en un array.
Diagramas de diseño
Venta LineaDeVenta
+iterator(): java.util.Iterator
<<interface>>
java.util.Iterator
VentaInterador
+hasNext(): boolean
+next(): LineaDeVenta
+remove(): LineaDeVenta
Diagramas de diseño
Venta 0..* LineaDeVenta
<<nesting>>
<<interface>>
java.util.Iterator
VentaInterador
+hasNext(): boolean class Venta
+next(): LineaDeVenta
+remove(): LineaDeVenta
{
LineaDeVenta[] vendido;
Itertor<LineaDeVenta> iterator() {
return new VentaIterator<LineaDeVenta> ();
}
<<JSFPanerGroup>>
Result
Calculadora
+primerNumero: int
<<JSFPage>> <<JSFController>> +segundoNumero: int
CalculadoraForm CalculadoraControl +resultado: int
+suma()
+OpSuma() +resta()
+multiplica()
+divide()
+getResultado()
Diagramas de diseño
/CalculadoraForm / : OpSuma / : CalculadoraControl /c : Calculadora / : Result
Interfaz de usuario.
/ : Usuario
Controlador.
1 : introduce número A() Modelo.
3 : operación suma()
4 : c := getCalculadora()
5 : setPrimerNumero()
6 : setSegundoNumero()
7 : OpSuma()
8 : suma()
9 : getResultado()
10 : setRendred()
11
Diagramas de diseño
/ : Usuario
Calculadora 1
2 : OpSuma()
+primerNumero: int 3 : suma()
<<JSFPage>> <<JSFController>> +segundoNumero: int
CalculadoraForm CalculadoraControl +resultado: int
+suma()
+OpSuma() +resta()
<<JSFInjected>> 4 : getResultado()
+multiplica()
+divide()
5 : setRendred()
<<JSFPanerGroup>>
Result
6
+rendered: boolean = false
Diagramas de diseño
[ fallos en detalles ]
VersiónInicial introducirDatosPreliminares [ datosValidos() ]
VersiónPreliminar VersiónCompleta
Revisión
Inicial: vacío.
Preliminar: datos preliminares. Al retroceder a un estado anterior, se pierde
Completo: toda la información. toda la información almacenada.
Diagramas de diseño
EstadoInicial
<<interface>> EstadoPreliminar
EstadoInforme
+versiónPreliminar()
+versionCompleta() EstadoCompletado
+versionValidada()
+versionAprobada()
EstadoValidado
<<runtimeexception>>
ExceptionOperacionNoPermitidaEnEsteEstado EstadoAprobado
Diagramas de diseño
Dado que los propios estados son stateless,
Usuario mejor reutilizar que crear (incluso compartidos
por distintas instancias).
<<create>>
1 i : Informe
<<create>>
2 i.estado : EstadoInicial
3 : introducirDatosBásicos()
4 : versiónPreliminar()
<<create>>
6 i.estado : EstadoPreliminar
5 : validarDatosBásicos()
Diagramas de diseño
¿Cómo podemos asegurarnos de que los usuarios humanos del
sistema no hagan lo que no deban?
Mediante sus interfaces. Nunca debería llegarle a un usuario un error
provocado por la excepción
ExcepcionOperacionNoPermitidaEnEsteEstado (por eso es Runtime).