Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porInés García Lucero Modificado hace 7 años
1
Introducción a la Programación Orientada a Objetos Sonia Rueda Encapsulamiento y Abstracción
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR 2017
2
Caso de Estudio: Libreta de Contactos
Una libreta de contactos mantiene el nombre, número de teléfono móvil, número de teléfono fijo y de un conjunto de personas u organizaciones. La clase Libreta_Contactos encapsula una colección de elementos de clase Contacto, representada con un arreglo parcialmente ocupado. La cantidad de componentes del arreglo es fija, la cantidad de componentes ligadas es variable. Todas las componentes ligadas están en las primeras cant posiciones. Los elementos se mantienen ordenados alfabéticamente por nombre.
3
Caso de Estudio: Libreta de Contactos
La clase cliente es responsable de controlar que haya lugar en la libreta antes de agregar un nuevo contacto y que no exista un contacto con el mismo nombre que el nuevo. El método pertenece utiliza la estrategia de búsqueda binaria para decidir si la libreta contiene un contacto con el mismo nombre que el contacto que recibe como parámetro. El método intercalar, intercala ordenadamente dos libretas en una sola. Si dos contactos coinciden en el nombre, deja el contacto de la libreta que recibe el mensaje.
4
Caso de Estudio: Libreta de Contactos
Libreta_Contactos Contacto T [] Contacto cant:entero nombre:String nroMovil: String nroFijo:String String << Constructores>> Libreta_Contactos(max:entero) <<Comandos>> nuevo(nc:Contacto) eliminar(c:Contacto) <<Consultas>> cantContactos():entero estaLlena():boolean pertenece(c:Contacto):boolean intercalar(l:Libreta_Contactos): Libreta_Contactos <<Constructor>> Contacto (n:String) <<Comandos>> <<Consultas>> igual(c: Contacto):boolean mayor(c: Contacto):boolean
5
Caso de Estudio: Libreta de Contactos
class Libreta_Contactos{ //Atributos de Instancia private Contacto[] T; private int cant; //Constructor /*crea una coleccion con capacidad para max elementos*/ public Libreta_Contactos(int max) { T= new Contacto[max]; cant = 0; }
6
Caso de Estudio: Libreta de Contactos
cant … length 6 Libreta_Contactos lib = Libreta_Contactos(6);
7
Caso de Estudio: Libreta de Contactos
Si la libreta de contactos se mantiene ordenada por nombre, el servicio nuevo no puede implementarse asignando el nuevo contacto a la primera posición libre. Para comprender cómo implementar el servicio nuevo comencemos visualizando la libreta de contactos a través de una grilla con capacidad para 6 contactos
8
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Observemos que la grilla es un modelo con un alto nivel de abstracción, no modelamos objetos y referencias, nos concentramos en el ordenamiento.
9
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Davini Laura … Consideremos que se agrega un nuevo contacto para Davini Laura, como la grilla está vacía el primer contacto ocupa la primera posición en la grilla. Notemos que no interesan los otros atributos porque la libreta se ordena por nombre.
10
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Davini Laura … Polo Leo Se agrega ahora un nuevo contacto para Polo Leo. Como el nuevo contacto es mayor alfabéticamente a Davini Laura, se agrega al final.
11
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Davini Laura … Polo Leo Se agrega ahora un nuevo contacto para Avila Mario. Como el nuevo contacto es menor alfabéticamente que Davini Laura, se agrega al principio, arrastrando los que siguen una posición hacia abajo.
12
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Davini Laura … Polo Leo
13
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Davini Laura … Polo Leo
14
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Davini Laura … Polo Leo
15
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Avila Mario … Davini Laura Polo Leo Se agrega ahora un nuevo contacto para Parodi Mario. Como el nuevo contacto es menor alfabéticamente que Polo Leo, se agrega en la posición de este contacto, arrastrando a Polo Leo
16
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Avila Mario … Davini Laura Polo Leo
17
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Avila Mario … Davini Laura Parodi Mario Polo Leo Se agrega ahora un nuevo contacto para Ramos Marisa. Como el nuevo contacto es mayor alfabéticamente que el último contacto, se agrega al final
18
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Avila Mario … Davini Laura Parodi Mario Polo Leo Ramos Marisa Se agrega ahora un nuevo contacto para Castro Luis. Como el nuevo contacto es menor alfabéticamente que Davini Laura se arrastran todos los contactos a partir de Davini Laura.
19
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Avila Mario … Davini Laura Parodi Mario Polo Leo Ramos Marisa
20
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Avila Mario … Castro Luis Davini Laura Parodi Mario Polo Leo Ramos Marisa
21
Caso de Estudio: Libreta de Contactos
El servicio nuevo tiene que funcionar considerando varios casos diferentes: La libreta está vacía el contacto es: Menor a todos Mayor a todos Mayor al primero pero Menor que el último Asumimos que la clase cliente controla que la libreta no está llena.
22
Caso de Estudio: Libreta de Contactos
La grilla nos permite visualizar la libreta de contactos de manera abstracta para mostrar cómo se agrega cada nuevo contacto en cada caso. El diagrama de objetos, que también es una abstracción, es útil para graficar cómo se administra la memoria, pero no es una buena herramienta para diseñar el algoritmo nuevo.
23
Caso de Estudio: Libreta de Contactos
Algoritmo nuevo DE nc Buscar la posición del primer elemento mayor a nc Arrastrar todos los elementos a partir de esa posición Asignar nc a la posición Incrementar la cantidad de contactos public void nuevo(Contacto nc){ /*Requiere que la colección no esté llena y no exista un contacto con ese nombre*/ int pos = posInsercion(nc,cant); arrastrarDsp (pos,cant-pos); T[pos] = nc; cant++; }
24
Caso de Estudio: Libreta de Contactos
Caso trivial: Si la cantidad de elementos es 0, la posición de inserción es 0 Caso trivial: Si nc es mayor que el último nombre, la posición es la última Caso Recursivo: buscar la posición de inserción entre las n-1 componentes private int posInsercion (Contacto nc,int n){ /* Retornar la posición del primer elemento mayor a nc, o 0 si no existe*/ int pos = 0; if (n > 0) if (nc.mayor(T[n-1]) pos = n; else pos = posInsercion (nc,--n); return pos; }
25
Caso de Estudio: Libreta de Contactos
private void arrastrarDsp (int pos,int n){ if (n > 0){ T[pos+n] = T[pos+n-1]; arrastrarDsp(pos,--n); } ¿Qué pasa si ya existe un contacto con ese nombre? Modifique la implementación de nuevo considerando que es su responsabilidad controlar si ya existe un contacto con ese nombre y si es así no agrega nc.
26
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Avila Mario … Castro Luis Davini Laura Parodi Mario Polo Leo Ramos Marisa Supongamos que se decide eliminar el contacto Castro Luis. Los contactos que siguen deben arrastrarse una posición hacia arriba.
27
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Avila Mario … Davini Laura Parodi Mario Polo Leo Ramos Marisa
28
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Avila Mario … Davini Laura Parodi Mario Polo Leo Ramos Marisa
29
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Avila Mario … Davini Laura Parodi Mario Polo Leo Ramos Marisa
30
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Avila Mario … Davini Laura Parodi Mario Polo Leo Ramos Marisa
31
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Avila Mario … Davini Laura Parodi Mario Polo Leo Ramos Marisa
32
Caso de Estudio: Libreta de Contactos
Nombre Número de Móvil Número Fijo Avila Mario … Davini Laura Parodi Mario Polo Leo Ramos Marisa
33
Caso de Estudio: Libreta de Contactos
El servicio eliminar tiene que funcionar considerando varios casos diferentes: La libreta está vacía el contacto: No pertenece a la libreta Es el primero Es el último Es Mayor al primero pero Menor que el último Observemos que con la modificación en el comando nuevo no puede haber dos contactos con el mismo nombre
34
Caso de Estudio: Libreta de Contactos
Algoritmo eliminar DE c Buscar la posición del c Si existe Arrastrar los elementos desde posición hasta el último Decrementar la cantidad de contactos public void eliminar(Contacto c){ /*Elimina, si existe, el contacto c */ int pos = posElemento (c,cant); if (pos < cant){ arrastrarAnt(pos,cant-pos-1); cant--; }
35
Caso de Estudio: Libreta de Contactos
Libreta_Contactos Contacto T [] Contacto cant:entero nombre:String nroMovil: String nroFijo:String String << Constructores>> Libreta_Contactos(max:entero) <<Comandos>> nuevo(nc:Contacto) eliminar(c:Contacto) <<Consultas>> cantContactos():entero estaLlena():entero pertenece(c:Contacto):boolean intercalar(l:Libreta_Contactos): Libreta_Contactos <<Constructor>> Contacto (n:String) <<Comandos>> <<Consultas>> igual(c: Contacto):boolean mayor(c: Contacto):boolean Busca un contacto con el mismo nombre que c aplicando Búsqueda Binaria
36
Búsqueda en una estructura ordenada
La búsqueda binaria requiere que la estructura esté ordenada y consiste en partirla en mitades, considerando que el elemento buscado puede ser: Introducción a la Programación Orientada a Objetos •igual al que está en el medio •menor que el que está en el medio mayor que el que está en el medio
37
Búsqueda en una estructura ordenada
Introducción a la Programación Orientada a Objetos 3 12 Si busco el número 17 ÉXITO 17 17 Mitad 22 23 45
38
Búsqueda en una estructura ordenada
Introducción a la Programación Orientada a Objetos 3 3 12 12 Si busco el número 23 Descarto la primera mitad y busco en la segunda 17 17 Mitad 22 23 45
39
Búsqueda en una estructura ordenada
Introducción a la Programación Orientada a Objetos 3 12 Si busco el número 23 ÉXITO 17 17 22 Mitad 23 45
40
Búsqueda en una estructura ordenada
Introducción a la Programación Orientada a Objetos 3 3 12 12 Si busco el número 21 Descarto la primera mitad y busco en la segunda Mitad 17 17 22 23 45
41
Búsqueda en una estructura ordenada
Introducción a la Programación Orientada a Objetos 3 12 Si busco el número 21 Descarto la segunda mitad y busco en la primera 17 17 22 23 23 Mitad 45 45
42
Búsqueda en una estructura ordenada
Introducción a la Programación Orientada a Objetos 3 12 Si busco el número 21 NO ESTÁ 17 17 Mitad 22 22 23 45 45
43
Búsqueda en una estructura ordenada
Algoritmo Búsqueda Binaria si el elemento que está en la mitad es el buscado EXISTE sino si hay un solo elemento y no es el buscado NO EXISTE si el elemento que está en la mitad es menor al buscado Descartar la primera mitad Buscar en la segunda mitad Descartar la segunda mitad Buscar en la primera mitad Introducción a la Programación Orientada a Objetos Refinamos la solución
44
Búsqueda en una estructura ordenada
Algoritmo BúsquedaBinaria DE ini,fin,Elem Mitad(ini+fin)/2 si Lmitad = Elem EXISTE si ini >= fin NO EXISTE sino si Lmitad < Elem ini = mitad+1 BuscarBinaria ini,fin,Elem fin = mitad-1 BusquedaBinaria ini,fin,Elem Introducción a la Programación Orientada a Objetos El algoritmo es independiente del lenguaje de implementación
45
Búsqueda en una estructura ordenada
Casos de prueba Cantidad de elementos: 1, 2, 10, 15 Buscar: el primero, el último, menor al primero, mayor al último Introducción a la Programación Orientada a Objetos
46
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72
47
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3
48
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3
49
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5
50
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5
51
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6
52
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6
53
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9
54
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9
55
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11
56
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11
57
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25
58
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25
59
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25 40
60
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25 40 42 47 50
61
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25 40 42 47 50
62
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25 40 42 47 50 55
63
Intercalar dos estructuras ordenadas
5 6 9 11 40 42 47 50 3 25 55 60 72 3 5 6 9 11 25 40 42 47 50 55 60 72
64
Intercalar dos estructuras ordenadas
Algoritmo Intercalar Mientras no lleguemos al final de ninguna colección Comparar elemento a elemento e insertar el menor en una nueva colección Si llegamos al final de la primera colección Insertar los elementos que quedan de la segunda colección en la nueva Sino Insertar los elementos que quedan de la primer colección en la nueva Introducción a la Programación Orientada a Objetos
65
Intercalar dos estructuras ordenadas
Algoritmo Intercalar Crear nueva i1 0 i2 0 k 0 mientras i1 < n1 y i2 < n2 si L1i1 es menor que L2i2 insertar Li1 en Nuevak i1++ k++ sino insertar Li2 en Nuevak i2++ k++ Insertar el resto Introducción a la Programación Orientada a Objetos ¿Qué ocurre si un elemento pertenece a las dos estructuras? Modifique el algoritmo para que solo se inserte uno de los elementos.
66
Caso de Estudio: Libreta de Contactos
Libreta_Contactos Contacto T [] Contacto cant:entero nombre:String nroMovil: String nroFijo:String String ciudad:String << Constructores>> Libreta_Contactos(max:entero) <<Comandos>> nuevo(nc:Contacto) eliminar(c:Contacto) <<Consultas>> cantContactos():entero estaLlena():entero pertenece(c:Contacto):boolean intercalar(l:Libreta_Contactos): Libreta_Contactos <<Constructor>> Contacto (n:String) <<Comandos>> <<Consultas>> igual(c: Contacto):boolean mayor(c: Contacto):boolean ¿Qué cambios hay que hacer en Libreta_Contactos?
67
Caso de Estudio: Libreta de Contactos
Libreta_Contactos Contacto T [] Contacto cant:entero nombre:String nroMovil: String nroFijo:String String ciudad:String << Constructores>> Libreta_Contactos(max:entero) <<Comandos>> nuevo(nc:Contacto) eliminar(c:Contacto) <<Consultas>> cantContactos():entero estaLlena():entero pertenece(c:Contacto):boolean intercalar(l:Libreta_Contactos): Libreta_Contactos <<Constructor>> Contacto (n:String) <<Comandos>> <<Consultas>> igual(c: Contacto):boolean mayor(c: Contacto):boolean ¿Y si la libreta tienen que quedar ordenada por nroMovil?
68
Caso de Estudio: Nómina de Pacientes
Nomina_Pacientes Paciente T [] Paciente cant:entero tipoDoc:char nroDoc:entero fechaNac:Fecha nombre: String os:String << Constructores>> Nomina_Pacientes(max:entero) <<Comandos>> nuevo(p: Paciente) eliminar(p: Paciente) <<Consultas>> cantPacientes():entero cantPacientesOS(os:String):entero estaLlena():entero pertenece(c:Marcador):boolean intercalar(l: Nomina_Pacientes): Nomina_Pacientes <<Constructor>> Paciente () <<Comandos>> <<Consultas>> igual (c: Paciente):boolean mayor (c: Paciente):boolean ¿Qué métodos cambian?
69
Caso de Estudio: Libreta de Marcadores
Libreta_Marcadores Marcador T [] Marcador cant:entero … << Constructores>> Libreta_Marcadores(max:entero) <<Comandos>> nuevo(nm: Marcador) eliminar(c: Marcador) <<Consultas>> cantMarcadores():entero estaLlena():entero pertenece(c:Marcador):boolean intercalar(l: Libreta_Marcadores): Libreta_Marcadores <<Constructor>> Marcador (n:String) <<Comandos>> <<Consultas>> mayor (c: Marcador):boolean ¿Qué métodos cambian si puede haber repetidos?
70
Caso de Estudio: Agenda de Turnos
Una empresa de desarrollo de software desea ofrecer un sistema de gestión de turnos para médicos. Por cada turno se registra fecha, hora y los datos del paciente. El diseñador define la clase Turno con atributos fecha, hora y paciente. El sistema debe permitir agendar un nuevo turno, controlando que no exista otro con la misma fecha y hora. La clase Agenda encapsula una colección de elementos de clase Turno, representada con un arreglo parcialmente ocupado. Los elementos se mantienen ordenados cronológicamente por fecha y hora y están comprimidos de modo que todas las posiciones libres están al final. El servicio igual de la clase Turno retorna true si el objeto que recibe el mensaje tiene los mismos valores que el parámetro en los atributos dia y hora.
71
Caso de Estudio: Agenda de Turnos
T [] Turno cant:entero dia: Fecha hora: Horario paciente: Paciente << Constructores>> Agenda(max:entero) <<Comandos>> agendar(t:Turno):boolean eliminar(t:Turno) <<Consultas>> cantTurnos():entero estaLlena():entero cantTurnosOSFecha(f:Fecha,o:String) :entero estaLibre(d:Fecha,h:Horario):boolean <<Constructor>> Turno (d:Fecha, h:Horario,p:Paciente) <<Comandos>> <<Consultas>> obtenerPaciente():Paciente igual (t:Turno):boolean mayor (t: Turno):boolean Paciente tipoDoc:char nroDoc:entero fechaNac:Fecha nombre: String os:String
72
Caso de Estudio: Agenda de Turnos
T [] Turno cant:entero << Constructores>> Agenda(max:entero) <<Comandos>> agendar(t:Turno):boolean eliminar(t:Turno) <<Consultas>> cantTurnos():entero estaLlena():entero cantTurnosOSFecha(f:Fecha,o:String) :entero estaLibre(d:Fecha,h:Horario):boolean agendar(t:Turno):boolean retorna true si no existe un turno con la misma fecha y hora que el parámetro en cuyo caso inserta a t ordenadamente. Requiere que la estructura no este llena
73
Caso de Estudio: Agenda de Turnos
class Agenda{ //Atributos de Instancia private Turno[] T; private int cant; /*Constructor crea una coleccion con capacidad para max elementos*/ public Agenda(int max) { T= new Turno[max]; cant = 0; }
74
Caso de Estudio: Agenda de Turnos
DrPerez :Agenda length 100 Agenda DrPerez = Agenda(100);
75
Caso de Estudio: Agenda de Turnos
DrGomez :Agenda length 150 Agenda DrGomez = Agenda(150);
76
Caso de Estudio: Agenda de Turnos
unTurno DrGomez :Agenda :Turno … length :Paciente 1 150 DrGomez.agendar(unTurno);
77
Caso de Estudio: Agenda de Turnos
La clase Agenda_Turnos define un TDA a partir del cual pueden crearse varias instancias. Si la agenda de turnos de un médico se mantiene ordenada de acuerdo a los atributos fecha y hora, el servicio agendar no puede implementarse asignando el nuevo Turno a la primera posición libre. Cada vez que el objeto ligado a agendaDrPerez recibe el mensaje agendar debe verificar si existe un turno con la misma fecha y hora y si no existe, buscar la posición para insertar el nuevo turno.
78
Caso de Estudio: Agenda de Turnos
Los casos de prueba deben permitir verificar si el servicio inserta un nuevo turno correctamente considerando que: La agenda está vacía el Turno es: Menor a todos Mayor a todos Mayor al primero pero Menor que el último Asumimos que la clase cliente controla que la agenda no está llena.
79
Caso de Estudio: Agenda de Turnos
Algoritmo agendar DE turno Buscar un turno en la agenda con la misma fecha y hora que turno si no existe Buscar la posición del primer elemento mayor a turno Arrastrar todos los elementos a partir de esa posición Asignar turno a la posición Incrementar cant Observemos que cuando diseñamos el algoritmo nos desentendemos de algunos detalles, por ejemplo retornar un valor booleano Esta solución no es eficiente
80
Caso de Estudio: Agenda de Turnos
Algoritmo agendar DE turno Buscar un turno en la agenda con la misma fecha y hora que turno si no existe Buscar la posición de inserción desde el final hacia el principio, copiando cada turno en la posición que sigue Asignar turno a la posición Incrementar cant Implementar esta versión del algoritmo
81
Caso de Estudio: Agenda de Turnos
Algoritmo agendar DE turno Buscar un turno con fecha y hora mayor o igual a turno si el turno tiene mayor fecha y hora Arrastrar todos los elementos a partir de esa posición Asignar turno Incrementar cant
82
Caso de Estudio: Agenda de Turnos
Algoritmo agendar DE turno Buscar la posición de un turno con fecha y hora mayor o igual a turno si la fecha y hora del turno en posición es mayor que turno Arrastrar todos los elementos a partir de esa posición Asignar turno a la posición Incrementar cant
83
Caso de Estudio: Agenda de Turnos
public boolean agendar(Turno turno){ /* retorna true si no existe un turno con la misma fecha y hora que el parámetro en cuyo caso inserta a t ordenadamente. Requiere que la estructura no este llena */ boolean agendo = false; int pos = posMayoroIgual(turno); if (T[pos].mayor(turno)){ arrastrarDsp (pos); T[pos] = turno; cant++; agendo = true; } return agendo;
84
Caso de Estudio: Agenda de Turnos
private int posMayoroIgual (Turno turno){ /* Retornar la posición del primer elemento mayor o igual a turno, si no existe ningun elemento mayor o a turno en la colección retorna cant*/ int pos = 0; boolean salir=false; while (pos < cantTurnos() && !salir){ if (T[pos].mayor(turno)|| T[pos].igual(turno)) salir = true; else pos++; } private void arrastrarDsp (int pos){ for (int i=cantTurnos();i>pos; i--) T[i] = T[i-1]; }
85
Caso de Estudio: Agenda de Turnos
private int cantTurnosOSFecha (Fecha f,String o){ /* Computa la cantidad de turnos dados para la fecha f para pacientes de la obra social o*/ Paciente pac; int cont=0; for (int i=0;i<cantTurnos(); i++){ pac = T[i].obtenerPaciente(); if (T[i].obtenerFecha.equals(f) && pac.obtenerOS().equals(o)) cont++; } return cont; Esta solución no es eficiente
86
Caso de Estudio: Agenda de Turnos
Algoritmo cantTurnosOSFecha DE f,o Buscar la posición del primer turno con fecha igual a f o mayor que f Si existe un turno con fecha f Contar todos los turnos que corresponden a pacientes con la obra social o hasta que cambie la fecha Implementar esta versión del algoritmo
87
Caso de Estudio: Agenda de Turnos
NominaPacientes Paciente T [] Paciente cant:entero tipoDoc:char nroDoc:entero fechaNac:Fecha nombre: String os:String << Constructores>> NominaPacientes(max:entero) <<Comandos>> ingresar(t:Turno):boolean <<Consultas>> cantPacientes():entero estaLlena():entero estaPaciente(t:char,n:entero) :boolean Observemos que el sistema completo puede incluir a otras clases que referencien a los objetos de la clase Paciente, por ejemplo, la nómina completa de pacientes.
88
Caso de Estudio: Agenda de Turnos
:nomina :Turno … length … length :Paciente 1 150 500
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.