Modelado de Software con UML2.0 - Universidad Autónoma de ...
Modelado de Software con UML2.0 - Universidad Autónoma de ...
Modelado de Software con UML2.0 - Universidad Autónoma de ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Mo<strong>de</strong>lado</strong> <strong>de</strong> <strong>Software</strong> <strong>con</strong><br />
<strong>UML2.0</strong><br />
Introducción<br />
http://uml.org<br />
Esther Guerra, Juan <strong>de</strong> Lara<br />
{Esther.Guerra, Juan.<strong>de</strong>Lara}@uam.es<br />
Ingeniería g Informática<br />
<strong>Universidad</strong> <strong>Autónoma</strong> <strong>de</strong> Madrid<br />
Unified Mo<strong>de</strong>ling Language Language. Estándar <strong>de</strong> la OMG<br />
(http://www.uml.org)<br />
Notación estándar para<br />
orientados a objetos, a<br />
mo<strong>de</strong>lado más <strong>con</strong>ocidos:<br />
Booch - OOD.<br />
Rumbaugh -OMT.<br />
la <strong>de</strong>scripción<br />
partir <strong>de</strong> los<br />
<strong>de</strong> sistemas<br />
lenguajes <strong>de</strong><br />
Jacobson - OOSE y Objectory Objectory.<br />
Combina las mejores propieda<strong>de</strong>s <strong>de</strong>:<br />
Conceptos <strong>de</strong> mo<strong>de</strong>los <strong>de</strong> datos (ERD)<br />
Mo<strong>de</strong>los <strong>de</strong> negocios (workflow)<br />
Mo<strong>de</strong>los <strong>de</strong> Objetos j<br />
Mo<strong>de</strong>los <strong>de</strong> Componentes<br />
1<br />
3<br />
Indice<br />
Introducción.<br />
Diagramas g <strong>de</strong> Clases y Objetos. j<br />
Otros Diagramas.<br />
OCL<br />
Acción Semántica.<br />
Perfiles.<br />
Bibliografía<br />
Lecturas sugeridas/ejercicios.<br />
Introducción<br />
LLenguaje j gráfico áfi para visualizar, i li especificar, ifi <strong>con</strong>struir t i y<br />
documentar partes <strong>de</strong> un sistema software <strong>de</strong>s<strong>de</strong><br />
distintos puntos p <strong>de</strong> vista.<br />
Pue<strong>de</strong> utilizarse:<br />
Con cualquier proceso <strong>de</strong> <strong>de</strong>sarrollo.<br />
A lo largo <strong>de</strong> todo el ciclo <strong>de</strong> vida.<br />
Con distintas tecnologías <strong>de</strong> implementación<br />
Uso también en otras áreas, , como la ingeniería g <strong>de</strong><br />
negocio, mo<strong>de</strong>lado <strong>de</strong> procesos, etc.<br />
Adaptación/Extensión mediante perfiles.<br />
2<br />
4
Introducción<br />
No es un método, método ni un proceso ni una metodología.<br />
metodología<br />
No establece qué mo<strong>de</strong>los <strong>con</strong>struir en el proceso <strong>de</strong><br />
<strong>de</strong>sarrollo.<br />
PPara un óptimo ó ti aprovechamiento, h i t d<strong>de</strong>be b ser usado d en un<br />
proceso:<br />
guiado por casos <strong>de</strong> uso,<br />
centrado en la arquitectura<br />
arquitectura,<br />
iterativo e incremental.<br />
Vistas<br />
Vi Vista t d<strong>de</strong> CCasos d<strong>de</strong> UUso<br />
Funcionalidad externa <strong>de</strong>l sistema<br />
Vi Vista t Ló Lógica i<br />
Estructura estática y <strong>con</strong>ducta dinámica <strong>de</strong>l sistema<br />
Vi Vista t d<strong>de</strong> CComponentes t<br />
Organización modular en componentes<br />
Vi Vista t d<strong>de</strong> CConcurrencia i<br />
Comunicaciones y sincronización<br />
Vi Vista t d<strong>de</strong> DDespliegue li<br />
Arquitectura física<br />
5<br />
7<br />
Mo<strong>de</strong>los<br />
Familia <strong>de</strong> notaciones, útiles para <strong>de</strong>scribir<br />
distintos aspectos p <strong>de</strong> un sistema:<br />
Estático Estático. Describe los elementos <strong>de</strong>l sistema y<br />
sus relaciones.<br />
Dinámico. Describe el comportamiento <strong>de</strong>l<br />
sistema a lo largo <strong>de</strong>l tiempo tiempo.<br />
Casos Casos <strong>de</strong> Uso Uso. Des<strong>de</strong> el punto <strong>de</strong> vista <strong>de</strong>l usuario usuario.<br />
Mo<strong>de</strong>los<br />
Tipos <strong>de</strong><br />
Diagramas<br />
Mo<strong>de</strong>los<br />
UML<br />
6<br />
8
Tipos <strong>de</strong> Diagramas<br />
Indice<br />
Introducción<br />
Introducción.<br />
Diagramas <strong>de</strong> Clases y Objetos.<br />
Otros Diagramas.<br />
OCL.<br />
Acción Semántica.<br />
Perfiles Perfiles.<br />
Bibliografía<br />
Lecturas sugeridas/ejercicios.<br />
9<br />
11<br />
Tipos <strong>de</strong> Diagramas<br />
¿Cómo ¿ estamos seguros g <strong>de</strong> que q la<br />
composición <strong>de</strong> un <strong>con</strong>junto <strong>de</strong> diagramas es<br />
correcta, es <strong>de</strong>cir, que los mo<strong>de</strong>los son<br />
<strong>con</strong>sistentes?<br />
<strong>con</strong>sistentes?.<br />
¿Cómo po<strong>de</strong>mos comprobar ciertas<br />
propieda<strong>de</strong>s <strong>de</strong> nuestro sistema global?<br />
¿Cuál es la semántica precisa <strong>de</strong> los diagramas<br />
y <strong>de</strong> sus combinaciones?<br />
UML vs. Lenguajes Específicos <strong>de</strong> Dominio.<br />
Clases y Objetos<br />
LLos di diagramas d<strong>de</strong> Cl Clases y d<strong>de</strong> Obj Objetos t son llos principales i i l<br />
modos <strong>de</strong> representar los aspectos estructurales en UML.<br />
Diagramas <strong>de</strong> clases. Estructura <strong>de</strong>l sistema.<br />
Clases.<br />
Atributos: Tipos, valores iniciales.<br />
Operaciones: visibilidad.<br />
Relaciones <strong>con</strong> otras clases: Asociaciones<br />
Diagramas <strong>de</strong> objetos. Estructura <strong>de</strong>l sistema en tiempo<br />
<strong>de</strong> ejecución.<br />
Objetos. Instancias <strong>de</strong> una Clase.<br />
Atributos (valores actuales) actuales).<br />
Links. Relaciones entre objetos, instancias <strong>de</strong> asociaciones.<br />
10<br />
12
Clases y Objetos<br />
Diagrama <strong>de</strong><br />
clases l<br />
Diagrama <strong>de</strong><br />
objetos<br />
Clases<br />
Atributos<br />
Carbono<br />
Notación para p atributos:<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 />
[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 />
13<br />
15<br />
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 />
At Atributos ib t<br />
Operaciones<br />
Nombre<br />
d<strong>de</strong>l l objeto bj<br />
unCirculo: Circulo<br />
Clase<br />
<strong>de</strong>l objeto<br />
radio = 3.4<br />
centrox = 20 2.0<br />
centroy = 2.0<br />
Valores <strong>de</strong><br />
los atributos<br />
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 />
14<br />
16
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, <strong>con</strong>tainer: Container [0 [0..1]): 1]): Window<br />
+toString (): String<br />
Asociaciones: Navegación, Roles y<br />
Cardinalidad<br />
Las asociaciones pue<strong>de</strong>n tener etiquetas:<br />
Roles en la relación<br />
MMultiplicidad lti li id d ( (cardinalidad) di lid d)<br />
centro<br />
Círculo Punto<br />
1<br />
Ej Ejemplos l <strong>de</strong> d cardinalidad: di lid d<br />
1..* mínimo 1, no hay máximo<br />
0 0..* * mínimo 0, 0 no hay máximo<br />
0..1 mínimo 0, máximo 1<br />
124 1,2,4 uno uno, dos o cuatro<br />
3 exactamente tres<br />
navegación g<br />
N Navegación: ió<br />
Unidireccional<br />
Bidireccional<br />
No especificado.<br />
No navegable (x)<br />
17<br />
19<br />
Asociaciones: Composición<br />
Un Círculo <strong>con</strong>tiene un Punto<br />
Se representa <strong>con</strong> 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 se <strong>de</strong>struye o copia, también lo es el Punto<br />
La cardinalidad en la parte <strong>de</strong>l todo es 0..1 o 1.<br />
Asociaciones<br />
Ejemplos <strong>de</strong> Navegación y Cardinalidad<br />
18<br />
20
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 <strong>con</strong>tiene figuras,<br />
pero cada una pue<strong>de</strong> existir sin la otra<br />
Clases Asociativas<br />
Asociación <strong>con</strong> atributos propios.<br />
Empleado<br />
1<br />
casado <strong>con</strong><br />
1<br />
Persona<br />
Matrimonio<br />
testigos 2<br />
fecha<br />
0 0.. *<br />
Clase Asociativa<br />
21<br />
23<br />
Asociaciones y Depen<strong>de</strong>ncia.<br />
Depen<strong>de</strong>ncia<br />
Existen relaciones <strong>de</strong> <strong>con</strong>ocimiento 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 />
MMuchas h veces no se hhace explícita. lí it<br />
Ejemplo<br />
Ventana<br />
suContexto<br />
ContextoDibujo<br />
susFiguras<br />
0..*<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 />
Figura<br />
Draw(ContextoDibujo)<br />
Depen<strong>de</strong>ncia<br />
línea 1..*<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 />
22<br />
24
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 />
Constructores<br />
Métodos <strong>de</strong> acceso (“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 />
Ya que son <strong>de</strong>talles <strong>de</strong> implementación y no <strong>de</strong><br />
diseño.<br />
No olvidar que q el diagrama g <strong>de</strong> clases es un<br />
mo<strong>de</strong>lo, y por tanto una abstracción.<br />
Ejercicio (entrega)<br />
Especificar un diagrama <strong>de</strong> clases que <strong>de</strong>scriba re<strong>de</strong>s <strong>de</strong><br />
or<strong>de</strong>nadores.<br />
d d<br />
Los elementos que se pue<strong>de</strong>n incluir en la red son:<br />
Servidor, PC, Impresora.<br />
Hub, Cable <strong>de</strong> red.<br />
Los PCs pue<strong>de</strong>n <strong>con</strong>ectarse <strong>con</strong> un único Hub, los servidores <strong>con</strong><br />
uno o varios.<br />
LLos SServidores id y PC PCs pue<strong>de</strong>n d generar mensajes, j <strong>con</strong> una cierta i t<br />
longitud.<br />
Los Hubs tienen un número <strong>de</strong> puertos, algunos <strong>de</strong> los cuales<br />
pue<strong>de</strong> usarse para <strong>con</strong>ectar <strong>con</strong> otros Hubs Hubs. Tienen cierta<br />
probabilidad <strong>de</strong> “per<strong>de</strong>r” mensajes.<br />
Las impresoras pue<strong>de</strong>n averiarse, <strong>con</strong> cierta probabilidad, durante<br />
cierto tiempo tiempo.<br />
Entrega individual el día 2 <strong>de</strong> Noviembre.<br />
25<br />
27<br />
Ejercicio je c c o (c (clase) ase)<br />
Un sistema sencillo <strong>de</strong> revisión <strong>de</strong> <strong>con</strong>ferencias científicas<br />
El sistema pue<strong>de</strong> gestionar varias <strong>con</strong>ferencias a la vez.<br />
Cada <strong>con</strong>ferencia tiene uno o dos chairs.<br />
Los autores envian artículos, <strong>de</strong>ntro <strong>de</strong> un plazo. Uno <strong>de</strong> los autores<br />
es el autor “<strong>de</strong> correspon<strong>de</strong>ncia”.<br />
Estos son revisados por 3 revisores, <strong>de</strong>ntro <strong>de</strong> un plazo.<br />
En base a las revisiones, los chairs <strong>de</strong>ci<strong>de</strong>n aceptar o rechazar los<br />
artículos. Para ello, envían una notificación a los autores <strong>de</strong><br />
correspon<strong>de</strong>ncia d i d<strong>de</strong> cada d artículo. tí l<br />
El autor <strong>de</strong> correspon<strong>de</strong>ncia <strong>de</strong> los artículos aceptados envía una<br />
versión final, <strong>de</strong>ntro <strong>de</strong> un plazo.<br />
Los artíc artículos los están <strong>de</strong>scritos por un n tít título, lo aautores, tores res resumen men y<br />
cuerpo <strong>de</strong>l artículo.<br />
Autores, revisores y chairs están <strong>de</strong>scritos por un nombre, afiliación<br />
y correo correo.<br />
Las revisiones están compuestas por una nota (<strong>de</strong>l 0 al 5) y una<br />
sección <strong>de</strong> comentarios.<br />
Los revisores <strong>de</strong> una <strong>con</strong>ferencia pue<strong>de</strong>n enviar artículos artículos, pero no<br />
revisar sus propios artículos. Los chairs <strong>de</strong> la <strong>con</strong>ferencia no<br />
pue<strong>de</strong>n enviar artículos.<br />
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 equipo<br />
JJugador d<br />
pichichi<br />
29
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 ( (<strong>con</strong> 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 <strong>con</strong>:<br />
Multiplicidad.<br />
Nombre (rol). ( )<br />
Propieda<strong>de</strong>s:<br />
{subsets }.<br />
{re<strong>de</strong>fined }<br />
}.<br />
{union}.<br />
{or<strong>de</strong>red} (un <strong>con</strong>junto or<strong>de</strong>nado).<br />
{bag} (<strong>con</strong>junto <strong>con</strong> repetición) repetición).<br />
{sequence} o {seq} (bag or<strong>de</strong>nado).<br />
Más sobre asociaciones<br />
Asociaciones Cualificadas<br />
Un cualificador <strong>de</strong>clara una partición <strong>de</strong>l <strong>con</strong>junto <strong>de</strong> instancias asociadas <strong>con</strong><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 <strong>con</strong>junto <strong>de</strong> instancas asociadas se particiona en sub<strong>con</strong>juntos.<br />
Similar a un array asociativo, asociativo map o tabla hash hash.<br />
30<br />
32<br />
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 sub<strong>con</strong>junto <strong>de</strong> la colección b.<br />
Pre Pre- yPost y Post- Condiciones Condiciones, Notas<br />
pre-<strong>con</strong>dición<br />
body-<strong>con</strong>dition<br />
post-<strong>con</strong>dición<br />
31<br />
33
Interfaces<br />
Clase<br />
Objetos<br />
<br />
MiInterfaz<br />
métodos<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 />
Clase<br />
Clase<br />
d1 : Directivo<br />
-nombre=“Luis”<br />
-edad=35 d d 35<br />
- sueldo_bruto=36000<br />
empleados<br />
Empresa<br />
- nombre=“HGJ”<br />
-categoria=“C1”<br />
clientes<br />
c1 : Cliente<br />
-nombre=“Luis”<br />
- edad=35<br />
- nombre_empresa=“Macroware”<br />
- telefono_<strong>de</strong>_<strong>con</strong>tacto=91555666<br />
MiInterfaz<br />
MiInterfaz<br />
Persona<br />
-nombre<br />
-edad<br />
+ mostrar()<br />
Empleado Cliente<br />
subordinados<br />
-sueldo_bruto -nombre_empresa<br />
+ mostrar ()<br />
- telefono_<strong>de</strong>_<strong>con</strong>tacto<br />
+ calcular_salario_neto()<br />
l l l i t ()<br />
+mostrar()<br />
empleados clientes<br />
Directivo<br />
-categoria<br />
+ mostrar ()<br />
34<br />
Empresa<br />
-nombre<br />
36<br />
Plantillas<br />
Indice<br />
Farray Point><br />
Introducción.<br />
Diagramas <strong>de</strong> Clases y Objetos.<br />
Una clase anónima ligada:<br />
T -> Point<br />
K -> 10<br />
Otros Otros Diagramas<br />
Diagramas.<br />
Diagramas Estructurales.<br />
Casos <strong>de</strong> Uso Uso.<br />
Diagramas <strong>de</strong> Comportamiento.<br />
OCL.<br />
Acción Semántica.<br />
PPerfiles. fil<br />
Bibliografía<br />
Lecturas sugeridas/ejercicios<br />
sugeridas/ejercicios.<br />
35<br />
37
Diagramas Estructurales<br />
Clases y Objetos (ya vistos) vistos).<br />
Componentes.<br />
Módulos <strong>con</strong> interfaces.<br />
EEstructuras t t CCompuestas. t<br />
Clases <strong>con</strong> estructura interna.<br />
Paquetes.<br />
Estructura <strong>de</strong> la aplicación.<br />
Despliegue.<br />
Vista física.<br />
Componentes<br />
Interfaces<br />
que ofrece<br />
Interfaces<br />
que requiere<br />
40<br />
Componentes<br />
CComponente=“Unidad t “U id d MModular d l <strong>con</strong> 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 />
Componentes<br />
Vi Vista t d<strong>de</strong> caja j bl blanca<br />
39<br />
41
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><br />
comunes.<br />
enlaces para alcanzar objetivos<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 />
Estructuras Compuestas p<br />
Colaboración.<br />
Et Estructura t it interna d<strong>de</strong> una colaboración. lb ió<br />
42<br />
44<br />
Estructuras Compuestas<br />
Paquetes<br />
Estructura interna <strong>de</strong> una clase. clase<br />
Estructura interna <strong>de</strong> una clase. Multiplicida<strong>de</strong>s.<br />
Un paquete es un <strong>con</strong>tenedor 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 />
43<br />
45
Paquetes<br />
Un paquete pue<strong>de</strong> exten<strong>de</strong>r aotrouniendosus<br />
<strong>con</strong>tenidos.<br />
El <strong>con</strong>tenido <strong>de</strong>l paquete “target” se une <strong>con</strong> el<br />
<strong>con</strong>tenido <strong>de</strong>l paquete “source” por medio <strong>de</strong><br />
especialización y re<strong>de</strong>finición don<strong>de</strong> sea<br />
aplicable ( (elementos <strong>de</strong>l mismo nombre). )<br />
Paquetes Paquetes. Plantillas Plantillas.<br />
46<br />
48<br />
Paquetes. q Unión (merge). ( g )<br />
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 <strong>con</strong>cretos (p.e.:<br />
ficheros) que son el resultado <strong>de</strong>l proceso<br />
<strong>de</strong> <strong>de</strong>sarrollo.<br />
47<br />
49
Despliegue p g<br />
Relaciones entre artefactos.<br />
Casos <strong>de</strong> Uso<br />
“Manifestación” <strong>de</strong><br />
elementos a través <strong>de</strong><br />
artefactos<br />
AActor t = Al Algo <strong>con</strong> comportamiento t i t ( (persona, otro t<br />
programa, organización...), que interactua <strong>con</strong> el<br />
sistema sistema.<br />
EEscenario i (i (instancia t i d<strong>de</strong> caso d <strong>de</strong> uso) ) =<br />
Secuencia <strong>de</strong> acciones e interacciones entre los<br />
actores y el sistema sistema.<br />
CCaso d<strong>de</strong> UUso = CColección l ió d<strong>de</strong> escenarios i (é (éxito it y<br />
fracaso) que <strong>de</strong>scriben actores que usan el<br />
sistema para <strong>con</strong>seguir un objetivo objetivo.<br />
50<br />
52<br />
Casos <strong>de</strong> Uso<br />
DDescriben ib quéé hhace ell sistema it d<strong>de</strong>s<strong>de</strong> d ell 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 ó llo hhace.<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 <strong>con</strong><br />
ell sistema i t<br />
Casos <strong>de</strong> Uso: Ejemplo<br />
Cajero Terminal<br />
Punto <strong>de</strong> Venta<br />
(TPV)<br />
51<br />
53
Casos <strong>de</strong> Uso: Ejemplo<br />
CASO DE USO 1: Procesar venta<br />
Actor Primario:<br />
CCajero. j<br />
Interesados y objetivos:<br />
Cajero: Quiere anotaciones precisas y rápidas <strong>de</strong> precios, sin errores.<br />
Cli Cliente: t QQuiere i que ell pago sea rápido á id <strong>con</strong>ell mínimo í i esfuerzo. f QQuiere i<br />
una prueba <strong>de</strong> compra para justificar <strong>de</strong>voluciones.<br />
Compañía: Quieren almacenar las transacciones y satisfacer los<br />
intereses <strong>de</strong> los clientes.<br />
Comercial: Quiere que se le actualicen sus comisiones por venta.<br />
Agencias <strong>de</strong> impuestos gubernamentales: Quieren recolectar impuestos<br />
<strong>de</strong> cada venta. Pue<strong>de</strong> que haya varias agencias (nacionales, regionales,<br />
etc.) t )<br />
Servicios <strong>de</strong> Autorización <strong>de</strong> Pagos (por tarjetas <strong>de</strong> crédito): Quiere<br />
recibir peticiones digitales <strong>de</strong> autorizaciones en el formato y protocolo<br />
correcto.<br />
Pre<strong>con</strong>diciones:<br />
54<br />
El cajero se ha i<strong>de</strong>ntificado y autentificado.<br />
Casos <strong>de</strong> Uso: Ejemplo<br />
Extensiones (Flujos alternativos):<br />
a*. En cualquier momento, el sistema falla.<br />
3a. I<strong>de</strong>ntificador inválido.<br />
1. El sistema señala un error y rechaza la entrada.<br />
7a. Pago en efectivo.<br />
...<br />
7b 7b. Pago <strong>con</strong> tarjeta tarjeta.<br />
...<br />
Requisitos especiales:<br />
Pantalla táctil en panel gran<strong>de</strong> y plano. El texto <strong>de</strong>be ser visible <strong>de</strong>s<strong>de</strong> un metro.<br />
Respuesta <strong>de</strong> autorización <strong>de</strong> crédito en menos <strong>de</strong> 30 secs, el 90% <strong>de</strong> las veces.<br />
Recuperación robusta cuando el acceso a sistemas externos (tales como el inventario,<br />
impuestos, etc.) falla.<br />
Posibilida<strong>de</strong>s <strong>de</strong> internazionalización <strong>de</strong> texto.<br />
Reglas <strong>de</strong> negocio insertables en los pasos 3 y 7.<br />
...<br />
56<br />
Casos <strong>de</strong> Uso: Ejemplo<br />
Garantía <strong>de</strong> éxito (Post<strong>con</strong>diciones):<br />
Se registra la compra en el sistema. Se calcula el impuesto aplicable. Se actualizan los sistemas <strong>de</strong><br />
inventario y <strong>de</strong> <strong>con</strong>tabilidad. Se registran las comisiones. Se genera un recibo. Se registran las<br />
aprobaciones <strong>de</strong> pago por tarjeta.<br />
Escenario principal <strong>de</strong> Exito:<br />
1. Llega un clienta al TPV <strong>con</strong> bienes o servicios que comprar.<br />
2. El cajero comienza una nueva compra.<br />
3. El cajero introduce un i<strong>de</strong>ntificador <strong>de</strong> producto.<br />
44. El sistema it registra i t ell elemento l t ypresenta t una<strong>de</strong>scripción d i ió d<strong>de</strong>l l mismo, i su precio i y<br />
total actual. Se calcula el precio <strong>de</strong> una lista <strong>de</strong> reglas.<br />
El cajero j repite p los pasos p 3-4 hasta que q no hayy más elementos.<br />
5. El sistema presenta el total <strong>con</strong> los impuestos calculados.<br />
6. El cajero le dice el total al cliente, y le pi<strong>de</strong> que pague.<br />
77. El cliente paga y el sistema procesa el pago pago.<br />
8. El sistema registra la venta completada y manda la información a los sistemas<br />
externos <strong>de</strong> inventario y <strong>con</strong>tabilidad.<br />
9. El sistema genera el recibo.<br />
10. El cliente se va.<br />
Casos <strong>de</strong> Uso: Ejemplo<br />
Lista <strong>de</strong> variaciones <strong>de</strong> tecnología y datos:<br />
3a. Se introduce el i<strong>de</strong>ntificador <strong>de</strong>l elemento mediante escáner <strong>de</strong> código <strong>de</strong> barras o<br />
mediante el teclado.<br />
3b. Distintos esquemas <strong>de</strong> i<strong>de</strong>ntificadores: UPC, EAN, JAN o SKU.<br />
7a. La información sobre el pago <strong>con</strong> tarjeta se pue<strong>de</strong> introducir mediante el teclado o<br />
lector.<br />
7b. Se pi<strong>de</strong> firma en papel. En dos años, creemos que muchos clientes van a querer<br />
captura <strong>de</strong> firma digital.<br />
Frecuencia <strong>de</strong> ocurrencia:<br />
Pue<strong>de</strong> ser casi <strong>con</strong>tinua.<br />
Temas abiertos:<br />
¿Cuáles son las posibles variaciones en las leyes sobre impuestos?<br />
Explorar el tema <strong>de</strong> recuperación en caso <strong>de</strong> fallo <strong>de</strong> sistemas externos.<br />
¿Qué modificaciones se necesitan para negocios distintos?<br />
¿Debe el cajero extraer el cajón <strong>con</strong> la recaudación al terminar?<br />
¿Pue<strong>de</strong> el cliente usar directamente el lector <strong>de</strong> tarjetas o es el cajero el que lo hace?<br />
55<br />
57
Casos <strong>de</strong> Uso: Ejemplo<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 />
...<br />
«actor»<br />
Administrador<br />
<strong>de</strong>l sistema<br />
Gestionar<br />
Seguridad<br />
Gestionar<br />
Usuarios<br />
Casos <strong>de</strong> Uso: Ejemplo<br />
SSon útil útiles en ttres ááreas:<br />
Especificación <strong>de</strong> requisitos<br />
Sistema <strong>de</strong><br />
<strong>con</strong>tabilidad<br />
Comunicación <strong>con</strong> los clientes<br />
Su simplicidad los <strong>con</strong>vierte 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 />
58<br />
60<br />
Casos <strong>de</strong> Uso: Ejemplo<br />
Cancel Appointment<br />
Make Appointment<br />
<br />
Patient Request Medication<br />
PPay Bill<br />
Extensions Points<br />
More Treatment<br />
<br />
<br />
Check Patient Record<br />
Defer Payment<br />
Bill Insurance<br />
Shdl Scheduler<br />
Doctor<br />
Diagramas <strong>de</strong> Comportamiento<br />
Comportamiento.<br />
Diagramas Di d<strong>de</strong> IInteracción. t ió<br />
Comunicación.<br />
Secuencia.<br />
Visión <strong>de</strong> <strong>con</strong>junto j <strong>de</strong> la interacción.<br />
Tiempo.<br />
Diagrama <strong>de</strong> Estados (Statecharts).<br />
Diagrama <strong>de</strong> Actividad.<br />
Clerk<br />
59
Diagramas <strong>de</strong> Interacción<br />
Diagrama <strong>de</strong> Comunicación<br />
Muestra un <strong>con</strong>texto 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>con</strong><br />
interacciones complicadas<br />
Diagramas <strong>de</strong> Comunicación<br />
Llamadas anidadas:<br />
realizarPago(cantidad) 1: realizarPago(cantidad)<br />
:Registro :Venta<br />
Iteraciones:<br />
1.1: crear(cantidad)<br />
:Pago<br />
Ejectuar() 1*[i:=1..N]: num:= nextInt()<br />
:Simulador :Random<br />
62<br />
64<br />
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> <strong>con</strong>junto j <strong>de</strong> la<br />
interacción.<br />
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 />
:Line Li {new} { }<br />
63<br />
<strong>con</strong>tents {new}<br />
65
Diagramas <strong>de</strong> Secuencia<br />
RRepresenta t <strong>con</strong>junto 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 horizontal); h 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 />
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 />
Focos <strong>de</strong><br />
d: route<br />
Control<br />
ringing tone phone rings<br />
Mensajes<br />
answer phone<br />
stop tone stop ringing<br />
66<br />
68<br />
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> <strong>con</strong>juntos<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 <strong>con</strong>juntos j t<br />
anteriores.<br />
Equivalencia <strong>de</strong> interacciones, si sus <strong>con</strong>juntos <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 <strong>con</strong>junto. j<br />
Diagramas <strong>de</strong> Secuencia<br />
67<br />
Gate (formal),<br />
<strong>con</strong> nombre<br />
out out_Unlock<br />
Unlock<br />
69
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 <strong>con</strong> 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 />
Diagramas g <strong>de</strong> Secuencia<br />
Operadores sobre interacciones. Alternativa.<br />
70<br />
72<br />
Diagramas g <strong>de</strong> Secuencia<br />
Operadores sobre interacciones.<br />
Secuenciación débil (seq) (seq).<br />
Define un <strong>con</strong>junto <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 />
2. Eventos <strong>de</strong> otras líneas <strong>de</strong> vida <strong>de</strong> otros operandos pue<strong>de</strong>n venir en cualquier<br />
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 <strong>de</strong> tal<br />
manera que cualquier evento <strong>de</strong>l primer operando va antes que el <strong>de</strong>l<br />
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 <strong>con</strong> ningún otro.<br />
Diagramas g <strong>de</strong> Secuencia<br />
Operadores sobre interacciones. Opción.<br />
71<br />
73
Diagramas g <strong>de</strong> Secuencia<br />
Operadores sobre interacciones. Región Crítica.<br />
Diagramas g <strong>de</strong> Secuencia<br />
Loop.<br />
74<br />
76<br />
Diagramas g <strong>de</strong> Secuencia<br />
Negative.<br />
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 />
77<br />
Asignación <strong>de</strong> instantes a variables (t=now), restricciones sobre estas.<br />
75
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> <strong>con</strong>trol.<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 />
Tiempo<br />
Muestran M t iinteracciones t i ddon<strong>de</strong> d es<br />
importante razonar sobre el tiempo.<br />
Representa Representa <strong>con</strong>diciones 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 <strong>con</strong> el<br />
tiempo en respuesta a eventos.<br />
78<br />
80<br />
Visión <strong>de</strong> Conjunto <strong>de</strong> la Interacción<br />
Tiempo<br />
Diagrama temporal<br />
correspondiente p<br />
a la interacción<br />
79<br />
81
Tiempo<br />
Máquinas <strong>de</strong> Estados<br />
“St “Statecharts” t h t ”[H [Harel] l]<br />
Representan el comportamiento <strong>de</strong> entida<strong>de</strong>s ( pe p.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 />
82<br />
84<br />
Tiempo<br />
Máquinas <strong>de</strong> Estados<br />
Comienzo Estados<br />
Fin<br />
digit(n)<br />
start Partial Dial<br />
Transiciones<br />
digit(n)<br />
83<br />
85
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 />
Máquinas <strong>de</strong> Estados<br />
Componentes Ortogonales:<br />
Incomplete<br />
lab done<br />
Lab1 Lab2<br />
Nombre<br />
Transiciones<br />
internas<br />
Term<br />
Project<br />
project done<br />
Passed<br />
Final<br />
Test<br />
fail<br />
pass<br />
Failed<br />
86<br />
88<br />
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 />
Máquinas <strong>de</strong> Estados<br />
PPseudo d - estados: t d<br />
Fork / Join.<br />
Initial.<br />
Deep History / Shallow History. H* H<br />
Junction.<br />
Choice.<br />
Entry / Exit point.<br />
Terminate.<br />
digit(n)<br />
Partial Dial [number.isValid()]<br />
entry/number.append(n)<br />
y pp ( )<br />
A1 A2<br />
digit(n)<br />
Setup Cleanup<br />
B1 B2<br />
Fork Join<br />
87<br />
89
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 />
Máquinas q <strong>de</strong> Estados<br />
Estado Histórico. Ejercicio.<br />
t2<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 <strong>con</strong> 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 />
B<br />
B21<br />
t3<br />
90<br />
92<br />
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 />
Máquinas <strong>de</strong> Estados<br />
Pseudo - estados: Junction.<br />
Pseudo - estados: Choice.<br />
t2<br />
B<br />
B21<br />
t3<br />
91<br />
95
Máquinas <strong>de</strong> Estados<br />
UUn ttransición i ió pue<strong>de</strong> d ttener:<br />
[not driver.<br />
<strong>de</strong>tectarAbierto()]<br />
C<br />
[drriver.<strong>de</strong>tectarrAbierto()]<br />
eject e ()/<br />
driver.abrir d () (<br />
Evento.<br />
Eventos Eventos temporales: tm(n)<br />
Acción.<br />
pre-<strong>con</strong>diciones (guardas) y post- <strong>con</strong>diciones.<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 />
Ejemplo. Diagrama <strong>de</strong> estados para la<br />
clase ReproductorCD<br />
p<br />
Cerrado<br />
eject ()/<br />
driver.cerrarr<br />
()<br />
Abierto<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 />
Stop driver.play(actual, 0) Play<br />
stop()/<br />
driver.stop();<br />
NumActual=1<br />
NumActual 1<br />
actual=<br />
disco.obtenerCancion(NumActual)<br />
Play()/<br />
driver.pllay(actual,<br />
Tppausa)<br />
apagar ()/<br />
driver.stop();<br />
driver.apagar()<br />
endOfSong()/<br />
NumActual+=1<br />
Pause() )/<br />
Tpausa = driver.stopp()<br />
Pause<br />
C<br />
96<br />
[NumActual
Ejercicio<br />
Interface provisto por el <strong>con</strong>trolador:<br />
getTime() : Devuelve la hora actual.<br />
refreshTimeDisplay() : Repinta la hora en el visor <strong>con</strong> 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 />
100<br />
bottomRightReleased.<br />
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 />
103<br />
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 />
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 />
Rectangle<br />
shapeSelected(Circle)<br />
h S l t d(Ci l )<br />
shapeSelected(Rectangle)<br />
Circle<br />
102<br />
104
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(Insert)/<br />
Canvas.Insert<br />
Move<br />
mo<strong>de</strong>Select(Delete)/ ( )/<br />
Canvas.Delete<br />
Delete<br />
mo<strong>de</strong>Select(Move)/<br />
CCanvas.Move M<br />
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 />
Semántica basada en Re<strong>de</strong>s <strong>de</strong> Petri. No obstante no se<br />
107<br />
da una transformación a Re<strong>de</strong>s <strong>de</strong> Petri.<br />
105<br />
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 />
Insertingg<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 />
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 />
Diagramas g <strong>de</strong> Actividad<br />
Ejemplo<br />
[found<br />
coffee]<br />
Find<br />
Beverage g<br />
Put Coffee<br />
Put Filter<br />
in Filter in Machine<br />
Add Water<br />
to Reservoir<br />
move<br />
Turn on<br />
Machine<br />
Brew<br />
coffee<br />
<strong>de</strong>lete<br />
106<br />
/ coffeePot.turnOn<br />
[no coffee]<br />
Get<br />
Cups<br />
light goes out<br />
Pour<br />
Coffee<br />
[found cola] Get cans<br />
of cola<br />
[no cola]<br />
Drink<br />
108
Diagramas <strong>de</strong> Actividad<br />
Swimlanes<br />
Indice<br />
Introducción.<br />
Diagramas <strong>de</strong> Clases y Objetos.<br />
Otros Diagramas. g<br />
OCL.<br />
Acción Semántica Semántica.<br />
Perfiles.<br />
Bibliografía g<br />
Lecturas sugeridas/ejercicios.<br />
109<br />
111<br />
Diagramas <strong>de</strong> Actividad<br />
Flujos <strong>de</strong> Objetos: Objectflows<br />
OCL: Object Constraint Language<br />
Lenguaje <strong>de</strong> restricciones para expresar <strong>con</strong>diciones<br />
adicionales que no po<strong>de</strong>mos expresar <strong>con</strong> diagramas y<br />
cardinalida<strong>de</strong>s.<br />
Combinar diagramas y especificaciones textuales.<br />
Lenguaje preciso, no ambiguo, <strong>de</strong>clarativo, tipado, basado<br />
en matemáticas<br />
<strong>con</strong>juntos) <strong>con</strong>juntos).<br />
(lógica <strong>de</strong> predicados y teoría <strong>de</strong><br />
Útil en DSDM: 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 />
112<br />
110
Ejemplos<br />
Flight<br />
Flightnr: Integer<br />
availableSeats(): Integer<br />
0 0.. *<br />
flights<br />
1<br />
plane<br />
Airplane<br />
numberOfSeats: Integer<br />
flights 0 0.. *<br />
passengers<br />
0..*<br />
PPerson<br />
name: String<br />
También es un lenguaje <strong>de</strong> <strong>con</strong>sultas (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() isUnique(numSegSoc)<br />
Context Persona::<strong>con</strong>tratarHipoteca(sum: Dinero, aval: Casa)<br />
pre: self.hipotecas.mensual->sum()+sum = aval.hipotecas.principal->sum()<br />
113<br />
115<br />
Ejemplos<br />
Casa<br />
Persona<br />
valor: Dinero<br />
0 0.. *<br />
casas<br />
1 numSegSoc: S S I<strong>de</strong>ntificador<br />
Id ifi d<br />
propietario sueldo: Dinero<br />
aval 1<br />
Hipoteca<br />
principal: Dinero<br />
<strong>con</strong>tratarHipoteca(sum: Dinero,<br />
aval: Casa) )<br />
1 <strong>con</strong>tratante<br />
0..* mensual: Dinero 0..*<br />
hipotecas fechaInicio: Fecha<br />
fechaFinal: Fecha<br />
hipotecas<br />
Reglas adicionales:<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 <strong>con</strong>tratar una nueva hipoteca si el salario <strong>de</strong> la persona<br />
es suficiente.<br />
5. Sólo es posible <strong>con</strong>tratar una nueva hipoteca si el valor <strong>de</strong> la casa aval<br />
es suficiente.<br />
Ejemplos<br />
“Los PCs pue<strong>de</strong>n <strong>con</strong>ectarse <strong>con</strong> un único Hub, los servidores <strong>con</strong> uno o varios”<br />
Context PC<br />
Inv: cable_equipo->size() = 1<br />
Context Servidor<br />
Inv: cable_equipo->size() >= 1<br />
114<br />
116
Ejercicio<br />
“Un Hub no pue<strong>de</strong> <strong>con</strong>ectarse <strong>con</strong>sigo mismo a través <strong>de</strong><br />
un puerto”<br />
Context Cable_Hubs<br />
Inv: Puerto_Hub.hub->asSet()->size() = 2<br />
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 />
<strong>con</strong>text 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 />
<strong>con</strong>text 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 />
117<br />
119<br />
Ejemplos<br />
parents<br />
0..*<br />
children 0..*<br />
Ejemplos Ejemplos. Colecciones.<br />
Colecciones<br />
Tipos: Set, Or<strong>de</strong>redSet, Bag, Sequence.<br />
Operaciones <strong>de</strong> bucle <strong>con</strong> colecciones:<br />
select(expr): selecciona los elementos que cumplan una <strong>con</strong>dición.<br />
coleccion->select( expresion-logica )<br />
coleccion->select( l i l t( v | expresion-logica-<strong>con</strong>-v)<br />
i l i )<br />
coleccion->select( v : Type | expresion-logica-<strong>con</strong>-v)<br />
<strong>con</strong>text t t CCompany iinv:<br />
self.employee->select(age < 25)->notEmpty()<br />
<strong>con</strong>text Company inv:<br />
self.employee->select(gen<strong>de</strong>r=female)->notEmpty()<br />
118<br />
120
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-<strong>con</strong>-v )<br />
coleccion->forAll( v : Type | expresion-logica-<strong>con</strong>-v )<br />
<strong>con</strong>text 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 : Person P | p.isUnemployed i U l d = FFalse l )<br />
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 <strong>con</strong>dición.<br />
source->reject(expr)<br />
Devuelve una colección <strong>con</strong> los elementos <strong>de</strong> source que no cumplen la<br />
<strong>con</strong>dición.<br />
source->sortedBy(expr)<br />
Or<strong>de</strong>na source, source resulta en un Or<strong>de</strong>redSet<br />
121<br />
123<br />
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-<strong>con</strong>-v )<br />
coleccion->exists( v : Type | expresion-logica-<strong>con</strong>-v )<br />
<strong>con</strong>text 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 />
<strong>con</strong>-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 />
Indice<br />
Introducción.<br />
Diagramas <strong>de</strong> Clases y Objetos.<br />
Otros Diagramas. g<br />
OCL.<br />
Acción Acción Semántica.<br />
Perfiles.<br />
Bibliografía g<br />
Lecturas sugeridas/ejercicios.<br />
aña<strong>de</strong> un elemento a una colección<br />
122<br />
124
Acción Semántica<br />
Una parte <strong>de</strong>l meta meta-mo<strong>de</strong>lo mo<strong>de</strong>lo <strong>de</strong> UML <strong>con</strong>tiene la<br />
especificación <strong>de</strong> un lenguaje para la manipulación <strong>de</strong><br />
mo<strong>de</strong>los (i.e. sólo la sintaxis abstracta).<br />
Mo<strong>de</strong>los similares a los <strong>de</strong> flujo <strong>de</strong> datos.<br />
Permite <strong>de</strong>scribir el <strong>con</strong>tenido <strong>de</strong> métodos, y acciones<br />
ejecutables en un lenguaje abstracto, antes <strong>de</strong> la<br />
iimplementación. l ió<br />
Se persigue un modo estándar estándar, in<strong>de</strong>pendiente <strong>de</strong> la<br />
plataforma y <strong>de</strong> la implementación <strong>de</strong> especificar<br />
comportamientos <strong>de</strong>tallados.<br />
125<br />
¿Primer paso hacia la “ejecutabilidad” <strong>de</strong> mo<strong>de</strong>los UML?<br />
Acción Semántica<br />
Activida<strong>de</strong>s. Ejemplo.<br />
Sintaxis abstracta<br />
(parcial)<br />
127<br />
(De C. Bock)<br />
Acción Semántica<br />
AAcciones i y Activida<strong>de</strong>s.<br />
A ti id d<br />
Acción: Unidad fundamental <strong>de</strong> comportamiento.<br />
p<br />
Convierte un <strong>con</strong>junto <strong>de</strong> entradas en un <strong>con</strong>junto <strong>de</strong><br />
salidas salidas.<br />
Las entradas pue<strong>de</strong>n ser salidas <strong>de</strong> otras acciones<br />
(dataflow).<br />
LLas acciones i están tá <strong>con</strong>tenidas t id en activida<strong>de</strong>s, ti id d que lles<br />
proporcionan un <strong>con</strong>texto, así como restricciones <strong>de</strong><br />
secuencialidad y <strong>con</strong>trol, y mecanismos <strong>de</strong> estructuración<br />
anidada. id d<br />
Lenguaje <strong>de</strong> acción semántica: acciones<br />
primitivas+mecanismos <strong>de</strong> estructuración <strong>de</strong> 126 las<br />
activida<strong>de</strong>s.<br />
Acción Semántica<br />
Activida<strong>de</strong>s. Ejemplo.<br />
Sintaxis abstracta<br />
(parcial)<br />
128
Indice<br />
Introducción.<br />
Diagramas <strong>de</strong> Clases y Objetos.<br />
Otros Diagramas. g<br />
OCL.<br />
Acción Semántica.<br />
Perfiles.<br />
Bibliografía g<br />
Lecturas sugeridas/ejercicios.<br />
Perfiles<br />
En UML1.x: estereotipos y etiquetas<br />
<br />
UML::Class<br />
<br />
Desventajas:<br />
Las etiquetas no tienen tipo, son Strings.<br />
No es posible <strong>de</strong>clarar nuevas asociaciones.<br />
<br />
MiComponente<br />
{ transactional}<br />
Formalmente la extensión se realiza en el nivel M1. “Semanticamente”<br />
en el M2. 2<br />
M0<br />
M3 MOF Meta-mo<strong>de</strong>lo <strong>de</strong> MOF<br />
M2 UML Meta-mo<strong>de</strong>lo <strong>de</strong> UML<br />
M1<br />
MMo<strong>de</strong>los d l UML<br />
Datos/Tiempo ejecución<br />
129<br />
131<br />
Perfiles<br />
MMecanismos i d<strong>de</strong> extensión t ió (i (i.e. no modificación) difi ió ) para<br />
<strong>de</strong>clarar nuevas <strong>con</strong>strucciones <strong>de</strong>ntro <strong>de</strong> UML,<br />
adaptadas p a un dominio específico. p<br />
Útiles para: p<br />
Dar una terminología adaptada a un dominio específico (p.ej.:<br />
EJBs, CORBA, Servicios web, etc).<br />
Dar una sintaxis para elementos que no tienen notación (p (p.ej.: ej :<br />
acciones).<br />
Dar una notación distinta para un símbolo existente.<br />
Añadir “semántica” que no se especifica en el meta meta-mo<strong>de</strong>lo. mo<strong>de</strong>lo<br />
Añadir restricciones adicionales.<br />
Añadir información adicional útil para transformaciones.<br />
Ejemplo j p<br />
Un perfil sencillo para EJB<br />
130<br />
132
Ejemplo j p<br />
Definiendo un perfil<br />
Sintaxis <strong>con</strong>creta <strong>de</strong> un stereotype<br />
Sintaxis abstracta <strong>de</strong> un stereotype<br />
Ejemplo<br />
Perfil para servicios web<br />
http://www.ibm.com/<strong>de</strong>veloperworks/rational/library/05/419_<br />
133<br />
135<br />
Ejemplo j p<br />
Aplicación <strong>de</strong> perfiles<br />
Clases como<br />
tipos <strong>de</strong> las<br />
propieda<strong>de</strong>s <strong>de</strong>l<br />
stereotype<br />
Perfiles en UML2 <strong>UML2.0</strong> 0<br />
FFormalmente l t seguimos i realizando li d lla extensión t ió<br />
en el nivel M1.<br />
Mejor soporte <strong>de</strong> propieda<strong>de</strong>s y asociaciones<br />
que en la versión 1.x.<br />
¿Cuándo realizar un profile y cuándo crear un<br />
meta-mo<strong>de</strong>lo basado en MOF?.<br />
Este mecanismo no sería necesario <strong>con</strong><br />
herramientas más potentes <strong>de</strong> meta-mo<strong>de</strong>lado<br />
(que permitan acce<strong>de</strong>r al meta meta-mo<strong>de</strong>lo mo<strong>de</strong>lo <strong>de</strong> UML) UML).<br />
136<br />
134
Perfiles<br />
Multitud <strong>de</strong> perfiles “no estándar”.<br />
Perfiles promovidos por la OMG:<br />
CORBA.<br />
CORBA Component Mo<strong>de</strong>l (CCM).<br />
Enterprise Application Integration (EAI). (EAI)<br />
Enterprise Distributed Object Computing (EDOC) (UML 1.4):<br />
Enterprise Collaboration Architecture (ECA).<br />
Metamo<strong>de</strong>l and UML Profile for Java and EJB.<br />
Fl Flow Composition C iti MMo<strong>de</strong>l d l (FCM)<br />
UML Profile for Patterns<br />
UML Profile for ECA<br />
UML Profile for Meta Object Facility<br />
UML Profile P fil for f Relationships<br />
R l ti hi<br />
Real-Time Embed<strong>de</strong>d Systems (MARTES).<br />
QoS and Fault Tolerance Characteristics and Mechanisms<br />
Schedulability, y Performance and Time<br />
System on a Chip (SoC).<br />
<strong>Software</strong> Radio.<br />
Voice.<br />
Systems Engineering (SysML). (SysML)<br />
Testing.<br />
Otros: SPEM.<br />
Bibliografía: UML<br />
Web <strong>de</strong> la OMG sobre UML: http://www.uml.org<br />
UML 2.0 in a Nutshellby Dan Pilone; Neil Pitman. O'Reilly. June 2005<br />
Perdita Stevens, Rob Pooley. “Utilización <strong>de</strong> UML en Ingeniería <strong>de</strong>l<br />
<strong>Software</strong> <strong>con</strong> Objetos y Componentes” Componentes . Addison Wesley Wesley, 2002 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 />
UML 2 Toolkit. Eriksson, H. E., Penker, M., Lyons, B., Fado, D. OMG<br />
Press, Wiley. 2004.<br />
Craig Larman Larman. “Applying Applying UML and Patterns Patterns” . Prentice Hall Hall. 2002 2002.<br />
137<br />
139<br />
Indice<br />
Introducción.<br />
Diagramas <strong>de</strong> Clases y Objetos.<br />
Otros Diagramas. g<br />
OCL.<br />
Acción Semántica.<br />
Perfiles.<br />
Bibliografía. g<br />
Lecturas sugeridas/ejercicios.<br />
Bibliografía<br />
UML:<br />
Infraestructura y Superestructura:<br />
http://www.omg.org/technology/documents/formal/uml.htm<br />
Atiidd Activida<strong>de</strong>s y AAcciones: i<br />
Conrad Bock: “UML 2 Activity and Action Mo<strong>de</strong>ls”, in Journal of<br />
Object Technology, vol. 2, no. 4, July-August 2003, pp. 43-53.<br />
http://www.jot.fm/issues/issue_2003_07/column3<br />
Conrad Bock: “UML 2 Activity and Action Mo<strong>de</strong>ls Part 2:<br />
Actions”, Actions , in inJournal Journal of Object Technology, vol. 2, no. 5, pp. 41 41-<br />
56. http://www.jot.fm/issues/issue_2003_09/column4<br />
“UML 2 Activity and Action Mo<strong>de</strong>ls Part 3: Control No<strong>de</strong>s”, in<br />
Journal of Object Technology, Technology vol vol. 22, no no. 66, pp pp. 7-23 7-23.<br />
http://www.jot.fm/issues/issue_2003_11/column1<br />
Conrad Bock: “UML 2 Activity and Action Mo<strong>de</strong>ls Part 4: Object<br />
NNo<strong>de</strong>s”, d ” iin JJournal lof fObj Object tT Technology, h l vol. l 33, no. 11, pp. 27 27-<br />
41. http://www.jot.fm/issues/issue_2004_01/column3<br />
138<br />
140
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 <strong>Software</strong><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 />
Bibliografía<br />
Perfiles UML.<br />
Lista <strong>de</strong> perfiles p estándar:<br />
http://www.omg.org/technology/documents/profile_catalog.htm#UML_for_EDOC<br />
141<br />
143<br />
Bibliografía<br />
OCL<br />
The Object Constraint Language 2nd Edition. Getting your<br />
Mo<strong>de</strong>ls Ready for MDA. MDA Warmer, Warmer Kleppe Kleppe. Addison Addison-Wesley. Wesley<br />
2003.<br />
Especificación <strong>de</strong> OCL 2.0: http://www.omg.org/docs/ptc/03-<br />
10-14.pdf<br />
Lecturas Recomendadas<br />
D. D Th Thomas. “UML – UUnified ifi d or UUniversal i l<br />
Mo<strong>de</strong>ling Language?”. Journal of Object<br />
Oi Oriented t d TTechnology. h l VVoll 2 (1) (1), JJanuary-<br />
February 2003.<br />
S. S. Anonsen. “Experiences Experiences in Mo<strong>de</strong>ling for a<br />
Domain Specific Language”. UML’04<br />
Satelite Activities, LNCS 3297, pp.: 187- 187<br />
197, Springer (2005).<br />
142<br />
144