Hola, para aclarar que Solidity sí es un lenguaje orientado a objetos, en la documentación oficial lo definen así:
Solidity is an object-oriented, high-level language for implementing smart contracts. Smart contracts are programs which govern the behaviour of accounts within the Ethereum state.
Fuente: Documentación oficial
Cuando escuché eso de "Orientado a contratos" me parecio raro. Seria bueno poner en el Top este aporte para que no se haga eco de tecnicismo incorectos.
Yo antes ya había escuchado el concepto de "Orientado a contratos", no se sorprendan porque la verdad es que es muy utilizado.
17 - Herencia
"No hay que reinvetar la rueda"
Utilizamos la Herencia para reutilizar codigo en nuevos contratos. Solidity no es POO, pero se comporta similar. Solidity es orientado a contratos. Identificaremos con la sentencia is. Si un contrato tiene un constructor con parametros, debemos indicar que valores debe tomar ese constructor para poder derivarse.
Entonces, se busca generar una relacion entre contratos para reutilizar el codigo mediante la Herencia. Por lo que la capacidad de agregar/modificar una funcion ya escrita en el contrato anterior nos sera de mucha utilidad.
Las funciones virtuales son funciones definidas para que se puedan reescrbir por las funciones override. Para esto debemos establecer una relacion de Herencia. Si una funcion virtual no define implementacion, el contrato se convierte en un contrato abstracto. Tambien hay contratos abstractos que usamos como moldes vacios para usar en futuros contratos.
Las interfaces no van a tener codigo. su funcion es indicarnos un comportamiento que queremos que tenga un contrato. Solo tiene declaraciones (definiciones de funciones) sin codigo.
super (sentencia) nos sirve para hacer referencia a una funcion de clase superior.
Ejemplo practico: Buscamos 2 funciones virtuales en Modificadores📗 e Interface📘 para colocar en nuestro archivo/contrato de Herencia 📕📘📗.
Vamos a tener que importar el directorio de los demas contratos, en este caso se encuentran en la misma carpeta los contratos. Coloco los emojis de libros para hacer referencia a un contrato, si hay varios libros es porque es una Herencia que contiene otros contratos.
Es buena practica traer todo el encabezado de la funcion de "Interface", por lo que es recomendable copiar y pegar "function sumar(uint numero1, uint numero2)"
Hola, solo aclarar que Solidity sí es un lenguaje orientado a objetos, en tus notas veo que enfatizaste lo que dijo el profe pero está errado, la misma documentación oficial lo describe como orientado a objetos de alto nivel. No existe tal cosa como "orientado a contratos". Saludos.
Es muy importante comprender los conceptos de POO para poder sacarle el maximo provecho a solidity, recomiendo tomar cualquier curso de programación orientada a objetos en platzi para poder entenderlos a profundidad, o si no, el libro "Análisis y Diseño Orientado a Objetos" de Graady Booch.
Gran libro!
Grande tu aporte, ese libro es fenomenal.
Muy parecido a los conceptos de Java. Quien sabe de POO puede entender esto facilmente
Eso es porque Solidity sí es un lenguaje orientado a objetos, su misma documentación oficial lo define literalmente así.
Solidity es un lenguaje orientado a "contratos".
No, no lo es. No existe tal cosa como "orientado a contratos".
Solidity is an object-oriented, high-level language for implementing smart contracts.
Fuente: Documentación oficial Solidity
Entiendo que el profesor quiere decir que Solidity NO es un lenguaje de programacion orientado objetos "TRADICIONAL", en otros lenguajes el manejo de clases y objetos es practicamente la misma, pero solidity tiene ciertas diferencias, incluso en alguna documentacion oficial de solidity lo definen como orientado a objetos y en otra como orientado a contratos.
Es posible cambiar a tipo private o internal la función heredada Suma en mi contracto para que no aparezca o pueda ser usada por fuera ?
Hola Andrés, se puede siempre y cuando la función del contrato superior sea virtual. En ese caso le haces override a la función y ahí le modificas la visibilidad.
Las FUNCIONES dentro de las INTERFACES por Defecto (Default) son EXTERTERNAL (EXTERNAS) & VIRTUAL (VIRTUALES) aunque NO le pongamos la palabra VIRTUAL.
RESUMEN CLASE 17:
HERENCIA
I.- HERENCIA
El concepto es similar al de la programación orientada a objetos y la identificaremos con la sentencia “is”.
Si un contrato tienen un constructor con parámetros debemos indicar qué valores debe tomar ese constructor para poder derivarse.
II.- OVERRIDE
Podemos definir funciones de tipo “virtual” para indicar que pueden ser redefinidas en sus contratos derivados.
Cuando se redefine una función se debe indicar el tipo “override” en su declaración.
Si una función virtual no define implementación, el contrato se convierte en un contrato abstracto.
III.- INTERFACES
Nos permiten definir el comportamiento que queremos que tenga un contrato.
Se implementa igual que la herencia de contratos.
Sus funciones no tienen implementación, solo encabezados.
IV.- SUPER
Podemos hacer referencia a algún elemento o función de la clase superior por medio de la sentencia “super”.
Esta última (utterance) exige anteponer "abstract" a la declaración del contrato y a esto es lo que se refiere el profe con Contrato Abstracto:
abstract contract Herencia is Suma,Modificadores("Abc"){
Dentro del Contrato Modificadores, no se uso “virtual” pero de todas maneras su funcion Suma, y el contructor, se pudieron usar en el Contrato Herencia, entonces ¿en que caso, si es necesario usar “virtual”?
"virtual" lo utilizaremos cuando deseamos que esa función pueda ser redefinida, o sea que otro usuario (o nosotros) en los contratos que hereden del nuestro puedan sobrescribir la lógica de esa función.
Si la función no es virtual, la pueden llamar y utilizar, pero no podrán redefinirla/reescribirla.
extends = is?
Lo que en otros lenguajes es "extends" en Solidity es "is" :)
Buenísima clase, esto tiene un valor intrínseco muy grande ya que es sumamente utilizado en la creación de contratos.
Una Empresa es una serie de Contratos Comerciales de ahora en adelante y no se si para siempre, pero en futuro a corto y mediano plazo será una empresa su andamiaje central CORE o CPU una serie de Smartcontracts que SE HEREDAN por el esencial motivo de identidad, eficiencia, optimización y seguridad.
Solo me queda decir, los quiero mucho Platzi
Un agradecimiento al profe Uruguayo, voy a migrar a ese país, que es el mejor de LATAM, siempre agradecido master.
Herencia
Es la habilidad de usar la lógica escrita en otros contratos en nuestro propio contrato. Se hace por medio de la palabra is:
No me queda muy claro para qué sirven las interfaces, si lo unico que tienen es una función pero sin ninguna funcionalidad, por lo que pude ver en la clase
se utiliza para obligar un comportamiento en el contrato que vaya a heredar la interfaz. En otras palabras y como lo entiendo, es como una plantilla que sirve para que los programadores que quieran implementar la interfaz se le exija definir e implementar las funciones de la plantilla. Así que no se debe ver desde el aspecto funcional sino comportamental.
Solidity es un lenguaje de alto nivel orientado a objetos para implementar contratos inteligentes. Los contratos inteligentes son programas que rigen el comportamiento de las cuentas dentro del estado Ethereum.
Creo que para personas que conocen más del entorno esto les serviría mucho para optimizar sus tiempos y códigos ya que solo hay que realizar algunas modificaciones🧐