Mostrando entradas con la etiqueta clases. Mostrar todas las entradas
Mostrando entradas con la etiqueta clases. Mostrar todas las entradas

martes, 26 de noviembre de 2013

Ejercicio tipo examen sobre Clases e Interfaces en Java

Bueno, el siguiente ejercicio fue propuesto como un ejercicio tipo examen para el curso "Tecnología de la programación I" que estoy siguiendo (IV ciclo de Ingeniería de Sistemas).

Enunciado.

El departamento de Informática de un hospital está realizando un nuevo registro de datos de todas las personas que tienen relación con esa institución, que son: los empleados, los médicos y los pacientes.
Los empleados son categorizados en función de si son contratados por Planilla o de forma Eventual y son los encargados de los procesos administrativos.

Los médicos (que podrían considerarse un tipo especial de empleados contratados por Planilla) se encargan de las atenciones de las consultas médicas.
Para solicitar una cita, el paciente es atendido por un empleado. El paciente indica el servicio en el cual quiere pasar consulta y el empleado le indica el nombre del médico, la fecha y la hora de la cita.

Los atributos de cada uno de ellos se indican a continuación:

  • Persona: número de DNI, nombre, apellido, fecha de nacimiento, dirección, ciudad de procedencia.
  • Paciente: número de historia clínica, sexo, grupo sanguíneo, lista de medicamentos a los que es alérgico.
  • Empleado: código de Empleado, número de horas extras, fecha de ingreso, área, cargo.
  • Empleado por Planilla: salario mensual, porcentaje adicional por hora extra.
  • Empleado Eventual: honorarios por hora, número de horas totales (normales + extras) trabajadas, fecha de término del contrato.
  • Médico: especialidad (cirujano, oftalmólogo, etc.), servicio (cirugía, oftalmología, etc.), número de consultorio.

Las operaciones que involucren algún cálculo, deben desarrollarse a través de interfaces.
La aplicación a desarrollar debe permitir:
a) Registrar los datos de los empleados, los pacientes y los médicos.
b) Registrar los datos de una cita médica.
c) Listar los datos de los médicos ordenados en forma descendente por la especialidad.
d) Listar los datos (nombres y apellidos) de los pacientes atendidos por un médico determinado (ingresando su código).

Nota: En el diagrama y en la codificación deben mostrarse e implementarse los aspectos de ocultación, composición y/o agregación, herencia (simple y múltiple) y polimorfismo.

Solución.

El desarrollo se compone de clases e interfaces, a fin de cumplir todos los requisitos expuestos.
En este caso, se ha ordenado el programa en 2 paquetes: backend y frontend.
El primero incluye toda la lógica interna del programa y el segundo sólo lo referente a la lectura de datos y acerca de cómo se presentan las opciones y respuestas al usuario.
Dentro del primer paquete se encuentran las clases e interfaces: EEventual, EPlanilla, Empleado, Fecha, Medico (que contiene una clase interna llamada CitaMedica), Paciente, Persona, Saldo, SaldoEventual y SaldoPlanilla.
Dentro del segundo paquete se tiene: Aplicacion, Lector y Principal.

El siguiente video explica detalladamente el desarrollo del programa:

domingo, 29 de julio de 2012

1.2. Cada objeto tiene una interfaz.

1.2. Cada objeto tiene una interfaz

Los objetos son únicos, no tiene sentido tenerlos por duplicado. Sin embargo, sí es importante considerar las características y comportamientos comunes de estos: lo que les hace pertenecientes a una misma clase. Esta idea se uso incluso en el primer lenguaje orientado a objetos, Simula-67, con la palabra reservada class.

Simula, como su nombre lo indica, fue creado para desarrollar simulaciones, como el clásico "problema del cajero". Aquí se tiene un grupo de cajeros, clientes, cuentas, transacciones y unidades de moneda (es decir, un montón de objetos). Éstos objetos pueden agruparse en "clases de objetos", y de allí proviene la palabra reservada class.

Crear tipos de datos abstractos (clases) es un concepto fundamental de la POO. Éstos trabajan como tipos de datos predefinidos: así es posible crear variables de un tipo (los llamados objetos o instancias), y manipular estas variables (mediante el envío de mensajes o peticiones).

Cada objeto pertenece a una clase en particular, lo que define sus características y comportamientos.

Prácticamente todos los lenguajes de programación orientados a objetos usan la palabra reservada class, y por lo general, los que no, usan la palabra reservada type; por lo que podemos relacionar dichos términos entre sí.

** Hay quienes suelen hacer distinción, alegando que type determina la interfaz; mientras que class es una implementación particular de dicha interfaz.

1.1. El progreso de abstracción.

1.1. El progreso de abstracción

Es bueno saber que los lenguajes de programación nos simplifican mucho el trabajo. De no ser por ellos, deberíamos tratar con el ordenador usando comandos sumamente extraños y un tanto extensos incluso para pequeñas instrucciones.

En un primer momento, surgió el mencionado lenguaje ensamblador, el cual viene a ser una abstracción de la máquina subyacente.

Como sabemos, el “lenguaje máquina” se corresponde con el “lenguaje binario”. Lo que quiere decir que, las instrucciones directas al ordenador deberían expresarse en 1s y 0s.

Lo que el lenguaje ensamblador hizo es implementar una representación simbólica de dichos códigos de máquina binarios.

Muchos lenguajes llamados “imperativos” le siguieron (tales como Fortran, BASIC y C). Éstos representaban abstracciones del lenguaje ensamblador, lo que suponía grandes mejores. Sin embargo, aún se requería idear la solución en términos más del ordenador que en términos del problema. Esto es lo que se conoce como un lenguaje de “bajo nivel”.