12.05.2013 Views

UML: Lenguaje Unificado de Lenguaje Unificado de Modelado

UML: Lenguaje Unificado de Lenguaje Unificado de Modelado

UML: Lenguaje Unificado de Lenguaje Unificado de Modelado

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!