Capacidad de poder utilizar contratos derivados en estructuras superiores.
Polimorfismo es una propiedad de la POO que permite (a nivel general digamos) enviar mensajes iguales a objetos de diferentes tipos.
En limpio: tus objetos deben de "saber" responder al mensaje que les estás enviando, esta es la propiedad polimórfica.
No tiene nada qué ver con contratos ni nada por el estilo, es puramente un tema de objetos.
Polimorfismo, hablando de una forma más abstracta y en POO, _es la capacidad que tiene un objeto o función de tener distintos comportamientos de acuerdo al contexto. _
Por ejemplo: un método que se puede redefinir dependiendo de la cantidad de parámetros o tipos de datos que reciba.
Esta clase le falta herramientas graficas para mejorar su entendimiento, el mismo instructor se marea con un juego de palabras y términos de su localidad.
Aquí podemos ver un ejemplo gráfico de como funciona el polimorfismo
Muchas gracias. Esta genial el ejemplo.
Encontre esta definicion en un libro de programacion que puede ser de ayuda.
Polimorfismo:
Habilidad de los objetos de diferentes clases relacionadas por la herencia de responder de manera diferente al mismo mensaje(es decir, una llamada de una funcion miembro). El mismo mensaje enviado a diferentes tipos de objetos toma "muchas formas "; de aqui el termino polimorfismo. Por ejemplo: si la clase "rectangulo" se deriva de "forma", entonces un objeto "rectangulo" es una version mas especifica de un objeto "forma". Una operacion (Por ejemplo: calcular el area) que puede realizarse sobre un objeto "forma" tambien puede realizarse sobre un objeto "rectangulo".
Una convencion en las ´interfaces´ es llevar una i delante del nombre.
Interfaces solo definen encabezados pero no pueden tener una implementacion en la red. No podemos hacer el deploy pero si podemos usar un contrato que lo implemente.
Con el polimorfismo pudimos usar la suma que esta en otro contrato porque no llamamos directamente a la implementación de Suma sino que hicimos la llamada a la Interface, a pesar de que las interfaces no pueden ser implementadas en la red, pero con Polimorfismo pudimos hacerlo.
El polimorfismo de contrato, es el uso de CONTRATOS EXTERNOS a partir del contrato que estamos desarrollando.
Si estamos usando un contrato externo mediante polimorfismo, y el CONTRATO EXTERNO tiene "Padres", entonces también podremos acceder a las FUNCIONES y VARIABLE de los contratos Padres.
Si el CONTRATO EXTERNO que deseamos llamar ya esta desplegado en la red (P.E. Uniswap), entonces para poder usar sus FUNCIONES o VARIABLES deben estar declaradas como externas, además se debemos hacer uso de unaINTERFACE.
El principal uso de las INTERFACES es ser un medio para poder interactuar con CONTRATOS EXTERNOS..
Si se desea hacer uso de una función de un CONTRATO EXTERNO, entonces la INTERFACE debe tener una función con el mismo nombre y mismo tipo de parámetros.
Notar que no se importo nada, solo se uso una INTERFACE
Excelente resumen!
Me surgio una duda platzinautas, para hacer polimorfismo siempre debo tener una interface, un contrato de implementacion y el contrato donde ejecutamos el polimorfismo?
Hola @nicodev27, en este caso para que sea polimorfismo si es necesario. Pero es solo a fines de que podamos ver y entender el concepto de Polimorfismo.
Es decir, podemos ejecutar una función de un contrato deployado en la red siempre y cuando conozcamos su tipo y su dirección. Si lo hacemos así sin usar una interfaz e implementación es válido, pero no seria polimorfismo.
Espero se entienda! Sino consultame!
slds
Me sumo al comentario, siempre que sea necesario (que es lo primero que deberías analizar) ahí si necesitas todo lo que indicas. El mayor provecho es cuando tenés distintos contratos o implementaciones que responden a una misma interface, por lo tanto corregiría "un contrato de implementación" a "más de un contrato de implementación", pero claro que con uno alcanzaría para un ejemplo mínimo.
RESUMEN CLASE 18:
POLIMORFISMO
I.- INSTANCIAR UN CONTRATO EN OTRO CONTRATO
Dentro de un contrato podemos hacer referencia a otro contrato ya implementado en la red a través de su dirección.
Para esto podemos utilizar el tipo de contrato al que referenciamos o bien alguna de sus clases superiores.
II.- POLIMORFISMO
Capacidad de poder utilizar contratos derivados en estructuras superiores.
// SPDX-License-Identifier: GLP-3.0pragma solidity >=0.7.0<0.9.0;import"./Interface.sol";contract ImplememntacionSuma is Suma{functionsumar(uint numero1, uint numero2)public override pure returns(uint){return numero1 + numero2;}}
no se puede tambien hacer polimorfismo colocando como contrato padre un contract, o tiene que ser a juro con interface para que el polimorfismo suceda???
Hola Leonardo, es correcto lo que dices, puede hacerse con un contrato el polimorfismo. Es más común encontrarlo con interfaces, pero es válido hacerlo con contratos.
Mi forma de explicar el polimorfismo:
Una sola forma de llamar a una funcion (los mismos parametros)
Varias formas de procesar esos parametros (codigo en cada implementacion)
Me parece muy util este concepto en Solidity porque podemos definir una funcion por ejemplo una interface construirContrato, enviarle el nombre, identificacion personal y cada hacer implementaciones de esa interface ImplementacionCompraVenta, ImplementacionMatrimonio, etc.
El polimorfismo permite que diferentes contratos respondan de manera distinta al mismo mensaje.
Entre las ventajas que este nos permite utilizar una interfaz en distintos contratos, a partir de una contrato derivado a través de la dirección.
Es decir tenemos una interfaz llamada mascotas, estas tienen como propiedad nombre y fecha de nacimiento.
El uso de esta interfaz, generara distintos resultados dependiendo del tipo de animal, perro, gato, hamster.
Es decir la llamada de este contrato mascota generara distinta salida de acuerdo al tipo de animal. Es decir cada animal tiene distinta forma, de alli el concepto polimorfismo.
Polimorfismo
Polimorfismo: Capacidad de poder utilizar contratos derivados en estructuras superiores.
.
Instanciar un contrato en otro contrato
Dentro de un contrato podemos hacer referencia a otro contrato ya implementado en la red a través de su dirección. Para esto podemos utilizar el tipo de contrato al que referenciamos o bien alguna de sus clases superiores.
.
Es complejo de entender... pero basicamente como lo entendi, lo que paso aqui es:
Creas una implementacion de una interfaz.
Usas la dirección generada de la interfaz y la pasas como parametro dentro del contrato que la quieres implementar.
Dentro del contrato a implementarla, referencias la direccion a la interfaz a la que pertenece lo cual genera una instancia, posteriormente puedes usar sus métodos.
Me parece que se puede mejorar la explicación y ejemplo sobre polimorfismo, instanciando varios contratos y mostrando como ante la ejecución del mismo método el comportamiento es diferente. Y quizás suma mencionar ligadura dinámica y estática de código, ya que si SOLIDITY es OO deberia contar con esta habilidad. Saludos