Curso Java. Herencia III. Diseñando la herencia. Vídeo 42

Curso Java. Herencia III. Diseñando la herencia. Vídeo 42

Introducción a la Herencia en Java

Conceptos Básicos de Herencia

  • La herencia es un tema fundamental en la programación orientada a objetos, que permite reutilizar código de clases existentes.
  • Se abordará cómo diseñar una nueva clase que herede de una clase ya creada, facilitando la reutilización del código.

Clase Empleado

  • La clase Empleado tiene dos constructores: uno que requiere nombre, sueldo y fecha de alta, y otro para crear empleados con solo el nombre.
  • Incluye un campo estático para asignar IDs únicos a cada empleado y métodos getter y setter para acceder a sus atributos.

Necesidad de Crear una Nueva Clase

  • Surge la necesidad de crear una nueva clase para representar jefes, considerando si la clase Empleado puede ser utilizada como base.
  • Si los jefes reciben incentivos además del sueldo, se plantea si se debe modificar la clase Empleado o crear una nueva.

Problemas con Modificar Clase Existente

  • Agregar un método para incentivos podría permitir que todos los empleados reciban incentivos, lo cual no es correcto.
  • No se diferenciaría claramente entre empleados normales y jefes; por lo tanto, es más adecuado crear una nueva clase.

Diseño de la Nueva Clase Jefe

  • La nueva clase debe heredar de Empleado, manteniendo atributos comunes como nombre y sueldo, pero añadiendo funcionalidad específica para incentivos.

¿Cómo se establece la relación de herencia entre clases en programación?

Definición de Clases y Herencia

  • Se plantea la pregunta sobre si un jefe siempre es un empleado y viceversa, lo que ayuda a determinar cuál será la superclase y cuál la subclase.
  • Se concluye que la clase "jefe" debe heredar de "empleado", ya que un jefe sí es siempre un empleado, pero no todos los empleados son jefes.
  • La respuesta negativa a si un empleado es siempre un jefe refuerza que "empleado" no puede ser una subclase de "jefe".

Construcción de Clases en Eclipse

  • Se decide construir la clase "jefatura" como subclase de "empleado", estableciendo así una jerarquía clara entre ambas clases.
  • El diseño del programa se enfoca en crear instancias de objetos tipo "jefe" que heredan propiedades de "empleado".

Creación del Constructor

  • En Eclipse, se menciona el archivo fuente llamado "uso empleado", donde se encuentran las definiciones necesarias para las clases.
  • Se opta por crear la nueva clase dentro del mismo archivo fuente, nombrándola “jefatura” y especificando su herencia con extends empleado.

Manejo de Errores en Eclipse

  • Eclipse señala un error debido a que falta definir el constructor para la clase “jefatura”.
  • Se explica que al no haber constructor definido en “jefatura”, Java intenta llamar al constructor por defecto de “empleado”.

Implementación del Constructor Correcto

  • Es necesario crear el constructor para “jefatura” que llame al constructor padre, asegurando así una correcta inicialización.
  • Un constructor por defecto no recibe parámetros; sin embargo, ambos constructores existentes en “empleado” requieren parámetros específicos.

Llamada al Constructor Padre

  • Para solucionar el error anterior, se debe implementar el constructor en “jefatura” con los parámetros necesarios: nombre, sueldo y fecha alta.
  • Al construir instancias de “jefatura”, es crucial pasar todos los parámetros requeridos al llamar al constructor padre usando super().

Creación de Constructores en Clases

Uso de Constructores con Parámetros

  • Al pasar cinco parámetros al constructor, se invoca el primer constructor; si se pasa un único parámetro de tipo String, se llama al segundo constructor. Un número diferente de parámetros generará un error de compilación.
  • Se crearán objetos de tipo "jefatura" pasando el nombre, sueldo del jefe, año, mes y día como parámetros al constructor.

Almacenamiento y Herencia

  • El operador New llamará al constructor correspondiente y almacenará los valores en los parámetros antes de llamar al constructor de la clase padre.
  • La clase "jefatura" tendrá una variable encapsulada llamada "incentivo", que es un valor decimal representando un incentivo adicional para el jefe.

Métodos Setter y Getter

  • Se creará un método setter llamado estableceIncentivo, que recibirá un valor decimal para almacenar en la variable "incentivo".
  • Por convención, las variables se declaran al principio o final, mientras que los métodos se colocan a continuación o antes.

Sobreescritura del Método Dame Sueldo

  • Se necesita un método getter para devolver el sueldo del jefe. El método heredado DameSueldo no es adecuado porque no considera el incentivo.
  • Para calcular correctamente el sueldo del jefe, se debe sobreescribir el método DameSueldo para sumar el sueldo base más el incentivo.

Implementación del Método Sobrescrito

  • El nuevo método sobrescribirá DameSueldo, devolviendo la suma del sueldo base y el incentivo. Esto implica declarar una nueva variable dentro del método.
  • Eclipse indica errores hasta que se construya correctamente la instrucción return para devolver el resultado esperado.
  • La implementación correcta permite que Eclipse muestre un triángulo verde junto al método sobrescrito, indicando que está reemplazando adecuadamente la función heredada.

Conclusión sobre la Sobrescritura

  • Al dejar el ratón sobre el triángulo verde en Eclipse, se puede ver que este método está sobrescribiendo a su homónimo en la clase padre.

Implementación del Método "Dame Sueldo" en Herencia

Almacenamiento del Sueldo en la Subclase

  • Se busca almacenar el resultado del método Dame sueldo de la clase padre dentro de una variable en la subclase actual.
  • El objetivo es guardar el sueldo del empleado y luego devolverlo, sumando un incentivo previamente establecido.

Problemas con la Llamada al Método

  • Surge un problema al llamar al método Dame sueldo, ya que no se sabe cuál versión (de la clase padre o de la subclase) debe ejecutarse.
  • Para resolver esto, se utiliza una instrucción que permite especificar que se desea llamar al método de la clase padre, evitando confusiones.

Construcción de la Subclase

  • La construcción correcta de la subclase implica asegurarse de que se almacene el valor devuelto por el método adecuado y luego sumar el incentivo correspondiente.

Dificultades para Principiantes

  • Los principiantes en programación orientada a objetos pueden encontrar complicado entender conceptos como herencia; es recomendable pausar y revisar los pasos detenidamente.

Avance hacia Ejemplos Prácticos

Video description

En este vídeo vemos cómo diseñar una correcta jerarquía de herencia entre la clase Empleado y una nueva clase Jefatura. Para más cursos, ejercicios y manuales visita: http://www.pildorasinformaticas.com