Facultad de Ingeniería Departamento de Ingeniería de Sistemas y Computación

Diagramas de secuencia Fragmentos Combinados: caminos alternativos

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

1

Ejemplo •

Vamos a continuar con el ejemplo del Cinema y el modelamiento del comportamiento del caso de uso “Crear Película”

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

2

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.

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

3

Ejemplo Despué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.

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

4

Ejemplo ¿Qué pasaría si la película que se va a crear ya existe?

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

5

Ejemplo Según el diagrama de secuencias propuesto, habría duplicaciones de películas y ese es un comportamiento que no queremos tener.

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

6

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.

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

7

Ejemplo Para esto invoca a su método buscarPelicula(nombre) con el fin de buscar si existe una película con el mismo nombre.

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

8

Ejemplo Aquí 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

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

9

• Para poder representar alternativas o ejecuciones condicionales en los diagramas de secuencia debemos recurrir a los fragmentos combinados.

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

10

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.

Operador de interacción

Fragmento Combinado

Operandos de interacción Guardas o Condiciones

Fragmento Combinado

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. Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

11

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.

12

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.

13

Ejemplo Necesitamos poder expresar que lo que está señalado en la figura se ejecutará únicamente si la película no existe

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

14

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)

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

15

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)

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

16

Ejemplo

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

17

Ejemplo Si la película existe la interacción de secuencia omite este paso, evitando duplicaciones de películas.

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

18

Facultad de Ingeniería Departamento de Ingeniería de Sistemas y Computación

Diagramas de secuencia Fragmentos Combinados: ciclos

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

19

• 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.

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

20

Ejemplo - Universidad •

Suponga que tenemos un diagrama de clases simple sobre una Universidad

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

21

Ejemplo - Universidad •

Este diagrama modela los elementos básicos de la realidad, en donde una Universidad se compone de programas, estudiantes, profesores y cursos.

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

22

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.

Departamento de Ingeniería de Sistemas y Computación - Universidad de los Andes | Nivelatorio de Modelaje

23

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.”

24

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?

25

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.

26

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

27

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

28

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.

29

De acuerdo con el patrón experto, es el programa quién puede encontrar el objeto curso correspondiente a un código dado.

30

Así, agregamos el método buscarCurso(código) a la clase Programa.

31

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.

32

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.

33

Hay una nueva asociación de composición que indica que la universidad es la dueña de los cursos.

34

La asociación de composición entre Programa y Curso cambió por una asociación compartida.

35

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.

36

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 37

Como la universidad es la dueña de los programas, siguiendo con el patrón experto

38 38

agregamos el método buscarPrograma(nombre) a la clase Universidad.

39

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?”

40

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)

41

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.

42

Informalmente la secuencia de interacciones será: 1. 2. 3. 4. 5.

Recibir la petición Encontrar el programa Delegar al programa la búsqueda de la respuesta El programa, debe encontrar el curso Y delegar en el curso la búsqueda de la respuesta

43

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

44

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.

45

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.

46

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.

47

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.

48

Vamos a modelar el comportamiento del método darMujeres() de la clase Curso en un nuevo diagrama de secuencia.

49

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 genero 3. Si es femenino entonces sumar a la cuenta

50

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

51

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 ciclo 4. El avance en la iteración

Veamos cómo se hace esto en el diagrama de secuencia 52

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()

53

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.

54

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

55

Para modelar ese comportamiento, utilizamos un nuevo fragmento combinado de tipo alternativo o condicional

56

Si existe un elemento en la colección estudiantes, se solicita el genero al objeto estudiante genero = darGenero()

57

Tenemos entonces la condición genero =‘F’ Que si es verdadera entonces incrementamos el número de mujeres. Si es falsa no haremos nada

58

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.

59

Con esto concluimos el ejemplo de ciclos con los fragmentos combinados

60