1
Ingeniería del Software
Ejercicios de Diseño
Caso de Uso Generar Facturas (Junio 2003) Caso de Uso Grado de Ocupación (Febrero
2004) Caso de Uso Clientes Pelicula (Junio 2004) Caso de Uso Programar Pases (Septiembre
2004) Caso de Uso Eliminar Pases (Febrero 2005)
Se pide:
Diagrama de Secuencia
2
Ingeniería del Software
Ejercicios de Diseño
Caso de Uso Generar Facturas (Junio 2003)
Se pide:
Diagrama de Secuencia
3
Ingeniería del Software
Llamada
teléfonoDestino: Stringdia: Integermes: Integeraño: Integerinicio: Integerduración: Integer/importe: Real
Cliente
teléfono: Stringnombre: Stringnif: Stringdirección: String
Factura
mes: Integeraño: Integercobrada: Boolean=False/total: Integer=0
Tarifa
tipo: Stringprecio: Real
*
1 *
1
* 0..1
/pertenece
1 *
Ejercicio 1: Caso de uso: Generar Facturas
4
Ingeniería del Software
:Administrador :Sistema
generarFacturas(año,mes)
Ejercicio 1: Caso de uso: Generar Facturas
5
Ingeniería del Software
Contrato de la operación generarFacturas: Operación: generarFacturas(año: Integer; mes: Integer)Responsabilidades: Generar las facturas mensuales de los
clientesPrecondiciones: argumentos no nulos y válidosPostcondicones: • 1. Se ha dado de alta una instancia de factura para
cada cliente que tenga como mínimo una llamada en el mes y año indicado
• 2. Se ha asignado el importe de cada llamada• 3. Se han asignado los atributos mes, año, cobrado y
total de la instancia creada.• 4. Se asocia la factura al cliente• 5. Se asocian las llamadas a la factura creada
6
Ingeniería del Software
generarFacturas(año,mes)
:GestorFacturas
gF(año,mes)
importe
[n>0]
precio?()*
*
:Factura
[n>0] importe()
:Tarifa
importeLlamada()
:Cliente :Llamada
numLlamadas(año,mes)
n
* b := añoMes?(año,mes)
[n>0] asociarLlamada()
* asociarLlamada()
7
Ingeniería del Software
generarFacturas(año,mes)
:GestorFacturas
gF(año,mes)
importe
[n>0]
precio?()*
*
:Factura
[n>0] importe()
:Tarifa
importeLlamada()
[n>0] * asociarLlamada()
:Cliente :Llamada
n := numLlamadas(año,mes)
8
Ingeniería del Software
Escogemos el patrón controlador para gestionar el evento externo generarFacturas. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos un controlador de caso de uso: GestorFacturas. Además, esta clase artificial agrupa a todos los clientes de la compañía. Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento.
Por el patrón experto, el método gF es el encargado de verificar que el
cliente haya realizado llamadas en ese mes y año (numLlamadas()>0) para poder crear una factura. El método generarFacturas de la clase GestorFacturas aplica el método gF de Cliente a cada cliente.
Utilizando el patrón experto, se asigna la responsabilidad de calcular el
importe de las distintas llamadas de un cliente a la clase Llamada. Se calcula el /importe de cada llamada - importeLlamada() - y se acumula para el atributo /total de Factura. Para ello debe consultarse el precio de la tarifa de cada llamada.
Utilizando el patrón creador, cada Cliente crea su Factura, la asocia a su
atributo /pertenece y le asigna los valores pertinentes – mes, año, /total –.
Por último, el Cliente, siendo el experto en llamadas, es el que debe
asociar la Factura creada a cada Llamada.
9
Ingeniería del Software
Ejercicios de Diseño
Caso de Uso Grado de Ocupación (Febrero 2004)
Se pide:
Diagrama de Secuencia
10
Ingeniería del Software
Grado de Ocupación: Modelo de Dominio
-ciclo-título-categoría-director-actores-descripción-duración-imagen
Película
-nombre-butacas
Sala
-fecha-horaInicio-horaFin-precio-/vendidas
Pase
*
-End9
*
-End10
-fecha-hora-/importe
Cesta
-num
Entradas*-End11
*-End12
11
Ingeniería del Software
Grado de Ocupación: Diagrama de Secuencia de Sistema
:Administrador :Sistema
gradoOcupacion(ciclo, fecha) : go
12
Ingeniería del Software
Contrato de la operación gradoOcupación:
Operación: gradoOcupacion(ciclo, fecha) : goResponsabilidades: Obtener el grado de ocupación de un
determinado ciclo en una fecha concretaPrecondiciones: argumentos no nulos y válidosPostcondicones:Salida:
go = ratio (en tanto por ciento) entre el total de entradas de un ciclo vendidas hasta una fecha y el total de entradas disponibles de un ciclo determinado.
13
Ingeniería del Software
Grado de Ocupación: Modelo de Dominio
Película
ciclo
título
director
actores
descripción
duracion
imagen
Sala
nombre
butacas
Pase
fecha
horaIncio
horaFin
precio
/vendidas
Entradas
num
Cesta
fecha
hora
importe
* *
*
*
14
Ingeniería del Software
Grado de Ocupación: Modelo de Dominio: Normalización
Película
ciclo
título
director
actores
descripción
duracion
imagen
Sala
nombre
butacas
Pase
fecha
horaIncio
horaFin
precio
/vendidas
Entradas
num
Cesta
fecha
hora
importe
* *
*
*
15
Ingeniería del Software
Grado de Ocupación: Diagrama de clases: accesibilidad
Película
ciclo
título
director
actores
descripción
duracion
imagen
Sala
nombre
butacas
Pase
fecha
horaIncio
horaFin
precio
/vendidas
Entradas
num
Cesta
fecha
hora
importe
* *
*
*Controlador
16
:Pase:Pelicula
Ingeniería del Softwaregra
doO
cupaci
on(c
iclo
,fech
a)
:GestorOcupacion
Tbutacas(ciclo)
butacas()
:Pelicula :Pase :Sala
butacasPase()*
*
TVendidas(ciclo,fecha)
tv
*
vendidasPase(fecha)*
v
:Cesta
vendidas(fecha)*
v
comprobar(fecha)
go=tb/tv*100
tb
b
:Pase:Entradas
17
Ingeniería del Software
Escogemos el patrón controlador para gestionar el evento externo gradoOcupación. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos un controlador de caso de uso: GestorOcupación. Además, esta clase artificial agrupa a todas las películas del festival. Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento.
Por el patrón experto, el método TButacas es el encargado de obtener el
total de butacas disponibles para un ciclo determinado. Para ello, primero se seleccionan todas las películas del ciclo. Con ellas, también por el patrón experto, se seleccionan todos los pases y salas donde se proyecta la película. Acumulamos el resultado en la variable tb.
Por el patrón experto, el método TVendidas es el encargado de obtener el
total de entradas vendidas hasta una fecha. Para ello, primero se seleccionan todas las películas del ciclo. Con ellas, también por el patrón experto, se seleccionan todos los pases. Ahora, también por el patrón experto, seleccionamos las entradas y cestas con fecha menor o igual a la proporcionada. Acumulamos el resultado en la variable tv.
Por último, se obtiene el valor de go = tb / tv * 100
18
Ingeniería del Software
Examen Junio 2003-2004
4a Parte: Diseño: ClientesPelicula
Se pide:
Diagrama de secuencia
19
Ingeniería del Software
Grado de Ocupación: Modelo de Dominio
-código-ciclo-título-categoría-director-actores-descripción-duración-imagen
Película
-código-nombre-butacas
Sala
-fecha-horaInicio-horaFin-precio-/vendidas
Pase
*
-End9
*
-End10
-fecha-hora-/importe
Cesta
-num
Entradas*-End11
*-End12
-nombre-dni-cc-e-mail
Cliente
-End13*
-End141
20
Ingeniería del Software
Grado de Ocupación: Diagrama de Secuencia de Sistema
:Administrador :Sistema
clientesPelícula(código) : clientes
21
Ingeniería del Software
Contrato de la operación clientesPelícula:
Operación: clientesPelícula(código) : clientesResponsabilidades: Obtener los clientes que hayan
comprado entradas de cualquier pase de una película
Precondiciones: argumento no nulo y válidoPostcondicones:Salida:
clientes = lista de los nombres e e-mails de los clientes que hayan comprado entradas de cualquier pase de una determinada película.
22
:Entradas:Pase
Ingeniería del Software
clie
nte
sPelic
ula
(códig
o)
:GestorClientesPelicula
CP(código)
EntradasPase()
:Pelicula :Pase :Entradas
PasesPelicula()
:Cesta
CestaEntrada()
:Cliente
*
*
ClienteCesta()
nombre,e-mail
nombre,e-mailLista(nombre,
e-mail)
eliminarRepetidos()
Lista(nombre,e-mail)
Lista(nombre,e-mail)
Lista(nombre,e-mail)
23
Ingeniería del Software
Escogemos el patrón controlador para gestionar el evento externo ClientesPelícula. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos un controlador de caso de uso: GestorClientesPelícula. Además, esta clase artificial agrupa a todas las películas del festival. Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento.
Por el patrón experto, el método CP es el encargado de buscar la película.
Por el patrón experto, el método PasesPelícula es el encargado de buscar todos los pases de la película, y el método EntradasPase, todas las entradas vendidas de un determinado pase.
Por el patrón experto, el método CestaEntrada es el encargado de obtener la cesta que incluía la entrada venida, y el método ClienteCesta el cliente que realizó esa compra. De ese cliente se obtiene su nombre e e-mail.
Por último, el método EliminarRepetidos elimina los nombres e e-mails que pudieran estar repetidos de los clientes que compraron alguna entrada para una determinada película.
24
Ingeniería del Software
Examen Febrero 2004-2005
Eliminar Pases
Se pide:
Diagrama de secuencia
25
:Administrador
ObtenerCiclos() : listaCiclos
ObtenerPelículas(nombre) : listaPelículasCompleta
EliminarPases(listaPelículas, fecha)
:Sistema
Diagrama de Secuencia de Sistema
Ingeniería del Software
26
Ingeniería del Software
Modelo de dominio
1 *Ciclo
nombre...
Película
título...
Pase
fechahora/venta
* * Sala
códigoSalaaforo
27
:Pase
Ingeniería del Software
ObtenerCiclos()
:GestorEliminarPases
ObtenerNombre()
:Ciclo
Lista(nombre)
nombre
*
28
Ingeniería del Software
Escogemos el patrón controlador para gestionar el evento externo ObtenerCiclos. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos un controlador de caso de uso: GestorEliminarPases. Además, esta clase artificial agrupa a todos los ciclos del festival. Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento.
Por el patrón experto, el método ObtenerNombre es el encargado de
buscar el nombre del ciclo.
29
:Pase
Ingeniería del Software
ObtenerPelículas(nombre)
:GestorEliminarPases
ObtenerTítulo()
:Película
Lista(título)
título
*
ObtenerTitulos()
:Ciclo
Lista(título)
30
Ingeniería del Software
Escogemos el patrón controlador para gestionar el evento externo ObtenerPelículas. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos el mismo controlador de caso de uso que para la operación anterior: GestorEliminarPases. Además, esta clase artificial agrupa a todos los ciclos del festival y los tiene accesibles para recorrido y de forma directa (hash). Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento.
Por el patrón experto, el método ObtenerTítulos es el encargado de
buscar las películas asociadas al ciclo nombre.
Por el patrón experto, el método ObtenerTítulo es el encargado de buscar el título de la película.
31
:Pase
Ingeniería del Software
Elim
inarP
ase
s(Li
staPelíc
ula
s, f
ech
a)
:GestorEliminarPases
EliminarPase(fecha)
:Pase
EliminarPases(titulo,fecha)
:Pase:Pelicula
ComprobarPase()
[ok] EliminarAsocSala()
ok
ok
[ok] EliminarAsocPase()
[ok]
*
*
32
Ingeniería del Software
Escogemos el patrón controlador para gestionar el evento externo EliminarPases. Aunque otras opciones son posibles, a falta de más información al tratarse de modelar un caso de uso, seleccionamos el mismo controlador de caso de uso que para la operación anterior: GestorEliminarPases. Además, esta clase artificial agrupa también todas las películas del festival con acceso directo (hash). Con ello pretendemos un diseño global con alta cohesión y bajo acoplamiento.
Por el patrón experto, el método EliminarPases de Película es el
encargado de eliminar los pases de las películas cuyo título aparece en ListaPelículas y cumplan las condiciones impuestas. En el caso de cumplirlas, eliminaremos su asociación con el pase (realizado por EliminarAsocPase) y por último lo destruiremos.
Por el patrón experto, el método EliminarPase de Pase es el encargado de comprobar si Pa.venta=0 y Pa.fecha > fecha (realizado por ComprobarPase). En el caso de cumplirse la condición, eliminaremos su asociación con Sala (realizado por EliminarAsocSala).
Nota: podría ser que la Sala también tuviera una asociación con Pase. En ese caso, también deberíamos acceder a Sala para eliminarla.
Top Related