elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Consulta sobre un ejercicio de clases
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Consulta sobre un ejercicio de clases  (Leído 9,554 veces)
zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Consulta sobre un ejercicio de clases
« en: 23 Noviembre 2013, 22:40 pm »

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:
Citar
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 Desconectado

Mensajes: 91


Ver Perfil
Re: Consulta sobre un ejercicio de clases
« Respuesta #1 en: 24 Noviembre 2013, 00:27 am »

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 Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: Consulta sobre un ejercicio de clases
« Respuesta #2 en: 24 Noviembre 2013, 00:36 am »

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 Desconectado

Mensajes: 91


Ver Perfil
Re: Consulta sobre un ejercicio de clases
« Respuesta #3 en: 24 Noviembre 2013, 01:06 am »

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:

Código
  1. String nombreMedico;
  2.  
  3. public String getMedico () {
  4.     return nombreMedico;
  5. }

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 Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: Consulta sobre un ejercicio de clases
« Respuesta #4 en: 24 Noviembre 2013, 02:10 am »

Pero para usar eso, tendría que hacer todo esto, ¿verdad?
Código
  1. // Luego de haber leído el nombre del Médico,
  2. // se buscaría de este modo las citas en que aparece:
  3. for(int i=0; i<ListaPacientes.length; ++i)
  4. for(int j=0; j<ListaPacientes.getCitas().length; ++j)
  5. if(ListaPacientes.getCitas()[j].getMedico().equals( medicoBuscado))
  6. 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 Desconectado

Mensajes: 91


Ver Perfil
Re: Consulta sobre un ejercicio de clases
« Respuesta #5 en: 24 Noviembre 2013, 02:20 am »

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 Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: Consulta sobre un ejercicio de clases
« Respuesta #6 en: 24 Noviembre 2013, 02:38 am »

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

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: Consulta sobre un ejercicio de clases
« Respuesta #7 en: 24 Noviembre 2013, 14:21 pm »

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:
Código
  1. package javase.poo.empleados.pojo;
  2.  
  3. import javase.poo.empleados.medico.Medico;
  4.  
  5.  
  6. public class Paciente {
  7.  
  8.    private String nombre;
  9. private long codigoCita;
  10. private int edad;
  11. private String causaCita;
  12. private String telefono;
  13. private Medico medico;
  14.  
  15. public Paciente() {
  16. this.nombre = "";
  17. this.codigoCita = 0;
  18. this.edad = 0;
  19. this.causaCita = "";
  20. this.telefono = "";
  21. this.medico = null;
  22. }
  23.  
  24.    public String getNombre() {
  25.        return nombre;
  26.    }
  27.  
  28.    public void setNombre(String nombre) {
  29.        this.nombre = nombre;
  30.    }
  31.  
  32.    public long getCodigoCita() {
  33.        return codigoCita;
  34.    }
  35.  
  36.    public void setCodigoCita(long codigoCita) {
  37.        this.codigoCita = codigoCita;
  38.    }
  39.  
  40.    public int getEdad() {
  41.        return edad;
  42.    }
  43.  
  44.    public void setEdad(int edad) {
  45.        this.edad = edad;
  46.    }
  47.  
  48.    public String getCausaCita() {
  49.        return causaCita;
  50.    }
  51.  
  52.    public void setCausaCita(String causaCita) {
  53.        this.causaCita = causaCita;
  54.    }
  55.  
  56.    public String getTelefono() {
  57.        return telefono;
  58.    }
  59.  
  60.    public void setTelefono(String telefono) {
  61.        this.telefono = telefono;
  62.    }
  63.  
  64.    public Medico getMedico() {
  65.        return medico;
  66.    }
  67.  
  68.    public void setMedico(Medico medico) {
  69.        this.medico = medico;
  70.    }
  71.  
  72.    @Override
  73.    public String toString() {
  74.        String data = "";
  75.        data = "Nombre del paciente:\t" + this.getNombre();
  76. data += "\nCausa de la cita:\t" + this.getCausaCita();
  77. data += "\nEdad del paciente:\t" + this.getEdad();
  78. data += "\nTelefono:\t" + this.getTelefono();
  79. data += "\n\nMedico a cargo:\t" + this.getMedico().toString();
  80.  
  81. return data;
  82.    }
  83.  
  84. }
  85.  

Medico:
Código
  1. package javase.poo.empleados.medico;
  2.  
  3.  
  4. public class Medico {
  5.  
  6.    private String nombre;
  7.    private String especialidad;
  8.  
  9.    public Medico() {
  10.        this.nombre = "";
  11.        this.especialidad = "";
  12.    }
  13.  
  14.    public Medico (String nombre, String especialidad) {
  15.        this.nombre = nombre;
  16.        this.especialidad = especialidad;
  17.    }
  18.  
  19.    public String getNombre() {
  20.        return nombre;
  21.    }
  22.  
  23.    public void setNombre(String nombre) {
  24.        this.nombre = nombre;
  25.    }
  26.  
  27.    public String getEspecialidad() {
  28.        return especialidad;
  29.    }
  30.  
  31.    public void setEspecialidad(String especialidad) {
  32.        this.especialidad = especialidad;
  33.    }
  34.  
  35.    @Override
  36.    public String toString() {
  37.        String data = "";
  38.        data += "\nNombre:\t" + this.getNombre();
  39.        data += "\nEspecialidad:\t" + this.getEspecialidad();
  40.  
  41.        return data;
  42.    }
  43. }
  44.  

CitaMedica:
Código
  1. package javase.poo.empleados.citas;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Random;
  6. import javase.poo.empleados.medico.Medico;
  7. import javase.poo.empleados.pojo.Paciente;
  8. import javax.swing.JOptionPane;
  9.  
  10.  
  11. public class CitaMedica {
  12.  
  13.    List<Paciente> listaCitas;
  14.  
  15.    public CitaMedica() {
  16. listaCitas = new ArrayList<>();
  17.    }
  18.  
  19.    public void registrarConsulta() {
  20.  
  21. Paciente paciente = new Paciente();
  22. Medico medico = new Medico();
  23. Random generador = new Random(System.currentTimeMillis());
  24.  
  25. String nombrePaciente = txtNombrePaciente.getText();
  26. int edad = Integer.valueOf(txtEdadPaciente.getText());
  27. String causa = txtCausaCita.getText();
  28. String telefono = txtTelefono.getText();
  29. String nombreMedico = txtNombreMedico.getText();
  30.        String especialidad = txtEspecialidadMedico.getText();
  31.  
  32. int codigoCita = generador.nextInt(10000);
  33.  
  34.        medico.setNombre(nombreMedico);
  35.        medico.setEspecialidad(especialidad);
  36.  
  37. paciente.setNombre(nombrePaciente);
  38. paciente.setCodigoCita(codigoCita);
  39. paciente.setEdad(edad);
  40. paciente.setCausaCita(causa);
  41. paciente.setTelefono(telefono);
  42. paciente.setMedico(medico);
  43.  
  44. listaCitas.add(paciente);
  45.        JOptionPane.showMessageDialog(null,paciente.toString(),"Info de cita",0);
  46.        codigo = (long) codigoCita;
  47.    }
  48.  
  49.    public void buscarConsulta(long codigoCita) {
  50.  
  51. boolean existeCita = false;
  52. int indicePaciente = 0;
  53.  
  54. for (Paciente paciente : listaCitas) {
  55. if(paciente.getCodigoCita() == codigoCita) {
  56. existeCita = true;
  57. indicePaciente = listaCitas.indexOf(paciente);
  58.                           break;
  59. }
  60. }
  61.  
  62. if(existeCita) {
  63. String data;
  64.  
  65. data = "Nombre del paciente:\t" + listaCitas.get(indicePaciente).getNombre();
  66. data += "\nCausa de la cita:\t" + listaCitas.get(indicePaciente).getCausaCita();
  67. data += "\nEdad del paciente:\t" + listaCitas.get(indicePaciente).getEdad();
  68. data += "\nTelefono:\t" + listaCitas.get(indicePaciente).getTelefono();
  69. data += "\n\nMedico a cargo:\t" + listaCitas.get(indicePaciente).getMedico().toString();
  70.  
  71. JOptionPane.showMessageDialog(null,data,"Informacion de la cita",JOptionPane.INFORMATION_MESSAGE);
  72. }
  73. else {
  74. JOptionPane.showMessageDialog(null,"No se ha registrado la cita","No encontrada",1);
  75. }
  76.  
  77.    } // fin buscarCita
  78.  
  79. }
  80.  


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 Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: Consulta sobre un ejercicio de clases
« Respuesta #8 en: 24 Noviembre 2013, 16:31 pm »

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-X0Eop9us

Por 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

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: Consulta sobre un ejercicio de clases
« Respuesta #9 en: 24 Noviembre 2013, 16:41 pm »

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

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
desarrollar un ejercicio con clases
Java
jugran28 2 2,963 Último mensaje 11 Junio 2007, 20:15 pm
por jugran28
consulta ejercicio C++
Programación C/C++
15minutos 3 2,971 Último mensaje 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,206 Último mensaje 4 Noviembre 2016, 00:04 am
por class_OpenGL
Consulta sobre ejercicio basico en C?
Programación C/C++
palacio29 5 3,445 Último mensaje 14 Diciembre 2016, 07:45 am
por jessec01
Consulta sobre diagrama de clases de un consultio oftalmologico
Dudas Generales
itzg3 0 2,462 Último mensaje 3 Junio 2020, 18:26 pm
por itzg3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines