‫En esta lección, aprenderá cómo crear e implementar sus propias interfaces con un ejemplo concreto, y obtendrá una
‫idea de por qué se utilizan las interfaces, especialmente cuando nuestras clases no tienen una relación entre sí y, por
‫lo tanto, no lo hacen. No comparto una clase base.
‫Entonces, la herencia como tal no es una opción.
‫Imagina que estamos trabajando en un videojuego donde el jugador puede destruir cosas, pero todo lo que
‫destruimos tendrá un comportamiento diferente dependiendo de lo que se destruya.
‫Por ejemplo, destruir una silla reproducirá un sonido de destrucción y generará partes de la silla destruidas.
‫Pero destruir un automóvil producirá un sonido de explosión, creará fuego y destruirá otros objetos cercanos.
‫Para nuestro juego, tenemos las siguientes clases, una silla que hereda del mobiliario de la clase y el coche que hereda
‫del vehículo de la clase.
‫Así que echemos un vistazo a esas clases muy rápido.
‫Entonces tenemos esta silla que hereda de los muebles, y la silla solo tiene un constructor simple aquí
‫donde establecemos el color y el material en función de lo que se le da al objeto que se crea.
‫Pero ahora, por supuesto, esta clase está heredando de los muebles, razón por la cual tenemos esas propiedades aquí,
‫color y material que acabamos de usar en la clase de sillas.
‫Y luego tenemos el constructor aquí, que es el constructor predeterminado, donde esos valores se establecerán de
‫forma predeterminada.
‫Entonces el color y el material serán blancos y lo serían por defecto.
‫Y luego también tenemos un constructor simple que usa el color y el material para configurarlos por
‫defecto.
‫OK, entonces no hay nada demasiado lujoso, pero por supuesto también tenemos un auto y queremos poder destruir la silla
‫y el auto, como dije antes.
‫Así que echemos un vistazo al coche muy rápido.
‫Así que aquí tenemos la misma historia, un automóvil de subclase que extiende el vehículo donde establecemos la velocidad del automóvil y
‫el color.
‫Por cierto, ahora estamos usando un constructor simple como lo hacemos aquí.
‫Pero, por supuesto, también podríamos haber utilizado la base aquí, pasando la velocidad y el color.
‫De acuerdo, esa también es una opción válida y no tendríamos que usarla aquí.
‫Por lo tanto, hay dos formas diferentes, por supuesto, de hacerlo.
‫De acuerdo, y luego este automóvil está heredando de un vehículo donde, por supuesto, la velocidad y el color deben definirse.
‫Así que echemos un vistazo a la clase de vehículo.
‫Y podemos ver aquí que este vehículo de clase base tiene una velocidad, un color, un constructor por defecto, que establece
‫esos dos valores de velocidad con 120 kilómetros por hora y el color con blanco.
‫Y luego tenemos el constructor simple que establecería la velocidad y el color en función de los
‫valores que se le dan al objeto del vehículo.
‫También, por supuesto, al objeto heredado, como un coche, por ejemplo.
‫Bien, ahora que tenemos todas esas clases diferentes y vimos cómo están estructuradas, veamos
‫la función de destrucción real.
‫Entonces, ¿cuál es el mejor enfoque para crear una función de destrucción de este tipo?
‫Si lo pensamos bien, no podemos agregar una clase para que nuestras clases hereden de ella porque este es
‫un lenguaje de herencia única y no un lenguaje de herencia múltiple que ya heredamos de una clase.
‫Entonces, el automóvil ya hereda del vehículo y la silla ya hereda de los muebles.
‫Entonces no puede heredar de otra cosa.
‫Como, por ejemplo, el vehículo aquí que ves C Sharp no permite esto porque no puede tener múltiples
‫clases base.
‫Una clase no puede tener varias clases base en Do sostenido.
‫Entonces, además, no hay una relación concreta entre un automóvil y una silla para compartir una clase básica de todos modos,
‫porque son completamente diferentes a dos cosas, ¿verdad?
‫Si implementamos métodos normales llamados el método de destrucción, por ejemplo, en cada una de esas clases
‫que tenemos aquí, será difícil de mantener.
‫¿Qué pasa si decidimos cambiar el sistema de destrucción por completo o agregar efectos visuales a
‫nuestros objetos destructibles en el futuro? Será una molestia revisar cada clase y modificarla.
‫Porque en este caso, solo tenemos dos subclases, por así decirlo, cierto, pero imagina que tienes 50 o
‫incluso 100 clases diferentes, 100 tipos diferentes de objetos en tu juego, entonces tendrías que pasar por cada
‫uno de ellos y ajuste el código en consecuencia.
‫Así que eso es realmente una carga y no queremos pasar por eso.
‫Por eso necesitamos encontrar una mejor solución.
‫Lo que necesitamos es una forma de imponer nuestro comportamiento destructible en cada clase que lo use, como un
‫contrato.
‫Y si ha visto nuestro video sobre interfaces, sabe que son contratos que podemos crear.
‫Entonces, el mejor enfoque en este caso es usar una interfaz y la llamaremos destruible.
‫Y cualquier clase que implemente esta interfaz se verá obligada a seguir nuestros requisitos de destrucción y
‫personalizarla al mismo tiempo, dependiendo de la clase en sí.
‫Así que sigamos adelante y creemos dicha interfaz, por lo tanto, puede ir aquí a su proyecto, agregar un
‫nuevo elemento y luego seleccionar la interfaz aquí y darle un nombre.
‫Así que voy a llamar a este yo.
‫D stroy Elbo para que puedas ver cuando usas interfaces, agregas la IA al comienzo del nombre del archivo
‫para indicar que va a ser una interfaz.
‫Así que agreguemos esta interfaz.
‫Entonces, esta interfaz solo tendrá una propiedad para almacenar el archivo de audio que se ejecutará una vez que
‫ejecutemos la destrucción, que será el sonido de destrucción, y luego solo tenemos un método que destruirá un
‫objeto y lo llamaremos método destruir.
‫No devolverá nada.
‫Simplemente destruirá algo.
‫Entonces podría, por ejemplo, devolver los gráficos que tiene.
‫Entonces, los objetos de IA que desea mostrar una vez que se destruye el elemento, por ejemplo, el automóvil se destruye
‫o la silla se destruye, etc.
‫Así que ahora asegurémonos de que nuestras clases vayan a implementar esta interfaz y luego, por supuesto, implementarán el contenido de la
‫interfaz, es decir, el sonido de destrucción y el método de destrucción.
‫¿Cómo podemos hacer eso?
‫Bueno, vayamos a nuestro coche, por ejemplo.
‫Y aquí nuestro automóvil deberá agregar una coma aquí en la parte superior de la clase, la definición en la parte
‫superior y usar esta interfaz destruible como.
‫Entonces, si agrega eso, puede ver que obtiene un error que dice que el automóvil no implementa el sonido de destrucción
‫de miembros de la interfaz ni tampoco destruye.
‫Para que podamos mostrar posibles soluciones e implementar a todos los miembros.
‫Por ejemplo, esto creará este código automático para nosotros.
‫Entonces creará el vacío destruible, destruirá y creará el sonido de destrucción para nosotros.
‫Entonces esa sería la versión generada automáticamente.
‫Pero también podemos hacerlo manualmente.
‫No hay problema con eso.
‫Entonces aquí, por ejemplo, podemos implementar el sonido de destrucción.
‫Y luego lo que quiero poder hacer es tener una propiedad para almacenar los objetos destruibles
‫cerca.
‫Entonces, cuando un automóvil se destruye, también debe destruir el objeto cercano.
‫Y esta lista también será destruible de Tipo I, lo que significa que puede almacenar cualquier objeto que implemente esta interfaz
‫y solo podemos acceder a propiedades y métodos en esa interfaz.
‫Entonces, para crear eso, voy a crear una lista pública de objetos altamente destruibles
‫y los llamaré destruibles cerca.
‫Entonces ahora podemos continuar y extender nuestro constructor, por un lado, queremos asegurarnos de que inicializamos el
‫sonido para asegurarnos de que tenemos un sonido de explosión.
‫Por ejemplo, digamos que tenemos este sonido llamado sonido de explosión de coche y tres, y luego queremos
‫inicializar la lista de objetos destruibles.
‫Entonces, esto, por ejemplo, será solo una nueva lista de objetos destruibles.
‫Y luego solo necesitamos implementar también el método de destrucción.
‫Así que esto lo puedo destruir aquí en la parte superior, puedes ver que todavía no está contento.
‫Todavía está esperando que implementemos el método de destrucción.
‫Como puede ver, cuando implementa una interfaz, necesita implementar sus miembros porque la interfaz
‫aquí tiene dos miembros.
‫Necesitamos implementar ambos.
‫Bien, eso significa que tenemos que volver aquí y tenemos que implementar el método de destrucción.
‫Así que hagámoslo muy rápido para lograrlo.
‫Lo que quiero agregar aquí serán, en primer lugar, dos declaraciones.
‫Solo voy a usar las declaraciones de la línea correcta.
‫Lo mantendré simple porque no estamos creando un juego aquí, sino que solo estamos tratando de comprender
‫los conceptos de interfaces.
‫Entonces, cuando un automóvil se destruye, debemos reproducir el sonido de destrucción y crear un efecto de fuego.
‫Así que aquí estamos imitando como si realmente reprodujera el sonido y simplemente dirá, OK, reproduciendo la
‫explosión del auto y el sonido de tres, y luego creamos el fuego.
‫Así que todo está en llamas.
‫Todo se quema porque el coche está destrozado.
‫Así que ahora revisemos cada uno de los destruibles cercanos y destruyémoslo.
‫Así que aquí vamos a revisar todos y cada uno de los objetos destruibles que se encuentran dentro de nuestra lista de muros
‫destruidos cercanos.
‫Lo llamamos destruible para que cada elemento sea destruible, que es básicamente un nombre
‫de variable local.
‫Entonces decimos, OK, el objeto destruible que implementará la interfaz destruible se llamará destruible en nuestro
‫para cada ciclo.
‫Entonces iteramos a través de él, lo que significa que iteramos a través de la colección destruible
‫cercana, que es una lista de objetos destruibles de AI, básicamente objetos que la implementan, interfaz destruible
‫de AI y luego simplemente llamamos al método de destrucción.
‫Entonces, básicamente, creamos una reacción en cadena aquí, destruyendo todo lo que hay alrededor de todo lo que se destruye y eso también
‫es un automóvil y así sucesivamente.
‫Entonces, en este caso, digamos que tenemos dos autos uno al lado del otro y tienen un montón de sillas uno al lado
‫del otro.
‫Entonces, los autos llamarán a este método de destrucción donde destruirán los elementos cercanos porque, bueno, es una
‫gran explosión, ¿verdad?
‫Se oye un sonido y cada elemento crea un sonido.
‫Ahora, por supuesto, podría crear un temporizador que necesite hasta que ocurra la explosión real después de que
‫algo se incendie.
‫Pero vamos a mantenerlo simple aquí.
‫Bien, estamos destruyendo los otros autos, pero también los otros vítores para que cada auto infecte a otros elementos
‫cercanos que lo rodean.
‫Y esto podría ser, digamos, todo lo que está a 10 metros o cinco metros de distancia o
‫cuantas pulgadas de distancia si quieres llevar el sistema americano aquí.
‫Pero eso es básicamente lo que va a pasar.
‫Ahora, miremos las sillas, porque las sillas van a tener que pasar por un enfoque similar porque también queremos
‫asegurarnos de que una silla se pueda destruir, pero la destrucción de una silla será
‫muy diferente.
‫Bien, aquí también agregaremos la interfaz.
‫Entonces, la interfaz destruible por IA y, por supuesto, necesitamos implementar el sonido de destrucción y
‫esa será una destrucción muy diferente porque la silla simplemente se derrumbará y se hará añicos la
‫madera que escuchas.
‫Entonces será un sonido muy diferente aquí.
‫Bien, y luego, por supuesto, también queremos definir el sonido de destrucción dentro de nuestro constructor.
‫Así que voy a decir que se debe reproducir el sonido de destrucción de la silla.
‫Siempre será igual.
‫Por eso no lo agrego aquí en la declaración del presidente.
‫Así que lo mantendré simple aquí.
‫Por supuesto, podría tener diferentes sillas que tengan diferentes sonidos de explosión, luego lo
‫agregaría aquí en la parte superior como un parámetro para su constructor.
‫Bien, ahora implementemos el método de destrucción.
‫Y en este caso, lo que pasará es que destruiremos algo y, en primer lugar, destruiremos la silla de color en función
‫del color que tenga la silla, eso lo escribiremos.
‫Luego tocaremos el sonido de destrucción y finalmente vamos a generar partes de sillas.
‫Bien, en nuestro caso, solo lo escribimos en la consola.
‫Pero imagina en un juego real cómo harías eso, porque la mejor manera de destruir algo en un videojuego
‫es no hacer lo físico en el que haces toda la destrucción, lo cual es
‫muy difícil de construir, especialmente si.
‫No tengas un gran equipo que haga todo tipo de cosas, entonces básicamente harías
‫una gran explosión o animación de destrucción y luego generarías las partes destruidas de las partes individuales que se encuentran alrededor.
‫Entonces, aquí ve que no hay una reacción en cadena proveniente de este método de destrucción.
‫Entonces, la implementación del método de destrucción para la silla es muy diferente a la del
‫vehículo, pero ambos heredan de la interfaz destruible de IA y tienen que implementar el método de destrucción y pueden
‫hacerlo a su manera.
‫Básicamente, las interfaces nos permiten algún tipo de herencia múltiple, aunque en realidad no es una herencia
‫múltiple.
‫Bien, ahora sigamos adelante y vayamos a nuestros programas.
‫Si.
‫Y de hecho usamos nuestras clases recién creadas porque.
‫Bueno, de lo contrario es aburrido.
‫Derecha.
‫Así que sigamos adelante y creemos dos sillas.
‫Entonces tenemos una silla de oficina que será marrón y de plástico, y luego tenemos una silla de juego que
‫será roja y de madera.
‫Y luego creemos también un coche nuevo.
‫Entonces este auto tendrá una velocidad de 80 y será azul y será un auto dañado.
‫Y luego agregaremos las dos sillas cercanas a este auto dañado.
‫Entonces los agregamos como destruibles cerca de nuestro automóvil dañado.
‫Entonces, la silla de oficina y la silla de juego ahora estarán, si lo miramos aquí, como destruible está cerca,
‫porque al crear un automóvil, esta lista estará vacía.
‫Pero luego podemos, por supuesto, porque es una lista pública aquí, podemos agregarle elementos, lo cual hacemos.
‫Le agregamos artículos destruibles.
‫¿Y por qué podemos agregar sillas a nuestro destruible cercano?
‫Bueno, porque una silla implementa esta interfaz.
‫Que llamáramos I destruible, esto significa que una silla ahora será aceptada como un objeto destruible de Tipo II, lo
‫que significa que ahora podemos agregarla como nuestro destruible cercano.
‫Así que ahora podemos seguir adelante y destruir el coche.
‫Así que simplemente llamemos al método de destrucción para nuestro automóvil dañado para que la explosión pueda participar, el sonido de la
‫explosión pueda comenzar y todas las cosas buenas.
‫Así que ejecutemos esto.
‫Y, por supuesto, será más un juego de aventuras y no tanto un juego en el que veas gráficos en 3D reales ni nada
‫por el estilo.
‫Entonces tocamos el sonido de la destrucción, el sonido de la explosión del coche.
‫Creamos el fuego.
‫La silla marrón fue destruida.
‫Estamos reproduciendo el sonido de destrucción de la silla, el sonido de destrucción y B3.
‫Luego giramos las partes de la silla para nuestra silla marrón.
‫Luego, la silla roja fue destruida.
‫Estamos reproduciendo el sonido de destrucción de la silla, destrucción, sonido y furia y luego respondemos partes de
‫la silla para nuestra silla roja.
‫Ya ves, eso es todo.
‫Así es como puede crear sus propias interfaces y cómo puede usarlas.
‫Y espero que ahora comprenda lo que las interfaces pueden hacer por usted y las ventajas de las interfaces.
‫Entonces, un nodo importante aquí por interfaces se usa para la comunicación entre dos clases similares o no similares que no
‫se preocupan por un tipo de clase que implementa la interfaz, al igual que la forma en que nuestro automóvil se comunicó
‫con la silla para llamar al método de destrucción, todo porque simplemente implementé la misma interfaz
‫que dije anteriormente.
‫Entonces, aunque las interfaces pueden parecer difíciles de entender, a primera vista nos brindan grandes beneficios.
‫Esas ventajas se denominan legibilidad.
‫Entonces, una interfaz constituye una declaración sobre intenciones, por lo que define la capacidad de su clase.
‫Entonces, ¿qué es capaz de hacer tu clase?
‫Si implementa el ordenable I, por ejemplo, está indicando claramente que los objetos de su clase
‫se pueden ordenar, luego codifique la semántica.
‫Al proporcionar interfaces e implementarlas, separa activamente conceptos y la interfaz define un modelo de comportamiento, una
‫definición de lo que puede hacer un objeto.
‫Y separar esos conceptos mantiene la semántica de su código mucho más clara.
‫Entonces tienes el código.
‫Las interfaces de mantenibilidad ayudan a reducir el acoplamiento y le permiten intercambiar fácilmente implementaciones para el mismo
‫concepto sin que el código subyacente se vea afectado.
‫Y luego tenemos patrones de diseño.
‫Es el panorama más amplio del uso de contratos, abstracción e interfaces fundamentales para la programación orientada a
‫objetos.
‫Así que la comprensión humana y la arquitectura del sistema complejo.
‫Entonces, básicamente, es solo para entenderlo mejor como ser humano y luego la herencia múltiple.
‫Entonces, las interfaces pueden ser nuestra puerta de entrada para usar herencia múltiple en C sostenido.
‫Así que suponga que escribe una biblioteca y desea que los usuarios puedan modificarla.
‫Escribe la interfaz y su implementación de clase.
‫Otros desarrolladores que usarán su biblioteca aún pueden escribir su propia clase de implementación, que
‫puede usar diferentes tecnologías o algoritmos que logran el mismo resultado.
‫Esta es también la razón por la que encontramos tantas interfaces en las bibliotecas.
‫Usamos, pero rara vez sentimos la necesidad de escribir nuestras propias interfaces porque no escribimos bibliotecas nosotros mismos.
‫Como nota final, lo importante es comprender cómo se implementan las interfaces en este punto.
‫Por supuesto, a medida que pasemos por diferentes tecnologías como WP y AP dot net y la
‫clase magistral de C, comenzaremos a usar más interfaces, lo que lo ayudará a comprenderlas mejor en el futuro.
‫Está bien.
‫Muchas gracias por ver este video.
‫Nos vemos en el próximo.