Ejercicios de Análisis - UPV/EHUadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Exercicis...1 Ingeniería...
Transcript of Ejercicios de Análisis - UPV/EHUadimen.si.ehu.es/~rigau/teaching/EHU/ISO/Exercicis...1 Ingeniería...
1
Ingeniería del Software
Ejercicios de Análisis
Caso de Uso Cambiar Médico Cabecera (Enero 2002) Caso de Uso Reasignar Citas (Junio 2002) Caso de Uso Trasladar Empleado (Febrero 2003) Caso de Uso Verificar Pedido (Junio 2003) Caso de Uso Modificar Reserva (Febrero 2004) Caso de Uso Anular Reserva Pista (Junio 2004) Caso de Uso Comprar Entradas Numeradas (Febrero 2005)
Para todos ellos se pide:
Diagrama de Secuencia del Sistema Contratos
Modelo de Jacobson
2
Ingeniería del Software
Ejercicios de Análisis
Caso de Uso Cambiar Médico Cabecera (Junio 2003)
Se pide:
Modelo de Jacobson
3
Ingeniería del Software
Caso de uso: Cambiar Médico Cabecera
PACIENTE
Cambiar Médico Cabecera
4
Ingeniería del Software
Modelo de Dominio
Paciente
dninss
nombrefechaAsigMed
Médico
numColegiadonombre
maxPacientes
asignado* 0..1
* *
AsignadoAntes
fechaIniciofechaFin
suPacienteActual suDoctorActual
suPacientePasado suDoctorPasado
5
Ingeniería del Software
Caso de Uso Expandido: Cambiar Médico Cabecera
Caso de uso: Cambiar Médico CabeceraActores: PacienteDescripción: El paciente cambia de médico de cabecera Curso normal de los eventos
6
Ingeniería del Software
Caso de Uso Expandido: Cambiar Médico Cabecera
Curso normal de los eventos
5. Paciente: Este caso de uso empieza cuando el paciente quiere cambiar de médico de cabecera. Se identifica dando su número de la Seguridad Social.
6. Sistema: Muestra los nombres de todos los médicos de cabecera a los que, en principio puede cambiar (los que no hayan llegado al máximo de pacientes asignados)
7. Paciente: Selecciona el médico que desea.8. Sistema: Se registra el nuevo médico y se quita el que tenía, añadiéndolo
como médico de cabecera asignado anteriormente.
Cursos alternativos
12. Si el paciente no tiene médico de cabecera asignado actualmente, no se le permite cambiar de médico
13. Si el paciente escoge como nuevo médico de cabecera uno que ya tenía, entonces no se le permite cambiar de médico
7
Ingeniería del Software
Diagrama de Jacobson Cambiar Médico Cabecera (1)
:Paciente :IUCMC
:Médico Cabecera :Paciente
:AsignadoAntes
* *
:GestorMédicos :GestorPacientes
1, 11
2
37, 8, 10
4, 6, 9, 12, 14
* 0..1
5, 13, 15, 16
8
Ingeniería del Software
Diagrama de Jacobson Cambiar Médico Cabecera (2)
1: Paciente proporciona NSS2: Obtener Paciente dado el NSS3: Obtener NSS4: Obtener médico de cabecera del Paciente5: Obtener médico de cabecera del Paciente6: Obtener médicos disponibles (no han llegado al máximo)7: Obtener máximo Pacientes8: Obtener sus Pacientes asignados9: Obtener nombre del médico10: Obtener nombre11: Paciente escoge nuevo médico de cabecera12: Obtener médicos anteriores del Paciente
9
Ingeniería del Software
Diagrama de Jacobson Cambiar Médico Cabecera (3)
13: Obtener médicos anteriores14: Cambiar de médico al paciente (dando el anterior y el nuevo).
Modificar atributo fechaAsigMed15: Asignar nuevo médico de cabecera (se puede pedir al médico de
cabecera que asigne al paciente)16: Añadir médico anterior como asignado anteriormente (creará
objeto en AsignadoAntes)
10
Ingeniería del Software
Ejercicios de Análisis
Caso de Uso Reasignar Citas (Junio 2002)
Se pide:
Modelo de Jacobson
11
Ingeniería del Software
Caso de uso: Reasignar Citas
Médico
Reasignar Citas
12
Ingeniería del Software
Modelo de Dominio
Paciente
dninss
nombreteléfono
Médico
numColegiadonombre
maxPacientes0..1
1
Cita
fechaYHora
suPaciente suMedico
* *
13
Ingeniería del Software
Caso de Uso Expandido: Reasignar Citas
Caso de uso: Reasignar CitasActores: MédicoDescripción: El médico médico quiere reasignar a otro médico las
citas de un dia determinado Curso normal de los eventos
14
Ingeniería del Software
Caso de Uso Expandido: Reasignar Citas
Curso normal de los eventos
5. Médico: Este caso de uso empieza cuando el médico quiere reasignar a otro médico las citas de un dia determinado. Se identifica dando su número de colegiado e indica el día que quiere cancelar sus citas.
6. Sistema: Reasigna las citas del médico a otro médico, siempre que tenga una cita no asignada a la misma hora. Genera un listado con todas las citas canceladas o reasignadas (nombre del paciente, teléfono, fecha y hora cita, y si se ha podido, el nombre del nuevo médico asignado)
Nota: Se supone que los objetos de la clase Cita ya estarán creados para todos los médicos de cabecera. Para cancelar una cita con un médico, y para que no se le reasigne más adelante otro paciente, simplemente borraremos el objeto cita.
15
Ingeniería del Software
Diagrama de Jacobson Reasignar Citas (1)
:Médico :IURC
:Médico Cabecera :Paciente:Cita
:GestorCitas
1
2, 6, 9
8
*1 0..1*
3, 4
5, 7, 10, 11, 12, 13
16
Ingeniería del Software
Diagrama de Jacobson Reasignar Citas (2)
1: Proporcionar número de colegiado y fecha de cancelación de citas2: Buscar citas del médico3: Obtener número de colegiado4: Obtener sus citas5: Obtener obtener fecha6: Obtener obtener datos (teléfono, nombre) del paciente de la cita7: Obtener paciente8: Obtener datos (teléfono, nombre) del paciente9: Reasignar cita a otro médico (devuelve el nuevo médico asignado,
si ha podido)10: Obtener fecha11: Obtener paciente (ver si cita está libre)12: Asignar paciente anterior13: Borrar cita
17
Ingeniería del Software
Diagrama de Jacobson Cambiar Médico Cabecera (3)
13: Obtener médicos anteriores14: Cambiar de médico al paciente (dando el anterior y el nuevo)15: Asignar nuevo médico de cabecera (se puede pedir al médico de
cabecera que asigne al paciente)16: Añadir médico anterior como asignado anteriormente (creará
objeto en AsignadoAntes)
18
Ingeniería del Software
Ejercicios de Análisis
Caso de Uso Trasladar Empleado (Febrero 2003)
Se pide:
Diagrama de Secuencia del Sistema Contratos
Modelo de Jacobson
19
Ingeniería del Software
Ejercicio 1: Caso de uso: Traslado empleado
DIRECTORPERSONAL
Trasladar empleado
20
Ingeniería del Software
Modelo de Dominio
Empleado
NombreApellido
Departamento
Nombre/Empleados
dirige1 1
* 1
Asignado
CargoFechaInicio
Salario
director
21
Ingeniería del Software
Caso de Uso Expandido: Trasladar empleado
Caso de uso: Trasladar empleadoActores: Director PersonalDescripción: El director de personal traslada un empleado de un
departamento a otro. Curso normal de los eventos
22
Ingeniería del Software
Caso de Uso Expandido: Trasladar empleado
Escenario Principal1. Director de Personal: Este caso de uso empieza cuando el director de
personal quiere trasladar a un empleado de un departamento a otro.2. Sistema: Muestra todos los departamentos existentes en la empresa.3. Director de Personal: Selecciona el departamento origen.4. Sistema: Muestra los datos de todos los empleados del departamento origen
menos los de su director.5. Director de Personal: Selecciona un empleado.6. Sistema: Muestra todos los departamentos existentes en la empresa menos
el departamento origen.7. Director de Personal: Selecciona el departamento destino.8. Sistema: Pregunta por los datos de la nueva asignación departamental.9. Director de Personal: Introduce los datos de la nueva asignación
departamental.10. Sistema: Presenta un resumen de los datos de la operación y pide una
confirmación.11. Director de Personal: Confirma el traslado.12. Sistema: Actualiza los datos del empleado y de los departamentos
involucrados.
23
Ingeniería del Software
Diagrama secuencia sistema: Trasladar empleado
:Director Personal :Sistema
ObtenerListaDep() : listaDep
SeleccionarDep(nombreDO) : listaDep
ObtenerListaEmp() : ListaEmp
SeleccionarDep(nombreDD) : listaDep
SeleccionarEmp(nombre, apellido)
PreguntarDatosAsig(Cargo, FechaInicio, Salario)
TrasladarEmp(ok)
24
Ingeniería del Software
Contrato operación ObtenerListaDep
Name:ObtenerListaDep() : listaDep Responsabilities
Obtiene en ListaDep todos los Nombres de los departamentos existentes en la empresa.
PreconditionsLa empresa tiene departamentos
Postconditions Salida
listaDep = conjunto de los Nombres de todos los departamentos de la empresa
25
Ingeniería del Software
Contrato operación SeleccionarDep
Name:SeleccionarDep(nombreD) : listaDep Responsabilities
Presenta todos los Nombres de listaDep y permite seleccionar a uno de ellos: nombreD. Luego, lo elimina de listaDep.
PreconditionsSe dispone de ListaDep
Postconditions Salida
ListaDep = ListaDep – {nombreD}
26
Ingeniería del Software
Contrato operación ObtenerListaEmp
Name: ObtenerListaEmp() : listaEmp Responsabilities
Obtiene en ListaEmp todos los Nombres y Apellidos de los empleados
del departamento nombreDO, excepto a su director. Preconditions
Se dispone de nombreDO Postconditions Salida
listaTemp = Nombres y Apellidos de los empleados del departamento nombreDOdirector = Nombre y Apellidos del director del departamento nombreDOlistaEmp = listaTemp – {director}
27
Ingeniería del Software
Contrato operación SeleccionarEmp
Name:SeleccionarEmp(nombre, apellido) Responsabilities
Presenta todos los Nombres y Apellidos de los Empleados de ListaEmp y permite seleccionar a uno de ellos por su nombre y apellido.
PreconditionsSe dispone de listaEmp
Postconditions Salida
28
Ingeniería del Software
Contrato operación PreguntarDatosAsig
Name:PreguntarDatosAsig(cargo, FechaInicio, salario) Responsabilities
Pregunta y obtiene nuevo cargo y salario del empleado. Presenta un resumen de los datos del traslado: departamento
origen, destino, empleado, cargo y salario. Preconditions
cargo != director, Salario > 0Se dispone de nombreDO, nombreDD, nombreE, apellidoE
Postconditions Salida
29
Ingeniería del Software
Contrato operación TrasladarEmp
Name: TrasladarEmp(ok) Responsabilities
Pide la confirmación del traslado y en caso afirmativo, actualiza los datos.
Preconditions Se dispone de: nombreDO, nombreDD, nombreE, apellidoE, cargo y
salario. Postconditions
Se da de baja asociación Asignado entre Empleado con nombre nombreE y apellido apellidoE, y Departamento nombreDO.
/Empleados = /Empleados – 1 en Departamento nombreDO Se da de alta asociación Asignado entre Empleado nombreE y
Departamento nombreDD con nuevos cargo, salario y fecha: Asignado.cargo = cargo; Asignado.salario = salario; Asignado.FechaInicio = FechaInicio
/Empleados = /Empleados + 1 en Departamento nombreDD Salida
30
Ingeniería del Software
Diagrama de Jacobson Trasladar Empleado (1)
:DirectorPersonal
:IUTE
:Departamento :Empleado
:Asignado
1 *
:GestorDepartamentos
1, 4, 9, 10, 11, 12
1 1
2, 5, 13
83, 6, 7, 16, 17
14, 15
31
Ingeniería del Software
Diagrama de Jacobson Trasladar Empleado (2)
1: Iniciar traslado2: Obtener lista departamentos3: Obtener nombre departamento4: Seleccionar departamento5: Obtener lista empleados menos director6: Obtener empleados del departamento7: Obtener director del departamento 8: Obtener nombre y apellidos de los empleados9: Elegir empleado10: Seleccionar departamento nuevo11: Dar cargo y fecha12: Confirmar datos
32
Ingeniería del Software
Diagrama de Jacobson Trasladar Empleado (3)
13: Trasladar el empleado14: Borrar la vieja asignación15: Crear la nueva asignación empleado, con cargo y sueldo16: Decrementa número de empleados del departamento viejo17: Incrementa número de empleados del departamento nuevo.
33
Ingeniería del Software
Ejercicios de Análisis
Caso de Uso Verificar Pedido (Junio 2003)
Se pide:
Diagrama de Secuencia del Sistema Contratos
Modelo de Jacobson
34
Ingeniería del Software
Ejercicio 2: Caso de uso: Verificar Pedido
TRABAJADOR
Verificar Pedido
35
Ingeniería del Software
Modelo de Dominio
Producto
Código: stringNombre: stringCantidad: int
Pedido
fechaYHora: datecódigo: intestado: string
*
LineaPedido
cantidad: int
*
36
Ingeniería del Software
Caso de Uso Expandido: Verificar Pedido
Caso de uso: Verificar PedidoActores: TrabajadorDescripción: Comprueba la cantidad en stock de los
productos de un pedido Curso normal de los eventos 1. Trabajador: Este caso de uso empieza cuando el trabajador quiere
servir un determinado pedido proporcionando su código.2. Sistema: Comprueba que haya suficiente cantidad de cada producto del
pedido. En caso afirmativo, se actualiza el stock de cada producto, se actualiza el estado del pedido a “ servido” y se informa al trabajador que el pedido se puede servir correctamente. En caso negativo, ni el stock ni el pedido se modifican y se informa al trabajador de los productos cuya falta de stock impide servir el pedido.
37
Ingeniería del Software
Diagrama secuencia sistema: Verificar Pedido
:Trabajador
ObtenerPedido(código) : pedido
ComprobarCantidades(pedido) : HayDeTodo
[HayDeTodo] ActualizarStock(pedido)
[no HayDeTodo] InformarCarencias(pedido): ListaPCC
:Sistema
38
Ingeniería del Software
Contrato operación ObtenerPedido
Name: ObtenerPedido(código) : pedido Responsabilities:
Localizar Pedido.código = código Preconditions:
Existe un pedido p de Pedido.código = código Postconditions: Salida: p
39
Ingeniería del Software
Contrato operación ComprobarCantidades
Name: ComprobarCantidades(pedido) : booleano Responsabilities:
Verificar que hay suficiente stock para formalizar el pedido Preconditions:
Postconditions: Salida:
HayDeTodo = cierto si para cada producto prod asociado a la línea de pedido lp asociada a pedido, lp.cantidad < prod.cantidad
40
Ingeniería del Software
Contrato operación ActualizarStock
Name: ActualizarStock(pedido) Responsabilities:
Actualizar la cantidad de cada producto según el pedido Preconditions:
Postconditions: Para cada producto prod asociado a la línea de pedido lp y al
pedido, prod.cantidad = prod.cantidad – lp.cantidad pedido.estado = “ servido”
Salida:
41
Ingeniería del Software
Contrato operación ActualizarStock
Name: InformarCarencias(pedido) Responsabilities:
Mostrar los productos de los cuales no hay stock suficiente Preconditions:
Postconditions: Salida:
ListaProductosConCarencia = Todos los productos prod asociados a la línea de pedido lp y al pedido donde lp.cantidad < prod.cantidad
42
Ingeniería del Software
Ejercicios de Análisis
Caso de Uso Modificar Reserva (Febrero 2004)
Se pide:
Diagrama de Secuencia del Sistema Contratos
Modelo de Jacobson
43
Ingeniería del Software
Ejercicio 2: Caso de uso: Modificar Reserva
SOCIO
Modificar Reserva
ENCARGADO
44
Ingeniería del Software
Caso de uso: Modificar ReservaActores: Socio, EncargadoDescripción: Un socio del club de tenis solicita el cambio de una
reserva para una nueva fecha y hora determinadas. El encargado verifica la disponibilidad de pistas para esa nueva fecha y hora, y hace efectivo el cambio.
Escenario Principal:1. Socio: Este caso de uso comienza cuando un socio solicita al
encargado que quiere modificar una reserva del club de tenis. El Socio se identifica, proporciona la fecha y hora de la reserva actual y facilita la fecha y horas de la nueva reserva.
2. Encargado: Identifica al socio.3. Sistema: Presenta la información del socio y sus reservas. 4. Encargado: Verifica la reserva a anular y la selecciona. 5. Sistema: Comprueba la fecha de la reserva a cancelar con la fecha
actual. 6. Encargado: Introduce la fecha de la nueva reserva.11. Sistema: Para esa fecha, presenta los horarios de las pistas no
reservadas (libres).12. ...
45
Ingeniería del Software
...8. Encargado: Verifica la hora que quiere reservar el socio, asigna alguna de
las pistas al socio para el horario solicitado y confirma la nueva reserva. 9. Sistema: Registra la cancelación de la reserva antigua y le asigna tarifa T4
(cancelación). Registra la nueva reserva sin asignarle tarifa.
Cursos alternativos:Paso 3. No se trata de un Socio. Sugerir hacerse socio.Paso 4. El socio no tenia reserva para esa fecha y horario.Paso 5. El socio quiere cancelar una reserva para el mismo día.Paso 7. La nueva fecha es superior a un mes a la fecha actual. Paso 8. No hay pistas libres para la nueva fecha y horarios solicitados.
46
Ingeniería del Software
Modelo de dominio
* *
*
1
Socio
dnitel...
Pista
Número pista
Reserva
numfechaHora/importe
Tarifa
tipoprecio
47
Ingeniería del Software
Diagrama secuencia sistema: Modificar Reserva
:Encargado
IdentificarSocio(dni) : socio
Reservas(dni) : ListaReservas
ComprobarFechaV(fechaV) : fVOk
[fVOk and fNOk] Registrar(socio,fechaV,fechaN,hora,pistaV, pistaN)
[fVOk and fNOk] PistasLibres(fechaN) : ListaPistas
:Sistema
ComprobarFechaN(fechaN) : fNOk
48
Ingeniería del Software
Contrato operación IdentificarSocio
Name: IdentificarSocio(dni) : socio Responsabilities
Obtener la información del socio. Preconditions
Dni es un código válido Postconditions Salida
La información disponible sobre el socio con dni
49
Ingeniería del Software
Contrato operación Reservas
Name: Reservas(dni) : ListaReservas Responsabilities
Obtener las reservas de un socio. Preconditions
Dni es un código válido. Postconditions Salida
ListaReservas = todas las reservas pendientes que el socio ha realizado. Para cada una se obtiene también el número de pista reservada
50
Ingeniería del Software
Contrato operación ComprobarFechaV
Name: ComprobarFechaV(fechaV) : fVOk Responsabilities
Identificar y verificar la reserva que se quiere anular. Preconditions
fechaV es una fecha válida Postconditions Salida
fVOk es cierto si fechaV no es la fecha actual
51
Ingeniería del Software
Contrato operación ComprobarFechaN
Name: ComprobarFechaN(fechaN) : fNOk Responsabilities
Comprobar que la fecha de la nueva reserva es anterior a un mes a la fecha actual
PreconditionsfechaN es una fecha válida
Postconditions Salida
fNOk es cierto si fechaN es menor a la fecha actual más un mes
52
Ingeniería del Software
Contrato operación PistasLibres
Name: PistasLibres(fechaN) : ListaPistas Responsabilities
Obtener las pistas no reservadas para una fecha concreta Preconditions
fechaN es una fecha válida Postconditions Salida
ListaPistas = Listado de pistas y horas no reservadas para la fechaN
53
Ingeniería del Software
Contrato operación Registrar
Name: Registrar(socio,fechaV,fechaN,hora,pistaV,pistaN) Responsabilities
Registrar la modificación de la reserva Preconditions
fechaV y fechaN son fechas válidas Postconditions
Se asigna a la reserva R con R.fecha = fechaV asociada al socio y pistaV la tarifa T con T.tarifa=T4Se crea una nueva instancia reserva NR con NR.fecha=fechaN y NR.hora=horaSe asocia NR al socio y a la pistaN
Salida
54
Ingeniería del Software
Ejercicio de Análisis
Caso de Uso Anular Reservas Pista (Junio 2004)
Se pide:
Diagrama de secuencia del sistema contratos
55
Ingeniería del Software
Caso de uso: Anular Reservas Pista
Anular Reservas Pista
ENCARGADO
56
Ingeniería del Software
Modelo de dominio (1)
* *
*
1
Socio
dnitele-mail
Pista
Número pista
Reserva
numfechahora/importe
Tarifa
tipoprecio
57
Ingeniería del Software
Diagrama secuencia sistema: Anular Reservas Pista
:Encargado :Sistema
ConsultarReservas(fecha,pista) : reservas
ConfirmarAnulación() : anular
[anular] Reasignar(fecha,pista) : reasignadas
[anular] Anular(fecha,pista) : anuladas
58
Ingeniería del Software
operación ConsultarReservas
Name:ConsultarReservas(fecha,pista) : reservas Responsabilities
Obtener las reservas no canceladas (que no tengan la tarifa T4) para esa fecha de la pista
PreconditionsArgumentos no nulos y válidos (la fecha no es la actual ni la
superior a un mes a la fecha actual) Postconditions Salida
Reservas = Todas las reservas para la fecha y pista determinada
59
Ingeniería del Software
operación ConfirmarAnulación
Name:ConfirmarAnulación() : anular Responsabilities
Consultar la Confirmación de la anulación Preconditions Postconditions Salida
anular = cierto si confirma la anulación
60
Ingeniería del Software
operación Reasignar
Name:Reasignar(fecha,pista) : reasignadas Responsabilities
Buscar para la misma hora una pista libre np para toda reserva r de esa fecha.
Preconditionsargumentos no nulos y válidos
Postconditions Eliminar la reserva r Crear una nueva reserva nr para la misma fecha y hora
para la pista np Asociar la reserva nr al socio s y la pista np
Salidareasignadas = lista de e-mail, fecha, hora, pista y np
61
Ingeniería del Software
operación Anular
Name:Anular(fecha,pista) : anuladas Responsabilities
Eliminar toda reserva r de esa fecha que para su misma hora no hay una pista libre.
Preconditionsargumentos no nulos y válidos
Postconditions Eliminar la reserva r
Salidaanuladas = lista de e-mail, fecha, hora, pista
62
Ingeniería del Software
Ejercicio de Análisis
Caso de Uso Comprar Entradas Numeradas (Febrero 2005)
Se pide:
Diagrama de secuencia del sistema contratos
63
Ingeniería del Software
Ejercicio 3: Comprar Entradas Numeradas
CLIENTE
Comprar entradas numeradas
TAQUILLERA
64
Ingeniería del Software
Modelo de dominio
1 *
1
*
Multicine
dnitel...
Película
títulometraje/venta
Pase
fecha/venta
Localidad
filaasientovendida
* * Sala
númeroaforo
65
Ingeniería del Software
Caso de uso: Comprar entradas numeradasActores: Cliente, TaquilleraDescripción: Un cliente llega a la taquilla del Multicine y pide las
entradas que desea comprar. La taquillera registra los la compra las entradas y recibe un pago en efectivo. Al terminar la operación, el Cliente se marcha con las entradas compradas
Curso normal de los eventos:6. Cliente: Este caso de uso comienza cuando el Cliente llega a la
taquilla del Multicine y solicita entradas para una película y un pase. 7. Taquillera: Consulta los pases de la película.8. Sistema: Presenta la información de los distintos pases disponibles
para ese día y las salas que proyectan la película solicitada y su grado de ocupación.
9. Taquillera: Selecciona uno de los pases. 10. Sistema: Presenta un plano de la sala con las localidades libres y las
ya vendidas. 11. Taquillera: Le informa de las distintas posibilidades y solicita al
Cliente sus preferencias....
66
Ingeniería del Software
...• Cliente: Informa a la taquillera de sus preferencias y escoge alguna
posibilidad.• Taquillera: Selecciona unas localidades que se ajustan a las
preferencias del Cliente.• Sistema: Calcula y presenta el importe total.• Taquillera: Indica el total al Cliente.• Cliente: Efectúa el pago en efectivo.• Taquillera: Introduce la cantidad abonada.• Sistema: Calcula la diferencia entre pago y el importe. Emite las
entradas compradas y registra la venta.• Taquillera: Entrega las entradas y el cambio si es que ha pagado en
efectivo.• Cliente: Se marcha con las entradas compradas.Cursos alternativos:Paso 4. No quedan localidades para el pase solicitado. Informar de otros
pases disponibles.Paso 7. El Cliente prefiere no comprar las entradas. Paso 11. El Cliente no dispone de suficiente dinero.
67
:Taquillera
ConsultarPases(título) : listaInfoPases
ConsultarEstadoLocalidades(titulo, sala, fecha) : listaInfoLocalidades
SeleccionarLocalidades(listaLocalidades) : importe
:Sistema
RegistrarVenta(listaLocalidades, importe, monto) : cambio
*
Diagrama de secuencia de sistema
68
Contrato operación ConsultarPases
Name:ConsultarPases(título) : listaInfoPases Responsabilities
Presenta la información de los distintos pases disponibles para ese día y las salas que proyectan la película solicitada y su grado de ocupación.
PreconditionsEl título de la película es válido
Postconditions Salida
listaInfoPases = lista de salas, fechas (horas) y grados de ocupación (sala.aforo – pase.venta) en las que se proyecta ese día la película solicitada
69
Contrato operación ConsultarEstadoLocalidades
Name:ConsultarEstadoLocalidades(título, sala, fecha) : listaInfoLocalidades
ResponsabilitiesSeleccionado un pase, obtener la información de las localidades libres y las ya vendidas
PreconditionsEl título, sala y fecha son válidos
Postconditions Salida
listaInfoLocalidades = lista de todas las localidades asignadas al pase incluyendo para cada una de ellas fila, columna y si està vendida
70
Contrato operación SeleccionarLocalidades
Name:Seleccionarlocalidades(listaLocalidades) : importe Responsabilities
Calcula y presenta el importe total de las localidades seleccionadas en listaLocalidades (lista de <titulo, sala, fecha, fila, columna>).
PreconditionslistaLocalidades es válido
Postconditions Salida
Importe = precio total de las localidades vendidas (cardinalidad de listaLocalidades * precioEntrada)
71
Contrato operación RegistrarVenta
Name:RegistrarVenta(listaLocalidades, importe, pago) : cambio Responsabilities
Calcula la diferencia entre el pago y el importe. Emite las entradas compradas y registra la venta: asigna como vendidas todas las localidades de listaLocalidades (lista de <titulo, sala, fecha, fila, columna>).
PreconditionslistaLocalidades es válido, importe <= pago.
PostconditionsPara cada localidad l de listaLocalidades l.vendida = truePara el pase p (de la película, sala y fecha),
p.venta = p.venta + | listaLocalidades |Para la película p, p.venta = p.venta + | listaLocalidades |
Salidacambio = pago – importe (y emitir las localidades de listaLocalidades)