Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Extensión
Casos prácticos de UML
CELIA GUTIÉRREZ COSÍO
Todos los derechos reservados. Cualquier forma de reproducción, distribución,
comunicación pública o transformación de esta obra sólo puede ser realizada
con la autorización expresa de sus titulares, salvo excepción prevista por la ley.
Primera edición:
Septiembre de 2011
Enunciado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Diagramas de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Especificaciones de casos de uso. . . . . . . . . . . . . . . . . . . . . . . . . 13
Diagrama de clases (diseño previo) . . . . . . . . . . . . . . . . . . . . . 13
Diagrama de clases (diseño detallado) . . . . . . . . . . . . . . . . . . . 14
Re-estructuración del árbol. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Diagrama de secuencia (diseño previo) . . . . . . . . . . . . . . . . . . 15
Diagrama de secuencia (diseño detallado) . . . . . . . . . . . . . . . . 18
Refinamiento del diagrama de casos de uso y
especificaciones de casos de uso . . . . . . . . . . . . . . . . . . . . . 20
Refinamiento del diagrama de clases . . . . . . . . . . . . . . . . . . . . 21
Solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Diagramas de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Diagramas de agenda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Especificaciones de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . 27
Diagrama de clases (previo y detallado) . . . . . . . . . . . . . . . . . . 31
Re-estructuración del árbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Diagramas de secuencia previos . . . . . . . . . . . . . . . . . . . . . . . . 32
Diagramas de secuencia detallados . . . . . . . . . . . . . . . . . . . . . . 39
Enunciado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Enunciado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Diagrama de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Diagrama de clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Diagrama de secuencia detallado. . . . . . . . . . . . . . . . . . . . . . . . 57
Caso práctico 4: Sistema de ecuaciones de grado “n”
Enunciado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Diagrama de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Diagrama de clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Clases y métodos abstractos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Diagrama de secuencia previo . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Diagrama de secuencia detallado. . . . . . . . . . . . . . . . . . . . . . . . 67
Generación de código para la clase Ecuacion. . . . . . . . . . . . . . 68
Enunciado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Diagrama de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Diagrama de clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Patrón Singleton. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Diagrama de estados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Apéndice: breve manual de uso del Rational Rose . . . . . . . . . . . . 79
CASO PRÁCTICO 1:
Sistema de gestión de agendas y reuniones
1
Adaptado de Juan Pavón. Basado en la práctica del Curso 2008/09
Se pide modelar el caso con la herramienta Bouml 4.9.1, con los siguientes
requisitos:
Diagramas de casos de uso
Se deben crear dos sub vistas de casos de uso dentro de la vista de casos de
uso a la cual se quieren añadir los diagramas de secuencia. Una de las dos
sub vistas contendrá los diagramas de secuencia previos; la otra los
diagramas de secuencia detallados. Este es un ejemplo de cómo quedaría el
navegador del Bouml, para la parte de Tarea y un único caso de uso (se la
considera como si no hubiera mas cosas):
Figura 2. Diagrama de secuencia previo para la secuencia normal del caso de uso CrearTarea
Una heurística para saber a qué clase se le debe dirigir el mensaje es saber
qué clase contiene el método al que quieres llamar.
Figura 13. Diagrama de relaciones entre actores (dentro de los casos de uso)
Caso de uso 2
Nombre: ConcertarReunion
Objetivo: Mediante este caso de uso se decide fecha de
reunion.
Precondiciones entradas: La opción ConcertarREunion ha
sido seleccionada.
Postcondiciones salida: Se ha creado una reunion; se
ha apuntado en la agenda de los invitados.
Caso de uso 3
Nombre: ConcertarReunionArbitraria
Objetivo: Mediante este caso de uso se concierta una
reunion con fecha elegida por el promotor.
Precondiciones entradas: La opción
ConcertarREunionArbitraria ha sido seleccionada.
Postcondiciones salida:
Condición final exitoso: Se ha creado una reunion; se
ha apuntado en la agenda de los invitados. Mensaje
"Reunion creada". Mensaje "Apuntada en agenda".
Condición final fallido: No se crean ni la reunion ni
se apunta en la agenda. Mensaje "Reunion no creada y
no apuntada en agenda"
Actor primario: AdministradorReunion
Actores secundarios: SistemaGestionReuniones, Invitado
Secuencia normal:
1. El AdministradorReunion pide fechas de la reunion
al SistemaGestionReunion.
2. El SistemaGestionReunion le muestra al
AdministradorReunion una lista de fechas segun agendas
de usuarios grupo.
3. El AdministradorReunion selecciona una fecha.
Caso de uso 4
Nombre: ConcertarReunionVotación
Postcondiciones salida:
Secuencia normal:
1. El AdministradorReunion pide fechas de la reunion
al SistemaGestionReunion.
2. El SistemaGestionReunion le muestra al
AdministradorReunion una lista de fechas segun agendas
de usuarios grupo.
3. El AdministradorReunion pide que al
SistemaGestionReunion que se haga una votación de las
fechas.
4. El SistemaGestionReunion pide a los Invitados que
voten.
5. Los invitados votan la fecha.
6. El SistemaGestionReunion muestra la fecha final al
Administrador.
7. El AdministradorReunion proporciona el resto de
datos: titulo, descripcion, objetivos, lugar y
duracion.
8. El SistemaGestionReunion actualiza la informacion
en las agendas de los invitados a la reunión.
9. El SistemaGestionReunion da el mensaje "Reunion
creada" a los invitados y a l administrador de la
reunión.
Flujo alternativo a:
1a. El AdministradorReunion pulsa Cancelar
2a. El SistemaGestionReunion da el mensaje "Reunion no
creada y no apuntada en agenda"
Flujo alternativo b:
3b. El AdministradorReunion pulsa Cancelar
4b. "Reunion no creada y no apuntada en agenda"
Flujo alternativo c:
7c. El AdministradorReunion pulsa Cancelar
8c. "Reunion no creada y no apuntada en agenda"
Se van a exponer los diagramas de secuencia de los casos de uso para los
cuales existe especificación: CrearTarea, ConcertarReuniónArbitraria,
ConcertarReuniónVotación:
Figura 17. Diagrama de secuencia previo del caso de uso CrearTarea (flujo alternativo)
Se han incluido los diagramas de secuencia detallados para los que existen
diagramas de secuencia previos.
Figura 26. Diagrama de secuencia detallado para el caso de uso CrearTarea (flujo alternativo a)
Solución
• Página
• Objeto representable
• Texto
• Objeto gráfico
2
Ejercicio propuesto en el curso 2008/09
• Curvilíneo
• Polígono
• Circulo
• Elipse
• Rectángulo
• Triángulo
• Cuadrado
• Grupo y grupo
• Curvilíneo y elipse
• Polígono y rectángulo
• Polígono y triángulo
• Polígono y cuadrado
3
Incluido en el examen ordinario del curso 2008/09
Figura 37. Diagrama de secuencia detallado de Crear fichero (flujo alternativo binario)
4
Incluído en el examen ordinario del curso 2009/10
Solución
Los diagramas han sido diseñados con Rational Rose Enterprise Edition
2003).
ResuelveEcuacion
Matematico
CreaEcuacion
<<include>>
RepresentaEcuacion
Informatico
RepresentaCompacta RepresentaExtendida
Sumando
Ecuacion
signo : Character
grado : Integer
numerador : Integer
soluciones : Integer[]
denominador : Integer
0..* 1..* grado : Integer
crear()
resolver()
crear()
se_asocia
Representacion
contenido : String
crear()
RepresentacionCompacta RepresentacionExtendida
crear() crear()
: Sistema
: Informatico : Matematico
Introducir grado 1
"2x+1=0"
En este diagrama hay que reflejar las interacciones entre los actores y el
sistema. Tambien sería válido reflejar las interacciones sistema-sistema.
: Informatico : Matematico
crear(1) : Ecuacion
añadirSumando(+,1,2,1)
añadirRepresentacion("compacta")
crear( ) :
RepresentacionCompacta
"2x+1=0"
"2x+1=0"
//Metodos
//…
}
Lo importante en esta pregunta es que en la generación de código, las
relaciones de Ecuación con las clases Representación y Sumando, quedan
reflejadas como nuevos atributos. Nótese que también queda reflejada si la
multiplicidad es con muchos (como un atributo en forma de array) o con
uno solo (como un atributo atómico).
Quetzalix
5
Incluído en el examen extraordinario del curso 2009/10
Solución
1. Alumno.h
2. Alumno.cpp
3. Asignatura.h
4. Asignatura.cpp
5. Optativa.h
6. Optativa.cpp
Alumno.h
class Asignatura;
//##ModelId=4AC0DD610253
class Alumno
{
public:
//##ModelId=4AC0DD78031E
Asignatura* theAsignatura;
//##ModelId=4AC0DEEF0282
String getNombre();
//##ModelId=4AC0DEFE0011
String getApellido();
private:
//##ModelId=4AC0DE740159
String nombre;
//##ModelId=4AC0DE8002EF
};
#include "stdafx.h"
#include "Alumno.h"
#include "Asignatura.h"
//##ModelId=4AC0DEEF0282
String Alumno::getNombre()
{
// TODO: Add your specialized code here.
// NOTE: Requires a correct return value to
compile.
}
//##ModelId=4AC0DEFE0011
String Alumno::getApellido()
{
// TODO: Add your specialized code here.
// NOTE: Requires a correct return value to
compile.
}
//##ModelId=4AC0DD6B03DA
class Asignatura
{
public:
//##ModelId=4AC0DF780205
String getNombre();
private:
//##ModelId=4AC0DF7102A1
String nombre;
};
#endif /* _INC_ASIGNATURA_4AC0DD6B03DA_INCLUDED */
#include "stdafx.h"
#include "Asignatura.h"
//##ModelId=4AC0DF780205
String Asignatura::getNombre()
{
// TODO: Add your specialized code here.
// NOTE: Requires a correct return value to
compile.
}
#include "Asignatura.h"
//##ModelId=4AC0E56102A1
class Optativa
: public Asignatura
{
public:
//##ModelId=4AC0E8460001
int getCreditos();
private:
//##ModelId=4AC0E856038B
int creditos;
};
#endif /* _INC_OPTATIVA_4AC0E56102A1_INCLUDED */
#include "stdafx.h"
#include "Optativa.h"
//##ModelId=4AC0E8460001
int Optativa::getCreditos()
{
// TODO: Add your specialized code here.
return (int)0;
}