ISIS1206 – Estructuras de Datos http://cupi2.uniandes.edu.co N13: DISEÑO BÁSICO DE ESTRUCTURAS DE DATOS Del Análisis al Diseño
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
N13: DISEÑO BÁSICO DE ESTRUCTURAS DE DATOS
Del Análisis al Diseño
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Proceso de Construcción de Software
2
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Proceso de Construcción de Software
3
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Proceso de Construcción de Software
4
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Proceso de Construcción de Software
5
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del Análisis al Diseño
6
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del Análisis al Diseño
7
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del Análisis al Diseño
8
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del Análisis al Diseño
9
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del Análisis al Diseño
10
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del Análisis al Diseño
11
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del Análisis al Diseño
12
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Del
13
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Ejemplo: El Hospital
En un hospital se debe permitir a un médico solicitar una enfermera para atender un paciente. Como no es muy usual esto, las enfermeras están organizadas de manera que solo haya una disponible en todo momento. Cada enfermera tiene un identificador y la duración de su turno (en minutos). La enfermera que está de turno, tiene además el tiempo que le falta para terminar su turno y si está ocupada con un médico. Los turnos de las enfermeras están organizados de manera circular. Las operaciones para manejar la estructura de enfermeras son:
• Avanzar un minuto (la enfermera que está de turno disminuye lo que le falta en 1. Si llega a 0, se inicia el turno de la segunda enfermera, pasando la anterior a ocupar la última posición)
• Dar enfermera (retorna la enfermera de turno si no está ocupada, o null en caso contrario)
• Calcular cuántas enfermeras hay en el hospital
• Calcular cuánto le falta a una enfermera (dado su id) para comenzar su turno.
14
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Análisis
Restricciones:• Sólo existe una enfermera
disponible en todo momento(en turno).
• Los turnos se asignan deforma circular.
15
class modeloAnalisis
Hospital Enfermera
- estado: int
- id: String
- tiempoTurno: int
-enfermeras
*-enTurno
1
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Análisis al Diseño
• Formalismo
• Invariante
16
Hospital = < E1, E2, …, Et, …, En > (Et está de turno) Ei = [ id, estado, tiempoTurno]
n > 0 // Hay por lo menos una enfermera en el hospital
Ei.tiempoTurno > 0 // Todas las enfermeras tienen un tiempo de turno
Ei.estado = FUERA_TURNO, si i ≠ t // Las enfermeras que NO están de turno se
// consideran fuera de turno
Ei.estado = LIBRE o Ei.estado = OCUPADA, // La enfermera que está de turno puede estar libre
si i = t // u ocupada
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Análisis al Diseño
• Interfaces
17
¿Estamos declarando la interfaz del sistema o de la estructura de datos?
class Domain Model
«interface»
IHospital
+ avanzarMinuto() : void
+ darEnfermera() : IEnfermera
+ contarEnfermeras() : int
+ faltaParaTurno(String) : int
class Domain Model
«interface»
IListaCircularEnfermeras
+ darEnfermeraEnTurno() : IEnfermera
+ darTamanho() : int
+ faltaParaTurno(String) : int
+ avanzarMinuto() : void
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Diseño
18
class Domain Model
«interface»
IEnfermera
+ darId() : String
+ darTiempoTurno() : int
+ darTiempoQueda() : int
+ estaOcupada() : boolean
+ iniciarTurno() : void
+ avanzarMinuto() : void
+ cambiarEstado(int) : void
+ darSiguienteEnfermera() : IEnfermera
+ darEstado() : int
«interface»
IHospital
+ avanzarMinuto() : void
+ darEnfermera() : IEnfermera
+ contarEnfermeras() : int
+ faltaParaTurno(String) : int
«interface»
IListaCircularEnfermeras
+ darEnfermeraEnTurno() : IEnfermera
+ darTamanho() : int
+ faltaParaTurno(String) : int
+ avanzarMinuto() : void
Hospital
ListaCircularEnfermeras
- tamanho: int
Enfermera
- estado: int
- id: String
- tiempoTurno: int
inv: Por lo menos hay
una enfermera en el
hospital.
inv: El estado de la enfermera puede ser
libre : 1, u ocupada:2.
La enfermera tiene un tiempo de
turno.
El tiempo que le queda de turno a
una enfermera que no está de turno es
de 0.
La enfermera siempre tiene una
siguiente enfermera.
-siguiente 1
-enfermeraActual 1
-enfermeras 1
ISIS1206 – Estructuras de Datos
http://cupi2.uniandes.edu.co
Bibliografía
19