♫♪ Que vengan los bomberos ♫♪
Instancia de evaluación | Cuatrimestre | Profesor | Tiempo de resolución |
---|---|---|---|
Segundo Parcial | 2do 2020 | A. Bongioanni | 120 minutos |
Criterios de evaluación
- 2 (dos) errores en el mismo tema anulan su puntaje.
- La correcta documentación y reglas de estilo de la cátedra serán evaluadas.
- Colocar sus datos personales en el nombre de la carpeta principal y la solución: Apellido.Nombre.Div. Ej: Pérez.Juan.2D. No sé corregirán proyectos que no sea identificable su autor.
- No se corregirán exámenes que no compilen.
- Reutilizar tanto código como crean necesario.
- Colocar nombre de la clase (en estáticos),
this
obase
en todos los casos que corresponda. - Aplicar los principios de los 4 pilares de la programación orientada a objetos.
Consigna
Se realizará una aplicación para despachar bomberos a distintos servicios.
Empezar a trabajar desde la cáscara.
Crear la base de datos
bomberos-db
y ejecutar en ella el siguiente script:
USE [bomberos-db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[log](
[id] [int] IDENTITY(1,1) NOT NULL,
[entrada] [varchar](100) NOT NULL,
[alumno] [varchar](60) NOT NULL
) ON [PRIMARY]
GO
Cambiar el nombre de la carpeta de la solución con sus datos personales: Apellido.Nombre.
Crear un proyecto de biblioteca de clases llamado
Entidades
y agregar los elementos del siguiente diagrama:
Extender la clase
DateTime
para calcular la diferencia en segundos entre una fecha de inicio y una fecha de fin:(fin - inicio).TotalSeconds;
Clase
Salida
:- El constructor dará inicio a la salida colocando la fecha y hora actual en el atributo correspondiente.
- El método
FinalizarSalida
dará fin a la salida colocar la fecha y hora actual en el atributo correspondiente. - La propiedad
TiempoTotal
retornará la diferencia en segundos entre la fecha de inicio y la fecha de fin.
Crear un nuevo tipo de excepción llamado
BomberoOcupadoException
con al menos dos sobrecargas de constructores.Clase
Bombero
:- Implementará la interfaz
IArchivos
tantas veces como muestra el diagrama. Esto requerirá implementar la interfaz de forma implícita y de forma explícita.- Para
Bombero
: serializará y deserializará el objeto en formato XML. Almacenarlo en un archivoBombero.xml
en el escritorio. - Para
string
: guardará y leerá de la base de datos el mensaje recibido como parámetro. Al leer concatenar todos las entradas del log en un solostring
.
- Para
- El método
AtenderSalida
realizará lo siguiente:- Agregará una nueva salida a la lista del bombero.
- Suspenderá el hilo entre 2 y 4 segundos.
- Finalizará la salida.
- Registrará la salida (horario de inicio, horario de fin y duración total) en la tabla
log
de la base de datos. - Avisará mediante el evento
MarcarFin
que se terminó la salida. Utilizar el parámetrobomberoIndex
para informar al formulario cuál bombero fue.
- Implementará la interfaz
Formulario
Cuartel
:- El método
DespacharServicio
deberá ejecutarAtenderSalida
en un nuevo hilo. - El manejador del evento
FormClosing
del formulario deberá asegurarse que no quede ningún hilo activo al salir. - El método
OcultarBombero
será el manejador del eventoMarcarFin
. Hacer todo lo necesario para que funcione. - Si se quiere despachar a un bombero que ya está atendiendo otra salida, se deberá lanzar la excepción
BomberoOcupadoException
y controlarla en el eventoClick
de cada botón, guardando en el log "Salida bombero X no concretada. - Los botones
Reporte
serializarán el objetoBombero
correspondiente.
- El método
Pruebas unitarias:
- Verificar que los métodos
Leer
yGuardar
deBombero
serialicen y deserialicen correctamente. - Verificar que el método de extensión de
DateTime
funcione tal como se espera.
- Verificar que los métodos
Resolución
Video | Código |
---|