Diagramas UML y ejemplos prácticos.

Page 1

UML UML: Lenguaje Unificado de Modelado

http://uml.org

Tema 4

TACC II Curso 2008/09 1


Introducción z Similitud: { Arquitectos, edificios, planos { Ing. Inf., programas, diagramas

z UML { Unified Modeling Language. Versión 2.0 (finales 2004) { Diagramas (ing. (ing inf inf.)) z Usados como esquemas y menos con información rigurosa (“planos de arquitectos”) z Dos modos: • Ingeniería inversa: a partir de código hacer diagramas • Ingeniería directa: hacer diagramas y luego implementar

z Dominio { Mundo en el que hay definido un problema

z Modelo: { Abstracción de un problema { Formado por objetos

2


Indice

zDiagramas de Casos de Uso. zDiagramas de Estructura. Estructura zDiagramas de Comportamiento. zOCL. zH zHerramientas. i t zEjemplos. j p zBibliografĂ­a. 3


Casos de Uso z Describen D ib qué éh hace ell sistema i t d desde d ell punto t de vista de un observador externo. z Ponen énfasis en qué hace el sistema, no en cómo lo hace. z Un escenario es una instancia particular de un diagrama de casos de uso. {Ejemplo de lo que ocurre cuando alguien interactúa con el sistema 4


Casos de Uso z Actor A t = Algo Al con comportamiento t i t (persona, ( otro t programa, organizaci贸n...), que interactua con el sistema. z Escenario (instancia de caso de uso) = Secuencia de acciones e interacciones entre los actores y el sistema. z Caso de Uso = Colecci贸n de escenarios (茅xito y fracaso) que describen actores que usan el sistema para conseguir un objetivo. 5


Casos de Uso zP zPasos: { Identificar los lĂ­mites del sistema. { Identificar los actores principales. { Para cada uno, identificar sus objetivos. { Definir casos de uso que satisfagan sus objetivos. 6


Ejemplo Aplicación para una Galería de Arte Te encargan realizar una aplicación para la compra-venta de cuadros. En cuanto a la compra de cuadros, una vez que el agente introduce unos datos básicos sobre el cuadro, cuadro el sistema debe proporcionar el precio recomendado que el agente de la galería debería pagar. Si el vendedor del cuadro acepta la oferta, entonces el agente de la galería introduce más detalles (sobre el vendedor del cuadro y la venta). y el nombre y apellidos p del artista,, el título y fecha de la obra,, sus dimensiones,, la técnica Los datos básicos incluyen (óleo, acuarela u otras técnicas), el tema (retrato, naturaleza muerta, paisaje, otro) y la clasificación (obra maestra, obra representativa, otro tipo). Si es obra maestra, el precio recomendado se calcula comparando el cuadro introducido con los que hay en el registro de cuadros, tomando el más parecido y aplicando un algoritmo que tiene en cuenta la coincidencia de tema, la técnica y las dimensiones del cuadro. El sistema debe utilizar información de subasta de todo el mundo que ahora la galería recibe en un CD de manera mensual. Para una obra representativa, el precio recomendado se calcula como si fuera una obra maestra y luego se aplica una corrección. Para una obra de otro tipo, se calcula utilizando el área del cuadro y un coeficiente de moda para el artista. Si no hay coeficiente de moda para un artista, el agente tiene por norma no comprar el cuadro. El coeficiente de moda varia de mes a mes. Si el cuadro finalmente se compra, se introducen datos adicionales. En cuanto a la venta de cuadros por parte de la galería, el sistema simplemente registra la fecha de venta, el nombre y dirección del comprador p y el p precio de venta real. El sistema también deberá detectar nuevas tendencias en el mercado de arte tan pronto como sea posible. La idea es detectar secuencias de compras por valores mayores que los esperados por la obra de un artista determinado, de tal manera que tu cliente pueda comprar cuadros de ese artista antes de que otros detecten la tendencia. Con el objetivo de detectar cuándo el precio de venta es mayor que el precio esperado cuando tu cliente compró el cuadro, se debe mantener un registro de todas las compras y todas las ventas. 7

Se quieren generar tres informes: compras y ventas realizadas durante un año, y artistas de moda.…


Ejemplo

Comprar p una Obra maestra Comprar una O Obra representativa

Vendedor Comprar una Obra de Otro Tipo Vender un cuadro Producir Informe compras

Agente GalerĂ­a

Comprador

Producir Informe ventas Producir Informe tendencias Actualizar Coeficiente de moda

8


Ejemplo Caso de uso: comprar una obra maestra Actores primarios: Agente Galería, vendedor Interesados y Objetivos: • Agente: quiere obtener una recomendación lo más acertada posible del precio máximo á i recomendado d d d de manera rápida. á id • Vendedor: quiere vender el cuadro a un precio razonable de manera rápida. Precondiciones: El agente ha entrado en la aplicación. Garantía de éxito (post-condiciones): Se registra la venta. Escenario Principal de Éxito: 1 El agente 1. t iintroduce t d lla d descripción i ió d dell cuadro. d 2. El sistema busca el cuadro más parecido del mismo autor. 3. El sistema presenta el precio recomendado. 4. El age agente e hace ace u una ap propuesta opues a po por debajo de del p precio ec o recomendado, eco e dado, y e el vendedor e dedo acepta la oferta. 5. El agente introduce información de la venta. Extensiones: 2 N 2a. No h hay ningún i ú cuadro d parecido id d dell mismo i autor, t asíí que ell sistema i t no presenta t una recomendación. 9 4a. El vendedor no acepta la oferta y la venta no se produce.


Ejemplo Terminal Punto de Venta

TPV Procesar Venta cajero Procesar Devoluciones «actor» Analizador de A ti id d de Actividad d Ventas

Administrador del sistema

«actor»

Analizar Actividad

Calculador de Impuestos p

... Gestionar Seguridad Gestionar Usuarios

Servicio de Autorización de Pagos

«actor» Sistema de contabilidad

10


Diagramas de Caso de Uso Relaciones

z Relaciones R l i entre t d dos casos d de uso {Generalización z “Es “E un caso particular ti l d de …”” z Herencia de clases en POO (overriding) z También se puede tener esta relación entre dos actores

{Inclusión (include) z “Implica hacer también …”

{Extensión (extend) z “Se insertará en …” un determinado punto (llamado “punto de extensión”) dependiendo de una condición condición. z Si un caso de uso depende de varios casos de uso mediante “extend” tendrá un punto de extensión para cada uno. 11


Ejemplo Gesti贸n de Pacientes Cancel Appointment

Scheduler

Make Appointment <<include>> <<include>>

Patient

Check Patient Record

Request Medication <<extend>>

Defer Payment

Doctor

Pay Bill Extensions Points More Treatment

Clerk Bill Insurance

12


Ejemplo Gesti贸n de Proyectos

13


Casos de Uso z Son útiles en tres áreas: { Especificación de requisitos { Comunicación con los clientes z Su simplicidad los convierte en excelentes medios de comunicación

{ Generación de casos de prueba z A partir de los escenarios de un Caso de Uso 14


Indice z Diagramas de Casos de Uso.

z Diagramas de Estructura.

z z z z z

{Clases y Objetos. {Componentes. {Estructuras Compuestas. {Despliegue. {Paquetes. q Diagramas de Comportamiento. OCL. Herramientas. Ejemplos. BibliografĂ­a.

15


Clases y Objetos z Los diagramas de Clases y de Objetos son los principales modos de representar los aspectos estructurales en UML. z Diagramas de clases. Estructura del sistema. { Clases. Clases z Atributos: Tipos, valores iniciales. z Operaciones: visibilidad.

{ Relaciones con otras clases: Asociaciones

z Diagramas de objetos. Estructura del sistema en ti tiempo de d ejecuci贸n. j i贸 { Objetos. Instancias de una Clase. z Atributos (valores actuales).

{ Links. Relaciones entre objetos, instancias de asociaciones. 16


Clases y Objetos Elemento

Diagrama ag a a de clases Carbono

Diagrama de Di d objetos

:Hidrógeno

Hidrógeno

:Hidrógeno

:Hidrógeno

:Carbono

:Carbono

:Hidrógeno

:Hidrógeno

:Hidrógeno

17


Clases y Objetos Nombre de la clase visibilidad

Circulo -radio: double -centrox: t double d bl -centroy: double +Area(): double +PerĂ­metro(): double

Nombre d l objeto del bj

En cursiva si es abstracta

unCirculo: Circulo radio = 3.4 centrox = 2.0 20 centroy = 2.0

At ib t Atributos Operaciones

Clase del objeto Valores de los atributos

18


Clases Atributos z Notación p para atributos: [visibilidad] [/] nombre [: tipo] [multiplicidad] [= valor] [{ propiedad }] z Visibilidad (opcional): { { { {

Pública: + Privada: Protegida: # Paquete: ~

z “/” indica que el atributo es derivado. z La multiplicidad va entre [ ] y por defecto vale 1. z Propiedades válidas: {readOnly}, {readOnly} {union}, {union} {subsets <property <propertyname>}, {redefines <property-name>}, {ordered}, {bag}, {seq}, {sequence}, y {composite}. z Un atributo subrayado es estático. 19


Clases Ejemplo atributos ClaseA name: String shape: Rectangle + size: Integer [0..1] / area: Integer {readOnly} h i ht IInteger height: t =5 width: Integer # pos: Point

ClaseB id: {redefines name} shape: Square

20


Clases Métodos z Notación N t ió para métodos: ét d [[visibilidad]] nombre ( [lista-parametros] [ p ] ) : [{propiedad}] [{p p }] z Visibilidad (opcional). z nombre del método z lista de parámetros formales, separados por coma:

direccion nombre : tipo [multiplicidad] = valor [{propiedad}] z Los métodos estáticos se subrayan. z Ejemplos: display () -hide () +createWindow (location: Coordinates Coordinates, container: Container [0 [0..1]): 1]): Window +toString (): String 21


Asociaciones Composición z Un Círculo contiene un Punto z Se representa con una Composición

Círculo

Punto

z Relación del tipo todo/parte { El todo es el Círculo { La parte es el Punto

z Es una relación fuerte { Si el Círculo es destruido o copiado, también lo es el Punto { La cardinalidad en la parte del todo es 0..1 o 1. 22


Asociaciones Navegación, Roles, Cardinalidad

z Las asociaciones pueden tener etiquetas: { Nombre { Roles en la relación { Multiplicidad (cardinalidad) Círculo

centro

z Ejemplos Ej l de d cardinalidad: di lid d 1..* 0..* 0.. 0..1 1,2,4 3

navegación

mínimo 1, no hay máximo mínimo 0, no hay máximo mínimo 0, máximo 1 uno, dos o cuatro exactamente tres

1

Punto

zN zNavegación: ió Unidireccional Bidireccional No especificado. No navegable (x) 23


Asociaciones Ejemplos de Navegaci贸n y Cardinalidad

24


Ejercicio z Representa mediante un diagrama de clases la siguiente especificación: { Una aplicación necesita almacenar información sobre empresas, sus empleados y sus clientes. { Ambos se caracterizan por su nombre y edad. { Los L empleados l d tienen ti un sueldo ld bruto, b t los l empleados l d que son directivos tienen una categoría, así como un conjunto de empleados p subordinados. { De los clientes además se necesita conocer su teléfono de contacto. { La L aplicación li ió necesita it mostrar t l los d t datos d empleados de l d y clientes. 25


Ejercicio Persona - nombre - edad + mostrar()

Cliente

Empleado subordinados

0..*

- sueldo_bruto

- telefono_de_contacto nombre_empresa

+ mostrar t () + calcular_salario_neto()

1..* empleados

+mostrar()

0..* clientes 1..*

Directivo 0..*

- categoria + mostrar ()

1

Empresa - nombre b 26


Asociaciones: Agregaci贸n zCuando la relaci贸n todo/parte no es tan g g fuerte,, se utiliza Agregaci贸n

Ventana

susFiguras 0 * 0..

Figura

La ventana contiene figuras, pero cada una puede existir sin la otra 27


Asociaciones y Dependencia. Dependencia z Existen relaciones de conocimiento entre clases que no implican una relaci贸n todo/parte Cliente

cuentas

titular

0 * 0..

1 * 1..

Cuenta

z Dependencia: relaci贸n muy d茅bil. Ventana

susFiguras

Figura

0..* Draw(ContextoDibujo)

suContexto ContextoDibujo

Dependencia

28


Clases Asociativas zAsociaci贸n con atributos propios. Nombre asociaci贸n

Empleado

casado con >

1

1

Persona

testigos 2

Matrimonio fecha

Clase Asociativa

0..*

29


Clases y Objetos j Estilo

z Los atributos no deben ser objetos (utilizar relaciones en tal caso). z En los diagramas de clases no suelen aparecer (son detalles de implementación y no de diseño): {Constructores {Métodos de acceso (“get/set”) ( get/set ) {Métodos de gestión de elementos de una asociación o agregación (por ejemplo, “add/remove”) 30


Ejemplo Cliente nombre dirección

Orden 1

0..*

Pago

1..*

1

monto

fecha estado calcImpuesto calcTotal calcPesoTotal

1

línea 1..* Crédito fecha número tipo autorizado

Efectivo moneda

Cheque

Item

DetalleOrden

nombre identifBanco

cantidad tipoImpuesto

autorizado

calcSubtotal calcPeso

0 * 0..

1

peso descripción precioPorCantidad obtenerPeso 31


Ejercicio z Especificar un diagrama de clases que describa redes de ordenadores. z Los elementos que se pueden incluir en la red son: { Servidor, S id PC, PC Impresora. I { Hub, Cable de red.

z Los PCs pueden conectarse con un único Hub, Hub los servidores con uno o varios. z Los Servidores y PCs pueden generar mensajes, con una cierta longitud. z Los Hubs tienen un número de puertos, algunos de los cuales puede usarse para conectar con otros Hubs. Hubs Tienen cierta probabilidad de “perder” mensajes. z Las impresoras pueden averiarse, con cierta probabilidad, durante cierto tiempo. 32


Ejercicio Posible Solución. Ejercicio. Solución

“Los PCs pueden conectarse con un único Hub, los servidores con uno o varios” 33 Podemos modelarlo como una restricción OCL, o bien añadir asociaciones desde Servidor y PC


Más sobre asociaciones Asociaciones n-arias

zAsociaciones entre más de dos clases: Año temporada d

E i Equipo

equipo

pichichi

J Jugador d

34


Más sobre asociaciones Adornos en asociaciones y fin de asociación.

zA Asociaciones i i d derivadas i d ((con un “/” d delante l t d dell nombre). b ) z Propiedades, cerca del nombre de la asociación. z Los finales de la asociación pueden adornarse con: { Multiplicidad. { Nombre (rol). ( ) { Propiedades: z {subsets <nombre-prop>}. z {redefine <nombre-fin-asoc>} <nombre-fin-asoc>}. z {union}. z {ordered} (un conjunto ordenado). z {bag} (conjunto con repetición) repetición). z {sequence} o {seq} (bag ordenado).

35


M谩s sobre asociaciones Adornos en asociaciones y fin de asociaci贸n: Ejemplos

A

a

b

0..1

*

B

{ordered}

C

d 1

0..1

D

{subsets b} z Para un objeto de tipo C, la colecci贸n d es un subconjunto de la colecci贸n b. 36


Más sobre asociaciones Asociaciones Cualificadas z Un cualificador declara una partición del conjunto de instancias asociadas con respecto a la instancia cualificada.

Banco

Tablero Ajedrez

NumCuenta

fila: Fila col: Colum

* 0..1

Persona

1 1

Casilla

z Dado un objeto cualificado, el número de objetos al otro lado de la asociación viene i d dado d por lla multiplicidad lti li id d d declarada. l d { 0..1 : el valor del cualificador es único. { 0..* : el conjunto de instancas asociadas se particiona en subconjuntos. z Similar a un array asociativo, asociativo map o tabla hash hash. 37


Pre y Post PrePost- Condiciones, Condiciones Notas pre-condici贸n

body-condition

post-condici贸n 38


Interfaces Clase

<<interface>> MiInterfaz

Clase MiInterfaz

mĂŠtodos Clase

MiInterfaz

39


Plantillas

Una clase an贸nima ligada: FArray<T -> Point>

{T -> Point {K -> 10

40


Ejercicio Examen Junio 2008. Realiza el diseño de una aplicación para la gestión de pedidos. La aplicación deberá manejar clientes (se guarda su nombre, dirección, teléfono y e-mail), que pueden realizar p pedidos de p productos,, de los cuales se anota la cantidad en stock. Un cliente puede tener una o varias cuentas para el pago de los pedidos. Cada cuenta está asociada a una tarjeta de crédito, y tiene una cierta cantidad disponible de dinero, que el cliente debe aumentar periódicamente para poder realizar nuevos pedidos. Un cliente puede empezar a realizar un pedido sólo si tiene alguna cuenta con dinero disponible. Al realizar un pedido, un cliente puede agruparlos en pedidos simples o compuestos. Los pedidos simples están asociados a una sola cuenta de pago y (por restricciones en la distribución) contienen un máximo de 20 unidades del mismo o distinto tipo de producto. A su vez, un pedido compuesto contiene dos o más pedidos, que pueden ser simples o compuestos. Como es de esperar, el sistema debe garantizar que todos los pedidos simples que componen un pedido compuesto se paguen con cuentas del mismo cliente. cliente Además, Además sólo es posible realizar peticiones de productos en stock. Existe una clase (de la cual debe haber una única instancia en la aplicación) responsable p del cobro, orden de distribución y confirmación de los p pedidos. El cobro de los pedidos se hace una vez al día, y el proceso consiste en comprobar todos los pedidos pendientes de cobro, y cobrarlos de la cuenta de pago correspondiente. Si una cuenta no tiene suficiente dinero, el pedido se rechaza (si es p parte de un p pedido compuesto, p , se rechaza el p pedido entero). ) Una vez q que el pedido está listo para servirse, se ordena su distribución, y una vez entregado, 41 pasa a estar confirmado. Se pide un diagrama de clases de diseño.


Soluci贸n

42


Solucion (ii) z Nota: pedidos_simples es una asociación derivada. El atributo total de Pedido es derivado derivado. z Habría que incluir las siguientes restricciones OCL: Context C t t realizar_pedido: li did pre: self.cuentas->exists(c | c.disponible > 0) Context Pedido Compuesto: inv: self.pedidos_simples->cuenta->cliente->asSet()->size() = 1 Context Pedido: inv: self.t_productos.num->sum() <= 20 Context añadir_pedido(p: añadir pedido(p: Producto Producto, num: int): pre: p.stock>=num

z Se usa el composite y el singleton (para la clase “Controlador Controlador Pedidos”, aunque esto no queda reflejado en el diseño a este nivel 43 de abstracción).


Ejercicio: Biblioteca z Una biblioteca tiene copias de libros libros. Estos últimos se caracterizan por su nombre, tipo (novela, teatro, poesía, ensayo), editorial, año y autor. z Los autores se caracterizan por su nombre, nacionalidad y fecha de nacimiento. z Cada copia tiene un identificador identificador, y puede estar en la biblioteca, prestada, con retraso o en reparación. z Los lectores pueden tener un máximo de 3 libros en préstamo. préstamo z Cada libro se presta un máximo de 30 días, por cada día de retraso, se impone p una “multa” de dos días sin posibilidad de coger un nuevo libro. z Realiza un diagrama de clases y añade los métodos necesarios para realizar el prestamo y devolución de libros.


Libro Copia - id : Identifier ejemplar - estado: estadoCopia 1..* 0..3 prestamos

- titulo : string libro - tipo: tipoLibro 1 - editorial: string - anyo: int i t 1..* obras

Prestamo fechas - inicio: Date - fin: Date

1 autor

Autor

0..1 lector

Lector - nSocio : Identifier - nombre: string - telefono: string - direccion: string + devolver(id: Identifier, fechaAct: Date) 1 {precondition: prestamos.notEmpty()} + prestar(id: Identifier, fechaAct: Date) {precondition: multa==0} - multar(dias : int)

- nombre: b string ti - nacionalidad: string - fechaNacimiento: Date <<enumeration>> tipoLibro novela teatro poesia i ensayo

multa 0..1

Multa - fInicio: Date - fFin: Date

<<enumeration>> estadoCopia prestado retraso biblioteca reparacion


Persona - nombre - edad + mostrar()

Objetos Cliente

Empleado subordinados

- sueldo_bruto + mostrar () + calcular_salario_neto() l l l i t () empleados

Directivo - categoria + mostrar ()

e2 : Empleado

-

nombre=“Luis” edad=35 d d 35 sueldo_bruto=36000 categoria=“C1”

+mostrar() clientes

Empresa - nombre

e1 : Empleado

- nombre=“María” - edad edad=25 25 - sueldo_bruto=36000 empleados subordinados

d1 : Directivo

- nombre_empresa - telefono_de_contacto

- nombre=“Pedro” - edad edad=23 23 - sueldo_bruto=30000 empleados

empleados

Empresa - nombre=“HGJ”

clientes

c1 : Cliente -

nombre=“Luis” edad=35 nombre_empresa=“Macroware” telefono_de_contacto=91555666

46


Componentes z Componente C t = “Unidad “U id d Modular M d l con interfaces i t f bien definidos que es reemplazable en su entorno . entorno” z Énfasis É f i en reutilización tili ió y encapsulamiento. l i t z Servicios que provee y requiere (interfaces). z Componentes lógicos (componentes de negocio, de proceso) y físicos (EJB, CORBA, COM+, .NET, …) 47


Componentes Interfaces que ofrece

Interfaces que requiere

48


Componentes Vi t d Vista de caja j bl blanca

49


Estructuras Compuestas z Composición C i ió de d elementos l t ( l ifi d (clasificadores o colaboraciones) z Instancias en tiempo de ejecución que colaboran a través de enlaces para alcanzar objetivos comunes. z Colaboraciones: a través de roles. z Se añade a las clases estructura internas y puertos. 50


Estructuras Compuestas Estructura interna de una clase. clase

Estructura interna de una clase. Multiplicidades.

51


Estructuras Compuestas Alternativa a relaciones de composici贸n A li ti Application

Window

2

Button

Application 2

Window

Button 52


Estructuras Compuestas Estructura interna de una clase. Constructor.

53


Estructuras Compuestas p Colaboraci贸n. E t t Estructura iinterna t d de una colaboraci贸n. l b i贸

54


Estructuras Compuestas p Colaboraci贸n. O Ocurrencia i de d una colaboraci贸n l b i贸 en otra. t Binding. Bi di

55


Estructuras Compuestas p Colaboraci贸n. Template de colaboraci贸n.

56


Despliegue z Definen D fi lla arquitectura it t d de ejecuci贸n j i贸 d de un sistema. i t z Representa la asignaci贸n de artefactos software a nodos nodos. z Nodos = elementos hardware, o entornos de ejecuci贸n software. z Artefactos = elementos concretos (p.e.: ficheros) que son el resultado del proceso de desarrollo. 57


Despliegue p g Relaciones entre artefactos.

“Manifestación” de elementos a través de artefactos 58


Despliegue p g Ejemplo.

59


Paquetes z Un paquete es un contenedor que agrupa elementos relacionados. z Los diagramas de paquetes muestran la estructura de alto nivel de la aplicaci贸n. aplicaci贸n

60


Paquetes q Ejemplo.

61


Indice z Diagramas de Casos de Uso Uso. z Diagramas de Estructura.

zDiagramas de Comportamiento Comportamiento. { Diagramas de Interacción. z z z z

Diagramas de Comunicación. Diagramas de Secuencia. Diagramas de visión de conjunto de la interacción. Diagramas de tiempo.

{ Diagramas de Estados. { Diagramas de Actividad.

z z z z

OCL Herramientas. Ejemplos Ejemplos. Bibliografía.

62


Diagramas de Interacción z El comportamiento t i t se representa t a través t é de d colaboraciones: { Colección de objetos: z Instancias z Roles

{ Especifica cómo los objetos y las asociaciones cooperan z En un contexto dado z Con un propósito específico

63


Diagramas de Interacción z El patrón tó d de mensajes j d t dentro colaboración es una interacción:

d de

una

{Mensajes: señales, invocaciones, interacciones implícitas a través de condiciones y eventos temporales. {Especifica secuencia de mensajes para cumplir el objetivo de la colaboración {Para especificar la interacción, es necesario especificar primero la colaboración {Semántica basada en trazas. 64


Diagramas de Interacción z Diagrama de Comunicación { Muestra un contexto y una interacción. interacción

z Diagrama Di d Secuencia de S i {Representación explícita de comunicaciones, eje temporal.

la

secuencia

de

{Es más apropiado para aplicaciones de Tiempo Real y escenarios complicados 65


Diagramas de Interacción z Estructura E t t d de llos participantes ti i t zDiagramas de Comunicación

z Patrones de comunicación zDiagramas de Comunicación zDiagramas de Secuencia

z Temporización p de la comunicación. zDiagramas de Secuencia zDiagramas de Tiempo.

z Estructuración de las interacciones zDiagrama g de visión de conjunto j de la interacción. 66


Diagramas de Comunicación z Representa R t los l objetos bj t ( l (roles o instancias) i t i ) necesarios para una interacción y sus relaciones. z Puede también representar la secuencia de mensajes { Especifica el orden relativo mediante números

z Similar a un diagrama de objetos, muestra el contexto necesario para una colaboración. 67


Diagramas de Comunicaci贸n participantes p p :Window Wi d

/ Observer Ob : SlidingBarIcon Slidi B I

roles l relaciones

/Subject :CallQueue

68


Diagramas de Comunicaci贸n

:Window Wi d

/ Observer Ob : SlidingBarIcon Slidi B I

restricci贸n

/Subject :CallQueue

{ {Observer.reading=length(Subject.queue) g g ( j q ) and Observer.range = (0..Subject.capacity)} 69


Diagramas de Comunicaci贸n Llamadas anidadas: realizarPago(cantidad)

:Registro

1: realizarPago(cantidad)

:Venta

1.1: crear(cantidad)

:Pago

Iteraciones: Ejectuar()

:Simulador

1*[i:=1..N]: num:= nextInt()

:Random

70


Diagramas g de Comunicación Multiobjetos.

z R Representan t conjuntos j t d instancias de i t i en ell extremo “muchos” de una relación 1:N o M:N z Una operación sobre cada instancia requiere d mensajes: dos j {Iteración para obtener referencias a las instancias individuales {Mensaje a cada instancia, usando la referencia temporal 71


Diagramas g de Comunicaci贸n Multiobjetos. servers

:Client

:Server :Server

1:aServer:=find(specs)

aServer <<local>>

:Server 2:process

72


Diagramas g de Comunicaci贸n Condiciones. e:ClaseE 2 msg6() 2: 6() msg1()

a:ClaseA

1a [test]: msg2()

1b b [not [ ot test]: test] msg4() sg ()

d:ClaseD

1b 1 msg5() 1b.1: 5()

b:ClaseB

1a.1: a msg3() sg3()

c:ClaseC

73


Ejercicio: Biblioteca z Una biblioteca tiene copias de libros libros. Estos últimos se caracterizan por su nombre, tipo (novela, teatro, poesía, ensayo), editorial, año y autor. z Los autores se caracterizan por su nombre, nacionalidad y fecha de nacimiento. z Cada copia tiene un identificador identificador, y puede estar en la biblioteca, prestada, reservada, con retraso o en reparación. z Los lectores pueden tener un máximo de 3 libros en préstamo. z Cada libro se p presta un máximo de 30 días, p por cada día de retraso, se impone una “multa” de dos días sin posibilidad de coger un libro. z Realiza el diagrama de colaboración para el método devolver()


Soluci贸n 1.3 [retraso>0]: multar(retraso) 1: devolver(id, ( , fecha))

:Lector

prestamos

1.1: dev:=remove(id)

:Copia

1.3.1a [multa=0]: multa:= create(fecha,retraso)

multa:Multa lt M lt {new} multa:Multa

1.2: retraso:=getRetraso(fecha)

1.3.1b [multa<>0]: anyade(fecha,retraso)

dev:Copia


Soluci贸n 1.3 [retraso>0]: multar(retraso) 1: devolver(id, ( , fecha))

:Lector

prestamos

1.1: fec:=remove(id)

:Copia

1.3.1a [multa=0]: multa:= create(fecha,retraso)

multa:Multa lt M lt {new} multa:Multa

fechas

1.2: retraso:=getRetraso(fecha)

fec:Fecha

1.3.1b [multa<>0]: anyade(fecha,retraso)

76


Diagramas g de Comunicación Etiquetas de las flechas. predecesor d orden-secuencial d i l valor-retorno l t := nombre-mensaje lista-argumentos

z Predecesor { Lista separada por “,” terminada en “/” { El mensaje j no está tá habilitado h bilit d h hasta t que no ocurran llos mensajes en la lista

z Orden en la secuencia { { { {

Lista separada por “.”, terminada en “:” C d té Cada término i representa t nivel i ld de anidamiento id i t procedural d l Iteración: *[cláusula interación] Bifurcación: [condición] 77


Diagramas g de Comunicaci贸n Etiquetas de las flechas.

zEjemplos: {2: display(x,y) display(x y) {1.3.1: p:=find(specs) {4 [x<0]: invert(x, color) {A3,B4/ C3.1:update() {1.1 *[i:=1..n]: lecturer()

78


Diagramas g de Comunicaci贸n Ejemplo. redisplay()

:Controller

:Window

1:displayPositions(window) 1.1*[i:=1..n]: drawSegment(i) wire

wire:Wire << self >>

i-1 1 1 1 r0:= 1.1.1a: 0 position() i i ()

left:Bead

i

1.1.3.1:add(self) contents {new}

<< local >>

1.1.2: create(r0,r1) 1.1.3: display(window)

line

:Line Li {new} { }

1 1 1b r1:= 1.1.1b: 1 position() i i ()

right:Bead g 79


Diagramas g de Comunicaci贸n Objetos Activos.

zPoseen P su propio i hilo hil de d control t l zUn objeto pasivo s贸lo almacena datos { Puede enviar mensajes mientras procesa un pedido (mensaje) que haya recibido

zLos L objetos bj t activos ti se representan t frecuentemente con componentes internas 80


Diagramas g de Comunicaci贸n Objetos Activos. Ejemplo. :FactoryManager

:FactoryScheduler

job

currentJob:TransferJob

A2,B2/2:completed(job)

1:start(job)

:FactoryJobMgr

<<local>> job

A2:completed

B2:completed 1/B1:start(job)

:Robot

1/A1:start(job)

:Oven

81


Diagramas g de Comunicación Objetos Activos. Ejemplo.

Tipos de Flujos de Control Llamada a procedimiento u otra forma de llamada con anidamiento de control. La secuencia anidada termina antes de que siga la operación que invocó invocó. Puede usarse para procesos concurrentes cuando el mensaje es síncrono. Comunicación asincróna, sin anidamiento de control. El objeto que envía no se detiene a esperar respuesta. Retorno de una llamada a procedimiento. Esta flecha puede omitirse si queda claro por el fin de la activación. 82


Diagramas de Secuencia z R Representa t conjunto j t de d mensajes j entre t roles l (o instancias) en una interacci贸n z Dos dimensiones: {Tiempo (generalmente vertical); puede ser una escala si el sistema es de tiempo real {Diferentes {Dif t instancias i t i ((generalmente l t h horizontal); i t l) ell orden relativo no tiene importancia

z Se muestra la existencia y duraci贸n de las instancias, pero no sus relaciones 83


Diagramas de Secuencia z Traza: secuencia de ocurrencias de eventos <e1 e2 ...en> z La semántica de una interacción es un par de conjuntos de trazas (válidas e inválidas) [P, I]. zP Pueden d existir i ti trazas t no incluidas i l id en los l d dos conjuntos j t anteriores. z Equivalencia de interacciones, si sus conjuntos de trazas son iguales. z Una interacción se puede especializar: se añaden más j trazas al conjunto. 84


Diagramas de Secuencia :caller

:exchange

:receiver

a: lift receiver b: dial tone

Objetos Focos de Control

c: dial di l digit di it ... d: route ringing tone

Mensajes

phone rings answer phone

stop tone

stop ringing 85


Diagramas de Secuencia sd Authenticate User ac: Authentication C Controller ll

LoginPage: Servlet

ds: UserData S i Service

CurrentUser: UserData

validateCredentials(“Dan”, “b4_23”) restoreUserData(“Dan”) create(“Dan”,”Administrator”) currentUser currentUser

86


Diagramas de Secuencia guarda

operador

marco preferente :Distribuidor Di t ib id

:Pedido

usual :Distribuidor Di t ib id

entregar() loop alt

[for each producto] [value > 10000] entregar()

[else]

entregar()

procedure entregar() foreach producto: if p producto.value>10000 preferente.entregar() else usual.entregar() end if end for end procedure


Diagramas de Secuencia

Gate (formal), con nombre out Unlock out_Unlock 88


Diagramas de Secuencia Referencias (Ocurrencias de Interacciones)

z Copian el contenido de la interacci贸n referida. z Substituci贸n de par谩metros y conexi贸n de las puertas (gates) formales y actuales. actuales 89


Diagramas g de Secuencia Operadores sobre interacciones. z Fragmentos combinados, combinados operadores (i): { Alternativa (alt). z Elección (mediante una guarda) de una interacción. interacción

{ Aserción (assert). z La a secue secuencia c a espec especificada cada po por e el ope operador ado es la aú única ca válida. á da

{ Opción (opt). z Equivalente a un operador alt con un solo fragmento.

{ Ruptura (break). z El operando se ejecuta en lugar del resto de la interacción englobada en el fragmento “padre”. padre .

{ Paralelo (par). z Mezcla de las trazas de los operandos (cualquier entrelazado es válido mientras preserve el orden de los eventos de cada operando). operando) 90


Diagramas g de Secuencia Operadores sobre interacciones. { Secuenciación débil (seq). (seq) z Define un conjunto de trazas que cumple: z 1. Se mantiene el orden de eventos de los operandos z 2. 2 Eventos de otras líneas de vida de otros operandos pueden venir en cualquier orden. z 3. Eventos de la misma línea de vida de otros operandos se ordenan de tal manera que cualquier evento del primer operando va antes que el del segundo.

{ Secuenciación estricta (strict). z Secuenciación estricta en el orden de los eventos de los operandos.

{ Negativa (neg). z Define trazas inválidas.

{ Región crítica (critical). z Los eventos del operando no pueden mezclarse con ningún otro. 91


Diagramas g de Secuencia Operadores sobre interacciones. Alternativa.

92


Diagramas g de Secuencia Operadores sobre interacciones. Alternativa.

93


Diagramas g de Secuencia Operadores sobre interacciones. Opci贸n.

94


Diagramas g de Secuencia Operadores sobre interacciones. Bucle.

95


Diagramas g de Secuencia Operadores sobre interacciones. Regi贸n Cr铆tica.

96


Diagramas de Secuencia Ejemplo

T = now

Sd Alarm Activation

:SystemHandler assert

:CellHandler

:Sensor

:Alarm

:CellConfigurationInformation

Activate() ReadConfiguration() Configuration Information Returned

seq

SelfTest() ACK Activate() SelfTest()

par

opt

{t..t+5}

opt

ACK

ACK

Test() Validate 97


Diagramas g de Secuencia Retorno de Valores

98


Diagramas g de Secuencia Tiempo z Restricciones temporales (duraci贸n)

z Duraci贸n de mensajes y se帽ales (duration) z Intervalos de tiempo ({t..t+3}) y restricciones temporales. z Observaciones temporales (tiempo actual, now) 99


Diagramas g de Secuencia Descomposición en partes

La estructura interna de ACS ACSystem tiene i una interacción “AC_UserAccess” que se invoca en este fragmento.

100


Diagramas g de Secuencia Descomposici贸n en partes

101


Diagramas g de Secuencia co-regi贸n

Coregi贸n: s[u] recibe los mensajes en cualquier orden.

102


Diagramas g de Secuencia Invariantes z Invariantes. Invariantes

En este momento la traza <v w q> no es v谩lida

z Se comprueban justo antes de la ocurrencia del pr贸ximo evento t (puede ( d haber h b mensajes j no mostrados t d en ell 103 diagrama).


Diagramas g de Secuencia Binding

104


Ejercicio Especificar f el diagrama de secuencia de la operación “crearLaberinto” public class JuegoLaberinto { public Laberinto crearLaberinto () { Laberinto lab = new Laberinto(); Habitacion h1 = new Habitacion(); Habitacion h2 = new Habitacion(); Puerta puerta = new Puerta(h1, h2); lab.añadeHabitacion(h1); lab.añadeHabitacion(h2); h1.añadePuerta(puerta); return lab; } }


Soluci坦n :JuegoLaberinto crearLaberinto()

l bL b i t lab:Laberinto h1:Habitacion h2:Habitacion create(h1,h2)

puerta:Puerta a単adeHabitacion(h1) a単adeHabitacion(h2) a単adePuerta(puerta)


Ejercicio Especificar el diagrama de secuencia de la operación “crearLaberinto” public class JuegoLaberinto { private Laberinto lab; private boolean conVentana; public JuegoLaberinto() { lab = new Laberinto(); conVentana = true; } public void crearLaberinto () { Habitacion h; for (int i=0; i<10; i++) { h = new Habitacion(); if (conVentana == true) h.añadeVentana(new Ventana()); lab.añadeHabitacion(h); } }


Solución :JuegoLaberinto

lab:Laberinto

crearLaberinto() loop

[for i = 1 to 10]

h:Habitacion opt

[conVentana==true]

v:Ventana añadeVentana(v)

añadeHabitacion(h)


Ejercicio Especificar el diagrama de secuencia de la operación “realizarJugada” definida en la clase Jugador, para el juego del parchís Jugador

*

2

- casillaActual: ill A t l iintt + realizarJugada(): void + casillaActual(): int

Dado + tirar(): int

* 1

Tablero + mover(int actual, int unidades): boolean


Soluci贸n d1:Dado

:Jugador

d2:Dado

:Tablero

realizarJugada() par

tirar() n1 tirar() n2

ca:=casillaActual()

mover(ca,n1+n2) movRealizado


Ejercicio Identificar las clases relevantes y realizar el diagrama de secuencia para el siguiente caso de uso, que corresponde a la realización de una llamada desde un teléfono móvil. z El usuario pulsa los dígitos del número de teléfono z Para cada dígito g { la pantalla se actualiza para añadir el dígito marcado { se emite un tono por el receptor

z z z z z

El usuario pulsa el botón “Enviar” Enviar El indicador “en uso” se ilumina en pantalla El móvil establece conexión con la red L dí Los dígitos it acumulados l d se mandan d a lla red d Se establece la conexión con el número marcado


Soluci贸n :Button

loop

:Dialer

:Display

:Speaker

send:Button

:CellularRadio

[for i = 1 to 9] digit(code)

displayDigit (code)

emitTone (code)

send() connect(pno) inUse()

驴Diagrama de colaboraci贸n equivalente?


Soluci贸n


Visión de Conjunto de la Interacción z D Define fi las l interacciones i t i a ttravés é d de una variante de los diagramas de actividad. z Visión general del flujo de control. z Usa elementos de los diagramas de actividad para especificar: { Alternativas entre interacciones. { Paralelismo de interacciones. { Bucles de interacciones. 114


Visi贸n de Conjunto de la Interacci贸n

115


Tiempo zMuestran M t i t interacciones i d d donde importante razonar sobre el tiempo.

es

zRepresenta condiciones que cambian en una o varias lĂ­neas de vida, en un eje lineal de tiempo. tiempo zCambios en el estado de un objeto con el tiempo en respuesta a eventos. 116


Tiempo Diagrama temporal correspondiente p a la interacci贸n

117


Tiempo

118


Tiempo

119


Máquinas de Estados z “Statecharts” “St t h t ” [Harel] [H l] z Representan el comportamiento de entidades ( p p.e. e instancias de clases). z Especifican reacción ante eventos z Describen posibles secuencias de estados y acciones por las que pueden pasar las entidades. z De comportamiento vs. de protocolo. 120


Mรกquinas de Estados Comienzo

Fin

Estados

start

digit(n)

Partial Dial

digit(n)

Transiciones 121


Máquinas de Estados z Un U ttransición i ió puede d ttener: { Evento. z Eventos temporales: tm(n)

{ Acción. { pre-condiciones (guardas) y post- condiciones.

A1

[guard] evt/action [post-]

A2

{Símbolos especiales para el envío y recepción de señales (normalmente usados en diagramas de actividad). ) 122


Mรกquinas de Estados z Un estado tiene: { Nombre { Transiciones internas: lista de acciones ejecutadas en ese estado (entry/exit/do) ( y )

z Ejemplo: j p Typing Password

Nombre

entry/set t / t echo h invisible i i ibl exit/set echo normal character/handle character help/display help

Transiciones internas 123


Mรกquinas de Estados Start entry/start dial tone exit/stop dial tone

digit(n)

Estado compuesto:

Partial Dial entry/number.append(n)

digit(n)

Dialing Start entry/start y dial tone exit/stop dial tone

digit(n)

Partial Dial

[number.isValid()]

entry/number.append(n) y pp ( )

digit(n)

124


Ejercicio: Biblioteca z Una biblioteca tiene copias de libros libros. Estos últimos se caracterizan por su nombre, tipo (novela, teatro, poesía, ensayo), editorial, año y autor. z Los autores se caracterizan por su nombre, nacionalidad y fecha de nacimiento. z Cada copia tiene un identificador identificador, y puede estar en la biblioteca, prestada, reservada, con retraso o en reparación. z Los lectores pueden tener un máximo de 3 libros en préstamo. z Cada libro se p presta un máximo de 30 días, p por cada día de retraso, se impone una “multa” de dos días sin posibilidad de coger un libro. z Realiza el diagrama de estados de la clase “copia” copia .


Solucion

en reparacion reparado()

reparar()

Con Retraso

reservar(id) / usrRes = id

devolver() [getDate()>fp+30]

Con Retraso y reser ado reservado

devolver()

[getDate()>fp+30]

prestar(id,fecha)/ reservar(id) / en prestado usrRes = id biblioteca fp=fecha devolver() prestar(id, fecha) [usrRes==id]/ fp=fecha t (2 days) tm(2 d )

reservado devolver() en reserva


Solucion: Estados Jerรกrquicos

en reparacion reparado()

reservar(id) / usrRes = id

Con Retraso

reparar()

[getDate()>fp+30]

prestar(id,fecha)/ en prestado biblioteca fp=fecha devolver() t (2 days) tm(2 d )

Con Retraso y reser ado reservado

[getDate()>fp+30]

reservar(id) / usrRes = id prestar(id, fecha) [usrRes==id]/ fp=fecha

reservado devolver() en reserva

127


Mรกquinas q de Estados Componentes Ortogonales

Incomplete Lab1 Term Project Final Test

lab done

project done

Lab2 Passed

pass

fail

Failed

128


Mรกquinas q de Estados

Componentes Ortogonales: Utilidad

z Modelo de un sistema formado por un proceso en red sin componentes ortogonales. ack

Idle

arr.

Message

arr

transmit

time out

Sending arr

129


Mรกquinas q de Estados

Componentes Ortogonales: Utilidad ack1 Idle d 1 Idle2

arr1

arr1

arr2

arr1

Idle1 Mess2 trans2 ack2

arr1

tout2 Idle1 Send2

trans1

Mess ss1 Idle2

ack1

arr2

tout1

Send d1 Idle2 arr2

arr2 Mess1 Mess2 trans2

ack2 arr1 Mess1 Send2 arr2

trans1 tout1 tout2 arr1

Send1 Mess2

arr1 arr2 arr1

z Dos procesos

130


Mรกquinas q de Estados

Componentes Ortogonales: Utilidad ack

Idle

arr.

Message arr

P 1 Proc-1

transmit

time out

arr.

Message arr

arr P 2 Proc-2

ack Idle

Sending

transmit

time out

Sending arr

131


Mรกquinas q de Estados

Componentes Ortogonales: Utilidad P 1 Proc-1

ack/ channel = free Idle

arr

transmit Message arr

Wait [channel channel ==free ] /

arr Sending

channel = busy

time out / channel = free P 2 Proc-2

ack/ channel = free Idle

arr

transmit Message arr

arr

Wait [channel channel ==free ] /

Sending

channel = busy

time out / channel = free

132


Mรกquinas de Estados Pseudo P d - estados: t d z Fork / Join. z Initial. z Deep History / Shallow History. H* z Junction. z Choice. z Entry / Exit point. z Terminate. A1

H

A2

Setup

Cleanup B1

Fork

B2

Join

133


M谩quinas q de Estados Estado Hist贸rico

B

H t4 I

B1 t1: ev0

B12 t3: ev1

B2 t2

B11

B21

t3

t4: ev2

134


M谩quinas q de Estados Estado Hist贸rico (ii)

B

H H* t4 I

B1 t1: ev0

B12 t3: ev1

B2 t2

B11

B21

t3

t4: ev2

135


Máquinas q de Estados Estado Histórico. Ejercicio.

zModelar el comportamiento de una puede estar cadena de música. Esta p encendida (ON) o apagada (Standby). La cadena tiene reproductor de CD CD, Radio y Cinta. Se cambia de uno a otro con el botón “mode” mode . Cuando se enciende la cadena se recuerda el último estado en el que estuvo. 136


Mรกquinas q de Estados

Estado Histรณrico. Ejercicio. Soluciรณn

On Standby

power power

mode

CD

mode

H Radio

mode

Tape

M d l ell mismo Modelar i sistema i t sin i usar estado t d histรณrico. hi tรณ i

137


M谩quinas q de Estados

Estado Hist贸rico. Ejercicio. Soluci贸n (ii)

Standby lastCD

lastRadio

power power power

lastTape

On

power

power

CD

mode

mode

Radio

mode

Tape

power

138


Mรกquinas de Estados Pseudo - estados: Junction.

Pseudo - estados: Choice.

139


Mรกquinas de Estados Puntos de Entrada/Salida, Estados Sub-Mรกquina

140


Ejemplo. Reproductor CDs. I InterfazUsuario f U i ... ...

ReproductorCD p - Tpausa: Tiempo - NumActual: Entero

Li C i ListaCanciones 1

+ stop() t () + pause() + play() 1 + eject() j () + apagar() + finCancion() - buscaDisco(d: InfoDisco): ListaCanciones player 1 driver 1 ControladorCD ... + play(act: l ( t Cancion, C i desde: d d Tiempo) Ti ) + stop() : Tiempo + detectarDisco() : InfoDisco + detectarAbierto() () : Logico g + abrir() + cerrar() + apagar()

disco 1

... + obtenerCancion(Orden: Entero): Cancion + numCanciones(): Entero ....

pista 0..* 1 actual

Cancion - titulo: Cadena - duracion: Tiempo p - Artista: Cadena - Orden: Entero ...

141


Diagrama de estados para la clase ReproductorCD p [else]/ driver.stop(); NumActual=1;; actual= disco.obtenerCancion(NumActual)

Stop

Play()/ driver.play(actual, 0)

eject ()/ driver.stop(); stop()/ driver.abrir() driver.stop(); NumActual=11 NumActual actual= disco.obtenerCancion(NumActual)

Play Pause())/ Tpausa = driver.stop p()

Abierto

endOfSong()/ NumActual+=1

Play()/ driver.pllay(actual, Tp pausa)

eject ()/ driver.cerrarr ()

Cerrado e eject ()/ driver.abrir (() d

[drriver.detectarrAbierto()]

[(info=driver.detectarDisco())!=NULL]/ disco=buscaDisco(info) [not driver. detectarAbierto()] NumActual = 1; actual = disco.obtenerCancion(ordenActual) ( )

[NumActual<= disco.numCanciones()]/ actual= t l disco.obtenerCancion (NumActual) driver.play(actual,0)

Pause

apagar ()/ driver.stop(); driver.apagar()

142


Máquinas de Estados de Protocolo z Asociadas a un clasificador,, interface o p puerto. z Especifican qué operaciones del clasificador se pueden llamar en qué condiciones. condiciones z Las operaciones que no generan transición no se representan. z Má Máquinas i d estado de t d declarativas: d l ti E Especifican ifi l las transiciones legales (no su condición) para cada operación. “Contrato” para el usuario del clasificador. z Máquinas de estado Ejecutables: Especifican todos los eventos que un clasificador puede recibir y tratar, tratar con las transiciones implicadas. 143


Máquinas de Estados de Protocolo z Máquinas de estados de protocolo. Ejemplo (declarativa).

z Los estados de máquinas de protocolo no tienen asociadas acciones exit/entry/do, exit/entry/do pero pueden tener invariantes. z Las transiciones no tienen acciones, pero sí pueden tener pre- y post- condiciones.

Cleanup [inv]

[pre-cond] Evt/ [post-cond]

144


Máquinas q de Estados Generalización z Una máquina de estados es generalizable generalizable. z Se pueden añadir regiones, estados y transiciones. z Se puede cambiar el destino y estado de una transición siempre que la fuente y evento se mantenga. z En caso de herencia múltiple de máquinas de estado (por herencia de los clasificadores asociados), se crea una región ortogonal por cada máquina heredada heredada, mas una por la máquina de estados del clasificador específico. z Se anota con <<extended>> junto al nombre de la máquina máquina. z Los estados heredados se muestran con líneas punteadas o en gris. 145


M谩quinas q de Estados Generalizaci贸n: Ejemplo, cajero aut贸matico.

146


Mรกquinas q de Estados Generalizaciรณn: Ejemplo, cajero autรณmatico. Extensiรณn: E iรณ posibilidad ibilid d de d teclear el importe a retirar, y de que este se pueda rechazar.

147


Ejercicio z M Modelar d l ell comportamiento t i t reactivo ti de d un reloj l j de d pulsera. l z El valor del tiempo se debe actualizar cada segundo, incluso cuando no se muestra (p.ej. crono encendido). z El botón de la parte superior derecha enciende la luz, luz que se mantiene encendida tanto como el botón está apretado, una vez que se suelta, la luz está encendida durante 2 segundos más y se apaga. z El botón superior izquierdo alterna entre el modo de crono y de reloj. El sistema empieza en el modo reloj, reloj en el que se muestra la hora en formato HH:MM:SS. z En el modo crono, el tiempo discurrido se muestra en formato MM:SS:CC ((CC son centésimas de segundo). g ) Inicialmente el crono empieza p en 00:00:00. El botón inferior derecho se usa para activar el crono. Éste É se actualiza en incrementos de 1/100 segundos. Presionando el botón inferior derecho pausa o continua el crono (si el reloj está en modo crono). Pulsando el botón inferior izquierdo q resetea el crono a 00:00:00 si el relojj está en modo crono y el crono ha sido pausado antes. El crono continua corriendo (si está corriendo) o mantiene su valor (si está en pausa) incluso cuando el reloj está en un modo de display distinto (por ejemplo, cuando se muestra la hora). 148


Ejercicio z Interface provisto por el controlador: { getTime() : Devuelve la hora actual. { refreshTimeDisplay() : Repinta la hora en el visor con la hora interna actual. El visor no necesita limpiarse antes de llamar a esta funciรณn. Por ejemplo, si se estรก visualizando el crono, se borrarรก antes de pintar la hora. { refreshChronoDisplay() : ver refreshTimeDisplay(). { resetChrono() : Resetea el crono interno a 00:00:00. { increaseTime() : Incrementa la hora en un segundo. Los minutos y horas se modificarรกn adecuademente, (por ejemplo, si se llama a increaseTime () a las 11:59:59, la nueva hora serรก 12:00:00). { increaseChrono () : Incrementa el crono en 1/100 segundos. { setLight() : Enciende la luz del visor. { unsetLight() : Apaga la luz del visor. visor

z Eventos de botones recibidos: { { { { { { { {

topRightPressed. topRightReleased. p g topLeftPressed. topLeftReleased. bottomRightPressed. bottomRightReleased bottomRightReleased. bottomLeftPressed. bottomRightReleased.

149


Posible Soluci贸n. Soluci贸n

150


Mรกquinas de Estados Ejemplo. Herramienta de Dibujo (i)

/setup widgets setup t bi bindings di

Active

wmQuit

exitButton

151


Mรกquinas q de Estados Ejemplo. Herramienta de Dibujo (ii) Shapes

Canvas

Modes

152


Mรกquinas q de Estados Ejemplo. Herramienta de Dibujo (iii) Shapes

shapeSelected(Triangle) shapeSelected(Rectangle)

Triangle

shapeSelected(Circle)

shapeSelected(Triangle) p ( g )

Rectangle

shapeSelected(Circle) h S l t d(Ci l )

Circle

shapeSelected(Rectangle) 153


Mรกquinas q de Estados Ejemplo. Herramienta de Dibujo (iv) Modes modeSelect(Insert)/ Canvas.Insert modeSelect(Move)/ Canvas.Move

Move

modeSelect(Delete)/ Canvas.Delete

Insert

modeSelect(Insert)/ Canvas.Insert

modeSelect(Delete)/ ( )/ Canvas.Delete

Delete

modeSelect(Move)/ C Canvas.Move M 154


Mรกquinas de Estados Ejemplo Herramienta de Dibujo (v) Ejemplo.

Canvas

[Shapes in Circle]/ Inserting g d drawCircle(x,y) Ci l ( ) [Shapes in Rectangle]/ drawRectangle(x,y)

Idle onDrawingMouse1Press(x,y)

[Shapes in Triangle]/ drawTriangle(x,y)

C move

insert

delete

insert

Deleting

Moving

Idle onDrawingMouse1Press(x,y)/ movingObject=find_closest(x,y) i Obj t fi d l t( )

Idle

onDrawingMouse1Release(x,y)

onDrawingMouse1Click(x,y)/ D i M 1Cli k( )/ find_closest(x,y).del()

Moving

onDrawingMouse1Motion(x,y)/ oldCoords=coords(movingObject) move(movingObject, distance(oldCoords, (x,y)))

move delete

155


Diagramas de Actividad z Refinamiento de los diagramas de estados. estados { Los estados representan p subactividades

la

ejecuci贸n j

de

acciones

o

{ Las transiciones son disparadas p cuando se completan p estas acciones o subactividades { Sem谩ntica basada en tokens.

z Flujos dirigidos por procesamiento interno (en los diagramas de estados normales son dirigidos por eventos externos). z Sem谩ntica basada en Redes de Petri. No obstante no se 156 da una transformaci贸n a Redes de Petri.


Diagramas g de Actividad Ejemplo Put Coffee in Filter

[found coffee] Find Beverage g [no coffee]

Put Filter in Machine Turn on Machine

Add Water to Reservoir

Get Cups

/ coffeePot.turnOn Brew coffee light goes out Pour Coffee

[found cola]

Get cans of cola Drink

[no cola] 157


Diagramas de Actividad Swimlanes

158


Diagramas de Actividad Pesos en los enlaces

159


Diagramas de Actividad Parรกmetros y Eventos Temporales Parรกmetros/Pins/Excepciones

E Eventos t Temporales T l

160


Diagramas de Actividad Excepciones/Pins

161


Diagramas de Actividad Regiones de Expansi贸n z Regiones de expansi贸n, procesamiento paralelo (tambi茅n iterative y streaming). t i )

162


Diagramas de Actividad Regiones Interrumpibles

163


Diagramas de Actividad Particiones

164


Diagramas de Actividad Flujos de Objetos: Objectflows

165


Indice zDiagramas de Casos de Uso. zDiagramas de Estructura. Estructura zDiagramas de Comportamiento.

zOCL. zHerramientas. zEjemplos. zEjemplos zBibliografĂ­a. 166


OCL: Object Constraint Language z Lenguaje de restricciones para expresar condiciones adicionales que no podemos expresar con diagramas y cardinalidades. z Combinar diagramas y especificaciones textuales. z Lenguaje preciso, no ambiguo, declarativo, tipado, basado en matemáticas (lógica de predicados y teoría de conjuntos). conjuntos) z Útil p para obtener modelos p precisos ((no anotaciones en lenguaje natural). z Se utiliza fundamentalmente junto a los diagramas de 167 clases.


Ejemplos Flight

Airplane 0 * 0..

Flightnr: Integer

flights

1 plane

numberOfSeats: Integer

availableSeats(): Integer flights 0.. 0 * passengers 0..*

P Person name: String

También es un lenguaje de consultas (mismo poder expresivo que SQL). Context Flight::availableSeats(): Integer body: plane.numberOfSeats – passengers->size()

z ¿Cómo se expresa el hecho de que en ningún vuelo puede haber más p pasajeros j que asientos tiene el avión? q z Restricción OCL: Context Flight Inv: passengers->size() <= plane.numberOfSeats

168


Ejemplos Persona

Casa 0 * 0.. valor: Dinero

1 numSegSoc: S S Id Identificador ifi d propietario sueldo: Dinero

casas

contratarHipoteca(sum: Dinero, aval: Casa))

aval 1

Hipoteca principal: Dinero 0..* mensual: Dinero hipotecas fechaInicio: Fecha fechaFinal: Fecha

1 contratante 0..* hipotecas

Reglas adicionales: 1. 2. 2 3. 4. 5.

Una persona puede tener una hipoteca sobre una casa sólo si es el propietario. La fecha de inicio de cada hipoteca ha de ser menor que la de final final. El número de la seguridad social de cada persona ha de ser único. Sólo es posible contratar una nueva hipoteca si el salario de la persona es suficiente. Sólo es posible contratar una nueva hipoteca si el valor de la casa aval 169 es suficiente.


Ejemplos

Las restricciones OCL se escriben en el contexto de una instancia de un tipo especĂ­fico.

Context C t t Hipoteca Hi t Inv: aval.propietario = contratante Context Hipoteca Inv: fechaInicio < fechaFin

self hace referencia a la instancia del contexto.

Context Persona Inv: Persona::allInstances()->isUnique(numSegSoc) Context Persona::contratarHipoteca(sum: Dinero, aval: Casa) pre: self.hipotecas.mensual->sum()+sum <= self.sueldo * 0.70 Context Persona::contratarHipoteca(sum: Dinero, aval: Casa) pre: aval.valor >= aval.hipotecas.principal->sum() 170


Ejemplos

“Los PCs pueden conectarse con un único Hub, los servidores con uno o varios” Context PC Inv: cable_equipo->size() = 1 Context Servidor Inv: cable_equipo->size() >= 1

171


Ejercicio “Un Hub no puede conectarse consigo mismo a través de un puerto” Context Cable_Hubs Inv: Puerto_Hub.hub->asSet()->size() = 2

172


¿Dónde usar OCL? z Clases: { Invariantes. Expresión OCL de tipo booleano, la expresión debe ser true para cada instancia de la clase en todo momento de la ejecución. ejecución

z Operaciones: { Pre-condición. Condición que debe ser verdadera para ejecutar l operación la ió en una d determinada t i d iinstancia. t i { Post-condición. Condición que debe ser verdadera al terminar una operación. { Body. B d Especificación E ifi ió del d l cuerpo d de una operación ió d de ti tipo query.

z Atributos y finales de asociación: { Valor inicial. expresión p p para dar el valor inicial a un atributo o final de asociación. Se evalua al crear la instancia. { Valor derivado.

z Transiciones de máquinas de estados: { Guarda.


Ejemplos

parents 0..* children 0..*

174


Ejemplos z Especificaci贸n E ifi i贸 d dell valor l iinicial i i lyd derivado i d d de atributos/association t ib t / i ti ends: d context Person::income : Integer init: parents.income->sum() * 1% -- pocket allowance d i d if self.age derived:if lf < 18 then parents.income->sum() * 1% -- pocket allowance else job.salary -- income from regular job endif

z Subexpresiones (let): context Person inv: let income : Integer = self.job.salary->sum() in if isUnemployed then income < 100 else income >= 100 endif 175


Ejemplos Colecciones. Ejemplos. Colecciones zTipos: Set, OrderedSet, Bag, Sequence. zOperaciones de bucle con colecciones: select(expr): selecciona los elementos que cumplan una condici贸n. coleccion->select( expresion-logica ) coleccion->select( l i l t( v | expresion-logica-con-v) i l i ) coleccion->select( v : Type | expresion-logica-con-v) context t t Company C i inv: self.employee->select(age < 25)->notEmpty() context Company inv: self.employee->select(gender=female)->notEmpty()

176


Ejemplos Colecciones. Ejemplos. Colecciones collect(expr): devuelve la colecci贸n que resulta de evaluar expr para cada elemento de la colecci贸n fuente. self employee >collect( birthDate ))->asSet() self.employee->collect( >asSet()

forAll(expr): devuelve verdadero si expr es verdadero en cada elemento de la colecci贸n. coleccion->forAll( expresion-logica ) coleccion->forAll( v | expresion-logica-con-v ) coleccion->forAll( v : Type | expresion-logica-con-v ) context Company inv: self.employee->forAll( isUnemployed = False ) inv: self.employee->forAll( p | p.isUnemployed = False ) i inv: self.employee->forAll( lf l >f All( p : P Person | p.isUnemployed i U l d=F False l ) 177


Ejemplos Colecciones. Ejemplos. Colecciones exists(expr): devuelve true si al menos hay un elemento en la colección para el que expr es verdadera. verdadera coleccion->exists( expresion-logica ) coleccion->exists( v | expresion-logica-con-v ) coleccion->exists( v : Type | expresion-logica-con-v ) context Company inv: self.employee->exists( age > 50 ) inv: self.employee->exists( p | p.age > 50 ) inv: self.employee->exists( p : Person | p.age > 50 )

iterate(…): itera sobre todos los elementos de una colección. coleccion->iterate( elem : Type; acc : Type = <expresion> | expresion-logicacon-elem-y-acc l ) collection->collect(x : T | x.property) ( : T;; acc : T2 = Bag{} g{} | acc->including(x.property)) g( p p y)) collection->iterate(x añade un elemento a una colección

178


Colecciones Otras Operaciones Colecciones. Operaciones. z Otras operaciones p de bucle: { source->any(iterator|body) z source->select(iterator|body)->asSequence()->first()

{ source source->collectNested(iterators|body) collectNested(iterators|body) z Bag de elementos que resultan de aplicar body a cada elemento de source.

{ source->isUnique(iterators|body) ( | y) z True si body se evalua a un valor diferente para cada elemento de source.

{ source->one(expr) z Devuelve true si existe exactamente un elemento de source que cumple la condici贸n.

{ source->reject(expr) z Devuelve una colecci贸n con los elementos de source que no cumplen la condici贸n.

{ source->sortedBy(expr) z Ordena source, source resulta en un OrderedSet 179


Indice zDiagramas de Casos de Uso. zDiagramas de Estructura. Estructura zDiagramas de Comportamiento. zOCL.

zHerramientas. zHerramientas zEjemplos. j p zBibliografĂ­a. 180


Herramientas I Herramientas, z Dibujo Dib j d de di diagramas {Soporte a la correccción de los diagramas en base a su semántica {Apoyo para simplificar la facilidad de comprensión de los diagramas (layout, etc.)

z Archivo de información {Comprobación de inconsistencias {Detección de trabajo a realizar y mejoras {Generación de informes {Soporte a la reutilización {Soporte al rediseño (refactorings). 181


Herramientas II Herramientas, z Soporte a la navegación {Vistas compuestas {Elaboración de conexiones entre información relacionada {Bú {Búsqueda d {Visión con diferentes niveles de granularidad (expansión y contracción de partes de la vista) {Filtros {Operaciones sobre componentes de la vista

182


Herramientas III Herramientas, z Soporte al trabajo multiusuario { Bloqueo de información { Trabajo j colaborativo

z Generación de código { Esqueletos con información estática (clases) { Generación a partir de diagramas de comportamiento (máquinas de estados). { Integración con lenguajes especiales (SQL, …) { Desarrollo Dirigido por Modelos (MDA (MDA, http://www.omg.org/mda/)

z Ingeniería inversa { Construcción de un modelo de diseño a partir de código { Diseño iterativo: incorporación al modelo de detalles implementados 183


Herramientas IV Herramientas, z Integración con otras herramientas {Entorno de desarrollo (tendencia a confluir) {Configuración del sistema y control de versiones {Herramientas de documentación {Herramientas de prueba de software {Herramientas de construcción de interfaces de usuario {Herramientas de especificación de requisitos {Herramientas de gestión de proyectos y soporte al proceso de d di diseño ñ yd desarrollo ll

184


Herramientas V Herramientas, zDistintos niveles de abstracci贸n zIntercambio de informaci贸n {Especificaci贸n OMG de representaci贸n de modelos UML en XMI (XML Metadata Interchange)

185


Poseidon for UML


Indice zDiagramas de Casos de Uso. zDiagramas de Estructura. Estructura zDiagramas de Comportamiento. zOCL. zHerramientas. zHerramientas

zEjemplos. Ejemplos. zBibliografĂ­a. 187


Ejemplo de Análisis Aplicación para una Galería de Arte Diagrama de casos de uso inicial

Comprar un cuadro Vendedor Vender un cuadro Agente Galería

Producir Informe C Comprador d Actualizar Coeficiente de moda 188


Diagrama refinado

Comprar p una Obra maestra Comprar una O Obra representativa

Vendedor Comprar una Obra representativa Vender un cuadro Producir Informe compras

Agente GalerĂ­a

Comprador

Producir Informe ventas Producir Informe tendencias Actualizar Coeficiente de moda

189


Caso de uso: comprar una obra maestra Actores primarios: p Agente Galería, vendedor Interesados y Objetivos: • Agente: quiere obtener una recomendación lo más acertada posible del precio máximo recomendado de manera rápida. • Vendedor: quiere vender el cuadro a un precio razonable de manera rápida. Precondiciones: El agente ha entrado en la aplicación. Garantía de éxito (post-condiciones): Se registra la venta. E Escenario i Principal P i i l de d Éxito: É it 1. El agente introduce la descripción del cuadro. 2. El sistema busca el cuadro más parecido del mismo autor. 3 El sistema presenta el precio recomendado 3. recomendado. 4. El agente hace una propuesta por debajo del precio recomendado, y el vendedor acepta la oferta. 5 El agente introduce información de la venta 5. venta. Extensiones: 2a. No hay ningún cuadro parecido del mismo autor, así que el sistema no presenta una recomendación recomendación. 4a. El vendedor no acepta la oferta y la venta no se produce. 190


Diagrama de clases inicial

Cuadro nombreDelArtista apellidosDelArtista Titulo A単oCreacion Alto Ancho Tecnica Tema

Sistema Si t G Gestion ti Galeria

Cuadro Galeria

Cuadro Subastado

Clasificacion fechaCompra Fechaventa nombreVendedor direccionVendedor precioCompraMaximo precioCompraReal precioVentaDeseado precioVenta nombreComprador direccionComprador

fechaSubasta precioSubasta

Obra Maestra

Cuadro de Otro Tipo usa

Obra Representativa

Moda nombreArtista appelidosArtista coeficiente

191


Diagrama de clases asociado al caso de uso vender una obra maestra

Proporciona los datos introducidos por el agente Vendedor

Obra maestra

Agente A t GalerĂ­a

GUI

Calcular Precio Obra Maestra Cuadro Cuad o Subastado

192


Vendedor

Agente Galería

: GUI

1: proporcionar datos obra maestra

: Calcular Precio Obra Maestra 2: transferir detalles

: Cuadro Subastado : Obra maestra

3: crear objeto nuevo 4: devolver objeto nuevo 5: buscar cuadros subastados

Datos proporcionados por el vendedor

8: mostrar precio 9: proporcionar detalles del vendedor 14: mostrar confirmación

6: devolver cuadro subastado

7: proporcionar precio

10: transferir detalles 11: solicitar vendedor actualización 13: confirmación

12: confirmación

193


Un ejemplo completo para todos los diagramas Un sistema de gesti贸n de cursos impartidos para un conjunto de clientes. Algunos de esos clientes pueden pertenecer a empresas.

194


195


196


197


0 1 11 1.1 2 2.1 3 3.1 3.2

3.1.1

3.2.1

198


199


200


201


202


203


Indice zDiagramas de Casos de Uso. zDiagramas de Estructura. Estructura zDiagramas de Comportamiento. zOCL. zHerramientas. zHerramientas zEjemplos

zBibliografĂ­a. 204


Bibliografía: UML UML { Dan D Pil Pilone; N Neilil Pi Pitman. “UML 2 2.0 0 iin a N Nutshell”. t h ll” O’R O’Reilly, ill 2005 2005. { Martin Fowler. “UML Distilled: A Brief Guide to the Standard Object Modeling Language, 3rd Edition”. Addison Wesley, 2003. { Web de la OMG sobre UML: http://www.uml.org { Perdita Stevens, Rob Pooley. “Utilización de UML en Ingeniería del Software con Objetos j y Componentes”. p Addison Wesley, y, 2002. { Grady Booch, James Rumbaugh, Ivar Jacobson. “The Unified Modeling Language User Guide”. Addison-Wesley, 1999. { Eriksson, Eriksson H. H E., E Penker, Penker M., M Lyons, Lyons B B., Fado Fado, D D. “UML UML 2 Toolkit” Toolkit . OMG Press, Press Wiley. 2004. { Craig Larman. “Applying UML and Patterns”. Prentice Hall. 2002.

OCL { Warmer, Warmer Kleppe. Kleppe “The Object Constraint Language 2nd Edition Edition. Getting your Models Ready for MDA”. Addison-Wesley. 2003. 205 {Especificación de OCL 2.0: http://www.omg.org/docs/ptc/03-10-14.pdf


Bibliografía: Statecharts z Harel D. D “On Visual Formalisms”. Formalisms” Communications of the ACM. Vol 31, No. 5. Pp.: 514-530. Mayo 1988. z Harel D., Naamad A. “The STATEMATE Semantics of Statecharts”. ACM Transactions on Software Engineering and Methodology, Methodology Vol. Vol 5, 5 No. No 4, 4 Oct. Oct 1996, 1996 pp.: 293-233. z D David id Harel H l and d Eran E G Gery. E Executable bl object bj modeling with statecharts. IEEE Computer, pages 31-42, 1997.

206


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.