UML: Lenguaje Unificado de Lenguaje Unificado de Modelado
UML: Lenguaje Unificado de Lenguaje Unificado de Modelado
UML: Lenguaje Unificado de Lenguaje Unificado de Modelado
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>UML</strong> <strong>UML</strong>:<br />
<strong>Lenguaje</strong> <strong>Unificado</strong> <strong>de</strong><br />
Mo<strong>de</strong>lado http://uml.org<br />
Tema 4<br />
TACC II<br />
Curso 2008/09<br />
1
Introducción<br />
Similitud:<br />
Arquitectos, edificios, planos<br />
Ing. Inf., programas, diagramas<br />
<strong>UML</strong><br />
Unified Mo<strong>de</strong>ling Language. Versión 2.0 (finales 2004)<br />
Diagramas (ing. (ing inf inf.) )<br />
Usados como esquemas y menos con información rigurosa (“planos<br />
<strong>de</strong> arquitectos”)<br />
Dos modos:<br />
• Ingeniería inversa: a partir <strong>de</strong> código hacer diagramas<br />
• Ingeniería directa: hacer diagramas y luego implementar<br />
Dominio<br />
Mundo en el que hay <strong>de</strong>finido un problema<br />
Mo<strong>de</strong>lo:<br />
Abstracción <strong>de</strong> un problema<br />
Formado por objetos<br />
2
Indice<br />
Diagramas <strong>de</strong> Casos <strong>de</strong> Uso.<br />
Diagramas Diagramas <strong>de</strong> Estructura. Estructura<br />
Diagramas <strong>de</strong> Comportamiento.<br />
OCL.<br />
H Herramientas. i t<br />
Ejemplos. j p<br />
Bibliografía.<br />
3
Casos <strong>de</strong> Uso<br />
DDescriben ib qué é hhace el l sistema i t d<strong>de</strong>s<strong>de</strong> d el l punto t<br />
<strong>de</strong> vista <strong>de</strong> un observador externo.<br />
Ponen énfasis en qué hace el sistema, no en<br />
cómo lo hace.<br />
Un escenario es una instancia particular <strong>de</strong> un<br />
diagrama <strong>de</strong> casos <strong>de</strong> uso.<br />
Ejemplo <strong>de</strong> lo que ocurre cuando alguien interactúa<br />
con el sistema<br />
4
Casos <strong>de</strong> Uso<br />
AActor t = Al Algo con comportamiento t i t (persona, ( otro t<br />
programa, organización...), que interactua con el<br />
sistema.<br />
Escenario (instancia <strong>de</strong> caso <strong>de</strong> uso) =<br />
Secuencia <strong>de</strong> acciones e interacciones entre los<br />
actores y el sistema.<br />
Caso <strong>de</strong> Uso = Colección <strong>de</strong> escenarios (éxito y<br />
fracaso) que <strong>de</strong>scriben actores que usan el<br />
sistema para conseguir un objetivo.<br />
5
Casos <strong>de</strong> Uso<br />
P Pasos:<br />
I<strong>de</strong>ntificar los límites <strong>de</strong>l sistema.<br />
I<strong>de</strong>ntificar los actores principales.<br />
Para cada uno, i<strong>de</strong>ntificar sus objetivos.<br />
Definir casos <strong>de</strong> uso que satisfagan sus<br />
objetivos.<br />
6
Ejemplo<br />
Aplicación para una Galería <strong>de</strong> Arte<br />
Te encargan realizar una aplicación para la compra-venta <strong>de</strong> cuadros. En cuanto a la compra <strong>de</strong> cuadros, una vez<br />
que el agente introduce unos datos básicos sobre el cuadro cuadro, el sistema <strong>de</strong>be proporcionar el precio recomendado<br />
que el agente <strong>de</strong> la galería <strong>de</strong>bería pagar. Si el ven<strong>de</strong>dor <strong>de</strong>l cuadro acepta la oferta, entonces el agente <strong>de</strong> la<br />
galería introduce más <strong>de</strong>talles (sobre el ven<strong>de</strong>dor <strong>de</strong>l cuadro y la venta).<br />
Los datos básicos incluyen y el nombre y apellidos p <strong>de</strong>l artista, , el título y fecha<strong>de</strong>laobra, , sus dimensiones, , la técnica<br />
(óleo, acuarela u otras técnicas), el tema (retrato, naturaleza muerta, paisaje, otro) y la clasificación (obra maestra,<br />
obra representativa, otro tipo). Si es obra maestra, el precio recomendado se calcula comparando el cuadro<br />
introducido con los que hay en el registro <strong>de</strong> cuadros, tomando el más parecido y aplicando un algoritmo que tiene<br />
en cuenta la coinci<strong>de</strong>ncia <strong>de</strong> tema, la técnica y las dimensiones <strong>de</strong>l cuadro. El sistema <strong>de</strong>be utilizar información <strong>de</strong><br />
subasta <strong>de</strong> todo el mundo que ahora la galería recibe en un CD <strong>de</strong> manera mensual. Para una obra representativa,<br />
el precio recomendado se calcula como si fuera una obra maestra y luego se aplica una corrección. Para una obra<br />
<strong>de</strong> otro tipo, se calcula utilizando el área <strong>de</strong>l cuadro y un coeficiente <strong>de</strong> moda para el artista. Si no hay coeficiente <strong>de</strong><br />
moda para un artista, el agente tiene por norma no comprar el cuadro. El coeficiente <strong>de</strong> moda varia <strong>de</strong> mes a mes.<br />
Si el cuadro finalmente se compra, se introducen datos adicionales.<br />
En cuanto a la venta <strong>de</strong> cuadros por parte <strong>de</strong> la galería, el sistema simplemente registra la fecha <strong>de</strong> venta, el nombre<br />
y dirección <strong>de</strong>l comprador p y el precio p <strong>de</strong> venta real.<br />
El sistema también <strong>de</strong>berá <strong>de</strong>tectar nuevas ten<strong>de</strong>ncias en el mercado <strong>de</strong> arte tan pronto como sea posible. La i<strong>de</strong>a<br />
es <strong>de</strong>tectar secuencias <strong>de</strong> compras por valores mayores que los esperados por la obra <strong>de</strong> un artista <strong>de</strong>terminado, <strong>de</strong><br />
tal manera que tu cliente pueda comprar cuadros <strong>de</strong> ese artista antes <strong>de</strong> que otros <strong>de</strong>tecten la ten<strong>de</strong>ncia. Con el<br />
objetivo <strong>de</strong> <strong>de</strong>tectar cuándo el precio <strong>de</strong> venta es mayor que el precio esperado cuando tu cliente compró el cuadro,<br />
se <strong>de</strong>be mantener un registro <strong>de</strong> todas las compras y todas las ventas.<br />
Se quieren generar tres informes: compras y ventas realizadas durante un año, y artistas <strong>de</strong> moda.…<br />
7
Ejemplo<br />
Agente<br />
Comprar p una<br />
Obra maestra<br />
Comprar una<br />
OObra<br />
representativa<br />
Comprar una<br />
Obra <strong>de</strong> Otro Tipo<br />
Ven<strong>de</strong>r un<br />
cuadro<br />
Producir Informe<br />
compras<br />
Galería Producir Informe<br />
ventas<br />
Producir Informe<br />
ten<strong>de</strong>ncias<br />
Actualizar<br />
Coeficiente <strong>de</strong> moda<br />
Ven<strong>de</strong>dor<br />
Comprador<br />
8
Ejemplo<br />
Caso <strong>de</strong> uso: comprar una obra maestra<br />
Actores primarios:<br />
Agente Galería, ven<strong>de</strong>dor<br />
Interesados y Objetivos:<br />
• Agente: quiere obtener una recomendación lo más acertada posible <strong>de</strong>l precio<br />
máximo ái recomendado dd d<strong>de</strong> manera rápida. áid<br />
• Ven<strong>de</strong>dor: quiere ven<strong>de</strong>r el cuadro a un precio razonable <strong>de</strong> manera rápida.<br />
Precondiciones:<br />
El agente ha entrado en la aplicación.<br />
Garantía <strong>de</strong> éxito (post-condiciones):<br />
Se registra la venta.<br />
Escenario Principal <strong>de</strong> Éxito:<br />
11. El agente t iintroduce t d lla d<strong>de</strong>scripción i ió d<strong>de</strong>l l cuadro. d<br />
2. El sistema busca el cuadro más parecido <strong>de</strong>l mismo autor.<br />
3. El sistema presenta el precio recomendado.<br />
4. El agente age e hace ace uuna a ppropuesta opues a po por <strong>de</strong>bajo <strong>de</strong> <strong>de</strong>l pprecio ec o recomendado, eco e dado, y eel ven<strong>de</strong>dor e <strong>de</strong>do<br />
acepta la oferta.<br />
5. El agente introduce información <strong>de</strong> la venta.<br />
Extensiones:<br />
22a. NNo hhay ningún i ú cuadro d parecido id d<strong>de</strong>l l mismo i autor, t así í que el l sistema i t no presenta t una<br />
recomendación.<br />
9<br />
4a. El ven<strong>de</strong>dor no acepta la oferta y la venta no se produce.
Ejemplo<br />
Terminal Punto <strong>de</strong> Venta<br />
cajero<br />
TPV<br />
Procesar<br />
Venta<br />
Procesar<br />
Devoluciones<br />
Servicio<br />
<strong>de</strong> Autorización<br />
<strong>de</strong> Pagos<br />
«actor»<br />
Analizar<br />
«actor»<br />
Analizador <strong>de</strong><br />
Atiiddd Actividad <strong>de</strong><br />
Ventas<br />
Actividad<br />
Calculador <strong>de</strong><br />
Impuestos p<br />
Administrador<br />
<strong>de</strong>l sistema<br />
Gestionar<br />
Seguridad<br />
Gestionar<br />
Usuarios<br />
...<br />
«actor»<br />
Sistema <strong>de</strong><br />
contabilidad<br />
10
Diagramas <strong>de</strong> Caso <strong>de</strong> Uso<br />
Relaciones<br />
RRelaciones l i entre t ddos casos d<strong>de</strong><br />
uso<br />
Generalización<br />
“E “Es un caso particular ti l d <strong>de</strong> …” ”<br />
Herencia <strong>de</strong> clases en POO (overriding)<br />
También También se pue<strong>de</strong> tener esta relación entre dos actores<br />
Inclusión (inclu<strong>de</strong>)<br />
“Implica hacer también …”<br />
Extensión (extend)<br />
“Se insertará en …” un <strong>de</strong>terminado punto (llamado “punto <strong>de</strong><br />
extensión”) <strong>de</strong>pendiendo <strong>de</strong> una condición condición.<br />
Si un caso <strong>de</strong> uso <strong>de</strong>pen<strong>de</strong> <strong>de</strong> varios casos <strong>de</strong> uso mediante<br />
“extend” tendrá un punto <strong>de</strong> extensión para cada uno.<br />
11
Ejemplo<br />
Gestión <strong>de</strong> Pacientes<br />
Cancel Appointment<br />
Make Appointment<br />
Patient Request Medication<br />
Pay Bill<br />
Extensions Points<br />
More Treatment<br />
<br />
<br />
<br />
Check Patient Record<br />
Defer Payment<br />
Bill Insurance<br />
Scheduler<br />
Doctor<br />
Clerk<br />
12
Ejemplo<br />
Gestión <strong>de</strong> Proyectos<br />
13
Casos <strong>de</strong> Uso<br />
Son útiles en tres áreas:<br />
Especificación <strong>de</strong> requisitos<br />
Comunicación con los clientes<br />
Su simplicidad los convierte en excelentes medios <strong>de</strong><br />
comunicación<br />
Generación <strong>de</strong> casos <strong>de</strong> prueba<br />
A partir <strong>de</strong> los escenarios <strong>de</strong> un Caso <strong>de</strong> Uso<br />
14
Indice<br />
Diagramas <strong>de</strong> Casos <strong>de</strong> Uso.<br />
Diagramas <strong>de</strong> Estructura.<br />
Clases Clases y Objetos.<br />
Componentes.<br />
Estructuras Estructuras Compuestas.<br />
Despliegue.<br />
Paquetes. q<br />
Diagramas <strong>de</strong> Comportamiento.<br />
OCL.<br />
Herramientas.<br />
Ejemplos.<br />
Bibliografía.<br />
15
Clases y Objetos<br />
Los diagramas <strong>de</strong> Clases y <strong>de</strong> Objetos son los<br />
principales modos <strong>de</strong> representar los aspectos<br />
estructurales en <strong>UML</strong>.<br />
Diagramas <strong>de</strong> clases. Estructura <strong>de</strong>l sistema.<br />
Clases Clases.<br />
Atributos: Tipos, valores iniciales.<br />
Operaciones: visibilidad.<br />
Relaciones con otras clases: Asociaciones<br />
Diagramas <strong>de</strong> objetos. Estructura <strong>de</strong>l sistema en<br />
ti tiempo <strong>de</strong> d ejecución. j ió<br />
Objetos. Instancias <strong>de</strong> una Clase.<br />
Atributos (valores actuales).<br />
Links. Relaciones entre objetos, instancias <strong>de</strong> asociaciones.<br />
16
Clases y Objetos<br />
Diagrama ag a a <strong>de</strong><br />
clases<br />
Di Diagrama <strong>de</strong> d<br />
objetos<br />
Carbono<br />
Elemento<br />
:Hidrógeno<br />
Hidrógeno<br />
:Hidrógeno<br />
:Hidrógeno :Carbono :Carbono<br />
:Hidrógeno<br />
:Hidrógeno :Hidrógeno<br />
17
Clases y Objetos<br />
Nombre<br />
<strong>de</strong> la clase<br />
visibilidad<br />
Circulo<br />
-radio: double<br />
-centrox: t double d bl<br />
-centroy: double<br />
+Area(): double<br />
+Perímetro(): double<br />
En cursiva si es<br />
abstracta<br />
At Atributos ib t<br />
Operaciones<br />
Nombre<br />
Clase<br />
d<strong>de</strong>l l objeto bj<br />
unCirculo: Circulo <strong>de</strong>l objeto<br />
radio = 3.4<br />
centrox = 20 2.0<br />
Valores <strong>de</strong><br />
centroy = 2.0 los atributos<br />
18
Clases<br />
Atributos<br />
Notación para p atributos:<br />
[visibilidad] [/] nombre [: tipo] [multiplicidad] [= valor] [{ propiedad }]<br />
Visibilidad (opcional):<br />
Pública: +<br />
Privada: -<br />
Protegida: #<br />
Paquete: ~<br />
“/” indica que el atributo es <strong>de</strong>rivado.<br />
La multiplicidad va entre [ ] y por <strong>de</strong>fecto vale 1.<br />
Propieda<strong>de</strong>s válidas: {readOnly}, {readOnly} {union}, {union} {subsets },<br />
{re<strong>de</strong>fines }, {or<strong>de</strong>red}, {bag}, {seq},<br />
{sequence}, y {composite}.<br />
Un atributo subrayado es estático.<br />
19
Clases<br />
Ejemplo atributos<br />
ClaseA<br />
name: String<br />
shape: Rectangle<br />
+ size: Integer [0..1]<br />
/ area: Integer {readOnly}<br />
hheight: i ht IInteger t = 5<br />
width: Integer<br />
# pos: Point<br />
ClaseB<br />
id: {re<strong>de</strong>fines name}<br />
shape: Square<br />
20
Clases<br />
Métodos<br />
NNotación t ió para métodos: ét d<br />
[visibilidad] [ ] nombre ( [lista-parametros] [ p ] ) : [{propiedad}]<br />
[{p p }]<br />
Visibilidad (opcional).<br />
nombre <strong>de</strong>l método<br />
lista <strong>de</strong> parámetros formales, separados por coma:<br />
direccion nombre : tipo [multiplicidad] = valor [{propiedad}]<br />
Los métodos estáticos se subrayan.<br />
Ejemplos:<br />
display ()<br />
-hi<strong>de</strong> ()<br />
+createWindow (location: Coordinates Coordinates, container: Container [0 [0..1]): 1]): Window<br />
+toString (): String<br />
21
Asociaciones<br />
Composición<br />
Un Círculo contiene un Punto<br />
Se representa con una Composición<br />
Círculo Punto<br />
Relación <strong>de</strong>l tipo todo/parte<br />
El todo es el Círculo<br />
La parte es el Punto<br />
Es una relación fuerte<br />
Si el Círculo es <strong>de</strong>struido o copiado, también lo es el Punto<br />
La cardinalidad en la parte <strong>de</strong>l todo es 0..1 o 1.<br />
22
Asociaciones<br />
Navegación, Roles, Cardinalidad<br />
Las asociaciones pue<strong>de</strong>n tener etiquetas:<br />
Nombre<br />
Roles en la relación<br />
Multiplicidad (cardinalidad)<br />
centro<br />
Círculo Punto<br />
1<br />
Ej Ejemplos l <strong>de</strong> d cardinalidad: di lid d<br />
navegación<br />
N Navegación: ió<br />
1..* mínimo 1, no hay máximo Unidireccional<br />
0..* 0..<br />
0..1<br />
1,2,4<br />
3<br />
mínimo 0, no hay máximo<br />
mínimo 0, máximo 1<br />
uno, dos o cuatro<br />
exactamente tres Bidireccional<br />
No especificado.<br />
No navegable (x)<br />
23
Asociaciones<br />
Ejemplos <strong>de</strong> Navegación y Cardinalidad<br />
24
Ejercicio<br />
Representa mediante un diagrama <strong>de</strong> clases la siguiente<br />
especificación:<br />
Una aplicación necesita almacenar información sobre<br />
empresas, sus empleados y sus clientes.<br />
Ambos se caracterizan por su nombre y edad.<br />
LLos empleados l d ti tienen un sueldo ld bbruto, t llos empleados l d que<br />
son directivos tienen una categoría, así como un conjunto <strong>de</strong><br />
empleados p subordinados.<br />
De los clientes a<strong>de</strong>más se necesita conocer su teléfono <strong>de</strong><br />
contacto.<br />
LLa aplicación li ió necesita it mostrar t llos ddatos t d<strong>de</strong> empleados l d y<br />
clientes.<br />
25
Ejercicio<br />
-nombre<br />
-edad<br />
Persona<br />
+ mostrar()<br />
Empleado Cliente<br />
subordinados<br />
0..*<br />
- sueldo_bruto<br />
+ mostrar t ()<br />
- nombre_empresa<br />
telefono_<strong>de</strong>_contacto<br />
+ calcular_salario_neto()<br />
1..*<br />
empleados<br />
+mostrar()<br />
0..* clientes<br />
0..*<br />
Directivo<br />
-categoria<br />
+ mostrar ()<br />
1<br />
1..*<br />
Empresa<br />
-nombre<br />
b<br />
26
Asociaciones: Agregación<br />
Cuando la relación todo/parte no es tan<br />
fuerte, , se utiliza Agregación g g<br />
susFiguras<br />
Ventana Figura<br />
0 0.. *<br />
La ventana contiene figuras,<br />
pero cada una pue<strong>de</strong> existir sin la otra<br />
27
Asociaciones y Depen<strong>de</strong>ncia.<br />
Depen<strong>de</strong>ncia<br />
Existen relaciones <strong>de</strong> conocimiento entre clases que no<br />
implican una relación todo/parte<br />
titular<br />
cuentas<br />
Cliente Cuenta<br />
1 1.. *<br />
0 0.. *<br />
Depen<strong>de</strong>ncia: relación muy débil.<br />
Ventana<br />
suContexto<br />
ContextoDibujo<br />
susFiguras<br />
0..*<br />
Figura<br />
Draw(ContextoDibujo)<br />
Depen<strong>de</strong>ncia<br />
28
Clases Asociativas<br />
Asociación con atributos propios.<br />
Nombre asociación<br />
casado con ><br />
Empleado Persona<br />
1<br />
1<br />
Clase Asociativa<br />
Matrimonio<br />
fecha<br />
0..*<br />
testigos<br />
2<br />
29
Clases y Objetos j<br />
Estilo<br />
Los atributos no <strong>de</strong>ben ser objetos (utilizar<br />
relaciones en tal caso).<br />
En los diagramas <strong>de</strong> clases no suelen aparecer<br />
(son <strong>de</strong>talles <strong>de</strong> implementación y no <strong>de</strong><br />
diseño):<br />
Constructores<br />
Métodos Métodos <strong>de</strong> acceso (“get/set”) ( get/set )<br />
Métodos <strong>de</strong> gestión <strong>de</strong> elementos <strong>de</strong> una asociación o<br />
agregación (por ejemplo, “add/remove”)<br />
30
Ejemplo<br />
Cliente<br />
Or<strong>de</strong>n<br />
nombre 1 0..* fecha<br />
dirección estado<br />
Pago<br />
1..* 1<br />
monto 1<br />
calcImpuesto<br />
calcTotal<br />
calcPesoTotal<br />
Crédito Efectivo Cheque DetalleOr<strong>de</strong>n Item<br />
fecha<br />
número<br />
moneda<br />
nombre<br />
i<strong>de</strong>ntifBanco<br />
cantidad<br />
tipoImpuesto<br />
0 0.. * 1 peso<br />
<strong>de</strong>scripción<br />
tipo<br />
autorizado<br />
calcSubtotal<br />
precioPorCantidad<br />
autorizado<br />
calcPeso<br />
obtenerPeso<br />
línea<br />
1..*<br />
31
Ejercicio<br />
Especificar un diagrama <strong>de</strong> clases que <strong>de</strong>scriba re<strong>de</strong>s<br />
<strong>de</strong> or<strong>de</strong>nadores.<br />
Los elementos que se pue<strong>de</strong>n incluir en la red son:<br />
SServidor, id PC PC, IImpresora.<br />
Hub, Cable <strong>de</strong> red.<br />
Los PCs pue<strong>de</strong>n conectarse con un único Hub Hub, los<br />
servidores con uno o varios.<br />
Los Servidores y PCs pue<strong>de</strong>n generar mensajes, con<br />
una cierta longitud.<br />
Los Hubs tienen un número <strong>de</strong> puertos, algunos <strong>de</strong> los<br />
cuales pue<strong>de</strong> usarse para conectar con otros Hubs Hubs.<br />
Tienen cierta probabilidad <strong>de</strong> “per<strong>de</strong>r” mensajes.<br />
Las impresoras pue<strong>de</strong>n averiarse, con cierta<br />
probabilidad, durante cierto tiempo.<br />
32
Ejercicio Ejercicio. Posible Solución. Solución<br />
33<br />
“Los PCs pue<strong>de</strong>n conectarse con un único Hub, los servidores con uno o varios”<br />
Po<strong>de</strong>mos mo<strong>de</strong>larlo como una restricción OCL, o bien añadir asociaciones <strong>de</strong>s<strong>de</strong><br />
Servidor y PC
Más sobre asociaciones<br />
Asociaciones n-arias<br />
Asociaciones entre más <strong>de</strong> dos clases:<br />
Año<br />
temporada d<br />
EEquipo i JJugador d<br />
equipo<br />
pichichi<br />
34
Más sobre asociaciones<br />
Adornos en asociaciones y fin <strong>de</strong> asociación.<br />
AAsociaciones i i d<strong>de</strong>rivadas i d ( (con un “/” d<strong>de</strong>lante l t d<strong>de</strong>l l nombre). b )<br />
Propieda<strong>de</strong>s, cerca <strong>de</strong>l nombre <strong>de</strong> la asociación.<br />
Los finales <strong>de</strong> la asociación pue<strong>de</strong>n adornarse con:<br />
Multiplicidad.<br />
Nombre (rol). ( )<br />
Propieda<strong>de</strong>s:<br />
{subsets }.<br />
{re<strong>de</strong>fine }<br />
}.<br />
{union}.<br />
{or<strong>de</strong>red} (un conjunto or<strong>de</strong>nado).<br />
{bag} (conjunto con repetición) repetición).<br />
{sequence} o {seq} (bag or<strong>de</strong>nado).<br />
35
Más sobre asociaciones<br />
Adornos en asociaciones y fin <strong>de</strong> asociación: Ejemplos<br />
a b<br />
A B<br />
0..1 *<br />
{or<strong>de</strong>red}<br />
C D<br />
d<br />
1 0..1<br />
{subsets b}<br />
Para un objeto <strong>de</strong> tipo C, la colección d es un subconjunto <strong>de</strong> la colección b.<br />
36
Más sobre asociaciones<br />
Asociaciones Cualificadas<br />
Un cualificador <strong>de</strong>clara una partición <strong>de</strong>l conjunto <strong>de</strong> instancias asociadas con<br />
respecto a la instancia cualificada.<br />
Banco<br />
NumCuenta<br />
*<br />
0..1<br />
Tablero<br />
Ajedrez<br />
fila: Fila<br />
col: Colum<br />
1<br />
1<br />
Persona Casilla<br />
Dado un objeto cualificado, el número <strong>de</strong> objetos al otro lado <strong>de</strong> la asociación<br />
viene i ddado d por lla multiplicidad lti li id d d<strong>de</strong>clarada. l d<br />
0..1 : el valor <strong>de</strong>l cualificador es único.<br />
0..* : el conjunto <strong>de</strong> instancas asociadas se particiona en subconjuntos.<br />
Similar a un array asociativo, asociativo map o tabla hash hash.<br />
37
Pre Pre- yPost y Post- Condiciones Condiciones, Notas<br />
pre-condición<br />
body-condition<br />
post-condición<br />
38
Interfaces<br />
Clase<br />
<br />
MiInterfaz<br />
métodos<br />
Clase<br />
Clase<br />
MiInterfaz<br />
MiInterfaz<br />
39
Plantillas<br />
FArray Point><br />
Una clase anónima ligada:<br />
T -> Point<br />
K -> 10<br />
40
Ejercicio<br />
Examen Junio 2008.<br />
Realiza el diseño <strong>de</strong> una aplicación para la gestión <strong>de</strong> pedidos. La aplicación <strong>de</strong>berá<br />
manejar clientes (se guarda su nombre, dirección, teléfono y e-mail), que pue<strong>de</strong>n<br />
realizar pedidos p <strong>de</strong> productos, p , <strong>de</strong> los cuales se anota la cantidad en stock. Un<br />
cliente pue<strong>de</strong> tener una o varias cuentas para el pago <strong>de</strong> los pedidos. Cada<br />
cuenta está asociada a una tarjeta <strong>de</strong> crédito, y tiene una cierta cantidad<br />
disponible <strong>de</strong> dinero, que el cliente <strong>de</strong>be aumentar periódicamente para po<strong>de</strong>r<br />
realizar nuevos pedidos.<br />
Un cliente pue<strong>de</strong> empezar a realizar un pedido sólo si tiene alguna cuenta con dinero<br />
disponible. Al realizar un pedido, un cliente pue<strong>de</strong> agruparlos en pedidos simples<br />
o compuestos. Los pedidos simples están asociados a una sola cuenta <strong>de</strong> pago y<br />
(por restricciones en la distribución) contienen un máximo <strong>de</strong> 20 unida<strong>de</strong>s <strong>de</strong>l<br />
mismo o distinto tipo <strong>de</strong> producto. A su vez, un pedido compuesto contiene dos o<br />
más pedidos, que pue<strong>de</strong>n ser simples o compuestos. Como es <strong>de</strong> esperar, el<br />
sistema <strong>de</strong>be garantizar que todos los pedidos simples que componen un pedido<br />
compuesto se paguen con cuentas <strong>de</strong>l mismo cliente cliente. A<strong>de</strong>más A<strong>de</strong>más, sólo es posible<br />
realizar peticiones <strong>de</strong> productos en stock.<br />
Existe una clase (<strong>de</strong> la cual <strong>de</strong>be haber una única instancia en la aplicación)<br />
responsable p <strong>de</strong>l cobro, or<strong>de</strong>n <strong>de</strong> distribución y confirmación <strong>de</strong> los pedidos. p El<br />
cobro <strong>de</strong> los pedidos se hace una vez al día, y el proceso consiste en comprobar<br />
todos los pedidos pendientes <strong>de</strong> cobro, y cobrarlos <strong>de</strong> la cuenta <strong>de</strong> pago<br />
correspondiente. Si una cuenta no tiene suficiente dinero, el pedido se rechaza (si<br />
es parte p <strong>de</strong> un pedido p compuesto, p , se rechaza el pedido p entero). ) Unavezque q el<br />
pedido está listo para servirse, se or<strong>de</strong>na su distribución, y una vez entregado,<br />
pasa a estar confirmado.<br />
41<br />
Se pi<strong>de</strong> un diagrama <strong>de</strong> clases <strong>de</strong> diseño.
Solución<br />
42
Solucion (ii)<br />
Nota: pedidos_simples es una asociación <strong>de</strong>rivada. El atributo total <strong>de</strong><br />
Pedido es <strong>de</strong>rivado <strong>de</strong>rivado.<br />
Habría que incluir las siguientes restricciones OCL:<br />
CContext t t realizar_pedido:<br />
li did<br />
pre: self.cuentas->exists(c | c.disponible > 0)<br />
Context Pedido Compuesto:<br />
inv: self.pedidos_simples->cuenta->cliente->asSet()->size() = 1<br />
Context Pedido:<br />
inv: self.t_productos.num->sum() =num<br />
Se usa el composite y el singleton (para la clase “Controlador<br />
Controlador<br />
Pedidos”, aunque esto no queda reflejado en el diseño a este nivel <strong>de</strong><br />
43<br />
abstracción).
Ejercicio: Biblioteca<br />
Una biblioteca tiene copias <strong>de</strong> libros libros. Estos últimos se<br />
caracterizan por su nombre, tipo (novela, teatro, poesía,<br />
ensayo), editorial, año y autor.<br />
Los autores se caracterizan por su nombre, nacionalidad<br />
y fecha <strong>de</strong> nacimiento.<br />
Cada copia tiene un i<strong>de</strong>ntificador i<strong>de</strong>ntificador, y pue<strong>de</strong> estar en la<br />
biblioteca, prestada, con retraso o en reparación.<br />
Los lectores pue<strong>de</strong>n tener un máximo <strong>de</strong> 3 libros en<br />
préstamo préstamo.<br />
Cada libro se presta un máximo <strong>de</strong> 30 días, por cada día<br />
<strong>de</strong> retraso, se impone p una “multa” <strong>de</strong> dos días sin<br />
posibilidad <strong>de</strong> coger un nuevo libro.<br />
Realiza un diagrama <strong>de</strong> clases y aña<strong>de</strong> los métodos<br />
necesarios para realizar el prestamo y <strong>de</strong>volución <strong>de</strong><br />
libros.
Copia<br />
- id : I<strong>de</strong>ntifier<br />
- estado: estadoCopia<br />
- nSocio : I<strong>de</strong>ntifier<br />
- nombre: string<br />
- telefono: string<br />
- direccion: string<br />
0..3 prestamos<br />
0..1 lector<br />
Lector<br />
ejemplar<br />
1..*<br />
Prestamo<br />
fechas - inicio: Date<br />
- fin: Date<br />
+ <strong>de</strong>volver(id: I<strong>de</strong>ntifier, fechaAct: Date)<br />
{precondition: prestamos.notEmpty()}<br />
+ prestar(id: I<strong>de</strong>ntifier, fechaAct: Date)<br />
{precondition: multa==0}<br />
- multar(dias : int)<br />
1<br />
libro<br />
1<br />
multa<br />
Libro<br />
- titulo : string<br />
- tipo: tipoLibro<br />
- editorial: string<br />
- anyo: iint t<br />
1..*<br />
1<br />
Autor<br />
obras<br />
autor<br />
- nombre: b string t i<br />
- nacionalidad: string<br />
- fechaNacimiento: Date<br />
0..1<br />
Multa<br />
- fInicio: Date<br />
-fFin: Date<br />
<br />
tipoLibro<br />
novela<br />
teatro<br />
poesia i<br />
ensayo<br />
<br />
estadoCopia<br />
prestado<br />
retraso<br />
biblioteca<br />
reparacion
Objetos<br />
e2 : Empleado<br />
e1 : Empleado<br />
-nombre=“María”<br />
- nombre=“Pedro”<br />
- edad=25 edad 25<br />
- edad=23 edad 23<br />
- sueldo_bruto=36000<br />
- sueldo_bruto=30000<br />
subordinados empleados empleados<br />
d1 : Directivo<br />
-nombre=“Luis”<br />
-edad=35 d d 35<br />
- sueldo_bruto=36000<br />
-categoria=“C1”<br />
empleados<br />
Empresa<br />
- nombre=“HGJ”<br />
clientes<br />
c1 : Cliente<br />
-nombre=“Luis”<br />
- edad=35<br />
- nombre_empresa=“Macroware”<br />
- telefono_<strong>de</strong>_contacto=91555666<br />
-nombre<br />
-edad<br />
Persona<br />
+ mostrar()<br />
Empleado Cliente<br />
subordinados<br />
-sueldo_bruto -nombre_empresa<br />
+ mostrar ()<br />
- telefono_<strong>de</strong>_contacto<br />
+ calcular_salario_neto()<br />
l l l i t ()<br />
+mostrar()<br />
empleados clientes<br />
Directivo<br />
-categoria<br />
+ mostrar ()<br />
Empresa<br />
-nombre<br />
46
Componentes<br />
CComponente t = “U “Unidad id d MModular d l con iinterfaces t f<br />
bien <strong>de</strong>finidos que es reemplazable en su<br />
entorno” entorno .<br />
ÉÉnfasis f i enreutilización tili ió y encapsulamiento. l i t<br />
Servicios que provee y requiere (interfaces).<br />
Componentes lógicos (componentes <strong>de</strong> negocio,<br />
<strong>de</strong> proceso) y físicos (EJB, CORBA, COM+, .NET,<br />
…)<br />
47
Componentes<br />
Interfaces<br />
que ofrece<br />
Interfaces<br />
que requiere<br />
48
Componentes<br />
Vi Vista t d<strong>de</strong> caja j bl blanca<br />
49
Estructuras Compuestas<br />
CComposición i ió d<strong>de</strong> elementos l t ( (clasificadores l ifi d o<br />
colaboraciones)<br />
Instancias en tiempo <strong>de</strong> ejecución que colaboran<br />
a través <strong>de</strong> enlaces para alcanzar objetivos<br />
comunes.<br />
Colaboraciones: a través <strong>de</strong> roles.<br />
Se aña<strong>de</strong> a las clases estructura internas y<br />
puertos.<br />
50
Estructuras Compuestas<br />
Estructura interna <strong>de</strong> una clase. clase<br />
Estructura interna <strong>de</strong> una clase. Multiplicida<strong>de</strong>s.<br />
51
Estructuras Compuestas<br />
Alternativa a relaciones <strong>de</strong> composición<br />
Window<br />
2<br />
AApplication li ti<br />
Button<br />
Window<br />
Application<br />
Button 2<br />
52
Estructuras Compuestas<br />
Estructura interna <strong>de</strong> una clase. Constructor.<br />
53
Estructuras Compuestas p<br />
Colaboración.<br />
Et Estructura t it interna d<strong>de</strong> una colaboración. lb ió<br />
54
Estructuras Compuestas p<br />
Colaboración.<br />
OOcurrencia i d<strong>de</strong> una colaboración l b ió enotra. t Bi Binding. di<br />
55
Estructuras Compuestas p<br />
Colaboración.<br />
Template <strong>de</strong> colaboración.<br />
56
Despliegue<br />
DDefinen fi lla arquitectura it t d<strong>de</strong> ejecución j ió d<strong>de</strong> un sistema. i t<br />
Representa la asignación <strong>de</strong> artefactos software a nodos nodos.<br />
Nodos = elementos hardware, o entornos<br />
<strong>de</strong> ejecución software.<br />
Artefactos = elementos concretos (p.e.:<br />
ficheros) que son el resultado <strong>de</strong>l proceso<br />
<strong>de</strong> <strong>de</strong>sarrollo.<br />
57
Despliegue p g<br />
Relaciones entre artefactos.<br />
“Manifestación” <strong>de</strong><br />
elementos a través <strong>de</strong><br />
artefactos<br />
58
Despliegue p g<br />
Ejemplo.<br />
59
Paquetes<br />
Un paquete es un contenedor que agrupa elementos<br />
relacionados.<br />
Los diagramas <strong>de</strong> paquetes muestran la estructura <strong>de</strong> alto<br />
nivel <strong>de</strong> la aplicación. aplicación<br />
60
Paquetes q<br />
Ejemplo.<br />
61
Indice<br />
Diagramas <strong>de</strong> Casos <strong>de</strong> Uso Uso.<br />
Diagramas <strong>de</strong> Estructura.<br />
Diagramas Diagramas <strong>de</strong> Comportamiento<br />
Comportamiento.<br />
Diagramas <strong>de</strong> Interacción.<br />
Diagramas <strong>de</strong> Comunicación.<br />
Diagramas <strong>de</strong> Secuencia.<br />
Diagramas <strong>de</strong> visión <strong>de</strong> conjunto <strong>de</strong> la interacción.<br />
Diagramas <strong>de</strong> tiempo.<br />
Diagramas <strong>de</strong> Estados.<br />
Diagramas <strong>de</strong> Actividad.<br />
OCL<br />
Herramientas.<br />
Ejemplos Ejemplos.<br />
Bibliografía.<br />
62
Diagramas <strong>de</strong> Interacción<br />
El comportamiento t i t se representa t a ttravés é d<strong>de</strong><br />
colaboraciones:<br />
Colección <strong>de</strong> objetos:<br />
Instancias<br />
Roles<br />
Especifica cómo los objetos y las asociaciones cooperan<br />
En un contexto dado<br />
Con un propósito específico<br />
63
Diagramas <strong>de</strong> Interacción<br />
El patrón tó d<strong>de</strong> mensajes j d<strong>de</strong>ntro t d<strong>de</strong><br />
una<br />
colaboración es una interacción:<br />
Mensajes: señales, invocaciones, interacciones implícitas<br />
a través <strong>de</strong> condiciones y eventos temporales.<br />
Especifica secuencia <strong>de</strong> mensajes para cumplir el<br />
objetivo <strong>de</strong> la colaboración<br />
Para especificar la interacción, es necesario especificar<br />
primero la colaboración<br />
Semántica basada en trazas.<br />
64
Diagramas <strong>de</strong> Interacción<br />
Diagrama <strong>de</strong> Comunicación<br />
Muestra un contexto y una interacción interacción.<br />
Di Diagrama d<strong>de</strong> SSecuencia i<br />
Representación explícita <strong>de</strong> la secuencia <strong>de</strong><br />
comunicaciones, eje temporal.<br />
Es más apropiado para aplicaciones <strong>de</strong> Tiempo Real<br />
y escenarios complicados<br />
65
Diagramas <strong>de</strong> Interacción<br />
EEstructura t t d<strong>de</strong> llos participantes ti i t<br />
Diagramas <strong>de</strong> Comunicación<br />
Patrones <strong>de</strong> comunicación<br />
Diagramas <strong>de</strong> Comunicación<br />
Diagramas <strong>de</strong> Secuencia<br />
Temporización p <strong>de</strong> la comunicación.<br />
Diagramas <strong>de</strong> Secuencia<br />
Diagramas <strong>de</strong> Tiempo.<br />
Estructuración <strong>de</strong> las interacciones<br />
Diagrama g <strong>de</strong> visión <strong>de</strong> conjunto j <strong>de</strong> la<br />
interacción.<br />
66
Diagramas <strong>de</strong> Comunicación<br />
RRepresenta t llos objetos bj t ( (roles l o iinstancias) t i )<br />
necesarios para una interacción y sus<br />
relaciones.<br />
Pue<strong>de</strong> también representar la secuencia <strong>de</strong><br />
mensajes<br />
Especifica el or<strong>de</strong>n relativo mediante números<br />
Similar a un diagrama <strong>de</strong> objetos, muestra el<br />
contexto necesario para una colaboración.<br />
67
Diagramas <strong>de</strong> Comunicación<br />
roles l<br />
participantes<br />
p p<br />
:Window Wi d / Observer Ob : SlidingBarIcon<br />
Slidi B I<br />
/Subject :CallQueue<br />
relaciones<br />
68
Diagramas <strong>de</strong> Comunicación<br />
:Window Wi d / Observer Ob : SlidingBarIcon<br />
Slidi B I<br />
/Subject :CallQueue<br />
restricción<br />
{Observer.reading=length(Subject.queue)<br />
{ g g ( j q )<br />
and<br />
Observer.range = (0..Subject.capacity)}<br />
69
Diagramas <strong>de</strong> Comunicación<br />
Llamadas anidadas:<br />
realizarPago(cantidad) 1: realizarPago(cantidad)<br />
Iteraciones:<br />
:Registro :Venta<br />
1.1: crear(cantidad)<br />
:Pago<br />
Ejectuar() 1*[i:=1..N]: num:= nextInt()<br />
:Simulador :Random<br />
70
Diagramas g <strong>de</strong> Comunicación<br />
Multiobjetos.<br />
RRepresentan t conjuntos j t d<strong>de</strong> iinstancias t i en ell<br />
extremo “muchos” <strong>de</strong> una relación 1:N o M:N<br />
Una operación sobre cada instancia requiere<br />
ddos mensajes: j<br />
Iteración para obtener referencias a las instancias<br />
individuales<br />
Mensaje a cada instancia, usando la referencia<br />
temporal<br />
71
Diagramas g <strong>de</strong> Comunicación<br />
Multiobjetos.<br />
:Client<br />
1:aServer:=find(specs)<br />
2:process<br />
servers<br />
aServer <br />
:Server<br />
:Server<br />
:Server<br />
72
Diagramas g <strong>de</strong> Comunicación<br />
Condiciones.<br />
msg1()<br />
e:ClaseE<br />
22: msg6() 6()<br />
1a [test]: msg2()<br />
a:ClaseA b:ClaseB<br />
1b b[ [not ottest] test]: msg4() sg ()<br />
1a.1: a msg3() sg3()<br />
d:ClaseD c:ClaseC<br />
1b 1b.1: 1 msg5() 5()<br />
73
Ejercicio: Biblioteca<br />
Una biblioteca tiene copias <strong>de</strong> libros libros. Estos últimos se<br />
caracterizan por su nombre, tipo (novela, teatro, poesía,<br />
ensayo), editorial, año y autor.<br />
Los autores se caracterizan por su nombre, nacionalidad<br />
y fecha <strong>de</strong> nacimiento.<br />
Cada copia tiene un i<strong>de</strong>ntificador i<strong>de</strong>ntificador, y pue<strong>de</strong> estar en la<br />
biblioteca, prestada, reservada, con retraso o en<br />
reparación.<br />
Los lectores pue<strong>de</strong>n tener un máximo <strong>de</strong> 3 libros en<br />
préstamo.<br />
Cada libro se presta p un máximo <strong>de</strong> 30 días, ppor<br />
cada día<br />
<strong>de</strong> retraso, se impone una “multa” <strong>de</strong> dos días sin<br />
posibilidad <strong>de</strong> coger un libro.<br />
Realiza el diagrama <strong>de</strong> colaboración para el método<br />
<strong>de</strong>volver()
Solución<br />
1: <strong>de</strong>volver(id, ( , fecha) )<br />
1.3.1a [multa=0]: multa:=<br />
create(fecha,retraso)<br />
multa:Multa lt M lt<br />
{new}<br />
1.3 [retraso>0]: multar(retraso)<br />
:Lector<br />
prestamos<br />
1.1: <strong>de</strong>v:=remove(id)<br />
1.2: retraso:=getRetraso(fecha)<br />
multa:Multa 1.3.1b [multa0]: anya<strong>de</strong>(fecha,retraso)<br />
:Copia<br />
<strong>de</strong>v:Copia
Solución<br />
1: <strong>de</strong>volver(id, ( , fecha) )<br />
1.3.1a [multa=0]: multa:=<br />
create(fecha,retraso)<br />
multa:Multa lt M lt<br />
{new}<br />
1.3 [retraso>0]: multar(retraso)<br />
:Lector<br />
1.1: fec:=remove(id)<br />
1.2: retraso:=getRetraso(fecha)<br />
multa:Multa 1.3.1b [multa0]: anya<strong>de</strong>(fecha,retraso)<br />
prestamos<br />
fechas<br />
:Copia<br />
fec:Fecha<br />
76
Diagramas g <strong>de</strong> Comunicación<br />
Etiquetas <strong>de</strong> las flechas.<br />
pre<strong>de</strong>cesor d or<strong>de</strong>n-secuencial d i l valor-retorno<br />
l t<br />
:= nombre-mensaje lista-argumentos<br />
Pre<strong>de</strong>cesor<br />
Lista separada por “,” terminada en “/”<br />
El mensaje j no está tá habilitado h bilit d hhasta t que no ocurran llos<br />
mensajes en la lista<br />
Or<strong>de</strong>n en la secuencia<br />
Lista separada por “.”, terminada en “:”<br />
CCada d té término i representa t nivel i l d<strong>de</strong> anidamiento id i t procedural d l<br />
Iteración: *[cláusula interación]<br />
Bifurcación: [condición]<br />
77
Diagramas g <strong>de</strong> Comunicación<br />
Etiquetas <strong>de</strong> las flechas.<br />
Ejemplos:<br />
2: 2: display(x,y)<br />
display(x y)<br />
1.3.1: p:=find(specs)<br />
4 [x
Diagramas g <strong>de</strong> Comunicación<br />
Ejemplo.<br />
redisplay()<br />
1.1*[i:=1..n]: drawSegment(i)<br />
><br />
:Controller :Window<br />
wire:Wire<br />
i-1 i<br />
1:displayPositions(window) 1.1.3.1:add(self)<br />
wire<br />
111 1.1.1a: r0:= 0 position() ii () 111b 1.1.1b: r1:= 1 position() ii ()<br />
left:Bead right:Bead g<br />
> line<br />
1.1.2: create(r0,r1)<br />
1.1.3: display(window)<br />
contents {new}<br />
:Line Li {new} { }<br />
79
Diagramas g <strong>de</strong> Comunicación<br />
Objetos Activos.<br />
Poseen P su propio i hil hilo d<strong>de</strong> control t l<br />
Un objeto pasivo sólo almacena datos<br />
Pue<strong>de</strong> enviar mensajes mientras procesa un<br />
pedido (mensaje) que haya recibido<br />
Los L objetos bj t activos ti se representan t<br />
frecuentemente con componentes internas<br />
80
Diagramas g <strong>de</strong> Comunicación<br />
Objetos Activos. Ejemplo.<br />
:FactoryManager<br />
job<br />
currentJob:TransferJob<br />
job<br />
B2:completed<br />
1/B1:start(job)<br />
A2,B2/2:completed(job)<br />
:FactoryScheduler<br />
1:start(job)<br />
:FactoryJobMgr<br />
A2:completed<br />
:Robot :Oven<br />
1/A1:start(job)<br />
81
Diagramas g <strong>de</strong> Comunicación<br />
Objetos Activos. Ejemplo.<br />
Tipos <strong>de</strong> Flujos <strong>de</strong> Control<br />
Llamada a procedimiento u otra forma <strong>de</strong> llamada con<br />
anidamiento <strong>de</strong> control. La secuencia anidada termina<br />
antes <strong>de</strong> que siga la operación que invocó invocó. Pue<strong>de</strong><br />
usarse para procesos concurrentes cuando el mensaje<br />
es síncrono.<br />
Comunicación asincróna, sin anidamiento <strong>de</strong> control.<br />
El objeto que envía no se <strong>de</strong>tiene a esperar respuesta.<br />
Retorno <strong>de</strong> una llamada a procedimiento. Esta flecha<br />
pue<strong>de</strong> omitirse si queda claro por el fin <strong>de</strong> la<br />
activación.<br />
82
Diagramas <strong>de</strong> Secuencia<br />
RRepresenta t conjunto j t <strong>de</strong> d mensajes j entre t roles l<br />
(o instancias) en una interacción<br />
Dos dimensiones:<br />
Tiempo Tiempo (generalmente vertical); pue<strong>de</strong> ser una escala si<br />
el sistema es <strong>de</strong> tiempo real<br />
Dif Diferentes t instancias i t i ( (generalmente l t hhorizontal); i t l) el l<br />
or<strong>de</strong>n relativo no tiene importancia<br />
Se muestra la existencia y duración <strong>de</strong> las<br />
instancias, pero no sus relaciones<br />
83
Diagramas <strong>de</strong> Secuencia<br />
Traza: secuencia <strong>de</strong> ocurrencias <strong>de</strong> eventos La semántica <strong>de</strong> una interacción es un par <strong>de</strong> conjuntos<br />
<strong>de</strong> trazas (válidas e inválidas) [P, I].<br />
PPue<strong>de</strong>n d existir i ti ttrazas no iincluidas l id en llos ddos conjuntos j t<br />
anteriores.<br />
Equivalencia <strong>de</strong> interacciones, si sus conjuntos <strong>de</strong> trazas<br />
son iguales.<br />
Una interacción se pue<strong>de</strong> especializar: se aña<strong>de</strong>n más<br />
trazas al conjunto. j<br />
84
Diagramas <strong>de</strong> Secuencia<br />
:caller :exchange :receiver<br />
a: lift receiver<br />
b: dial tone<br />
Objetos<br />
c: di dial l digit di it<br />
...<br />
d: route<br />
Focos <strong>de</strong><br />
d: route<br />
Control<br />
Mensajes<br />
ringing tone phone rings<br />
answer phone<br />
stop tone stop ringing<br />
85
Diagramas <strong>de</strong> Secuencia<br />
sd Authenticate User<br />
LoginPage:<br />
Servlet<br />
ac:<br />
ds:<br />
Authentication<br />
UserData<br />
CController ll<br />
SService i<br />
validateCre<strong>de</strong>ntials(“Dan”, “b4_23”)<br />
restoreUserData(“Dan”)<br />
currentUser<br />
currentUser<br />
CurrentUser:<br />
UserData<br />
create(“Dan”,”Administrator”)<br />
86
Diagramas <strong>de</strong> Secuencia<br />
operador<br />
entregar()<br />
loop<br />
alt<br />
:Pedido<br />
guarda<br />
[for each producto]<br />
[value > 10000]<br />
[else]<br />
marco<br />
preferente<br />
usual<br />
:Distribuidor Di t ib id :Distribuidor<br />
Di t ib id<br />
procedure entregar()<br />
foreach producto:<br />
if producto.value>10000<br />
p<br />
entregar()<br />
preferente.entregar()<br />
else<br />
usual.entregar()<br />
end if<br />
entregar() end for<br />
end procedure
Diagramas <strong>de</strong> Secuencia<br />
Gate (formal),<br />
con nombre<br />
out out_Unlock<br />
Unlock<br />
88
Diagramas <strong>de</strong> Secuencia<br />
Referencias (Ocurrencias <strong>de</strong> Interacciones)<br />
Copian el contenido <strong>de</strong><br />
la interacción referida.<br />
Substitución <strong>de</strong><br />
parámetros y conexión<br />
<strong>de</strong> las puertas (gates)<br />
formales y actuales actuales.<br />
89
Diagramas g <strong>de</strong> Secuencia<br />
Operadores sobre interacciones.<br />
Fragmentos combinados combinados, operadores (i):<br />
Alternativa (alt).<br />
Elección (mediante una guarda) <strong>de</strong> una interacción interacción.<br />
Aserción (assert).<br />
Laa secuencia secue c a especificada espec cada por po el e operador ope ado es laa única ú ca válida. áda<br />
Opción (opt).<br />
Equivalente a un operador alt con un solo fragmento.<br />
Ruptura (break).<br />
El operando se ejecuta en lugar <strong>de</strong>l resto <strong>de</strong> la interacción englobada en el<br />
fragmento “padre”. padre .<br />
Paralelo (par).<br />
Mezcla <strong>de</strong> las trazas <strong>de</strong> los operandos (cualquier entrelazado es válido<br />
mientras preserve el or<strong>de</strong>n <strong>de</strong> los eventos <strong>de</strong> cada operando) operando).<br />
90
Diagramas g <strong>de</strong> Secuencia<br />
Operadores sobre interacciones.<br />
Secuenciación débil (seq) (seq).<br />
Define un conjunto <strong>de</strong> trazas que cumple:<br />
1. Se mantiene el or<strong>de</strong>n <strong>de</strong> eventos <strong>de</strong> los operandos<br />
22. Eventos <strong>de</strong> otras líneas <strong>de</strong> vida <strong>de</strong> otros operandos pue<strong>de</strong>n venir<br />
en cualquier or<strong>de</strong>n.<br />
3. Eventos <strong>de</strong> la misma línea <strong>de</strong> vida <strong>de</strong> otros operandos se or<strong>de</strong>nan<br />
<strong>de</strong> tal manera que cualquier evento <strong>de</strong>l primer operando va antes que<br />
el <strong>de</strong>l segundo.<br />
Secuenciación estricta (strict).<br />
Secuenciación estricta en el or<strong>de</strong>n <strong>de</strong> los eventos <strong>de</strong> los operandos.<br />
Negativa (neg).<br />
Define trazas inválidas.<br />
Región crítica (critical).<br />
Los eventos <strong>de</strong>l operando no pue<strong>de</strong>n mezclarse con ningún otro.<br />
91
Diagramas g <strong>de</strong> Secuencia<br />
Operadores sobre interacciones. Alternativa.<br />
92
Diagramas g <strong>de</strong> Secuencia<br />
Operadores sobre interacciones. Alternativa.<br />
93
Diagramas g <strong>de</strong> Secuencia<br />
Operadores sobre interacciones. Opción.<br />
94
Diagramas g <strong>de</strong> Secuencia<br />
Operadores sobre interacciones. Bucle.<br />
95
Diagramas g <strong>de</strong> Secuencia<br />
Operadores sobre interacciones. Región Crítica.<br />
96
T = now<br />
{t..t+5}<br />
Diagramas <strong>de</strong> Secuencia<br />
Ejemplo<br />
Sd Alarm Activation<br />
assert<br />
seq<br />
par<br />
:SystemHandler :CellHandler :Sensor :Alarm :CellConfigurationInformation<br />
Activate()<br />
ACK<br />
Configuration Information Returned<br />
SelfTest()<br />
ACK<br />
Activate()<br />
SelfTest()<br />
ACK<br />
opt<br />
opt<br />
ReadConfiguration()<br />
Test()<br />
Validate<br />
97
Diagramas g <strong>de</strong> Secuencia<br />
Retorno <strong>de</strong> Valores<br />
98
Diagramas g <strong>de</strong> Secuencia<br />
Tiempo<br />
Restricciones temporales (duración)<br />
Duración <strong>de</strong> mensajes y señales (duration)<br />
Intervalos <strong>de</strong> tiempo ({t..t+3}) y restricciones temporales.<br />
Observaciones temporales (tiempo actual, now)<br />
99
Diagramas g <strong>de</strong> Secuencia<br />
Descomposición en partes<br />
La estructura interna <strong>de</strong><br />
ACS ACSystem tiene i una<br />
interacción<br />
“AC_UserAccess” que se<br />
invoca en este fragmento.<br />
100
Diagramas g <strong>de</strong> Secuencia<br />
Descomposición en partes<br />
101
Diagramas g <strong>de</strong> Secuencia<br />
co-región<br />
Coregión: s[u]<br />
recibe los mensajes<br />
en cualquier or<strong>de</strong>n.<br />
102
Diagramas g <strong>de</strong> Secuencia<br />
Invariantes<br />
Invariantes Invariantes.<br />
En este momento la traza<br />
noesválida<br />
no es válida<br />
Se comprueban justo antes <strong>de</strong> la ocurrencia <strong>de</strong>l próximo<br />
evento t ( (pue<strong>de</strong> d hhaber b mensajes j no mostrados t d en ell<br />
diagrama).<br />
103
Diagramas g <strong>de</strong> Secuencia<br />
Binding<br />
104
Ejercicio<br />
Especificar f el diagrama <strong>de</strong> secuencia <strong>de</strong> la operación<br />
“crearLaberinto”<br />
public class JuegoLaberinto {<br />
public Laberinto crearLaberinto () {<br />
Laberinto lab = new Laberinto();<br />
Habitacion h1 = new Habitacion();<br />
Habitacion h2 = new Habitacion();<br />
Puerta puerta = new Puerta(h1, h2);<br />
lab.aña<strong>de</strong>Habitacion(h1);<br />
lab.aña<strong>de</strong>Habitacion(h2);<br />
h1.aña<strong>de</strong>Puerta(puerta);<br />
return lab;<br />
}<br />
}
Solución<br />
crearLaberinto()<br />
:JuegoLaberinto<br />
create(h1,h2)<br />
aña<strong>de</strong>Habitacion(h1)<br />
aña<strong>de</strong>Habitacion(h2)<br />
aña<strong>de</strong>Puerta(puerta)<br />
llab:Laberinto b L b i t<br />
h1:Habitacion<br />
h2:Habitacion<br />
puerta:Puerta
Ejercicio<br />
Especificar el diagrama <strong>de</strong> secuencia <strong>de</strong> la operación<br />
“crearLaberinto”<br />
public class JuegoLaberinto {<br />
private Laberinto lab;<br />
private boolean conVentana;<br />
}<br />
public JuegoLaberinto() {<br />
lab = new Laberinto();<br />
conVentana = true;<br />
}<br />
public void crearLaberinto () {<br />
Habitacion h;<br />
for (int i=0; i
Solución<br />
crearLaberinto()<br />
:JuegoLaberinto lab:Laberinto<br />
loop<br />
[for i = 1 to 10]<br />
opt [conVentana==true]<br />
aña<strong>de</strong>Ventana(v)<br />
aña<strong>de</strong>Habitacion(h)<br />
h:Habitacion<br />
v:Ventana
Ejercicio<br />
Especificar el diagrama <strong>de</strong> secuencia <strong>de</strong> la operación<br />
“realizarJugada” <strong>de</strong>finida en la clase Jugador, para el juego <strong>de</strong>l<br />
parchís<br />
Jugador<br />
-casillaActual: ill A t l iint t<br />
+ realizarJugada(): void<br />
+ casillaActual(): int<br />
*<br />
*<br />
2<br />
1<br />
Dado<br />
+ tirar(): int<br />
Tablero<br />
+ mover(int actual,<br />
int unida<strong>de</strong>s):<br />
boolean
Solución<br />
realizarJugada()<br />
par<br />
:Jugador d1:Dado<br />
tirar()<br />
n1<br />
tirar()<br />
n2<br />
ca:=casillaActual()<br />
mover(ca,n1+n2)<br />
d2:Dado :Tablero<br />
movRealizado
Ejercicio<br />
I<strong>de</strong>ntificar las clases relevantes y realizar el diagrama <strong>de</strong><br />
secuencia para el siguiente caso <strong>de</strong> uso, que correspon<strong>de</strong> a<br />
la realización <strong>de</strong> una llamada <strong>de</strong>s<strong>de</strong> un teléfono móvil.<br />
El usuario pulsa los dígitos <strong>de</strong>l número <strong>de</strong> teléfono<br />
Para cada dígito g<br />
la pantalla se actualiza para añadir el dígito marcado<br />
se emite un tono por el receptor<br />
El usuario pulsa el botón “Enviar” Enviar<br />
El indicador “en uso” se ilumina en pantalla<br />
El móvil establece conexión con la red<br />
LLos dí dígitos it acumulados l d se mandan d a lla red d<br />
Se establece la conexión con el número marcado
Solución<br />
:Button :Dialer :Display :Speaker send:Button :CellularRadio<br />
loop [for i = 1 to 9]<br />
digit(co<strong>de</strong>)<br />
displayDigit<br />
(co<strong>de</strong>)<br />
send()<br />
connect(pno)<br />
emitTone<br />
(co<strong>de</strong>)<br />
inUse()<br />
¿Diagrama <strong>de</strong> colaboración<br />
equivalente?
Solución
Visión <strong>de</strong> Conjunto <strong>de</strong> la Interacción<br />
DDefine fi las l interacciones i t i a ttravés é d<strong>de</strong><br />
una<br />
variante <strong>de</strong> los diagramas <strong>de</strong> actividad.<br />
Visión general <strong>de</strong>l flujo <strong>de</strong> control.<br />
Usa elementos <strong>de</strong> los diagramas <strong>de</strong> actividad<br />
para especificar:<br />
Alternativas entre interacciones.<br />
Paralelismo <strong>de</strong> interacciones.<br />
Bucles <strong>de</strong> interacciones.<br />
114
Visión <strong>de</strong> Conjunto <strong>de</strong> la Interacción<br />
115
Tiempo<br />
Muestran M t iinteracciones t i ddon<strong>de</strong> d es<br />
importante razonar sobre el tiempo.<br />
Representa Representa condiciones que cambian en<br />
una o varias líneas <strong>de</strong> vida, en un eje<br />
lineal <strong>de</strong> tiempo tiempo.<br />
Cambios en el estado <strong>de</strong> un objeto con el<br />
tiempo en respuesta a eventos.<br />
116
Tiempo<br />
Diagrama temporal<br />
correspondiente p<br />
a la interacción<br />
117
Tiempo<br />
118
Tiempo<br />
119
Máquinas <strong>de</strong> Estados<br />
“St “Statecharts” t h t ” [Harel] [H l]<br />
Representan el comportamiento <strong>de</strong> entida<strong>de</strong>s ( pp.e. e<br />
instancias <strong>de</strong> clases).<br />
Especifican reacción ante eventos<br />
Describen posibles secuencias <strong>de</strong> estados y acciones<br />
por las que pue<strong>de</strong>n pasar las entida<strong>de</strong>s.<br />
De comportamiento vs. <strong>de</strong> protocolo.<br />
120
Máquinas <strong>de</strong> Estados<br />
Comienzo Estados<br />
Fin<br />
digit(n)<br />
start Partial Dial<br />
Transiciones<br />
digit(n)<br />
121
Máquinas <strong>de</strong> Estados<br />
UUn ttransición i ió pue<strong>de</strong> d ttener:<br />
Evento.<br />
Eventos Eventos temporales: tm(n)<br />
Acción.<br />
pre-condiciones (guardas) y post- condiciones.<br />
[guard] evt/action [post-]<br />
A1 A2<br />
Símbolos especiales para el envío y recepción <strong>de</strong><br />
señales (normalmente usados en diagramas <strong>de</strong><br />
actividad). )<br />
122
Máquinas <strong>de</strong> Estados<br />
Un estado tiene:<br />
Nombre<br />
Transiciones internas: lista <strong>de</strong> acciones ejecutadas en ese<br />
estado (entry/exit/do)<br />
( y )<br />
Ejemplo: j p<br />
Typing Password<br />
entry/set t / t echo h invisible i i ibl<br />
exit/set echo normal<br />
character/handle character<br />
help/display help<br />
Nombre<br />
Transiciones<br />
internas<br />
123
Máquinas <strong>de</strong> Estados<br />
Start<br />
entry/start dial tone<br />
exit/stop dial tone<br />
digit(n)<br />
Partial Dial<br />
entry/number.append(n)<br />
Estado compuesto:<br />
Dialing<br />
Start<br />
entry/start y dial tone<br />
exit/stop dial tone<br />
digit(n)<br />
digit(n)<br />
Partial Dial [number.isValid()]<br />
entry/number.append(n)<br />
y pp ( )<br />
digit(n)<br />
124
Ejercicio: Biblioteca<br />
Una biblioteca tiene copias <strong>de</strong> libros libros. Estos últimos se<br />
caracterizan por su nombre, tipo (novela, teatro, poesía,<br />
ensayo), editorial, año y autor.<br />
Los autores se caracterizan por su nombre, nacionalidad<br />
y fecha <strong>de</strong> nacimiento.<br />
Cada copia tiene un i<strong>de</strong>ntificador i<strong>de</strong>ntificador, y pue<strong>de</strong> estar en la<br />
biblioteca, prestada, reservada, con retraso o en<br />
reparación.<br />
Los lectores pue<strong>de</strong>n tener un máximo <strong>de</strong> 3 libros en<br />
préstamo.<br />
Cada libro se presta p un máximo <strong>de</strong> 30 días, ppor<br />
cada día<br />
<strong>de</strong> retraso, se impone una “multa” <strong>de</strong> dos días sin<br />
posibilidad <strong>de</strong> coger un libro.<br />
Realiza el diagrama <strong>de</strong> estados <strong>de</strong> la clase “copia” copia .
Solucion<br />
reparado()<br />
en<br />
reparacion<br />
reparar()<br />
Con<br />
Retraso<br />
reservar(id) /<br />
usrRes = id<br />
Con<br />
Retraso y<br />
reser reservado ado<br />
<strong>de</strong>volver() [getDate()>fp+30] [getDate()>fp+30]<br />
en<br />
biblioteca<br />
prestar(id,fecha)/<br />
fp=fecha<br />
prestado<br />
reservar(id) /<br />
usrRes = id<br />
reservado<br />
<strong>de</strong>volver()<br />
prestar(id, fecha)<br />
[usrRes==id]/<br />
<strong>de</strong>volver()<br />
t tm(2 (2 days)<br />
d )<br />
fp=fecha<br />
en<br />
reserva<br />
<strong>de</strong>volver()
Solucion: Estados Jerárquicos<br />
reparado()<br />
en<br />
reparacion<br />
reparar()<br />
en<br />
biblioteca<br />
prestar(id,fecha)/<br />
fp=fecha<br />
Con<br />
Retraso<br />
[getDate()>fp+30]<br />
prestado<br />
reservar(id) /<br />
usrRes = id<br />
reservar(id) /<br />
usrRes = id<br />
Con<br />
Retraso y<br />
reser reservado ado<br />
[getDate()>fp+30]<br />
reservado<br />
<strong>de</strong>volver() prestar(id, fecha)<br />
[usrRes==id]/<br />
<strong>de</strong>volver()<br />
t tm(2 (2 days) d ) fp=fecha<br />
en<br />
reserva<br />
127
Máquinas q <strong>de</strong> Estados<br />
Componentes Ortogonales<br />
Incomplete<br />
lab done<br />
Lab1 Lab2<br />
Term<br />
Project<br />
project done<br />
Passed<br />
Final<br />
Test<br />
fail<br />
pass<br />
Failed<br />
128
Máquinas q <strong>de</strong> Estados<br />
Componentes Ortogonales: Utilidad<br />
Mo<strong>de</strong>lo <strong>de</strong> un sistema formado por un proceso<br />
en red sin componentes ortogonales.<br />
ack<br />
transmit<br />
Idle Message Sending<br />
arr.<br />
arr<br />
time out arr<br />
129
Máquinas q <strong>de</strong> Estados<br />
Componentes Ortogonales: Utilidad<br />
ack 1<br />
trans 1<br />
Idle d 1<br />
Mess ss 1<br />
1 Sendd 1<br />
Idle 2<br />
arr1<br />
arr 1<br />
Idle 2<br />
Idle 2<br />
arr arr tout arr<br />
2<br />
arr2 1<br />
2 arr1 Idle 1<br />
Mess2 trans trans2 tout2 arr1<br />
ack 1<br />
arr 1<br />
Mess 1<br />
Mess2 arr 2<br />
trans 2<br />
ack2 Idle1 Send Send2 ack2 arr1 arr2 Mess1 Send Send2 trans 1<br />
arr 2<br />
Send 1<br />
Mess2 arr 2<br />
tout 1 arr 1<br />
tout 2<br />
Dos<br />
arr1 procesos<br />
130
Máquinas q <strong>de</strong> Estados<br />
Componentes Ortogonales: Utilidad<br />
ack PProc-11 transmit<br />
Idle Message Sending<br />
arr.<br />
arr<br />
ack<br />
time out arr<br />
transmit<br />
Idle Message Sending<br />
arr.<br />
arr<br />
PProc-22 time out arr<br />
131
Máquinas q <strong>de</strong> Estados<br />
Componentes Ortogonales: Utilidad<br />
ack/ channel = free<br />
PProc-11 transmit<br />
Wait [channel<br />
Idle Message Sending<br />
arr<br />
channel<br />
arr<br />
==free ] /<br />
channel = busy<br />
time out / channel = free<br />
PProc-22 ack/ channel = free<br />
arr<br />
Idle<br />
arr<br />
transmit<br />
Wait [channel<br />
Message<br />
channel<br />
Sending<br />
arr<br />
==free ] /<br />
channel = busy<br />
time out / channel = free<br />
arr<br />
132
Máquinas <strong>de</strong> Estados<br />
PPseudo d - estados: t d<br />
Fork / Join.<br />
Initial.<br />
Deep History / Shallow History.<br />
Junction.<br />
Choice.<br />
Entry / Exit point.<br />
Terminate.<br />
H* H<br />
A1 A2<br />
Setup Cleanup<br />
B1 B2<br />
Fork Join<br />
133
Máquinas q <strong>de</strong> Estados<br />
Estado Histórico<br />
I<br />
t1: ev0<br />
t4: ev2<br />
B12<br />
t3: ev1<br />
H<br />
t4<br />
B1 B2<br />
B11<br />
t2<br />
B<br />
B21<br />
t3<br />
134
Máquinas q <strong>de</strong> Estados<br />
Estado Histórico (ii)<br />
I<br />
t1: ev0<br />
t4: ev2<br />
B12<br />
t3: ev1<br />
H* H<br />
t4<br />
B1 B2<br />
B11<br />
t2<br />
B<br />
B21<br />
t3<br />
135
Máquinas q <strong>de</strong> Estados<br />
Estado Histórico. Ejercicio.<br />
Mo<strong>de</strong>lar el comportamiento <strong>de</strong> una<br />
ca<strong>de</strong>na <strong>de</strong> música. Esta pue<strong>de</strong> p estar<br />
encendida (ON) o apagada (Standby). La<br />
ca<strong>de</strong>na tiene reproductor <strong>de</strong> CD CD, Radio y<br />
Cinta. Se cambia <strong>de</strong> uno a otro con el<br />
botón “mo<strong>de</strong>” mo<strong>de</strong> . Cuando se encien<strong>de</strong> la<br />
ca<strong>de</strong>na se recuerda el último estado en el<br />
que estuvo.<br />
136
Máquinas q <strong>de</strong> Estados<br />
Estado Histórico. Ejercicio. Solución<br />
Standby<br />
power<br />
power<br />
H<br />
mo<strong>de</strong><br />
On<br />
CD<br />
mo<strong>de</strong><br />
Radio Tape<br />
mo<strong>de</strong><br />
MMo<strong>de</strong>lar d l ell mismo i sistema it sin i usarestado t d hi histórico. tó i<br />
137
Máquinas q <strong>de</strong> Estados<br />
Estado Histórico. Ejercicio. Solución (ii)<br />
Standby<br />
lastCD<br />
lastRadio<br />
lastTape<br />
power<br />
power<br />
power<br />
power<br />
power<br />
power<br />
mo<strong>de</strong><br />
On<br />
CD mo<strong>de</strong><br />
Radio Tape<br />
mo<strong>de</strong><br />
138
Máquinas <strong>de</strong> Estados<br />
Pseudo - estados: Junction.<br />
Pseudo - estados: Choice.<br />
139
Máquinas <strong>de</strong> Estados<br />
Puntos <strong>de</strong> Entrada/Salida, Estados Sub-Máquina<br />
140
Ejemplo. Reproductor CDs.<br />
IInterfazUsuario f U i<br />
...<br />
...<br />
ReproductorCD<br />
p<br />
- Tpausa: Tiempo<br />
- NumActual: Entero<br />
+ stop() t ()<br />
+ pause()<br />
+ play()<br />
+ eject() j ()<br />
1<br />
1<br />
Li ListaCanciones C i<br />
disco<br />
...<br />
1<br />
+ obtenerCancion(Or<strong>de</strong>n: Entero):<br />
Cancion<br />
+ numCanciones(): Entero<br />
....<br />
+ apagar()<br />
+ finCancion()<br />
- buscaDisco(d: InfoDisco):<br />
ListaCanciones<br />
player 1<br />
1<br />
actual<br />
pista 0..*<br />
Cancion<br />
- titulo: Ca<strong>de</strong>na<br />
driver 1<br />
ControladorCD<br />
...<br />
+ play(act: l ( t Cancion, C i <strong>de</strong>s<strong>de</strong>: d d Tiempo) Ti )<br />
+ stop() : Tiempo<br />
+ <strong>de</strong>tectarDisco() : InfoDisco<br />
+ <strong>de</strong>tectarAbierto() () : Logico g<br />
+ abrir()<br />
+ cerrar()<br />
+ apagar()<br />
- duracion: Tiempo p<br />
- Artista: Ca<strong>de</strong>na<br />
- Or<strong>de</strong>n: Entero<br />
...<br />
141
[drriver.<strong>de</strong>tectarrAbierto()]<br />
[not driver.<br />
<strong>de</strong>tectarAbierto()]<br />
eject e ()/<br />
driver.abrir d () (<br />
Cerrado<br />
eject ()/<br />
driver.cerrarr<br />
()<br />
Abierto<br />
Diagrama <strong>de</strong> estados para la clase<br />
ReproductorCD<br />
p<br />
[(info=driver.<strong>de</strong>tectarDisco())!=NULL]/<br />
disco=buscaDisco(info)<br />
NumActual = 1;<br />
actual = disco.obtenerCancion(or<strong>de</strong>nActual)<br />
( )<br />
eject ()/<br />
driver.stop();<br />
driver.abrir()<br />
Play()/<br />
driver.play(actual, 0)<br />
Stop Play<br />
stop()/<br />
driver.stop();<br />
NumActual=1<br />
NumActual 1<br />
actual=<br />
disco.obtenerCancion(NumActual)<br />
[else]/ driver.stop();<br />
NumActual=1; ;<br />
actual= disco.obtenerCancion(NumActual)<br />
Play()/<br />
driver.pllay(actual,<br />
Tppausa)<br />
apagar ()/<br />
driver.stop();<br />
driver.apagar()<br />
Pause<br />
Pause() )/<br />
Tpausa = driver.stopp()<br />
endOfSong()/<br />
NumActual+=1<br />
[NumActual
Máquinas <strong>de</strong> Estados <strong>de</strong> Protocolo<br />
Asociadas a un clasificador, , interface o puerto. p<br />
Especifican qué operaciones <strong>de</strong>l clasificador se pue<strong>de</strong>n<br />
llamar en qué condiciones<br />
condiciones.<br />
Las operaciones que no generan transición no se<br />
representan.<br />
Má Máquinas i d<strong>de</strong> estado t d d<strong>de</strong>clarativas: l ti EEspecifican ifi llas<br />
transiciones legales (no su condición) para cada<br />
operación. “Contrato” para el usuario <strong>de</strong>l clasificador.<br />
Máquinas <strong>de</strong> estado Ejecutables: Especifican todos<br />
los eventos que un clasificador pue<strong>de</strong> recibir y tratar tratar,<br />
con las transiciones implicadas.<br />
143
Máquinas <strong>de</strong> Estados <strong>de</strong> Protocolo<br />
Máquinas <strong>de</strong> estados <strong>de</strong><br />
protocolo. Ejemplo (<strong>de</strong>clarativa).<br />
Los estados <strong>de</strong> máquinas <strong>de</strong><br />
protocolo no tienen asociadas<br />
acciones exit/entry/do exit/entry/do, pero<br />
pue<strong>de</strong>n tener invariantes.<br />
Las transiciones no tienen<br />
acciones, pero sí pue<strong>de</strong>n tener<br />
pre- y post- condiciones.<br />
Cleanup<br />
[inv]<br />
[pre-cond] Evt/ [post-cond]<br />
144
Máquinas q <strong>de</strong> Estados<br />
Generalización<br />
Una máquina <strong>de</strong> estados es generalizable<br />
generalizable.<br />
Se pue<strong>de</strong>n añadir regiones, estados y transiciones.<br />
Se pue<strong>de</strong> cambiar el <strong>de</strong>stino y estado <strong>de</strong> una transición siempre<br />
que la fuente y evento se mantenga.<br />
En caso <strong>de</strong> herencia múltiple <strong>de</strong> máquinas <strong>de</strong> estado (por herencia<br />
<strong>de</strong> los clasificadores asociados), se crea una región ortogonal por<br />
cada máquina heredada heredada, mas una por la máquina <strong>de</strong> estados <strong>de</strong>l<br />
clasificador específico.<br />
Se anota con junto al nombre <strong>de</strong> la máquina máquina.<br />
Los estados heredados se muestran con líneas punteadas o en gris.<br />
145
Máquinas q <strong>de</strong> Estados<br />
Generalización: Ejemplo, cajero autómatico.<br />
146
Máquinas q <strong>de</strong> Estados<br />
Generalización: Ejemplo, cajero autómatico.<br />
EExtensión: ió posibilidad ibilid d d<strong>de</strong><br />
teclear el importe a<br />
retirar, y <strong>de</strong> que este se<br />
pueda rechazar.<br />
147
Ejercicio<br />
MMo<strong>de</strong>lar d l ell comportamiento t i t reactivo ti d<strong>de</strong> unreloj l j d<strong>de</strong> pulsera. l<br />
El valor <strong>de</strong>l tiempo se <strong>de</strong>be actualizar cada segundo, incluso cuando no se<br />
muestra (p.ej. crono encendido).<br />
El botón <strong>de</strong> la parte superior <strong>de</strong>recha encien<strong>de</strong> la luz luz, que se mantiene<br />
encendida tanto como el botón está apretado, una vez que se suelta, la luz<br />
está encendida durante 2 segundos más y se apaga.<br />
El botón superior izquierdo alterna entre el modo <strong>de</strong> crono y <strong>de</strong> reloj. El<br />
sistema empieza en el modo reloj reloj, en el que se muestra la hora en formato<br />
HH:MM:SS.<br />
En el modo crono, el tiempo discurrido se muestra en formato MM:SS:CC<br />
(CC ( son centésimas <strong>de</strong> segundo). g ) Inicialmente el crono empieza p en<br />
00:00:00. El botón inferior <strong>de</strong>recho se usa para activar el crono. ÉÉste<br />
se<br />
actualiza en incrementos <strong>de</strong> 1/100 segundos. Presionando el botón inferior<br />
<strong>de</strong>recho pausa o continua el crono (si el reloj está en modo crono).<br />
Pulsando el botón inferior izquierdo q resetea el crono a 00:00:00 si el relojj<br />
está en modo crono y el crono ha sido pausado antes. El crono continua<br />
corriendo (si está corriendo) o mantiene su valor (si está en pausa) incluso<br />
cuando el reloj está en un modo <strong>de</strong> display distinto (por ejemplo, cuando se<br />
muestra la hora).<br />
148
Ejercicio<br />
Interface provisto por el controlador:<br />
getTime() : Devuelve la hora actual.<br />
refreshTimeDisplay() : Repinta la hora en el visor con la hora interna actual. El<br />
visor no necesita limpiarse antes <strong>de</strong> llamar a esta función. Por ejemplo, si se está<br />
visualizando el crono, se borrará antes <strong>de</strong> pintar la hora.<br />
refreshChronoDisplay() :verrefreshTimeDisplay(). resetChrono() : Resetea el crono interno a 00:00:00.<br />
increaseTime() : Incrementa la hora en un segundo. Los minutos y horas se<br />
modificarán a<strong>de</strong>cua<strong>de</strong>mente, (por ejemplo, si se llama a increaseTime () a las<br />
11:59:59, la nueva hora será 12:00:00).<br />
increaseChrono () : Incrementa el crono en 1/100 segundos.<br />
setLight() : Encien<strong>de</strong> la luz <strong>de</strong>l visor.<br />
unsetLight() : Apaga la luz <strong>de</strong>l visor visor.<br />
Eventos <strong>de</strong> botones recibidos:<br />
topRightPressed.<br />
topRightReleased.<br />
p g<br />
topLeftPressed.<br />
topLeftReleased.<br />
bottomRightPressed.<br />
bottomRightReleased<br />
bottomRightReleased.<br />
bottomLeftPressed.<br />
149<br />
bottomRightReleased.
Posible Solución. Solución<br />
150
Máquinas <strong>de</strong> Estados<br />
Ejemplo. Herramienta <strong>de</strong> Dibujo (i)<br />
wmQuit<br />
/setup widgets<br />
setup t bi bindings di<br />
Active<br />
exitButton<br />
151
Máquinas q <strong>de</strong> Estados<br />
Ejemplo. Herramienta <strong>de</strong> Dibujo (ii)<br />
Shapes Canvas<br />
Mo<strong>de</strong>s<br />
152
Máquinas q <strong>de</strong> Estados<br />
Ejemplo. Herramienta <strong>de</strong> Dibujo (iii)<br />
Shapes<br />
shapeSelected(Triangle)<br />
shapeSelected(Rectangle)<br />
Triangle<br />
shapeSelected(Circle)<br />
shapeSelected(Triangle)<br />
p ( g )<br />
shapeSelected(Circle)<br />
h S l t d(Ci l )<br />
Rectangle Circle<br />
shapeSelected(Rectangle)<br />
153
Máquinas q <strong>de</strong> Estados<br />
Ejemplo. Herramienta <strong>de</strong> Dibujo (iv)<br />
Mo<strong>de</strong>s<br />
mo<strong>de</strong>Select(Insert)/<br />
Canvas.Insert<br />
mo<strong>de</strong>Select(Move)/<br />
Canvas.Move<br />
Insert<br />
mo<strong>de</strong>Select(Delete)/ ( )/<br />
Canvas.Delete<br />
mo<strong>de</strong>Select(Delete)/<br />
Canvas.Delete<br />
mo<strong>de</strong>Select(Insert)/<br />
Canvas.Insert<br />
Move Delete<br />
mo<strong>de</strong>Select(Move)/<br />
CCanvas.Move M<br />
154
Canvas<br />
onDrawingMouse1Press(x,y)<br />
Idle<br />
move<br />
insert<br />
Máquinas <strong>de</strong> Estados<br />
Ejemplo Ejemplo. Herramienta <strong>de</strong> Dibujo (v)<br />
Idle<br />
[Shapes in Circle]/<br />
ddrawCircle(x,y) Ci l ( )<br />
[Shapes in Rectangle]/<br />
drawRectangle(x,y)<br />
[Shapes in Triangle]/<br />
drawTriangle(x,y)<br />
C<br />
Moving<br />
<strong>de</strong>lete<br />
Insertingg<br />
insert<br />
Idle<br />
Deleting<br />
onDrawingMouse1Press(x,y)/<br />
movingObject=find_closest(x,y)<br />
i Obj t fi d l t( ) onDrawingMouse1Click(x,y)/<br />
D i M 1Cli k( )/<br />
find_closest(x,y).<strong>de</strong>l()<br />
onDrawingMouse1Release(x,y)<br />
Moving<br />
onDrawingMouse1Motion(x,y)/<br />
oldCoords=coords(movingObject)<br />
move(movingObject, distance(oldCoords, (x,y)))<br />
move<br />
<strong>de</strong>lete<br />
155
Diagramas <strong>de</strong> Actividad<br />
Refinamiento <strong>de</strong> los diagramas <strong>de</strong> estados estados.<br />
Los estados representan p la ejecución j <strong>de</strong> acciones o<br />
subactivida<strong>de</strong>s<br />
Las transiciones son disparadas p cuando se completan p estas<br />
acciones o subactivida<strong>de</strong>s<br />
Semántica basada en tokens.<br />
Flujos dirigidos por procesamiento interno (en los<br />
diagramas <strong>de</strong> estados normales son dirigidos por eventos<br />
externos).<br />
156<br />
Semántica basada en Re<strong>de</strong>s <strong>de</strong> Petri. No obstante no se<br />
da una transformación a Re<strong>de</strong>s <strong>de</strong> Petri.
Diagramas g <strong>de</strong> Actividad<br />
Ejemplo<br />
Find<br />
Beverage g<br />
[found<br />
coffee]<br />
Put Coffee<br />
Put Filter<br />
in Filter in Machine<br />
Add Water<br />
to Reservoir<br />
Turn on<br />
Machine<br />
Brew<br />
coffee<br />
/ coffeePot.turnOn<br />
[no coffee]<br />
Get<br />
light goes out<br />
Cups<br />
[found cola]<br />
[no cola]<br />
Get cans<br />
of cola<br />
Pour<br />
Coffee<br />
Drink<br />
157
Diagramas <strong>de</strong> Actividad<br />
Swimlanes<br />
158
Diagramas <strong>de</strong> Actividad<br />
Pesos en los enlaces<br />
159
Diagramas <strong>de</strong> Actividad<br />
Parámetros y Eventos Temporales<br />
Parámetros/Pins/Excepciones<br />
EEventos t Temporales<br />
T l<br />
160
Diagramas <strong>de</strong> Actividad<br />
Excepciones/Pins<br />
161
Diagramas <strong>de</strong> Actividad<br />
Regiones <strong>de</strong><br />
Expansión<br />
Regiones <strong>de</strong> expansión,<br />
procesamiento paralelo<br />
(también iterative y<br />
streaming). t i )<br />
162
Diagramas <strong>de</strong> Actividad<br />
Regiones Interrumpibles<br />
163
Diagramas <strong>de</strong> Actividad<br />
Particiones<br />
164
Diagramas <strong>de</strong> Actividad<br />
Flujos <strong>de</strong> Objetos: Objectflows<br />
165
Indice<br />
Diagramas <strong>de</strong> Casos <strong>de</strong> Uso.<br />
Diagramas Diagramas <strong>de</strong> Estructura. Estructura<br />
Diagramas <strong>de</strong> Comportamiento.<br />
OCL.<br />
Herramientas.<br />
Ejemplos Ejemplos.<br />
Bibliografía.<br />
166
OCL: Object Constraint Language<br />
<strong>Lenguaje</strong> <strong>de</strong> restricciones para expresar condiciones<br />
adicionales que no po<strong>de</strong>mos expresar con diagramas y<br />
cardinalida<strong>de</strong>s.<br />
Combinar diagramas y especificaciones textuales.<br />
<strong>Lenguaje</strong> preciso, no ambiguo, <strong>de</strong>clarativo, tipado, basado<br />
en matemáticas<br />
conjuntos) conjuntos).<br />
(lógica <strong>de</strong> predicados y teoría <strong>de</strong><br />
Útil para p obtener mo<strong>de</strong>los precisos p (no ( anotaciones en<br />
lenguaje natural).<br />
Se utiliza fundamentalmente junto a los diagramas <strong>de</strong><br />
clases.<br />
167
Ejemplos<br />
Flightnr: Integer<br />
Flight Airplane<br />
availableSeats(): Integer<br />
flights<br />
passengers<br />
0 0.. *<br />
PPerson<br />
name: String<br />
0..*<br />
0 0.. * 1<br />
flights<br />
plane<br />
numberOfSeats: Integer<br />
También es un lenguaje <strong>de</strong> consultas (mismo<br />
po<strong>de</strong>r expresivo que SQL).<br />
Context Flight::availableSeats(): Integer<br />
body: plane.numberOfSeats – passengers->size()<br />
¿Cómo se expresa el hecho <strong>de</strong> que en ningún vuelo pue<strong>de</strong> haber<br />
más pasajeros p j que q asientos tiene el avión?<br />
Restricción OCL:<br />
Context Flight<br />
Inv: passengers->size()
Ejemplos<br />
Casa<br />
valor: Dinero<br />
aval 1<br />
Reglas adicionales:<br />
Persona<br />
0 0.. * 1 numSegSoc: S S Id I<strong>de</strong>ntificador ifi d<br />
casas<br />
propietario sueldo: Dinero<br />
contratarHipoteca(sum: Dinero,<br />
Hipoteca<br />
principal: Dinero<br />
aval: Casa) )<br />
1 contratante<br />
0..* mensual: Dinero 0..*<br />
hipotecas fechaInicio: Fecha<br />
fechaFinal: Fecha<br />
hipotecas<br />
1. Una persona pue<strong>de</strong> tener una hipoteca sobre una casa sólo si es el<br />
propietario.<br />
22. La fecha <strong>de</strong> inicio <strong>de</strong> cada hipoteca ha <strong>de</strong> ser menor que la <strong>de</strong> final final.<br />
3. El número <strong>de</strong> la seguridad social <strong>de</strong> cada persona ha <strong>de</strong> ser único.<br />
4. Sólo es posible contratar una nueva hipoteca si el salario <strong>de</strong> la persona<br />
es suficiente.<br />
5. Sólo es posible contratar una nueva hipoteca si el valor <strong>de</strong> la casa aval<br />
es suficiente.<br />
169
Ejemplos<br />
CContext t t Hi Hipoteca t<br />
Inv: aval.propietario = contratante<br />
Las restricciones OCL se escriben<br />
en el contexto <strong>de</strong> una instancia <strong>de</strong><br />
un tipo específico.<br />
Context Hipoteca<br />
Inv: fechaInicio < fechaFin self hace referencia a la instancia<br />
<strong>de</strong>l contexto.<br />
Context Persona<br />
Inv: Persona::allInstances()->isUnique(numSegSoc)<br />
Context Persona::contratarHipoteca(sum: Dinero, aval: Casa)<br />
pre: self.hipotecas.mensual->sum()+sum = aval.hipotecas.principal->sum()<br />
170
Ejemplos<br />
“Los PCs pue<strong>de</strong>n conectarse con un único Hub, los servidores con uno o varios”<br />
Context PC<br />
Inv: cable_equipo->size() = 1<br />
Context Servidor<br />
Inv: cable_equipo->size() >= 1<br />
171
Ejercicio<br />
“Un Hub no pue<strong>de</strong> conectarse consigo mismo a través <strong>de</strong><br />
un puerto”<br />
Context Cable_Hubs<br />
Inv: Puerto_Hub.hub->asSet()->size() = 2<br />
172
¿Dón<strong>de</strong> usar OCL?<br />
Clases:<br />
Invariantes. Expresión OCL <strong>de</strong> tipo booleano, la expresión <strong>de</strong>be<br />
ser true para cada instancia <strong>de</strong> la clase en todo momento <strong>de</strong> la<br />
ejecución ejecución.<br />
Operaciones:<br />
Pre-condición. Condición que <strong>de</strong>be ser verda<strong>de</strong>ra para ejecutar<br />
lla operación ió en una d<strong>de</strong>terminada t i d iinstancia. t i<br />
Post-condición. Condición que <strong>de</strong>be ser verda<strong>de</strong>ra al terminar<br />
una operación.<br />
BBody. d EEspecificación ifi ió <strong>de</strong>l d l cuerpo d<strong>de</strong> una operación ió d<strong>de</strong> ti tipo query.<br />
Atributos y finales <strong>de</strong> asociación:<br />
Valor inicial. expresión p ppara<br />
dar el valor inicial a un atributo o<br />
final <strong>de</strong> asociación. Se evalua al crear la instancia.<br />
Valor <strong>de</strong>rivado.<br />
Transiciones <strong>de</strong> máquinas <strong>de</strong> estados:<br />
Guarda.
Ejemplos<br />
parents<br />
0..*<br />
children 0..*<br />
174
Ejemplos<br />
EEspecificación ifi ió d<strong>de</strong>l l valor l iinicial i i l y d<strong>de</strong>rivado i d d<strong>de</strong> atributos/association t ib t / i ti ends: d<br />
context Person::income : Integer<br />
init: parents.income->sum() * 1% -- pocket allowance<br />
d<strong>de</strong>rived:if i d if self.age lf < 18<br />
then parents.income->sum() * 1% -- pocket allowance<br />
else job.salary -- income from regular job<br />
endif<br />
Subexpresiones (let):<br />
context Person inv:<br />
let income : Integer = self.job.salary->sum() in<br />
if isUnemployed then<br />
income < 100<br />
else<br />
income >= 100<br />
endif<br />
175
Ejemplos Ejemplos. Colecciones.<br />
Colecciones<br />
Tipos: Set, Or<strong>de</strong>redSet, Bag, Sequence.<br />
Operaciones <strong>de</strong> bucle con colecciones:<br />
select(expr): selecciona los elementos que cumplan una condición.<br />
coleccion->select( expresion-logica )<br />
coleccion->select( l i l t( v | expresion-logica-con-v)<br />
i l i )<br />
coleccion->select( v : Type | expresion-logica-con-v)<br />
context t t CCompany iinv:<br />
self.employee->select(age < 25)->notEmpty()<br />
context Company inv:<br />
self.employee->select(gen<strong>de</strong>r=female)->notEmpty()<br />
176
Ejemplos Ejemplos. Colecciones.<br />
Colecciones<br />
collect(expr): <strong>de</strong>vuelve la colección que resulta <strong>de</strong> evaluar expr<br />
para cada elemento <strong>de</strong> la colección fuente.<br />
self self.employee->collect( employee >collect( birthDate ) )->asSet() >asSet()<br />
forAll(expr): <strong>de</strong>vuelve verda<strong>de</strong>ro si expr es verda<strong>de</strong>ro en cada<br />
elemento <strong>de</strong> la colección.<br />
coleccion->forAll( expresion-logica )<br />
coleccion->forAll( v | expresion-logica-con-v )<br />
coleccion->forAll( v : Type | expresion-logica-con-v )<br />
context Company<br />
inv: self.employee->forAll( isUnemployed = False )<br />
inv: self.employee->forAll( p | p.isUnemployed = False )<br />
iinv: self.employee->forAll( lf l >f All( p : P Person | p.isUnemployed i U l d = FFalse l )<br />
177
Ejemplos Ejemplos. Colecciones.<br />
Colecciones<br />
exists(expr): <strong>de</strong>vuelve true si al menos hay un elemento en la<br />
colección para el que expr es verda<strong>de</strong>ra verda<strong>de</strong>ra.<br />
coleccion->exists( expresion-logica )<br />
coleccion->exists( v | expresion-logica-con-v )<br />
coleccion->exists( v : Type | expresion-logica-con-v )<br />
context Company<br />
inv: self.employee->exists( age > 50 )<br />
inv: self.employee->exists( p | p.age > 50 )<br />
inv: self.employee->exists( p : Person | p.age > 50 )<br />
iterate(…): itera sobre todos los elementos <strong>de</strong> una colección.<br />
coleccion->iterate( elem : Type; acc : Type = | expresion-logica-<br />
con-elem-y-acc l )<br />
collection->collect(x : T | x.property)<br />
collection->iterate(x ( : T; ; acc : T2 = Bag{} g{} | acc->including(x.property))<br />
g( p p y))<br />
aña<strong>de</strong> un elemento a una colección<br />
178
Colecciones Colecciones. Otras Operaciones<br />
Operaciones.<br />
Otras operaciones p <strong>de</strong> bucle:<br />
source->any(iterator|body)<br />
source->select(iterator|body)->asSequence()->first()<br />
source->collectNested(iterators|body)<br />
source collectNested(iterators|body)<br />
Bag <strong>de</strong> elementos que resultan <strong>de</strong> aplicar body a cada elemento <strong>de</strong><br />
source.<br />
source->isUnique(iterators|body)<br />
( | y)<br />
True si body se evalua a un valor diferente para cada elemento <strong>de</strong><br />
source.<br />
source->one(expr)<br />
Devuelve true si existe exactamente un elemento <strong>de</strong> source que cumple<br />
la condición.<br />
source->reject(expr)<br />
Devuelve una colección con los elementos <strong>de</strong> source que no cumplen la<br />
condición.<br />
source->sortedBy(expr)<br />
Or<strong>de</strong>na source, source resulta en un Or<strong>de</strong>redSet<br />
179
Indice<br />
Diagramas <strong>de</strong> Casos <strong>de</strong> Uso.<br />
Diagramas Diagramas <strong>de</strong> Estructura. Estructura<br />
Diagramas <strong>de</strong> Comportamiento.<br />
OCL.<br />
Herramientas<br />
Herramientas.<br />
Ejemplos. j p<br />
Bibliografía.<br />
180
Herramientas Herramientas, I<br />
Dib Dibujo j d<strong>de</strong> di diagramas<br />
Soporte a la correccción <strong>de</strong> los diagramas en base a su<br />
semántica<br />
Apoyo para simplificar la facilidad <strong>de</strong> comprensión <strong>de</strong><br />
los diagramas (layout, etc.)<br />
Archivo <strong>de</strong> información<br />
Comprobación <strong>de</strong> inconsistencias<br />
Detección <strong>de</strong> trabajo a realizar y mejoras<br />
Generación <strong>de</strong> informes<br />
Soporte a la reutilización<br />
Soporte al rediseño (refactorings).<br />
181
Herramientas Herramientas, II<br />
Soporte a la navegación<br />
Vistas compuestas<br />
Elaboración <strong>de</strong> conexiones entre información<br />
relacionada<br />
Bú Búsqueda d<br />
Visión con diferentes niveles <strong>de</strong> granularidad<br />
(expansión y contracción <strong>de</strong> partes <strong>de</strong> la vista)<br />
Filtros<br />
Operaciones Operaciones sobre componentes <strong>de</strong> la vista<br />
182
Herramientas Herramientas, III<br />
Soporte al trabajo multiusuario<br />
Bloqueo <strong>de</strong> información<br />
Trabajo j colaborativo<br />
Generación <strong>de</strong> código<br />
Esqueletos con información estática (clases)<br />
Generación a partir <strong>de</strong> diagramas <strong>de</strong> comportamiento<br />
(máquinas <strong>de</strong> estados).<br />
Integración con lenguajes especiales (SQL, …)<br />
Desarrollo Dirigido por Mo<strong>de</strong>los (MDA (MDA,<br />
http://www.omg.org/mda/)<br />
Ingeniería inversa<br />
Construcción <strong>de</strong> un mo<strong>de</strong>lo <strong>de</strong> diseño a partir <strong>de</strong> código<br />
Diseño iterativo: incorporación al mo<strong>de</strong>lo <strong>de</strong> <strong>de</strong>talles<br />
implementados<br />
183
Herramientas Herramientas, IV<br />
Integración con otras herramientas<br />
Entorno <strong>de</strong> <strong>de</strong>sarrollo (ten<strong>de</strong>ncia a confluir)<br />
Configuración <strong>de</strong>l sistema y control <strong>de</strong> versiones<br />
Herramientas <strong>de</strong> documentación<br />
Herramientas <strong>de</strong> prueba <strong>de</strong> software<br />
Herramientas <strong>de</strong> construcción <strong>de</strong> interfaces <strong>de</strong> usuario<br />
Herramientas <strong>de</strong> especificación <strong>de</strong> requisitos<br />
Herramientas <strong>de</strong> gestión <strong>de</strong> proyectos y soporte al<br />
proceso d<strong>de</strong> di diseño ñ y d<strong>de</strong>sarrollo ll<br />
184
Herramientas Herramientas, V<br />
Distintos niveles <strong>de</strong> abstracción<br />
Intercambio Intercambio <strong>de</strong> información<br />
Especificación OMG <strong>de</strong> representación <strong>de</strong><br />
mo<strong>de</strong>los <strong>UML</strong> en XMI (XML Metadata<br />
Interchange)<br />
185
Poseidon for <strong>UML</strong>
Indice<br />
Diagramas <strong>de</strong> Casos <strong>de</strong> Uso.<br />
Diagramas Diagramas <strong>de</strong> Estructura. Estructura<br />
Diagramas <strong>de</strong> Comportamiento.<br />
OCL.<br />
Herramientas<br />
Herramientas.<br />
Ejemplos. Ejemplos.<br />
Bibliografía.<br />
187
Ejemplo <strong>de</strong> Análisis<br />
Aplicación para una Galería <strong>de</strong> Arte<br />
Diagrama <strong>de</strong> casos <strong>de</strong> uso inicial<br />
Agente<br />
Galería<br />
Comprar un<br />
cuadro<br />
Ven<strong>de</strong>r un<br />
cuadro<br />
Producir Informe<br />
Actualizar<br />
Coeficiente <strong>de</strong><br />
moda<br />
Ven<strong>de</strong>dor<br />
CComprador d<br />
188
Diagrama Comprar p una<br />
Obra maestra<br />
refinado<br />
Agente<br />
Comprar una<br />
OObra<br />
representativa<br />
Comprar una<br />
Obra representativa<br />
Ven<strong>de</strong>r un<br />
cuadro<br />
Producir Informe<br />
compras<br />
Galería Producir Informe<br />
ventas<br />
Producir Informe<br />
ten<strong>de</strong>ncias<br />
Actualizar<br />
Coeficiente <strong>de</strong> moda<br />
Ven<strong>de</strong>dor<br />
Comprador<br />
189
Caso <strong>de</strong> uso: comprar una obra maestra<br />
Actores primarios: p<br />
Agente Galería, ven<strong>de</strong>dor<br />
Interesados y Objetivos:<br />
• Agente: quiere obtener una recomendación lo más acertada posible <strong>de</strong>l<br />
precio máximo recomendado <strong>de</strong> manera rápida.<br />
• Ven<strong>de</strong>dor: quiere ven<strong>de</strong>r el cuadro a un precio razonable <strong>de</strong> manera rápida.<br />
Precondiciones:<br />
El agente ha entrado en la aplicación.<br />
Garantía <strong>de</strong> éxito (post-condiciones):<br />
Se registra la venta.<br />
EEscenario i Principal P i i l <strong>de</strong> d Éxito: É it<br />
1. El agente introduce la <strong>de</strong>scripción <strong>de</strong>l cuadro.<br />
2. El sistema busca el cuadro más parecido <strong>de</strong>l mismo autor.<br />
33. El sistema presenta el precio recomendado<br />
recomendado.<br />
4. El agente hace una propuesta por <strong>de</strong>bajo <strong>de</strong>l precio recomendado, y el<br />
ven<strong>de</strong>dor acepta la oferta.<br />
55. El agente introduce información <strong>de</strong> la venta venta.<br />
Extensiones:<br />
2a. No hay ningún cuadro parecido <strong>de</strong>l mismo autor, así que el sistema<br />
no presenta una recomendación<br />
recomendación.<br />
4a. El ven<strong>de</strong>dor no acepta la oferta y la venta no se produce.<br />
190
Diagrama <strong>de</strong> clases inicial<br />
Si Sistema t GGestion ti<br />
Galeria<br />
Cuadro Galeria<br />
Clasificacion<br />
fechaCompra<br />
Fechaventa<br />
nombreVen<strong>de</strong>dor<br />
direccionVen<strong>de</strong>dor<br />
precioCompraMaximo<br />
precioCompraReal<br />
precioVentaDeseado<br />
precioVenta<br />
nombreComprador<br />
direccionComprador<br />
Cuadro<br />
nombreDelArtista<br />
apellidosDelArtista<br />
Titulo<br />
AñoCreacion<br />
Alto<br />
Ancho<br />
Tecnica<br />
Tema<br />
Cuadro Subastado<br />
fechaSubasta<br />
precioSubasta<br />
Obra Maestra Cuadro <strong>de</strong> Otro Tipo Moda<br />
usa<br />
nombreArtista<br />
Obra Representativa<br />
appelidosArtista<br />
coeficiente<br />
191
Diagrama <strong>de</strong> clases asociado al caso <strong>de</strong> uso ven<strong>de</strong>r una obra maestra<br />
Ven<strong>de</strong>dor<br />
AAgente t<br />
Galería<br />
Proporciona los datos introducidos<br />
por el agente<br />
GUI Calcular Precio<br />
Obra Maestra<br />
Obra maestra<br />
Cuadro Cuad o<br />
Subastado<br />
192
Ven<strong>de</strong>dor<br />
Datos<br />
proporcionados<br />
por el ven<strong>de</strong>dor<br />
Agente<br />
Galería<br />
: GUI<br />
1: proporcionar<br />
datos obra<br />
maestra<br />
8: mostrar<br />
precio<br />
9: proporcionar<br />
<strong>de</strong>talles <strong>de</strong>l<br />
ven<strong>de</strong>dor<br />
14: mostrar<br />
confirmación<br />
2: transferir <strong>de</strong>talles<br />
7: proporcionar<br />
precio<br />
10: transferir <strong>de</strong>talles<br />
ven<strong>de</strong>dor<br />
13: confirmación<br />
: Calcular Precio<br />
Obra Maestra<br />
3: crear objeto<br />
nuevo<br />
4: <strong>de</strong>volver objeto<br />
nuevo<br />
5: buscar cuadros<br />
subastados<br />
11: solicitar<br />
actualización<br />
12: confirmación<br />
: Obra maestra<br />
6: <strong>de</strong>volver cuadro<br />
subastado<br />
: Cuadro<br />
Subastado<br />
193
Un ejemplo completo para<br />
todos los diagramas<br />
Un sistema <strong>de</strong> gestión <strong>de</strong> cursos impartidos para un conjunto<br />
<strong>de</strong> clientes. Algunos <strong>de</strong> esos clientes pue<strong>de</strong>n pertenecer a<br />
empresas.<br />
194
195
196
197
0<br />
3<br />
11 1.1<br />
2.1<br />
3.1 3.1.1<br />
3.2<br />
1<br />
3.2.1<br />
2<br />
198
199
200
201
202
203
Indice<br />
Diagramas <strong>de</strong> Casos <strong>de</strong> Uso.<br />
Diagramas Diagramas <strong>de</strong> Estructura. Estructura<br />
Diagramas <strong>de</strong> Comportamiento.<br />
OCL.<br />
Herramientas<br />
Herramientas.<br />
Ejemplos<br />
Bibliografía.<br />
204
Bibliografía: <strong>UML</strong><br />
<strong>UML</strong><br />
DDan Pil Pilone; NNeil il Pi Pitman. “<strong>UML</strong>20i “<strong>UML</strong> 2.0 in a NNutshell”. t h ll” O’R O’Reilly, ill 2005 2005.<br />
Martin Fowler. “<strong>UML</strong> Distilled: A Brief Gui<strong>de</strong> to the Standard Object Mo<strong>de</strong>ling<br />
Language, 3rd Edition”. Addison Wesley, 2003.<br />
Web <strong>de</strong> la OMG sobre <strong>UML</strong>: http://www.uml.org<br />
Perdita Stevens, Rob Pooley. “Utilización <strong>de</strong> <strong>UML</strong> en Ingeniería <strong>de</strong>l Software con<br />
Objetos j y Componentes”. p Addison Wesley, y, 2002.<br />
Grady Booch, James Rumbaugh, Ivar Jacobson. “The Unified Mo<strong>de</strong>ling<br />
Language User Gui<strong>de</strong>”. Addison-Wesley, 1999.<br />
Eriksson Eriksson, H. H E., E Penker, Penker M., M Lyons, Lyons BB., Fado Fado, D D. “<strong>UML</strong> <strong>UML</strong> 2 Toolkit” Toolkit . OMG Press, Press<br />
Wiley. 2004.<br />
Craig Larman. “Applying <strong>UML</strong> and Patterns”. Prentice Hall. 2002.<br />
OCL<br />
Warmer Warmer, Kleppe. Kleppe “The Object Constraint Language 2nd Edition Edition. Getting your<br />
Mo<strong>de</strong>ls Ready for MDA”. Addison-Wesley. 2003.<br />
Especificación <strong>de</strong> OCL 2.0: http://www.omg.org/docs/ptc/03-10-14.pdf<br />
205
Bibliografía: Statecharts<br />
Harel D D. “On Visual Formalisms” Formalisms”. Communications of the<br />
ACM. Vol 31, No. 5. Pp.: 514-530. Mayo 1988.<br />
Harel D., Naamad A. “The STATEMATE Semantics of<br />
Statecharts”. ACM Transactions on Software<br />
Engineering and Methodology Methodology, Vol Vol. 55, No No. 44, Oct Oct. 1996 1996,<br />
pp.: 293-233.<br />
DDavid id HHarel l andd EEran GGery. EExecutable bl object bj<br />
mo<strong>de</strong>ling with statecharts. IEEE Computer, pages 31-42,<br />
1997.<br />
206