Autor
|
Tema: Consulta sobre un ejercicio de clases (Leído 9,497 veces)
|
zonahurbana
Desconectado
Mensajes: 178
RS, JC.
|
En síntesis, lo que el enunciado me pide es crear clases o interfaces para estas entidades: personas, empleados, médicos y pacientes. Los empleados pueden contratarse de 2 formas (por Planilla o de forma Eventual), entonces haré que 2 clases hereden de Empleado. Pero además me indica que un Médico es un tipo especial de Empleado. ¿Debería crear una clase Médico que herede también de Empleado, al mismo nivel que las clases que catalogan a los empleados según la forma en que fueron contratados? Podría considerarlo así para simplificar, porque no menciona de que un Médico pueda contratarse por esas modalidades. Además dice que los empleados son personal administrativo y los médicos son los que atienden a los pacientes. Visto de ese modo, no serían un tipo de empleado, porque están considerando Empleado como PersonalAdministrativo. Pero esa no es mi duda central. Mi duda central es respecto a este inciso: b) Registrar los datos de una cita médica. En el 1er examen tuve que crear una clase Cliente, y una clase Libro, para relacionarlas (era un sistema como de biblioteca). Pero cuando me pedían ver una "lista de libros solicitados", a pesar que logré implementarlo, siempre tuve la duda de si eso debería ir en un atributo boolean de Libro como "prestado" o en un vector de librosPrestados dentro de la clase Cliente. Además, luego pensé que una biblioteca podría tener también varios libros iguales y prestarlos a distintas personas. Estuve pensando en crear una clase SolicitudLibro. Y para este ejercicio tal vez una clase CitaMédica. Pero, ¿cómo es la mejor forma de relacionar esto? Nuestra docente no es nada práctica... es pura teoría, pero no nos enseña a cómo deberíamos pensar los ejercicios. Tal vez CitaMédica podría ser una clase interna de Médico, o de Paciente, o tal vez ir aparte... o tal vez no debería existir y haya otra manera de manejar esto. ¡ ¿Qué es lo más adecuado? ! Por favor, si alguien conoce como tratar estos casos, ayúdeme que le estaré muy agradecido.
|
|
|
En línea
|
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
|
|
|
Zoik
Desconectado
Mensajes: 91
|
Bueno no se si te aconsejare correctamente, pero yo lo haria de la siguiente forma:
Como clase padre persona, aqui incluiriamos datos generales como dni,fecha de nacimiento,etc.
Medico, empleado y paciente heredan de persona, cada una de estas clases deberan tener datos que las otras no tienen, en el caso de medico por ejemplo especialidad medica, por decir algo.
Y a la clase paciente le haces una estructura de datos como una arraylist por ejemplo, de tipo citaMedica, que sería otra clase con sus respectivas variables(fecha de la cita, hora), así en todo momento podrás acceder al historial de citas de cada paciente.
Un saludo y espero haberte ayudado aunque sea un poco.
|
|
« Última modificación: 24 Noviembre 2013, 00:29 am por Zoik »
|
En línea
|
|
|
|
zonahurbana
Desconectado
Mensajes: 178
RS, JC.
|
Gracias por responder.
Pero, por ejemplo, ¿si luego quisiera obtener la lista de pacientes que serán atendidos por un médico determinado? Tendría que buscar en el arraylist de cada paciente las coincidencias con dicho médico, ¿verdad? A lo que me refiero es que, si son muchos pacientes, esto no sería muy eficiente, pero tampoco quisiera guardar los datos por duplicado, es decir, que cada médico tenga un arraylist para sus pacientes y los pacientes también respecto a sus médicos. ¿O es esto normal y estoy complicándome en vano?
|
|
|
En línea
|
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
|
|
|
Zoik
Desconectado
Mensajes: 91
|
Bien, en ese caso tendrías que poner en la clase citaMedica una variable que identifique a el médico que le atiende en esa visita y cotejarlo con el médico que le introduce el usuario. Es decir en la clase citaMedica: return nombreMedico; }
Y con una iteración recorrer toda la arrayList de citas en busca del médico que quieres. Un saludo.
|
|
|
En línea
|
|
|
|
zonahurbana
Desconectado
Mensajes: 178
RS, JC.
|
Pero para usar eso, tendría que hacer todo esto, ¿verdad? // Luego de haber leído el nombre del Médico, // se buscaría de este modo las citas en que aparece: for(int i=0; i<ListaPacientes.length; ++i) for(int j=0; j<ListaPacientes.getCitas().length; ++j) if(ListaPacientes.getCitas()[j].getMedico().equals( medicoBuscado)) System. out. println( ListaPacientes. getCitas()[j ]. getInfo() );
Porque voy a tener un arreglo de objetos Paciente y debo buscar en todas las CitaMedica que éste posea. Y a eso me refería, a si hay otro probablemente más eficiente.
|
|
« Última modificación: 24 Noviembre 2013, 02:16 am por zonahurbana »
|
En línea
|
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
|
|
|
Zoik
Desconectado
Mensajes: 91
|
Bueno si quieres hacerlo de otra forma, en vez de asignar a cada paciente una arrayList con sus citas, crea la arrayList de citas en tu main y guardalas todas allí, eso si necesitaras en la clase cita asignar algún tipo de variable para poder identificar el paciente al que hace referencia cada cita.
Te lo e puesto así porque lo considero mas ordenado, si quieres ver realmente que es mas eficiente prueba las dos maneras y mira el tiempo de ejecución, aunque al fin y al cabo vas a acabar leyendo la misma cantidad de citas en las dos fomas.
De todas formas tira un poco de código y cuando tengas algo postealo, así sera mucho mas fácil ayudarte.
Un saludo.
|
|
« Última modificación: 24 Noviembre 2013, 02:21 am por Zoik »
|
En línea
|
|
|
|
zonahurbana
Desconectado
Mensajes: 178
RS, JC.
|
Muchas gracias nuevamente. Creo que seguiré la idea suya porque crear un ArrayList de citas aparte, como que no está muy vinculado y me da la sensación que no hace uso de POO, ¿verdad?
Preguntaba porque me pareció haber visto en algún lugar una sugerencia, de usar una clase intermedia cuando existían datos vinculados entre 2 clases, para que no se guarde en ninguna de ellas.
Cuando tenga el código lo subiré a ver qué me dice. Gracias.
|
|
|
En línea
|
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
|
|
|
Mitsu
|
Para que puedas usar herencia, debes preguntarte si hay una relación es un. Si es así, este es un caso en donde podrás usar herencia. Ahora bien, como Médico no es un empleado, entonces no debe heredar de Empleado, en mi opinión no debe heredar de ninguna clase. Lo mejor sería hacer a ese médico una especie de pojo, así como a Paciente. Cuando creamos la clase CitaMédica, puedes crear una Lista de citas y usar a Medico para registrar sus datos en la consulta. Cuando se registra la cita:Cuando se consulta una cita:NOTA: YA TÚ CÁMBIALE EL TÍTULO A LOS DIÁLOGOS PARA DIFERENCIARLOS, XD. Paciente:package javase.poo.empleados.pojo; import javase.poo.empleados.medico.Medico; public class Paciente { private long codigoCita; private int edad; private Medico medico; public Paciente() { this.nombre = ""; this.codigoCita = 0; this.edad = 0; this.causaCita = ""; this.telefono = ""; this.medico = null; } return nombre; } public void setNombre (String nombre ) { this.nombre = nombre; } public long getCodigoCita() { return codigoCita; } public void setCodigoCita(long codigoCita) { this.codigoCita = codigoCita; } public int getEdad() { return edad; } public void setEdad(int edad) { this.edad = edad; } public String getCausaCita () { return causaCita; } public void setCausaCita (String causaCita ) { this.causaCita = causaCita; } return telefono; } public void setTelefono (String telefono ) { this.telefono = telefono; } public Medico getMedico() { return medico; } public void setMedico(Medico medico) { this.medico = medico; } @Override data = "Nombre del paciente:\t" + this.getNombre(); data += "\nCausa de la cita:\t" + this.getCausaCita(); data += "\nEdad del paciente:\t" + this.getEdad(); data += "\nTelefono:\t" + this.getTelefono(); data += "\n\nMedico a cargo:\t" + this.getMedico().toString(); return data; } }
Medico:package javase.poo.empleados.medico; public class Medico { public Medico() { this.nombre = ""; this.especialidad = ""; } this.nombre = nombre; this.especialidad = especialidad; } return nombre; } public void setNombre (String nombre ) { this.nombre = nombre; } public String getEspecialidad () { return especialidad; } public void setEspecialidad (String especialidad ) { this.especialidad = especialidad; } @Override data += "\nNombre:\t" + this.getNombre(); data += "\nEspecialidad:\t" + this.getEspecialidad(); return data; } }
CitaMedica:package javase.poo.empleados.citas; import java.util.ArrayList; import java.util.List; import java.util.Random; import javase.poo.empleados.medico.Medico; import javase.poo.empleados.pojo.Paciente; import javax.swing.JOptionPane; public class CitaMedica { List<Paciente> listaCitas; public CitaMedica() { listaCitas = new ArrayList<>(); } public void registrarConsulta() { Paciente paciente = new Paciente(); Medico medico = new Medico(); String nombrePaciente = txtNombrePaciente. getText(); int edad = Integer. valueOf(txtEdadPaciente. getText()); String causa = txtCausaCita. getText(); String telefono = txtTelefono. getText(); String nombreMedico = txtNombreMedico. getText(); String especialidad = txtEspecialidadMedico. getText(); int codigoCita = generador.nextInt(10000); medico.setNombre(nombreMedico); medico.setEspecialidad(especialidad); paciente.setNombre(nombrePaciente); paciente.setCodigoCita(codigoCita); paciente.setEdad(edad); paciente.setCausaCita(causa); paciente.setTelefono(telefono); paciente.setMedico(medico); listaCitas.add(paciente); JOptionPane. showMessageDialog(null,paciente. toString(), "Info de cita", 0); codigo = (long) codigoCita; } public void buscarConsulta(long codigoCita) { boolean existeCita = false; int indicePaciente = 0; for (Paciente paciente : listaCitas) { if(paciente.getCodigoCita() == codigoCita) { existeCita = true; indicePaciente = listaCitas.indexOf(paciente); break; } } if(existeCita) { data = "Nombre del paciente:\t" + listaCitas.get(indicePaciente).getNombre(); data += "\nCausa de la cita:\t" + listaCitas.get(indicePaciente).getCausaCita(); data += "\nEdad del paciente:\t" + listaCitas.get(indicePaciente).getEdad(); data += "\nTelefono:\t" + listaCitas.get(indicePaciente).getTelefono(); data += "\n\nMedico a cargo:\t" + listaCitas.get(indicePaciente).getMedico().toString(); } else { JOptionPane. showMessageDialog(null, "No se ha registrado la cita", "No encontrada", 1); } } // fin buscarCita }
En la clase CitaMedica, lo que hago es crear una lista que hace uso de Generics, en este caso es una lista de Pacientes. A este paciente le asigno los datos que se han ingresado, además del nombre y la especialidad del médico, pero éstos datos se los asigno al objeto Medico, luego le asigno al objeto Paciente para asociar un paciente a su médico. Además, genera un número aleatorio que simulará un código de consulta. La clase Medico sobreescribe el método toString(), para obtener en forma de Texto los datos del mismo. En la clase CitaMedica también programo el método buscarConsulta, que recibe un código long (código de cita) y en caso haya coincidencias, muestra la información de la cita en un diálogo, de lo contrario, informará que no se ha registrado esa cita. La clase Paciente es una pojo, vamos a crear objetos de esta clase para asignarle los datos y posteriormente agregarlos a lista. Espero te haya sido de ayuda.
|
|
« Última modificación: 24 Noviembre 2013, 15:34 pm por M1t$u »
|
En línea
|
|
|
|
zonahurbana
Desconectado
Mensajes: 178
RS, JC.
|
Gracias por responder M1t$u. La verdad es que ayer realicé el código e hice incluso un video para mis compañeros de clase explicándolo. Es porque tenemos un examen hoy, justamente a esta hora (aunque muy extrañamente lo han postergado para unas horas más adelante): https://www.youtube.com/watch?v=hQ-X0Eop9usPor eso estaba buscando la mejor manera de hacerlo jeje. Gracias por su ayuda y tengo algunas dudas respecto a su código: - ¿Pojo es una clase que no hereda de ninguna otra y que a su vez tampoco implementa interface alguna? - Yo tampoco consideré a Médico como una clase hija de Empleado. De hecho, un médico es un empleado, pero el enunciado dice que el empleado es personal administrativo, por lo que lo excluye completamente. Hay una parte en que dice "un médico podría considerarse un tipo especial de empleado contratado por planilla". Pero aún así, no seguí esta idea ya que sólo dice "podría". - Usted ha considerado un atributo Médico para cada Paciente. Pero podría darse el caso que cada paciente tenga distintas citas con diversos médicos. Además, de esa manera, no podrían existir médicos si no tienen citas con pacientes, y pues, no se está considerando a los médicos que no tienen citas reservadas. Gracias nuevamente.
|
|
|
En línea
|
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
|
|
|
Mitsu
|
Hola.
1) Lo que te he dado es un simple Demo para 'plantear' la idea que se me ocurrió. Puntos como el que acabas de dar son los que hacen que la idea general se pueda mejorar y posteriormente plasmar en el código.
Puedes hacer listas de médicos y de ćodigos de citas, para simular diversas citas (con diversos médicos o con el mismo) en la pojo Paciente. También puedes especificar una lista estática de médicos disponibles, cada uno con su especialidad, turno, etc. Y así al hacer la consulta, revisar qué medicos están disponibles y si su especialidad concuerda con el problema del paciente.
Deja fluir tu imaginación.
2) El enunciado es una cagada, está mal redactado (siempre veo esto en la universidad xD).
3) Puedes crear una interfaz con nombre, dirección, teléfono, edad, etc, que puedes implementar en los pacientes y también en los empleados.
4) Trastea todo lo que se te ocurra!
Saludos.
PD: Un POJO es una instancia de una clase que no extiende ni implementa nada en especial. Una pojo debe tener atributos private y setters y getters para éstos. Se usa para crear instancias en donde éstas interactúan con otros objetos a través de setters y getters.
|
|
« Última modificación: 24 Noviembre 2013, 16:47 pm por M1t$u »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
desarrollar un ejercicio con clases
Java
|
jugran28
|
2
|
2,949
|
11 Junio 2007, 20:15 pm
por jugran28
|
|
|
consulta ejercicio C++
Programación C/C++
|
15minutos
|
3
|
2,924
|
18 Octubre 2010, 21:51 pm
por Littlehorse
|
|
|
(wxMaxima) Consulta sobre enunciado de un ejercicio (conjuntos y ordenación)
Dudas Generales
|
class_OpenGL
|
0
|
2,177
|
4 Noviembre 2016, 00:04 am
por class_OpenGL
|
|
|
Consulta sobre ejercicio basico en C?
Programación C/C++
|
palacio29
|
5
|
3,396
|
14 Diciembre 2016, 07:45 am
por jessec01
|
|
|
Consulta sobre diagrama de clases de un consultio oftalmologico
Dudas Generales
|
itzg3
|
0
|
2,423
|
3 Junio 2020, 18:26 pm
por itzg3
|
|