Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
3
respuestas

[Duda] Gerente es un funcionario

Hola, Si Gerente es funcionario y "e" es el nuevo gerente, y estimando se ejecute las funciones del polimorfismo porque toma la referencia de la clase Funcionario de un método inexistente cuando el método autenticar, debe estar especificado en la clase Gerente? gracias por la asistencia.

Funcionario e = new Gerente();
e.autenticar(1234);
3 respuestas

¡Hola Rafael!

Según el código que has compartido;

Funcionario e = new Gerente();
e.autenticar(1234);

Entonces podemos deducir que:

  • El objeto e es de tipo Funcionario, que ocupa el constructor vacío de Gerente para construirse.
  • El objeto tiene acceso a los métodos del Funcionario, pero no del Gerente.
  • El método autenticar es un método propio del Funcionario, por lo tanto todos los funcionarios pueden autenticarse.

Entonces, la pregunta es, ¿Cuando debe estar especificado el método autenticar en la clase Gerente?

La respuesta es, cuando no se desea que todos los Funcionarios puedan autenticarse, solo los Gerentes. Entonces aquí nos enfrentamos a un problema de diseño, porque en este minuto todos los Funcionarios pueden autenticarse, pero es necesario que solo puedan autenticarse en el sistema los Gerentes.

Entonces el método autenticar debe extrarse de la clase Funcionario, y debe posicionarse en la clase Gerente. Ah, pero ahora el objeto e no podrá usar el método autenticar, porque ya no es un método propio del Funcionario sino del Gerente.

Entonces necesitamos hacer un cast explícito para modificar el comportamiento del objeto desde Funcionario a Gerente, para que tenga acceso al método, de esta forma:

(Gerente) e.autenticar(1234);

Ahora si, solo los gerentes pueden autenticarse. Hemos corregido el error de diseño.

Ahora... ¿Qué pasaría si necesitamos que otros tipos de Funcionarios también puedan autenticarse, además del Gerente, por ejemplo, el Administrador, o el Developer? Te dejaré eso como tarea.

Espero este ejemplo haya despejado algunas dudas. ¡Saludos!

solución!

Hola Jorge, gracias. entonces eso trata más bien de un tema de referencias y no de polimorfismo. Si deseo acceder al método autenticar() definido en la clase Gerente, debo utilizar la referencia de tipo Gerente.De esta manera, la referencia e** tendrá acceso tanto a los métodos y atributos de la clase Gerente como a los de la clase padre Funcionario. Por otro lado, si necesitamos que otros tipos de Funcionarios también puedan autenticarse **( administrador o dev), entonces podríamos, según lo que he investigado, crear una interfaz llamada "Autenticable" que defina el método "autenticar", sin embargo aun no estoy en ese nivel de entendimiento en esta etapa del entrenamiento que igual es interesante aplicar. Saludos

Es correcto, Rafael.

El polimorfismo, en realidad, solo es un mecanismo para que los métodos de las clases hijas, heredados desde la clase padre, puedan modificar su cuerpo para resolver diferentes funciones.