Post on 21-Oct-2018
transcript
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Facultad de Ingeniería
Departamento de Ingeniería de Sistemas y
Computación
Diagramas de secuencia
Fragmentos Combinados:
caminos alternativos
1
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo
• Vamos a continuar con el ejemplo del Cinema y el modelamiento del
comportamiento del caso de uso “Crear Película”
2
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo• De acuerdo con el análisis que hicimos en la lección previa, la clase
Cinema es la responsable de crear una nueva película.
• Estamos suponiendo en nuestro ejemplo que la película se crea con
su nombre que es lo que la identifica de manera única.
3
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
EjemploDespués de nuestro análisis llegamos al diagrama de interacción que se muestra en la figura.
El objeto multiplex recibe el mensaje de creación, crea el objeto película y lo agrega la película a la cartelera.
4
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo
¿Qué pasaría si la película que se va a crear ya existe?
5
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo
Según el diagrama de secuencias propuesto, habría duplicaciones de
películas y ese es un comportamiento que no queremos tener.
6
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo
Para evitar las duplicaciones, el objeto multiplex es responsable de verificar
primero si el nombre de la película que ingresa como argumento del método
crearPelicula ya existe en su cartelera.
7
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo
Para esto invoca a su método buscarPelicula(nombre) con el fin de buscar
si existe una película con el mismo nombre.
8
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
EjemploAquí hay dos alternativas:
1. La película no existe en la cartelera y en este caso hay que crearla
2. La película ya existe y en este caso decidimos que no vamos a hacer nada
9
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
• Para poder representar alternativas o
ejecuciones condicionales en los
diagramas de secuencia debemos recurrir
a los fragmentos combinados.
10
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje11
Un fragmento combinado es un agrupamiento lógico, representado por un rectángulo que contiene la estructura condicional que afecta el flujo de los mensajes.
En la figura podemos observar la sintaxis básica que es el rectángulo que delimita el alcance del fragmento.El tipo del fragmento se escribe en la parte superior izquierda.
Operador de interacción
Guardas o Condiciones
Fragmento Combinado
Fragmento Combinado
Operandos de
interacción
12
Los fragmentos combinados sirven para representar secuencias de interacción que dependen de que una condición o guarda se cumpla.
Sirven para denotar caminos alternativos, secuencias que se pueden ejecutar en paralelo, secuencias en orden estricto, ciclos de ejecución y varios más.
En esta lección vamos a estudiar solamente los fragmentos combinados para representar caminos alternativos o condicionales y ciclos.
Por favor remitirse a las referencias si quiere conocer más sobre este tema.
13
Vamos a precisar la definición de un fragmento combinado alternativo con el ejemplo de la creación de la película.
De acuerdo con lo planteado, queremos expresar que sólo crearemos la película en la cartelera si esta no existe.
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo
Necesitamos poder expresar que lo que está señalado en la figura se
ejecutará únicamente si la película no existe
14
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo
Para representar lo anterior en la sintaxis de los diagramas de secuencia, usamos un
fragmento combinado con operador de interacción alt (por alternativo)
15
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo
Adicionamos una guarda o
condición que pregunta si el
resultado del método
buscarPelicula es igual a null
( lo que implicará que la
película no existe en la
cartelera)
16
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo
17
Sólo si la condición es
verdadera es posible crear un
nuevo objeto de tipo Película.
Note que la interacción para
la creación está ahora dentro
del rectángulo que define el
fragmento combinado.
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo
Si la película existe la interacción de secuencia omite este paso, evitando duplicaciones de películas.
18
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Facultad de Ingeniería
Departamento de Ingeniería de Sistemas y
Computación
Diagramas de secuencia
Fragmentos Combinados: ciclos
19
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
• Para continuar la explicación de los
fragmentos combinados vamos a retomar
el ejemplo de Universidad para modelar
un caso de uso más complejo.
20
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo - Universidad
• Suponga que tenemos un diagrama de clases simple sobre una Universidad
21
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo - Universidad
• Este diagrama modela los elementos básicos de la realidad, en donde una
Universidad se compone de programas, estudiantes, profesores y cursos.
22
Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje
Ejemplo - Universidad
• Suponga que ahora nos interesa modelar la interacción de los
objetos en este sistema para describir el desarrollo del siguiente
caso de uso:– Calcular el número total de mujeres inscritas en un curso, dado su código de un
programa dado.
23
24
Vamos a empezar a modelar el caso de uso “calcular el número de mujeres
inscritas en un curso, dado su código, de un programa dado”
Lo primero es que de acuerdo con el diagrama de clases, podemos replantear
el caso de uso de la siguiente forma:
“Calcular el número de estudiantes cuyo género es Femenino y que estén
inscritas en un curso, dado su código, de un programa dado su nombre.”
25
Hay varias preguntas que debemos hacernos.
1. Quién es responsable de saber el género de un estudiante?
2. Quién es responsable de saber cuántos estudiantes con
genero femenino hay en un curso?
3. Quién es responsable de encontrar el curso que
corresponde a un código dado?
4. Quién es responsable de encontrar el programa que
corresponde a un nombre dado?
5. Quién es el responsable de recibir del actor externo la
información del nombre del programa y del código curso
sobre el que se quiere saber cuántas mujeres hay?
26
Vamos a utilizar el patrón experto para responder estas preguntas.Para responder la primera pregunta: Quién es responsable de saber el género de un estudiante? Utilizando el patrón experto la respuesta es fácil:Es el estudiante quien tiene esa información.
Como consecuencia agregamos el método: darGenero() a la clase Estudiante.
27
Para responder la segunda pregunta: “Quién es responsable de saber cuántos estudiantes con genero femenino hay en un curso?”Lo primero que hay que notar es que los estudiantes inscritos en un curso están modelados en el diagrama por una asociación compartida entre las clases Curso y Estudiante
28
Siguiendo de nuevo el patrón experto, es el curso quién sabe cuáles son sus estudiantes inscritos y por lo tanto puede dar el número de mujeres que hay en esa colección.Agregamos entonces el método darNumeroMujeres() a la clase curso
29
Para responder la tercera pregunta: “Quién es responsable de encontrar el curso que corresponde a un código dado? “Hay que notar que, de acuerdo con el diagrama propuesto, cada curso le pertenece a un programa.
30
De acuerdo con el patrón experto, es el programa quién puede encontrar el objeto curso correspondiente a un código dado.
31
Así, agregamos el método buscarCurso(código) a la clase Programa.
32
Aquí podríamos cuestionarnos y en ese caso verificar con el experto del dominio de la Universidad, si los cursos en realidad le pertenecen a los programas o si le pertenecen a la universidad.
33
Si, después de validar, encontráramos que los cursos le pertenecen a la universidad y que tienen un código único, tendríamos que cambiar nuestro diagrama de clases por el que se muestra en la figura.
34
Hay una nueva asociación de composición que indica que la universidad es la dueña de los cursos.
35
La asociación de composición entre Programa y Curso cambió por una asociación compartida.
36
Note que en este caso el diagrama es más acoplado porque ahora hay una nueva relación entre dos clases. Sin embargo, para resolver este caso de uso no tendríamos que interactuar con los objetos programa lo que puede significar ser más eficiente. La decisión dependerá entonces del caso concreto de la universidad que estemos modelando.
37
Para seguir con nuestro ejemplo, no vamos a cambiar el diagrama de clases y vamos a contestar la siguiente pregunta:“Quién es responsable de encontrar el programa que corresponde a un nombre dado?”
37
38
38
Como la universidad es la dueña de los programas, siguiendo con el patrón experto
39
agregamos el método buscarPrograma(nombre) a la clase Universidad.
40
Nos falta contestar la pregunta:” Quién es el responsable de recibir del actor externo la información del nombre del programa y del código del curso sobre el que se quiere saber cuántas mujeres hay inscritas?”
41
El responsable es la universidad quien está jugando el rol del controlador del sistema y recibe las peticiones de los actores externos. Para esto agregamos el método:darNumeroMujeres(nombrePrograma, código)
42
Ahora vamos a construir un diagrama de secuencia para modelar el comportamiento del caso de uso.
Para simplificar, vamos a suponer que tenemos como condiciones iniciales, que el nombre del programa y el código del curso dados son válidos, es decir que ya existen en el sistema los objetos correspondientes a ese nombre y a ese código.
43
Informalmente la secuencia de interacciones será:
1. Recibir la petición2. Encontrar el programa3. Delegar al programa la búsqueda de la respuesta4. El programa, debe encontrar el curso5. Y delegar en el curso la búsqueda de la respuesta
44
1. Recibir la petición
Supondremos que ya hay en ejecución un objeto de la clase Universidad, que estamos llamando “u” , quien es el responsable de recibir la petición del actor externo
45
2. Buscar el programa
El objeto “u” recibe en los argumentos el nombre del programa y el código del curso.
Este objeto es responsable de buscar el objeto Programa que corresponde al nombre dado. Recuerde que estamos suponiendo que el nombre es válido y que, por lo tanto, existe un objeto programa con ese nombre.
46
Ahora que el objeto “u” ya tiene el objeto programa correspondiente con la petición, puede delegarle el resto de la interacción enviándole el mensaje darNumero Mujeres y enviándole como argumento el código del curso.
47
3. Buscar el curso
El objeto programa es responsable de buscar el curso que corresponde al código dado. De nuevo, estamos suponiendo que existe un curso con ese código.
48
Ahora que ya tiene le curso puede interactuar con él y delegarle la responsabilidad de calcular el número de mujeres que hay inscritas en ese curso.
49
Vamos a modelar el comportamiento del método darMujeres() de la clase Curso en un nuevo diagrama de secuencia.
50
Para calcular el número de mujeres debemos:1. iterar sobre toda la colección de los estudiantes inscritos en este curso 2. por cada uno preguntar el genero3. Si es femenino entonces sumar a la cuenta
51
Vamos a introducir los fragmentos combinados para modelar una iteración o ciclo.
Igual que en el caso de los fragmentos combinados para los caminos alternativos, Debemos delimitar el alcance del ciclo con un rectángulo que tiene en la parte superior izquierda el tipo de fragmento, en este caso es un loop
52
Para modelar un ciclo necesitamos los siguientes elementos:
1. La inicialización del ciclo
2. La guarda o condición del ciclo
3. El cuerpo del ciclo4. El avance en la
iteración
Veamos cómo se hace esto en el diagrama de secuencia
53
En esta notación la forma de indicar que se está recorriendo la colección es utilizando la expresión:
*next() que retorna el próximo elemento de la colección
Entonces para inicializar el ciclo debemos utilizar esta expresión para señalar que tenemos el primer elemento. Esto se hace antes del rectángulo.estudiante = *next()
54
Para la guarda del ciclo, la representamos con una condición que significa que si el valor es verdadero se ejecutarán la secuencia que sigue y que está dentro del rectángulo. Si la condición es falsa, se termina la ejecución del ciclo.En este ejemplo la guarda es (estudiante != null) aquí estamos utilizando la variable estudiante para recorrer la colección.
55
En este ejemplo, el cuerpo del ciclo corresponde a la verificación de si el estudiante que se está procesando es mujer o no. Si lo es, debemos aumentar el numero de mujeres inscritas en ese curso. Sino, no hacemos nada
56
Para modelar ese comportamiento, utilizamos un nuevo fragmento combinado de tipo alternativo o condicional
57
Si existe un elemento en la colección estudiantes, se solicita el genero al objeto estudiante
genero = darGenero()
58
Tenemos entonces la condición genero =‘F’ Que si es verdadera entonces incrementamos el número de mujeres. Si es falsa no haremos nada
59
Una vez terminado el framento alt debemos avanzar en la iteración. Para esto de nuevo utilizamos:estudiante = *next()
Así queda completa la definición del ciclo.
60
Con esto concluimos el ejemplo de ciclos con los fragmentos combinados