Duda entre Polimorfismo y sobre escritura en java

Iniciado por GENIOL, Abril 28, 2020, 11:06:23 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Abril 28, 2020, 11:06:23 PM Ultima modificación: Abril 29, 2020, 01:15:46 AM por AXCESS
Hola chicos como estan?

Queria saber si me pueden ayudar, o explicar la diferencia entre sobre escritura y polimorfismo en java o algun ejemplo de como usarlos.

Desde ya muchas gracias

Saludos!!!

Hola,
Polimorfismo es una característica de los lenguajes orientados a objetos que permite especificar implementaciones concretas a partir de una interfaz o una clase abstracta, la ventaja es que estas implementaciones se pueden manejar desde dicha interfaz haciendo que sea más sencillo de manipular por otras clases.

Un ejemplo de polimorfismo puede ser una clase ProcesadorCompras que registra una compra y necesite notificar al usuario, pero la forma de notificar el proceso no depende de la clase, puede ser un email o un mensaje de texto. Para este caso es mejor que ProcesadorCompras llame a una interfaz que realiza la acción de notificar y de esta interfaz se desprenden las implementaciones de Notificar por Email y Mensaje de Texto.

Ahora bien, ¿Qué tal si simplemente coloco la lógica de enviar una notificación directamente en ProcesadorCompras y me ahorro crear clases aquí y allá? Se puede hacer, pero hay que tener en cuenta que a medida que un proyecto crece y se añaden nuevas funciones, tal ves se necesitan hacer otras notificaciones en otros procesos y se terminaría copiando el código de notificar por todo lado, poco a poco el proyecto se volvería más difícil de mantener con todo ese código espagueti. El polimorfismo nos ayuda a mantener una separación entre distintas funcionalidades del sistema.

No se a que hagan referencia a Escritura, ¿Estas seguro que no se refiere a Herencia?

Abril 28, 2020, 11:58:49 PM #2 Ultima modificación: Abril 29, 2020, 12:12:29 PM por Kirari
@No tienes permitido ver los links. Registrarse o Entrar a mi cuenta Se refiere a la sobreescritura de métodos, el cual nos va a permitir definir nuevamente un método que hayamos heredado de la clase padre, para que funcione como queramos y no a lo que se ha definido en la clase padre.

Un ejemplo muy simple en Python seria:

Código: python


class Padre:

      def saludar(self):

           return "Hola soy tu padre"


class Hija(Padre):

      def saludar(self):
           
           return "Hola soy tu hija"

print(Padre().saludar())                     #  Hola soy tu padre
print(Hija().saludar())                         #  Hola soy tu hija




De este modo, sobreescribes el método padre. Por lo que podemos concluir, que el polimorfismo es completamente distinto al Override o sobreescritura.

-Kirari

Gracias por contestastarme tar rapido, si me pueden dar un ejemplo en java por favor, python ya lo manejo.. pero tengo esta duda sobre java se me confunden los conceptos de sobre escritura con polimorfismo...

Sluados!

No tengo experiencia en Java pero sería algo así:

Código: java


public class Padre {
   public void saludar() {
       System.out.println("Hola soy tu padre");
   }
}

public class Hija extends Padre {
   @Override
   public void saludar() {
       System.out.println("Hola soy tu hija");
   }
}

// Acá utilizamos polimorfismo, ya que estamos asignando a una variable de tipo Padre la instancia de la clase Hija. Por lo que
// el objeto de tipo padre, en vez de tomar su propio método, toma la de la clase Hija.
// A esta, se le denomina variable polimórfica, ya que puede referirse a una gran variedad de objetos.
// Es decir, que a partir de esta variable de tipo Padre, podemos obtener diferentes funciones con el mismo método para cada objeto.
// Podríamos decir, que para lograr el poliformismo, se puede obtener por dos formas, ya sea por sobrecarga o sobreescritura (en este caso).

Padre padre = new Hija();
padre.saludar();                        // Llama al método de la clase hija


// Por otra parte, el método "saludar()" de la clase Padre está sobreescrito por la de la clase Hija.
// Se crea un objeto de tipo Hija que va a heredar de padre los métodos.

Hija hija = new Hija();
hija.saludar();                         // Llama al método de la clase hija



Sé que es algo confuso de entender, pero espero que se haya entendido con este ejemplo  ;D

Espero haberte ayudado. Saludos!
-Kirari

Seria como una herencia de clases entonces a lo que se le llama polomorfismo? sobre escribis los metodos en las sub clases no?

Abril 29, 2020, 04:06:21 PM #6 Ultima modificación: Abril 29, 2020, 04:10:48 PM por Kirari
Claro, pero en sí es heredar el mismo método de una clase padre y así poder modificarlo para CADA objeto que vayas creando.

Por eso dije antes, que para lograr el polimorfismo, lo puedes hacer de varias formas, en este caso, lo haces en base a la sobreescritura u Overriding.

-Kirari