Está en la página 1de 19

N13: DISEO BSICO DE ESTRUCTURAS DE DATOS

Del Anlisis al Diseo

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

Proceso de Construccin de Software

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

Proceso de Construccin de Software

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

Proceso de Construccin de Software

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

Proceso de Construccin de Software

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

Del Anlisis al Diseo

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

Del Anlisis al Diseo

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

Del Anlisis al Diseo

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

Del Anlisis al Diseo

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

10

Del Anlisis al Diseo

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

11

Del Anlisis al Diseo

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

12

Del Anlisis al Diseo

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

13

Del

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

14

Ejemplo: El Hospital
En un hospital se debe permitir a un mdico solicitar una enfermera para atender un paciente. Como no es muy usual esto, las enfermeras estn organizadas de manera que solo haya una disponible en todo momento. Cada enfermera tiene un identificador y la duracin de su turno (en minutos). La enfermera que est de turno, tiene adems el tiempo que le falta para terminar su turno y si est ocupada con un mdico. Los turnos de las enfermeras estn organizados de manera circular. Las operaciones para manejar la estructura de enfermeras son:
ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

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 posicin) Dar enfermera (retorna la enfermera de turno si no est ocupada, o null en caso contrario) Calcular cuntas enfermeras hay en el hospital Calcular cunto le falta a una enfermera (dado su id) para comenzar su turno.

15

Anlisis
Restricciones:
class modeloAnalisis

-enfermeras * -enTurno 1 Enfermera estado: int id: String tiempoTurno: int

Hospital

Slo existe una enfermera disponible en todo momento (en turno). Los turnos se asignan de forma circular.

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

16

Anlisis al Diseo
Formalismo
Hospital = < E1, E2, , Et, , En > (Et est de turno) Ei = [ id, estado, tiempoTurno]

Invariante
n > 0 Ei.tiempoTurno > 0 Ei.estado = FUERA_TURNO, si i t Ei.estado = LIBRE o Ei.estado = OCUPADA, si i = t // Hay por lo menos una enfermera en el hospital // Todas las enfermeras tienen un tiempo de turno // Las enfermeras que NO estn de turno se // consideran fuera de turno // La enfermera que est de turno puede estar libre // u ocupada

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

17

Anlisis al Diseo
Interfaces
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

18

Diseo
class Domain Model interface IHospital + + + + avanzarMinuto() : void darEnfermera() : IEnfermera contarEnfermeras() : int faltaParaTurno(String) : int Hospital inv: Por lo menos hay una enfermera en el hospital.

-enfermeras

ListaCircularEnfermeras tamanho: int + + + +

interface IListaCircularEnfermeras darEnfermeraEnTurno() : IEnfermera darTamanho() : int faltaParaTurno(String) : int avanzarMinuto() : void

-enfermeraActual

1 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.

interface IEnfermera + + + + + + + + + darId() : String darTiempoTurno() : int darTiempoQueda() : int estaOcupada() : boolean iniciarTurno() : void avanzarMinuto() : void cambiarEstado(int) : void darSiguienteEnfermera() : IEnfermera darEstado() : int Enfermera estado: int id: String tiempoTurno: int -siguiente 1

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co

19

Bibliografa

ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.co