Modelos de Desarrollo de Programas

Anuncio
Modelos de Desarrollo de Programas
Junio, 2001
Parte B. Ejercicio práctico
Se trata de hacer un programa que gestione un dispensador automático de películas de un videoclub que da
servicio las 24 horas. El cajero dispone de películas en formato VHS y DVD.
Los datos que se almacenan de cada película son su título, el nombre del director, el género (acción, drama,
comedia, terror, policiaca, etc.), el tipo de soporte (VHS ó DVD) y su código (un número de 10 dígitos que es
único para cada película).
El sistema tendrá dos tipos de usuarios:
• Cliente: es la persona que alquila y devuelve películas. Se almacena su nombre completo, su DNI, el estado
de su cuenta en pesetas y su código de identificación personal de 4 dígitos (PIN).
• Gestor: es la persona que realiza altas y bajas de clientes. Se almacena su nombre completo y su PIN. El
gestor realiza estas operaciones cuando los clientes se ponen en contacto con él.
Las acciones que pueden realizarse son las siguientes:
• Por parte de un cliente:
• Consultar los datos de una película, dado el tipo de soporte y su título. En el resultado de la consulta se
deberá indicar si la película está disponible. Si hay varias películas con el mismo título se mostrará
información de todas ellas.
• Alquilar una película, dado su código. No se podrá alquilar si no hay dinero en la cuenta para pagar el al
menos 24 horas de alquiler. Habrá que anotar la fecha y hora del comienzo del alquiler.
• Devolver una cinta, dado su código, momento en el que se descuenta el importe de alquiler de la cuenta
del usuario. El importe depende del tiempo de alquiler y del tipo de soporte, según la siguiente tabla:
Menos de 6 horas
Entre 6 y 12 horas
Entre 12 y 24 horas
Más de 24 horas
VHS
300
500
700
900 x día
DVD
450
700
950
1050 x día
Si en el momento de la devolución de la película el cliente no tiene saldo suficiente, se mostrará un
mensaje de error indicando que debe ingresar dinero antes de devolver la película.
• Ingreso de dinero en la cuenta del cliente
• Por parte del gestor
• Resumen del estado del sistema, que indica el número total de películas y, para cada película sus datos
completos, el número de veces que ha sido alquilada y su estado actual (libre o alquilada).
• Alta de un cliente, dados todos sus datos: nombre completo, DNI, PIN y saldo inicial. No puede haber
dos clientes con el mismo nombre.
• Baja de un cliente, dado su nombre completo y su DNI. No se puede dar de baja a un cliente que tiene
alguna película alquilada.
Todas las acciones de los usuarios del sistema (gestor y clientes) deberán ir acompañadas por su nombre
completo y su PIN.
Se pide
B.1 Metodología estructurada (10 puntos):
a.
Dado el DFD con procesos finales de la figura siguiente, obtener el diagrama de estructura refinado. Para
ello habrá que aplicar las técnicas de análisis de transformaciones y de transacciones de forma razonada. Por
simplicidad el DFD no representa los almacenes de la aplicación (5 puntos).
1
Leer
comando
Comprobar
cliente
Consultar
películas
Alquilar
película
Comprobar
gestor
Devolver
película
Ingresar
dinero
Consultar
estado
Agregar
cliente
Suprimir
cliente
Mostrar
salida
b.
A partir del diagrama de estructura, determinar la forma más óptima de implementar el sistema:
descendente, ascendente o mixta. Explicar la respuesta. Se tendrá en cuenta la siguiente tabla de costes (5
puntos):
Stub
Driver
Aferente Eferente
7
4
4
7
Transformación
9
9
B.2 Metodología orientada a objetos (10 puntos):
Se considera el siguiente diagrama inicial de clases de análisis
0..1
Cliente
0..1
Gestor
*
1
1
1
VideoClub
1
*
1
*
Película VHS
*
Película DVD
*
Seguidamente se muestra el DIO correspondiente a alguna de las tareas que debe realizar el sistema:
2
:MC
•
:VideoClub
:Cliente
:Gestor
:VHS
:DVD
VideoClub(datos)
Gestor(datos)
VHS(datos)
DVD(datos)
‚
CnsPelicula(datos)
IgualNombre(nc)
ComprobarPIN(pin)
IgualTitulo(ti)
EscribirDatos()
IgualTitulo(ti)
EscribirDatos()
ƒ
Ingresar(datos)
IgualNombre(nc)
ComprobarPIN(pin)
Ingresar(c)
„
Estado(datos)
IgualNombre(ng)
ComprobarPIN(pin)
EscribirEstado()
EscribirEstado()
…
BajaCliente(datos)
IgualNombre(ng)
ComprobarPIN(pin)
IgualNombre(nc)
TieneAlquiladas()
~Cliente()
†
~VideoClub()
~Cliente()
~Gestor()
~VHS()
~DVD()
Las acciones que aparecen en el DIO se detallan a continuación:
1.
Se crea un videoclub, con un nombre de fichero donde residen los datos de un gestor y los datos de todas las
películas.
2.
Un cliente consulta una película. Datos: nombre y PIN del cliente, tipo y título de la película. Se comprueba
la identidad del cliente antes de realizar la búsqueda.
3.
Un cliente ingresa dinero en su cuenta. Datos: nombre, PIN del cliente y cantidad ingresada. Se comprueba
la identidad del cliente antes de admitir el ingreso.
4.
El gestor desea obtener información sobre el estado del sistema. Datos: nombre y PIN del gestor. Se
comprueba la identidad del gestor y después se solicita el estado de cada película.
5.
El gestor da de baja a un cliente. Datos: nombre y PIN del gestor y nombre completo del cliente. Se
comprueba la identidad del gestor y luego se elimina el cliente (si éste se encuentra en el sistema).
6.
Se termina la ejecución del sistema, eliminando a los usuarios y películas.
3
a.
Partiendo de los diagramas anteriores, realizar el DIO correspondiente a las siguientes tareas (5 puntos):
• Un cliente alquila una película
• Un cliente devuelve una película
• El gestor da de alta a un cliente
b.
Detallar todas las clases, indicando sus atributos y operaciones. Cada operación deberá especificarse
completamente, indicando argumentos y tipo de retorno (2 puntos).
c.
Indicar, de forma razonada, si se podría aplicar reutilización en el diagrama de clases anterior en función de
las operaciones identificadas. Realizar el diagrama refinado de análisis aplicando las estructuras de
generalización correspondientes (3 puntos)
OBSERVACIONES:
•Duración total del examen: 3 horas
•El examen se compone de tres partes, que hay que entregar por separado:
- A: Fundamentos de los Modelos de Desarrollo de Programas (1/3 de la nota)
- B.1: Metodología estructurada (1/3 de la nota)
- B.2: Metodología orientada a objetos (1/3 de la nota)
•Fechas estimadas:
- Publicación de notas: martes 26 de junio
- Revisión del examen: jueves 28 de junio
4
SOLUCIÓN
PARTE B.1
a. Dado el DFD con procesos finales, obtener el diagrama de estructura refinado. Para
ello habrá que aplicar las técnicas de análisis de transformaciones y de transacciones
de forma razonada. Por simplicidad el DFD no representa los almacenes de la
aplicación (5 puntos).
Se aplica el análisis de transacciones, siguiendo los pasos vistos en teoría
1. Factorizar el primer nivel
Hay tres ramas en el primer nivel: una aferente (leer comando), una de transformación
(tratar comando) y una eferente (mostrar salida).
Videoclub
Leer comando
Tratar comando
Mostrar salida
2. Definir el centro de transacciones
Se considera que Tratar Comando es el centro de transacciones
3. Factorizar siguiendo el modelo transaccional
Una de las posibles formas de factorizar sería la siguiente
Videoclub
Leer comando
Analizar
comando
Comprobar
cliente
Tratar comando
Mostrar salida
Despachar
comando
Comprobar
gestor
Consultar Alquilar Devolver Ingresar Consultar
película película película
dinero
estado
Agregar Suprimir
cliente
cliente
4. Refinar
Aplicando el criterio de Fan-Out, se agrupan los módulos hijos de “Despachar
Comando” en dos grupos, en función del tipo de usuario.
5
Videoclub
Leer comando
Tratar comando
Despachar
comando
Analizar
comando
Comprobar
cliente
Mostrar salida
Comprobar
gestor
Tratar cliente
Tratar gestor
Consultar Alquilar Devolver Ingresar Consultar
película película película
dinero
estado
Agregar Suprimir
cliente
cliente
Nota: por claridad se han omitido los flujos de comunicación entre módulos
c. A partir del diagrama de estructura, determinar la forma más óptima de implementar
el sistema: descendente, ascendente o mixta. Explicar la respuesta. Se tendrá en
cuenta la siguiente tabla de costes (5 puntos):
Stub
Driver
Aferente
7
4
Eferente
4
7
Transformación
9
9
1. Implementación descendente
Módulo
V
LC
TCO
MS
ACO
DC
CC
CG
TC
TG
Resto
Implementado
V
V, LC
V, LC, TCO
V, LC, TCO, MS
V, LC, TCO, MS, ACO
V, LC, TCO, MS, ACO, DC
V, LC, TCO, MS, ACO, DC, CC
V, LC, TCO, MS, ACO, DC, CC, CG
V, LC, TCO, MS, ACO, DC, CC, CG, TC
Todos
Stub
Coste
LC (7), TCO(9), MS(4)
20
0
ACO(9), DC (9)
18
0
CC (9), CG (9)
18
TC (9), TG (9)
18
0
0
CP (9), AP (9), DP (9), ID (9)
36
CE (9), AC (9), SC (9)
27
0
TOTAL
137
2. Implementación ascendente
6
Módulo
CP
AP
DP
ID
CE
AC
SC
CC
CG
TC
TG
ACO
DC
LC
TCO
MS
Implementado
CP
CP, AP
CP, AP, DP
CP, AP, DP, ID
CP, AP, DP, ID, CE
CP, AP, DP, ID, CE, AC
CP, AP, DP, ID, CE, AC, SC
CP, AP, DP, ID, CE, AC, SC, CC
CP, AP, DP, ID, CE, AC, SC, CC, CG
CP, AP, DP, ID, CE, AC, SC, CC, CG, TC
CP, AP, DP, ID, CE, AC, SC, CC, CG, TC, ...
CP, AP, DP, ID, CE, AC, SC, CC, CG, TC, ...
CP, AP, DP, ID, CE, AC, SC, CC, CG, TC, ...
CP, AP, DP, ID, CE, AC, SC, CC, CG, TC, ...
CP, AP, DP, ID, CE, AC, SC, CC, CG, TC, ...
Driver
TC.1 (9)
TC.2 (9)
TC.3 (9)
TC.4 (9)
TG.1 (9)
TG.2 (9)
TG.3 (9)
AC.1 (9)
AC.2 (9)
DC.1 (9)
DC.2 (9)
TCO.1 (9)
TCO.2 (9)
V.1 (4)
V.2 (9)
V.3 (7)
TOTAL
Coste
9
9
9
9
9
9
9
9
9
9
9
9
9
4
9
7
137
3. Implementación mixta
Módulo
LC
V
TC
MS
AC
DC
CC
CG
TC
TG
Resto
Implementado
V, LC
V, LC, TC
V, LC, TC, MS
V, LC, TC, MS, AC
V, LC, TC, MS, AC, DC
V, LC, TC, MS, AC, DC, CC
V, LC, TC, MS, AC, DC, CC, CG
V, LC, TC, MS, AC, DC, CC, CG, TC
Todos
Stub / Driver
Coste
V (4)
4
TC(9), MS(4)
13
AC(9), DC (9)
18
0
CC (9), CG (9)
18
TC (9), TG (9)
18
0
0
CP (9), AP (9), DP (9), ID (9)
36
CE (9), AC (9), SC (9)
27
0
TOTAL
134
En consecuencia, la implementación con menor coste es la mixta
PARTE B.2
a. DIO para alquilar, devolver, alta cliente
7
:MC
•
:VideoClub
:Cliente
:Gestor
:VHS
:DVD
Alquilar(datos)
IgualNombre(nc)
ComprobarPIN(pin)
IgualIdentif(id)
ó
IgualIdentif(id)
Libre()
ó
Libre()
Importe24h()
ó
Importe24h()
ComprobarSaldo(i)
AnotarPelicula(id)
AnotarAlquiler(n,f) ó
‚
AnotarAlquiler(n, f)
Devolver(datos)
IgualNombre(nc)
ComprobarPIN(pin)
IgualIdentif(id)
ó
IgualIdentif(id)
Libre()
ó
Libre()
ImporteTotal(f)
ó
ImporteTotal(f)
AnotarLibre()
ó
AnotarLibre()
ComprobarSaldo(i)
DevolverPelicula(id)
RetirarImporte(i)
ƒ
AltaCliente(datos)
IgualNombre(ng)
ComprobarPIN(pin)
IgualNombre(nc)
Cliente(datos)
Explicación de las operaciones:
1. Alquilar película: primero se comprueba la identidad del cliente. Después se busca la
película dado su código. Si se encuentra, se averigua si está libre y se le pide su precio
para 24 horas. Ese importe es verificado en la cuenta del cliente. Si todo va bien, se anota
el alquiler, tanto para el cliente como para la película.
2. Devolver película: primero se comprueba la identidad del cliente. Después se busca la
película dado su código. Si se encuentra, se averigua si está ocupada y se le pide su precio
para la fecha de fin de alquiler. Ese importe es verificado en la cuenta del cliente. Si todo
va bien, se descuenta el importe y se devuelve la película (en cliente y película).
3. Alta de cliente: primero se comprueba la identidad del gestor. Después se comprueba que
no hay clientes con el mismo nombre. Si todo va bien, se crea un nuevo objeto cliente con
todos sus datos.
8
b. Detalles de las clases
VideoClub
VideoClub(char *fichero);
~VideoClub();
bool CnsPelicula(char *nc, int pin, char *titulo, int tipo); // true == OK
bool Alquilar(char *nc, int pin, long id, Fecha fecha); // true == OK
bool Devolver (char *nc, int pin, long id, Fecha fecha); // true == OK
bool Ingresar(char *nc, int pin, int importe); // true == OK
bool Estado(char *ng, int pin); // true == OK
bool AltaCliente(char *ng, int pin, char *nc, int pinc, long DNI,int ingreso); // true = OK
bool BajaCliente(char *ng, int pin, char *nc); // Ture = OK
Cliente
char * nombre;
int PIN;
long DNI;
int cuenta;
Cliente(char *nombre, int pin, long DNI, int ingreso);
~Cliente();
bool IgualNombre(char *nc);
bool ComprobarPIN(int pin);
void Ingresar(int ingreso);
bool TieneAlquiladas();
bool ComprobarSaldo (int importe);
void AnotarPelicula(long id);
void DevolverPelicula(long id);
void RetirarImporte(int importe);
Gestor
char * nombre;
int PIN;
Gestor(char *nombre, int pin);
~Gestor();
bool IgualNombre(char *ng);
bool ComprobarPIN(int pin);
VHS
char * título;
char *director;
char *género;
long id;
VHS(char *título, char *director, char *genero, long id);
~VHS();
bool IgualTitulo(char *titulo);
void EscribirDatos();
void EscribirEstado();
9
bool IgualIdentif(int id);
bool Libre();
int Importe24h();
void AnotarAlquiler(char * nc, Fecha f);
int ImporteTotal(Fecha f);
void AnotarLibre();
DVD
char * título;
char *director;
char *género;
long id;
DVD(char *título, char *director, char *genero, long id);
~DVD();
bool IgualTitulo(char *titulo);
void EscribirDatos();
void EscribirEstado();
bool IgualIdentif(int id);
bool Libre();
int Importe24h();
void AnotarAlquiler(char * nc, Fecha f);
int ImporteTotal(Fecha f);
void AnotarLibre();
c. Reutilización
Se puede reutilizar:
• Película: VHS y DVD tienen exactamente las mismas operaciones. Cambia alguna
implementación: las operaciones “Importe24h” e “ImporteTotal” serán virtuales en la
clase “Película”, con implementaciones diferentes para VHS y DVD. El resto es igual.
• Personas: cliente y gestor tienen algo en común, pero se utilizan en casos distintos. No
parece interesante aplicar herencia.
Diagrama resultante
Cliente
0..1
Gestor
*
1
1
1
VideoClub
1
*
Película VHS
*
Película
Película DVD
10
Descargar