Bueno y tocó el turno de las interfaces.
Este capítulo va a ser un capítulo largo.
Vamos a dividirlo lo voy a dividir en parte 1 parte 2 Parte 3.
Así sucesivamente porque vamos a ver distintas variantes y vamos sobre todo entender en profundidad
qué son las interfaces.
Existen muchos videos en inglés en español ejemplos en YouTube que nos enseñan que son las interfaces
engo.
Prácticamente todos tienen los mismos ejercicios.
Algunos hablan de geometría otros hablan de animales otros hablan de personas.
Vamos a tratar de hacer en este capítulo un ejemplo mucho más rico y nutrido y sobre todo que no todo
lo bueno de cada uno de esos ejemplos que hay en internet porque son todos muy buenos pero son básicos.
Por eso este capítulo va a ser un capítulo largo.
Primero vamos a explicar que son las interfaces interfaces son la otra pata que tiene que ver con programación
orientada a objetos en GOW interfaces viene de todos los lenguajes de programación que manejan programación
orientada a objetos y así como hemos visto que una clase vueles o una estructura en GOW nos permite
generar una definición de propiedades que van a mantener nuestros objetos.
Las interfaces lo que hacen es definir conductas operaciones comportamiento entonces mientras unas que
son las estructuras nos permiten grabar valores con las interfaces vamos a definir comportamientos si
nos abstenemos un poquito de los lenguajes de programación y lleváramos las interfaces al mundo real
diríamos que por ejemplo los seres humanos tenemos ciertos comportamientos que nos definen como seres
humanos.
Por ejemplo el pensar entonces si creáramos cualquier objeto y dijéramos que ese objeto tiene la capacidad
de pensar estaríamos ya diciendo que ese objeto implementa la interfaz ser humano.
Esto es muy simple.
Entonces lo que es se trata de ver en Goh específicamente es cómo creamos esas interfaces esas esos
métodos esas funciones que van a determinar que un objeto sea de una característica determinada.
Yo puedo tener por ejemplo una estructura llamada perro una estructura llamada Gatto y no tengo nada
que los Suna porque son estructuras diferentes yo no puedo heredar un perro de un gato son son estructuras
diferentes pero puedo implementar en ellos una interfaz que sea del tipo animal y que tengan ciertas
acciones que sean comunes a los perros y los gatos como comer y puedo tener también funciones que devuelvan
valores que sean comunes a los perros y a los gatos como por ejemplo una función que se llame cantidad
de patas y me devuelva la cantidad de patas que tenga cada una de las especies.
Vamos a ver cómo se hace esto en GO Vamos a primero vamos a crear para ir en orden nuestra carpeta Eger
10 vamos a crear Eger 10 dentro de 10 vamos a crear un punto Goh vamos a escribir lo habitual muy bien
ya tenemos lo habitual lo que vamos a hacer ahora es comenzar con las interfaces.
Nosotros hemos visto esto en el ejercicio anterior hemos hecho un tip por ejemplo un nombre de usuario
y le hemos dicho que era un tipo struck.
Bueno ahora vamos a hacer lo mismo.
Va a ser un Taipe va a ser de tipo humano y le vamos a decir que es de tipo interfaz.
Por qué.
Porque ya no va a ser una estructura ahora no vamos a grabar propiedades aquí y que se definen en una
interfaz en una interfase.
Se definen los métodos que vamos a usar para implementar esa interface.
Por ejemplo respirar va a ser una función va a ser un método otro va a hacer pensar qué más hacen los
humanos vamos a hacer comer y vamos a tener una función que nos va a devolver el sexo del humano si
es hombre o mujer muy bien.
Esa es la interfaz que tenemos que implementar en cualquier estructura que nosotros queramos identificar
como humano lo que vamos a hacer ahora es crear otra interfaz de tipo animal y vamos a decir que el
animal puede respirar muy bien y también puede comer fíjense que no estoy incluyendo pensar porque un
animal no puede pensar.
Entonces ahora voy a tener una una función que me va a devolver si es carnívoro Fíjense que yo aquí
no estoy definiendo ni qué parámetros recibe ni nada simplemente esto es como en C++ los digamoslo.
Las declaraciones que hacemos los prototipos que hacemos al comienzo del código para decir qué funciones
y qué métodos va a detener nuestro código aquí vamos a agregar sólo por referencia para que lo veamos
otra interfaz que es de tipo vegetal.
No vamos a hacer nada con éstas simplemente la estamos definiendo iba a tener una iba a tener una función
llamada Clasificación del vegetal clasificación vegetal que va a ser de tipo string muy bien.
Ahora todo lo que se define a partir de ahora voy a tratar de que implemente cualquiera de estas tres
interfaces.
Vamos a crear en este caso vamos a hacer una división aquí vamos a poner humano género humano muy bien
y debajo lo que vamos a hacer es crear un hombre va a ser una estructura en la estructura hombre y le
vamos a la estructura no le podemos definir métodos ni funciones pero lo que vamos a hacer es definir
propiedades así que va a tener una edad que va a ser de tipo entero va a tener una altura que va a ser
tipo flotante 32 va a tener un peso otro flotante de 32 va se va a tener va una propiedad que me va
a indicar si el humano está respirando ahí respirando para saber si está respirando para saber si está
pensando y va a tener una última propiedad que va a ser comiendo por qué.
Porque yo voy a hacer una vamos arriba voy a hacer un método que sea respirar pensar y comer muy bien
que es lo que vamos a hacer ahora.
Ahora vamos a crear a la mujer vamos a crear a una mujer y vamos a decirle que también tiene una edad
vamos a hacer más fácil vamos a copiar y pegar todo está muy bien.
Todo esto lo vamos a luego a ir mejorando le vamos a dar codear todo este código para hacerlo lo más
óptimo posible.
Algunos de ustedes estarán diciendo Por qué repite todo nuevamente si yo puedo hacer una herencia y
que la mujer herede el hombre.
Vamos por partes vamos a ir viendo caso por caso ahora lo que tenemos que hacer para que mi hombre y
mi mujer sean de tipo humano.
Tengo que crear estas cuatro funciones entonces venimos aquí decimos que va a haber una función que
va a estar ligada al hombre que esta función pertenece al hombre.
Estamos referenciando aquí con un puntero a la estructura hombre y le vamos a decir que es respirar
que es lo que va a ser esta función.
Bueno vamos a poner h respirando es igual a Trump qué estamos haciendo con esto cada vez que yo llamo
a la función respirar le va se tiarrón Tru a la propiedad respirando del hombre.
Vamos a copiar esto y vamos a pegarlo cuatro veces.
Aquí teníamos respirar teníamos comer pensar y teníamos sexo sexo me devolvía un stream muy bien a aquí
íbamos a decirle qué comer es igual a otro perdón que comiendo es igual a otro no puede tener el mismo
nombre la propiedad que la función porque me va a dar un error al compilar pensando es igual a cero
y aquí lo que vamos a hacer es vas a ser un retador de qué de hombre muy bien.
Ahora ya tenemos nuestro hombre y el hombre por tener declaradas estas cuatro funciones ya el hombre
está en condiciones de implementar la interfaz humano en uno hace indicar que la estructura hombre implementa
ustedes recuerden que si vienen de dejaba o de otros lenguajes aquí habría que poner que implement y
Líster las interfaces que un objeto estaba implementando una clase implementaba en.
No hace falta Gou detecta qué funciones y métodos tiene una estructura e inmediatamente sabe si está
implementando una interfaz o no.
Ahora para qué nos sirve todo esto por ahora no me dice nada.
Implementar humanos para qué quiero ser un humano bueno yo puedo ahora estoy en condiciones por encima
de mi main de crear una función que en lugar de recibir un hombre de parametro va a recibir la interfaz
humano.
Entonces yo voy a poner yo puedo crear esta función llamada humanos respirando para saber si el humano
está respirando o no. Y fíjense que de parametro yo no le voy a pasar un una estructura hombre le voy
a pasar le voy a pasar una estructura hombre pero le voy a pasar cualquier estructura que implemente
la interfaz humano yo ahora puedo crear aquí debajo.
Vamos a crear la mujer tenemos la mujer como estructura creada pero vamos a crear sus propiedades su
función es perdón.
Bueno ya tengo toda la mujer cambiada aquí tendría que reemplazar la h por una M y aquí vamos a retornar
que es una mujer muy bien cómo va a funcionar esto aquí yo voy a poner que voy a llamar a respirar que
es una función y voy a hacer un FME que va a decir vamos a colocar aquí soy un o una porque puedo recibir
un hombre o una mujer por ciento ese y ya estoy respirando vamos a colocarle un Barreneche muy bien
y qué es lo que vamos a darle vamos a darle sexo por sexo porque la función sexual es la que me va a
devolver la palabra hombre o la palabra mujer entonces aquí va a decir soy un hombre y ya estoy respirando.
Soy una mujer y ya estoy respirando pero yo aquí no hago mención en ningún momento a un objeto de tipo
hombre ni a un objeto de tipo mujer simplemente lo que voy a hacer es moverle un humano y aquí vamos
a querer a Pedro que es su nombre yo hombre y ahora vamos a ser humanos.
Respirar respirando y le voy a mandar Pedro fijense aquí hay algo que no se entiende por qué yo aquí
estoy recibiendo un objeto de tipo humano pero aquí estoy mandando un objeto de tipo hombre en definitiva
abstendría quedarme error porque son objetos diferentes pero como humano como hombre ha implementado
la interfaz humano no me va a dar error y va a funcionar de manera perfecta y aquí yo voy a crear a
María y le voy a decir que es una mujer y voy a llamar a humanos respirando y voy a pasar a María.
Vamos a grabar esto vamos a ir a nuestra carpeta vamos a hacer un GOW Rann de Maine apuntó y vemos que
el resultado es soy un hombre y ya estoy respirando.
Soy una mujer y ya estoy respirando en la misma función me ha tomado cualquiera de los dos objetos como
válidos porque lo que me permite hacer la interfaz es normalizar objetos que no tienen ninguna unión
entre sí que los permite clasificar dentro de un mismo tipo.
Entonces yo tengo que el hombre y la mujer pertenecen al tipo humano y esto es lo maravilloso de las
interfaces.
Yo tengo un tipo humano bueno y vamos a ver la segunda variante vamos a ver la segunda variante de las
interfaces.
Vamos a empezar a coordinar un poco todo esto que tenemos todas estas definiciones de la mujer y estas
definiciones realmente están de más estamos repitiendo código no estamos cumpliendo con las normas que
tenemos que cumplir.
Entonces lo que vamos a hacer y como hemos visto en el capítulo anterior con las estructuras vamos a
quitar esto y vamos a heredar en la mujer todas las definiciones del con solo colocar el nombre de la
estructura hombre ya vamos a estar heredando las mismas propiedades y lo que vamos a hacer es quitar
todo esto y vamos a hacer una variante vamos a agregar aquí una propiedad más que es que sombre va a
ser booleana por qué.
Porque ahora voy a tener que hablar de hombre no solo como masculino sino como genérico un nombre.
Cuando hablamos de hombre hablamos del hombre y la mujer muy bien entonces ahora al agregarle esta propiedad
yo voy a poder saber si es un hombre varón o es una mujer qué vamos a hacer aquí en Sexo en sexo.
Vamos a cambiar esto no vamos a retornar directamente un valor literal sino que vamos a colocar ONIF
vamos a colocar ONIF si H.B es hombre es igual a Trump.
Entonces va a devolver hombre y si no es va a ser un ratón de mujer.
Genial ahí ya tengo mi estructura hombre adaptada para cualquiera de los géneros hombre o mujer.
Muy bien y lo que vamos a hacer es ahora ejecutar esto y teóricamente tendría que comportarse de la
misma manera.
Mujer mujer qué pasó ahí está.
Porque en ningún momento le movi si era hombre o mujer.
Voy a tener que hacer una variante voy a tener que decir que Pedro es hombre igual a otro y voy a tener
que decir que María María no voy a tener que decir nada porque en realidad al iniciar el objeto se va
a poner en Fool's y ya voy a tener que María es una mujer y ya tengo.
Soy un hombre y ya estoy respirando.
Soy una mujer y ya estoy respirando.
Fíjense que ahora estoy usando las mismas funciones que soy usé para el hombre.
Las estoy usando para la mujer y a pesar de no tenerlas definidas en la mujer me sigue reconociendo
a la mujer como un humano.
Por qué.
Porque yo he heredado lo mismo que he definido para el hombre en el objeto mujer.
Vamos a ver el tercer caso es lo que vamos a hacer ahora es salir del mundo de los humanos y nos vamos
a ir al mundo de los perros.
Vamos a colocar aquí de los animales no de los perros o los perros pero me me traicionó el inconsciente
porque el primer objeto que vamos a crear es precisamente un perro.
Aquí por ejemplo en lo que es género animal vamos a crear por ejemplo un tipo de perro.
Vamos a crear un perro de acuerdo a como dicen aquí las interfaces.
No yo ya no tengo que crear estas cuatro funciones sino que tengo que crear estas tres muy bien respirar
y comer la vamos a copiar y pegar del hombre porque son las mismas.
Vamos a venir aquí vamos a pegar esto ya lo vamos a modificar vamos a colocar en perro las mismas propiedades
por ejemplo respirando comiendo y ahora vamos a quitar pensando que está ahí en el medio.
Vamos a quitar pensando porque el perro no piensa respirando y comiendo muy bien respirar y comer hacen
que aquí vamos a usar una P.
Y aquí vamos a corregir muy bien nos falta solamente vamos a agregar una propiedad más.
Si por ejemplo si es carnívoro va a ser tipo Juliana y vamos a agregar la última función que nos falta.
Vamos a ir a nuestra interfaz para ver qué es si es carnívoro carnívoro PUCE si es carnívoro.
Vamos a corregir esto.
Si es carnívoro y aquí vamos a precisamente para eso hemos creado esta propiedad carnívoro verdad.
Vamos a crear FOMC.
Vamos a decirle que es una instancia de perro.
Ahora si está correctamente es carnívoro si es carnívoro y aquí lo que vamos a hacer en esta función
esta función devolvía un booleano.
Vamos a hacer un ratón ni más ni menos que de la propiedad carnívoro.
Aquí tenemos definido ya nuestro perro el perro por ahora implementa la interfaz animal respirar comer
y es carnívoro muy bien.
Ahora vamos a crear una función así como hicimos con el humano.
Vamos a crear una función que en realidad va a recibir un animal.
No va a recibir un perro va a recibir un animal de parametro animales respirar es una función y lo que
vamos a hacer aquí es vamos a ejecutar la función respirar la función respirar como vemos aquí lo que
hace es E.T.A una propiedad en Tru y ahora voy a poder hacer un FME que va a decir
soy un animal y estoy respirando.
Qué es lo que vamos a hacer ahora.
Ahora voy a crear una nueva función que me va a permitir saber si un animal es carnívoro.
Recuerden que tenemos aquí una propiedad que es carnívoro.
Tenemos una función que me permite sestear me permite devolver si es carnívoro o no. Y lo que vamos
a hacer ahora es dentro de esta opción.
Vamos a hacer Univ.
Por ejemplo voy a preguntar si es carnívoros igualad Tru.
Voy a retornar un 1.
Y si no voy a retornar un cero.
Qué es lo que hace esto me va a ir incrementando un valor cada animal que yo le pase me va a ir sumando
uno a una variable lo vamos a ver en nuestro Moine nuestro mail lo vamos a hacer Nahr le vamos a quitar
todo esto vamos a poner total carnívoros que es igual a uno.
La voy a realizar la voy a inicializar porque nunca la inicial y sé voy a decir que Dogo es un nuevo
perro.
Es un nuevo objeto de tipo perro y Dogo.
Le voy a aceptar una de las propiedades le voy a decir que es carnívoro.
Es igual a Trump porque realmente es carnívoro.
Y ahora voy a ejecutar animales respirar y le voy a pasar todo.
Aquí ocurre lo mismo que con los humanos.
A qué voy a decir que total carnívoro es igual a más animales carnívoros que es una función a la cual
le voy a pasar Dogo.
Esto es lo que va a hacer es incrementar el valor que tenga total carnívoros.
El resultado va a ser un uno o un cero si mi animal no es carnívoro le va a sumar cero.
Es decir que no va a incrementar.
Y ahora por último
vamos a hacer un printed Fdez total carnívoros vamos a hacer un por ciento y vamos a mostrar la variable
carnívoros muy qué es lo que va a hacer esto esto va.
Nosotros tenemos aquí dos funciones de tipo animal.
Aquí no importa si lo que le mueve es un perro un gato un conejo va a funcionar para cada uno de los
objetos que yo creé y que implementen estas tres funciones.
Si ahora creo un conejo y le creo estas tres funciones ese conejo se convierte en un animal si cree
un gato y le creo estas tres funciones aunque no tenga las mismas propiedades puede tener más propiedades
o menos propiedades.
Ese gato se va a convertir en un animal y voy a tener una sola función para procesar cualquier tipo
de animal.
Eso es lo que estamos viendo que son las interfaces las interfaces me permiten agrupar en un tipo determinado
de comportamiento a muchos objetos que no tienen relación entre sí no importa si se heredó uno del otro
o simplemente los definí de manera separada.
Yo ahora heredé a la mujer del hombre pero podría haber creado a la mujer por un lado con sus propiedades
y sus funciones y al hombre con sus propiedades y sus funciones y aún así teniendo las mismas propiedades
y teniendo las mismas funciones paragón o para cualquier sistema de lenguaje y programación son objetos
totalmente separados y no hay ninguna relación entre sí lo que me permite las interfaces es relacionar
objetos del mismo tipo y esto me permite crear un verdadero polimorfismo.
Aquí estamos viendo polimorfismo cómo ante una definición que es de tipo humano puedo se puede usarla
en diferentes formas de vida diferentes formas por un lado tengo un hombre por el otro lado tengo una
mujer son tipos diferentes pero que confluyen en un tipo más abarcativo y que está por encima de ellos
que es la raza humana muy bien por qué engo y esto es lo que vamos a ver en el siguiente.
La siguiente sección de este mismo capítulo o sea en la sección número 4 lo que permite Go es que un
solo tipo pertenezca a varios tipos más.
Esto es algo que no se podía hacer en otros lenguajes.
Si un hombre pertenece a los humanos no puede pertenecer a otro grupo y lo que vamos a ver ahora primero
vamos a ejecutar esto para que vean cómo resultó lo que acabamos de hacer.
Dogo que me pasó un perro que viene arrastrando de un error a perdón me faltó devolver un entero a la
función porque si estoy haciendo el retorno tiene que devolver algo la función.
Vamos a grabar y vamos a ejecutar.
Bueno soy un animal y estoy respirando eso nos aparece aquí.
Yo ya estoy mandando un dogo que es una raza de perros para que no lo conoce un Douglas una raza de
perro.
Estoy mandando un perro a una función que recibe un animal no sabes si lo que viene es un perro un gato
o un canario recibe un animal y trabaja con esa con ese animal y devuelve esto.
Soy un animal y estoy respirando y luego fíjense que a pesar de que yo Septién cero la variable total
carnívoros al enviarle una propiedad donde ya fue aceptada como Tru animales carnívoros ya eso me devuelve
un 1 porque es carnívoro es igual a otro y voy incrementando una variable.
Por eso aquí dice total carnívoros uno muy bien.
Vamos a ver el cuarto ejemplo bueno y estamos aquí en la cuarta y última parte de esto que es una clase
interesante muy interesante sobre interfases.
Vamos a implementar una nueva interfaz que está por encima del humano del animal y del vegetal que es
la que es el ser vivo.
Es una interfase y vamos a colocar en este ejemplo que estamos haciendo ahora simplemente una función
que me va a devolver un Juliano si ese ser vivo está vivo o no.
Qué significa esto que si yo lo humano le coloco la misma función y al animal lo mismo tanto el humano
como el animal van a pertenecer a esta nueva interfase el hombre no va a dejar nunca de ser hombre el
hombre tampoco va a dejar de ser humano.
Y ahora al hombre se le añade que el hombre pasa a ser un ser vivo.
Entonces voy a poder trabajar con el hombre independientemente con sus propiedades como hemos hecho
en nuestro ejemplo inicial donde al hombre le movíamos un valor en sus propiedades a su vez podemos
trabajar del hombre como un humano podemos ejecutar sus funciones y ahora vamos a saber cómo trabajar
con el hombre como un ser vivo.
Vamos a venir a nuestro inicio de Maine.
Aquí vamos a separar un poquito.
Vamos a hacer esta división para que el código se entienda y lo que vamos a hacer ahora es una función
en el hombre la vamos a primero vamos a crear.
Me faltó aquí la función en el hombre la función está vivo.
Si no no va a implementar ser vivo.
Vamos a colocarlas como de costumbre hombre y las funciones está vivo y esto me devolvían booleano y
esto me retornaba H.B.
Está vivo no está vivo es la función.
Voy a tener perdón perdón voy a tener que crear una propiedad nueva que vivo ahora voy y voy a retornar
eso ese valor.
Ahora con el animal voy a tener que hacer lo mismo.
Vamos a copiar esto vamos a ser perro vamos a decirle que el perro también está vivo.
Si yo tuviera gato tuviera tendría que hacer lo mismo con cualquier animal que yo defina voy a tener
que hacer lo mismo muy bien al haber hecho esto tanto el perro como el hombre y cuando hablo de hombre
me refiero al hombre y a la mujer están implementando la interfaz.
Ser vivo.
Además de implementar humano están implementando Cervi entonces vamos al comienzo de nuestro Main vamos
a crear una función llamada estoy vivo que va a recibir un ser vivo la interfaz ser vivo y lo que va
a hacer es devolverme un Juliano y esto va a retornar ni más ni menos que el resultado de la función
está vivo esta función que hemos creado que a su vez nos retorna con una propiedad.
Cuando yo entré en esta función que lo que hace es procesar cualquier ser vivo ahora nosotros tuvimos
una función que es humano respirando que me recibí a cualquier humano.
Esto es una interfase humano podía ser un hombre o podía ser una mujer yo aquí no puedo enviar un perro
porque el perro es otra interfaz.
En cambio yo aquí en ésta que estoy vivo voy a poder enviar a un hombre una mujer y un perro fíjense
lo potente que es Gou y cada vez se asemeja más a la vida real algo que en el resto de los lenguajes
de programación no han podido llegar.
Habíamos visto que podíamos en las clases en Java ensillar ni hablar de C++.
Podríamos implementar interfaces pero de manera unitaria no podríamos decir que un objeto pertenecía
a varias interfaces distintas.
Vamos ahora a nuestro ejemplo total carnívoros tenemos nuestro Dogo ahora tendremos que decirle además
de que es carnívoro que el dogo está vivo y le vamos a decir al dogo yo no sé si en el perro me parece
que no. El perro Negre no he agregado vivo.
De hecho Gould no me lo trajo como ayuda.
Ahí me di cuenta me había olvidado de definir la propiedad.
Vivo en perro.
Nosotros tenemos que Dogo muy bien que está vivo.
Animales respirar.
Le mando todo muy bien.
El resto está perfecto y ahora aquí debajo.
Lo que voy a hacer
agregaron.
Vamos a Akiha colocaron barra invertida n para que haya un salto de línea si no se me va a juntar todo
y aquí es igual a por ciento.
Y qué le vamos a pasar de parametro.
Estoy vivo Dogo y estoy vivo.
Es esta función que recibe un ser vivo.
Y ahora estoy salteando.
No estoy enviando Dogo allá a la implementación de perro.
Estoy enviando Dogo directamente a ser vivo.
Estoy salteando la implementación de la interfaz perro y estoy yendo directamente a una nueva interfaz.
Vamos a grabar y esto que estoy haciendo así en dos dimensiones lo podría hacer en infinitas dimensiones.
Podría ser que un objeto implemente muchísimos tipos diferentes de interfaz y sería algo descomunal
descomunal.
Realmente vamos aquí que pasó hay algo que no le gustó Inferno.
Vamos a nuestra terminal.
Debajo de todo y vamos a hacer un nuestro Barrán qué es lo que nos va a mostrar ahora tendría que mostrar.
Soy un animal y estoy respirando total carnívoros 1 y estoy vivo es igual a Tru.
Ya apareció la función estoy vivo.
Ya me retornó el valor de esta vivo de la propiedad de la función está vivo hizo toda la cadenita hasta
llegar a las propiedades del perro y esto es algo maravilloso.
Esto espero que lo hayan comprendido.
No hay ningún ejemplo en Internet que sea con toda esta complejidad que les he dado espero que lo hayan
comprendido.
Espero no haberlos aburrido.
Perdón porque se hizo largo pero la verdad que prefiero que ustedes pierdan más minutos pero que lo
comprendan y no como a veces pasa que no comprendemos algo que tendría que ser comprendido y que hay
ejemplos muy básicos en internet.
Nos vemos en el próximo capítulo y seguimos aprendiendo del lenguaje.