Ir al contenido principal

II SEMESTRE: JAVA - Polimorfismo con Interfaces

POLIMORFISMO USANDO INTERFACES


Nuestro siguiente ejemplo reexamina el sistema de nómina de la sección anterior; Supongamos que la empresa en cuestión desea llevar a cabo las operaciones contables de varias cuentas en una única solicitud de pago, además de calcular los ingresos que deben ser pagados a cada empleado, la empresa también debe calcular el pago debido en cada uno de varias facturas (es decir, las facturas de los bienes compra). Aunque se aplica a cosas no relacionadas (es decir, los empleados y las facturas), ambas operaciones tienen que ver con la obtención de algún tipo de monto del pago. Para un empleado, el pago se refiere a los ingresos del empleado. Para una factura, el pago se refiere al costo total de las mercancías que figuran en la factura. ¿Podemos calcular cosas tan diferentes como los pagos adeudados a los empleados y las facturas en una sola aplicación polimórficamente?. Java no ofrece una capacidad que requiere que las clases no relacionadas apliquen un conjunto de métodos comunes (por ejemplo, un método que calcula una cantidad de pago)???.  Interfaces de Java ofrecen exactamente esa capacidad.

Entendiendo las Interfaces:

Las Interfaces definen y estandarizan la forma en que las cosas, como las personas y los sistemas pueden interactuar con otros. Por ejemplo, los controles de la radio pueden servir como interfaz entre los usuarios de la radio y los componentes internos de la radio. Los controles permiten a los usuarios realizar sólo un conjunto limitado de operaciones (por ejemplo, el cambio de estación, ajustar el volumen, elegir entre AM y FM), y diferentes radios podrán aplicar los controles de diferentes formas(por ejemplo, usando botones, diales, comandos de voz). La interfaz especifica qué operaciones de la radio debe permitir a los usuarios realizar, pero no especifica cómo se realizan las operaciones. Del mismo modo, la interfaz entre un conductor y un coche con una transmisión manual incluye el volante, el cambio de velocidades, el pedal del embrague, el pedal del acelerador y el freno. Esta misma interfaz se encuentra en casi todos los vehículos de transmisión manual, lo que permite a alguien que sepa cómo conducir un coche particular, transmisión manual de conducir casi cualquier vehículo de transmisión manual. Los componentes de cada coche individual puede ser diferente, pero el propósito general de los componentes es la sameto permitir a la gente a conducir el coche.

Objetos de software también se comunican a través de interfaces. Una interfaz en  Java describe un conjunto de métodos que pueden ser llamados en un objeto, para decirle al objeto cómo realizar alguna tarea o devolver alguna porción de información, por ejemplo. El siguiente ejemplo presenta una interfaz denominada "Payable" para describir la funcionalidad de cualquier objeto que debe ser capaz de ser "pagado" y por lo tanto debe ofrecer un método para determinar el importe del pago correcto de vencimiento. Una declaración de interfaz comienza con la palabra reservada Interface y sólo contiene constantes y métodos "abstract". A diferencia de clases, todos los miembros de interfaz debe ser "public", y las interfaces no puede especificar los detalles de aplicación, tales como declaraciones de métodos concretos y variables de instancia. Así que todos los métodos declarados en una interfaz son implícitamente "public abstract"  y todos los campos son implícitamente "public", "static" y "final".

Para utilizar una interfaz, una clase concreta debe especificar que implementa  (implements) la interfaz y debe declarar cada método en el interfaz con la firma especificada en la declaración de la interfaz. Una clase que no implementa todos los métodos de la interfaz es una clase abstracta y debe ser declarada "abstract" .La implementación de una interfaz es como la firma de un contrato con el compilador que dice: "Voy a declarar todos los métodos especificados por la interfaz o voy a declarar mi clase abstracta".

Descripcion del Problema:

Para crear una aplicación que pueda determinar los pagos para los empleados y las facturas por igual, requiere en primer lugar crear la interfaz "Payable". La Interfaz "Payable" contiene el método getPaymentAmount que devuelve una cantidad de tipo double que debe ser "pagado" por un objeto de cualquier clase que implementa la interfaz. El método GetPaymentAmount es una versión de uso general del método "earnings" de la jerarquía "Employee" , el cual calcula una cantidad de pago específicamente para un empleado, mientras que getPaymentAmount se puede aplicar a una amplia gama de objetos no relacionados. Después de declarar interfaz "Payable" , le presentamos la clase "Invoice" , que implementa la interfaz "Payable". A continuación, modificamos la clase "Employee" para que también implemente la interfaz "Payable". Por último, actualizamos la subclase "SalariedEmployee"  que hereda de "Employee" para que "encaje" en la jerarquía de "Payable" (es decir, cambiar el nombre del método "earnings"  de  SalariedEmployee por getPaymentAmount).


Veamos la Jerarquía que representa este ejemplo:




1. Creamos la Interfaz "Payable"





2. Ahora creamos la Clase "Invoice" que implementa la Interfaz "Payable", (note el uso de la palabra reservada implements en la declaración de la misma:


 

3. A continuación modificamos la clase "Employee" para que implemente la Interfaz "Payable"




4. Creamos la clase SalariedEmployee que implementa el método getPaymentAmount de la Interfaz Payable :




5. Creamos el programa principal que utiliza la Interfaz Payable, a traves de la cual se procesaran "Invoice" y "Employee" Polimórficamente:




6. Los Resultados:

 

Espero sus comentarios o dudas al respecto

Comentarios

Publicar un comentario

Entradas populares de este blog

Microsoft Access - Entrega 02

Establecer Índices y Claves primarias: Los índices permiten especificar un orden para la búsqueda de registros, su principal tarea es esta, básicamente cualquier campo de una Tabla puede ser un índice, incluso un conjunto de campos pueden ser índices, (los que suelen denominarse INDICES COMPUESTOS). Para definir un índice en un campo de una tabla basta con especificar la propiedad correspondiente, o también utilizar el botón Índice, tal como se muestra en la Imagen:      Por ejemplo, digamos que nos piden crear un índice compuesto denominado FullName que abarca los campos Apellidos y Nombres. Para realizar esa tarea haga click en el botón Índices y luego configure de acuerdo a la imagen:       Clave Principal: La clave primaria permite identificar de manera única a un registro, por teoría de diseño de base de datos, cada Tabla debe tener su correspondiente clave primaria para facilitar tareas de búsqueda y actualización de registros. Para definir u...

Microsoft Access - Entrega 01

Bienvenidos al curso Online de Microsoft Access 2007, durante el desarrollo del curso iré posteando un sencillo tutorial para aprender a utilizar esta herramienta de gestión de bases de datos, de tal manera que al finalizar todas las entregas Ud. sepa cómo iniciarse en el diseño de Bases de datos así como en la construcción de versátiles aplicaciones. Qué es una base de datos? Una base de datos (en ocasiones abreviada B.D.) es un conjunto de datos pertenecientes a un mismo contexto y almacenados sistemáticamente para su posterior uso. En este sentido, una biblioteca puede considerarse una base de datos compuesta en su mayoría por documentos y textos impresos en papel e indexados para su consulta. En la actualidad, y debido al desarrollo tecnológico de campos como la informática y la electrónica, la mayoría de las bases de datos están en formato digital (electrónico), que ofrece un amplio rango de soluciones al problema de almacenar datos. Fuente: Wikipedia Qué es un Programa Gest...

II Semestre - JAVA: EJERCICIOS SOBRE JERARQUIAS DE HERENCIA

Debate: Discutir las formas en que la herencia promueve la reutilización de software, se ahorra tiempo durante el desarrollo del programa y ayuda a prevenir errores. Ejercicio: Diseñar una jerarquía de herencia para los estudiantes en una universidad. Usar la clase Student como la superclase de la jerarquía, a continuación, extender Student con las clases de UndergraduateStudent y GraduateStudent . Continúe extendiendo la jerarquía tando como sea posible(como muchos niveles). Por ejemplo, Freshman , Sophomore , Junior y Senior podría heredar de UndergraduateStudent , asi mismo  DoctoralStudent y MastersStudent podría ser subclases de GraduateStudent . Despues de diseñar la jerarquía debatir las relaciones que existen entre las clases. [Nota: No es necesario escribir ningún código para este ejercicio.] Debate Algunos programadores prefieren no utilizar el acceso protegido, porque creen que rompe la encapsulación de la superclase. Discutir los méritos relativos de acceso pr...