Programación Orientada a Objetos con Java (Parte 2 de 2)

Herencia

En el diseño de software, es fundamental organizar el código de manera tal que los conceptos y abstracciones principales estén separadas de las variaciones y detalles de implementación, una de las maneras en la que se puede lograr este objetivo es mediante relaciones de tipo “es un” entre entidades del sistema (sean clases o estructuras).  El lenguaje de programación java incluye dos medios para implementar este tipo de relaciones: la herencia y la implementación de interfaces.

En el siguiente vídeo se muestra cómo establecer relaciones de herencia en Java:

Clases Abstractas e Interfaces

Usualmente, las entidades que capturan los aspectos comunes de entidades similares tienden a ser abstractas en el sentido de que cierta funcionalidad no está completamente definida. Por ejemplo, si empleamos la clase “Empleado” para capturar los aspectos comunes entre los empleados fijos o de planta y los empleados contratados eventualmente está claro que dado un empleado, sin importar su tipo, debe ser posible calcular su salario pero el cómo realizar el cálculo está definido únicamente en el contexto de un tipo concreto de empleado (fijo o eventual) y no el en contexto del concepto general de “Empleado”.  El conjunto de operaciones que una entidad tiene la responsabilidad de realizar, sin hacer referencia a cómo se van a realizar, constituye la interfaz de la entidad.

En el siguiente vídeo se muestran los conceptos de clase abstracta e interfaz en Java:

Polimorfismo

Las relaciones de tipo “es un”, la re-definición de la funcionalidad establecida en una clase padre o interfaz y la posibilidad de asignar un valor de tipo específico a un variable de tipo más general constituyen la base sobre la cuál Java provee polimorfismo: la capacidad del entorno de ejecución de seleccionar la implementación de una operación en función del tipo del valor de una variable en tiempo de ejecución.

El polimorfismo protege al código que usa una variable polimórfica de tipo genérico de 1) cambios en la implementación de la funcionalidad realizados en los sub tipos y 2) la adición de nuevos sub tipos: se trata de una herramienta fundamental para proveer desarrollo y despliegue independiente: mientras la interfaz definida en el tipo genérico no cambie,  el desarrollo de las implementaciones puede cambiar sin afectar el código que accede a la funcionalidad  vía la variable de tipo genérico.

En el siguiente vídeo se muestra el concepto de polimorfismo en el contexto del lenguaje Java:

Comments are closed.