Título: Consulta sobre un ejercicio de clases Publicado por: zonahurbana 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. Título: Re: Consulta sobre un ejercicio de clases Publicado por: Zoik 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. Título: Re: Consulta sobre un ejercicio de clases Publicado por: zonahurbana 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? Título: Re: Consulta sobre un ejercicio de clases Publicado por: Zoik 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
Y con una iteración recorrer toda la arrayList de citas en busca del médico que quieres. Un saludo. Título: Re: Consulta sobre un ejercicio de clases Publicado por: zonahurbana en 24 Noviembre 2013, 02:10 am Pero para usar eso, tendría que hacer todo esto, ¿verdad?
Código 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. Título: Re: Consulta sobre un ejercicio de clases Publicado por: Zoik 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. Título: Re: Consulta sobre un ejercicio de clases Publicado por: zonahurbana 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. Título: Re: Consulta sobre un ejercicio de clases Publicado por: Mitsu 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: (http://i.imgur.com/zMy3gca.jpg?1) Cuando se consulta una cita: (http://i.imgur.com/0cCInNw.jpg?1) NOTA: YA TÚ CÁMBIALE EL TÍTULO A LOS DIÁLOGOS PARA DIFERENCIARLOS, XD. Paciente: Código
Medico: Código
CitaMedica: Código
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. Título: Re: Consulta sobre un ejercicio de clases Publicado por: zonahurbana 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. Título: Re: Consulta sobre un ejercicio de clases Publicado por: Mitsu 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. Título: Re: Consulta sobre un ejercicio de clases Publicado por: zonahurbana en 24 Noviembre 2013, 18:23 pm 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. Eso sería más bien una clase abstracta porque una interfaz no permite agregar variables, sólo constantes, ¿verdad? Gracias nuevamente, y es cierto lo que mencionas, siempre redactan mal los enunciados por alguna razón :silbar: Título: Re: Consulta sobre un ejercicio de clases Publicado por: Mitsu en 24 Noviembre 2013, 21:02 pm Toda interfaz es abstracta. No es necesario especificar en la interfaz qué variables recibirán valores. Una clase abstracta significa que estamos abstrayendo una idea, las especificaciones se hacen a partir de éstas, ya sea por herencia o por implementación.
En la interfce escribe los métodos como: getNombre(), setNombre(), getEdad(), setEdad(), etc. Luego, en la clase que implementa esa interfaz, especifica lo que debe hacer ese método. Saludos. |