aprender a programar es fácil variables tipo de datos operadores condicionales ciclos son como las matemáticas de colegio sin embargo escribir código limpio con buenas prácticas mantenible Y escalable esa es otra cosa por eso las buenas prácticas son una de las principales diferencias entre un Junior y un senior el Junior busca que el código funcione el senior también Busca que sea mantenible en el futuro y entre los recursos más importantes para escribir código limpio están los principios sólidos si has escuchado el término pero nadie te lo explico bien Este es el vídeo que buscabas porque en
español nadie explica mejor que de ti pero antes de continuar te cuento que muy pronto cumpliremos 8 años desde que de Tim nación octubre de 2015 eran los tiempos de html5 y cuando se empezaba a hablar de reac mucho ha cambiado desde entonces hoy aparecen nuevas plataformas de Educación online cada día pero tú sabes que desde el día 1 edem se diferenció por ser la plataforma que explica mejor y eso es lo que importa no seremos los más grandes ni los que más dinero tienen en el banco pero somos los que explican mejor así que
Únete a las celebraciones por nuestro medio aniversario que comienzan este lunes dos de octubre habrá muchas sorpresas Regalos y también tu momento de romper la alcancía para asegurar tu futuro estudiando en Muchas gracias de corazón por habernos acompañado estos 8 años para entender los principios solid necesitamos algunos conceptos previos y el más importante es la programación orientada a objetos Este es el paradigma de programación más utilizado y empezó en los años 70 y se ha extendido a casi todos los lenguajes este paradigma utiliza objetos que se comunican entre ellos para representar a las entidades del
programa por ejemplo en ede Team los usuarios cursos suscripciones Premium y profesores son objetos los objetos tienen atributos que son también llamados propiedades que son sus características y métodos que son sus funciones por ejemplo como atributos un usuario tiene su nombre y su correo y como métodos Iniciar sesión o comprar una suscripción Premium si quieres entender más fondo la programación orientada a objetos tenemos la mejor explicación en español que puedes ver en este vídeo aquí en YouTube y si quieres ir más allá Tenemos un curso completamente gratis que incluye certificado el link está en la
descripción otro concepto que también es parte de la programación orientada a objetos son las clases y es que los objetos se crean a partir de plantillas llamadas clases que son como el plano de una casa a partir del cual se pueden construir muchas casas por ejemplo podríamos tener una clase superhéroe que tenga los métodos volar y Súper fuerza y a partir de esa clase crear cada superhéroe que sería un objeto la creación de un objeto a partir de una clase se llama instanciación y cada objeto es una instancia de la clase el siguiente concepto son
los pilares de la programación orientado a objetos que son los fundamentos Obviamente el primero es la abstracción que consiste en extraer las propiedades más importantes de un objeto del mundo real para llevarlo a una clase por ejemplo en el caso de los superhéroes extrajimos la capacidad de volar y la súper fuerza número encapsulamiento que es el proceso de proteger la información de un objeto para que no sea manipulada sin autorización número 3 herencia Y es que una clase hija hereda atributos y métodos en la clase padre por ejemplo a partir de la clase superhéroe podemos
crear clases fijas Como superhéroe con poderes donde estaría Superman y superhéroe sin poderes donde estaría Iron Man y número cuatro polimorfismo que significa que objetos de clases diferentes pueden tener el mismo comportamiento o sea los mismos métodos pero implementarlos de diferentes maneras por ejemplo Superman y Ironman pueden volar pero de formas muy diferentes otro concepto que debes comprender antes de entrar a solid son las interfaces y los clientes las interfaces están muy relacionadas con el polimorfismo te acuerdas que Superman y Iron Man pueden volar pero de formas diferentes de ahí viene polimorfismo varias formas de
hacer lo mismo pero este polimorfismo trae el riesgo de tener código inconsistente la forma de volar de Iron Man con una estructura de código nombre y momentos diferentes a la de Superman y si luego creamos otro superhéroe Volador crearemos una estructura diferente para que vuele complicando cada vez más el código para evitarlo usamos las interfaces que son contratos que definen el nombre de los métodos y los argumentos que reciben pero no especifican como implementar el método Ese es problema de cada clase un ejemplo sencillo de entenderlo es el timón de un auto si lo giras
a la derecha el auto gira a la derecha cada fabricante de autos puede tener su propia tecnología de conducción pero deben cumplir con el contrato de darle al conductor un timón en el caso de los superhéroes creamos una interfaz Volador que Superman y Ironman deben respetar como en el ejemplo del timón del auto a la interfaz no le interesa como vuela Superman ni como vuela Ironman Solo que respeten el contrato por último tenemos el concepto de clientes que son partes del programa que interactúan o utilizan clases o interfaces en el ejemplo del auto el conductor
sería el cliente de la interfaz Timón y en nuestro ejemplo de superhéroes voladores las clases superhéroe con poderes y superhéroes sin poderes son clientes de la interfaz Volador mientras que Superman y Iron Man son clientes de la clase superior con poderes y superhéroes sin poderes respectivamente ahora ya estamos listos para comprender los principios solid como te dije al inicio de este vídeo los principios sólidos nos ayudan a escribir código limpio mantenible y escalable un libro muy famoso para aprender a escribir código limpio screen code de Roberts Martin que todo programador debería leer tenga en cuenta
que los principios para escribir código limpio no se limitan a solid sino que hay muchos más que podremos ver en otro vídeo en el caso específico de solid la palabra solid en realidad no significa que tu código sea sólido o robusto como podrías pensar sino que no significa nada es tan solo un acrónimo con las iniciales de los principios en inglés para que podamos recordarlos la s De principio de responsabilidad única la o del principio de abierto y cerrado la l del principio de sustitución de lisco la i del principio de segregación de interfaces y
la d del principio de inversión de dependencias todos estos principios Fueron desarrollados por Robert Martin el mismo de Clean code ingeniero de software muy famoso que recibió el apodo cariñoso de tio bop o Ángel Bob por la comunidad de desarrollo de software por su figura de mentor y guía Mientras que el tercero fue desarrollado por Bárbara lisco una reconocida ingeniera de software norteamericana ten en cuenta que en este vídeo te explicaré los principios sólidos de la forma más didáctica posible y si quieres ir más a fondo y aplicar sólida en un proyecto real tenemos el
curso de solid y arquitectura hexagonal en edem y tienes el link en la descripción empecemos por el principio de responsabilidad única que dice que una clase debe tener una única responsabilidad es decir una única función y Por ende dicha clase debe tener una sola razón para ser modificada supongamos que tenemos una clase de superhéroe como sabe los superhéroes tienen habilidades y características muy diferentes así que podríamos pensar en una clase de este tipo en la que agregamos métodos como volar que es una habilidad que tienen casi todos los superhéroes pero no todos luego trepar paredes
que solo la tienes spider-man luego lanzar fuego y así esta clase está siendo demasiadas cosas y tiene demasiadas razones para cambiar lo que va a originar problemas cuando el código crezca la manera de resolver este problema es que la clase superhéroe tenga una sola función por ejemplo realizar super habilidades y que las habilidades individuales sean delegadas a otras clases y cómo hago para traerme las habilidades que están en las otras clases Eso lo veremos en un momento en este estudiante de instituto colegio universidad postula a una beca en ede.tin diagonal becas y estudia en eeting
con 50% de descuento es tu momento de comprobar porque en español nadie explica mejor que de ti seguimos con el principio o de abierto cerrado este principio está muy relacionado con el anterior porque dice que una clase debe estar cerrada para su modificación pero abierta para su extensión es decir que si quieres agregar nuevas funcionalidades a la clase no deberías cambiar el código porque podría romper cosas sino extender esas funcionalidades desde afuera usemos El ejemplo anterior tenemos la clase superhéroe con el método realizar super habilidades a partir de esa clase instanciamos el objeto Superman Pero
cuál es la principal habilidad de Superman volar entonces agregamos volar a la clase superhéroe no porque eso violaría el principio de abierto cerrado la forma correcta sería tener una interfaz superabilidad y diferentes clases para cada habilidad así cada habilidad debe cumplir el contrato de la interfaz y cada vez que creamos un nuevo superhéroe le asignamos sus habilidades vamos al principio l de sustitución de liscope este principio dice que si tenemos clases padre y clases hijas es decir herencia las instancias de las clases fijas y las instancias de las clases padres deben poderse intercambiar sin producir
resultados inesperados Por ejemplo si tenemos la clase superhéroe Volador que hereda de la clase superhéroe los objetos instanciados a partir de esas dos clases deberían también ser superiores obvio Así que pueden intercambiarse entonces supongamos que de superhéroe instancia Iron Man y de superhéroe Volador a Superman ambos podrían intercambiarse sin problemas los dos son superhéroes y los dos vuelan sencillo ahora supongamos que en la subclase superhéroe Volador Agrega una restricción que dice que sólo puede volar con su superpoderes en ese caso Iron Man que vuela con un traje no cumpliría con esa restricción y los objetos
ya no serían intercambiables y habríamos roto con el principio esto quiere decir que debemos evitar agregar restricciones O cambiar el comportamiento de los métodos heredados en una clase para no tener luego comportamientos inesperados en la aplicación el siguiente es el principio y o de segregación de interfaces este principio nos dice que los clientes no deben verse obligados a depender de interfaces que no utilizan es decir que un cliente solo debe conocer los métodos que va a utilizar volvamos al ejemplo de la clase de superhéroe por el principio de responsabilidad única sabemos que no debemos meter
todas las habilidades ahí sino crear una interfaz entonces creamos la interfaz habilidades del superhéroe y agregamos habilidades como volar trepar muros lanzar fuego etcétera esto parece una buena idea Pero supongamos que creamos a Superman a partir de la clase de superhéroe según este diseño Superman treparía muros y lanzaría fuego y sabemos que así por lo tanto hemos roto el principio de segregación de interfaces lo que podemos hacer es tener una clase superhéroe con todos los métodos y propiedades comunes a los superhéroes luego con herencia creamos clases hijas para cada tipo de superhéroe Como cada tipo
de superhéroe tiene habilidades diferentes creamos interfaces específicas para cada habilidad Entonces el superhéroe trepamuros tiene super fuerza y trepar muros y el superhéroe Volador puede volar Y también tiene súper fuerza Ahora sí hemos segregado las interfaces y podemos instanciar superiores específicos que tendrán su superpoderes específicos ahora Superman ya no trepamuros y llegamos al último de los principios la d de inversión de dependencias este principio dice que las clases de alto nivel no deben depender de las de bajo nivel sino que ambas deben depender de abstracciones y que los detalles deben depender de las abstracciones y
no al revés para entender esto que son un poco trabalenguas imaginemos la clase de Avengers que es de alto nivel porque requiere las clases Iron Man y cap son las de bajo nivel lo que nuestro sentido común nos diría es que dentro de la clase de Avengers llamemos a las clases Iron Man y cap para formar a los Avengers Pero esto sería un error ya que si luego queremos agregar a Hulk tendríamos que modificar la clase de Avengers y esto viola el principio de abierto y cerrado te acuerdas cerrado para su modificación pero abierto para
su extensión lo que haremos es usar la interfaz Avenger que tiene el contrato que deben seguir todos los Avengers y por su lado de Avengers recibe las instancias de los superhéroes a través de la interfaz por eso a Esta técnica se le conoce como inyección de dependencias ya que la clase en vez de traer a las dependencias en vez de traer a Iron Man o al Cup recibe esas dependencias desde afuera a través de la interfaz ahora ya entiendes que son los principios solid Y cómo funcionan Recuerda que si quieres ir más a fondo escribiendo
tu código y creando un proyecto real con Estos principios toma nuestro curso solid y arquitectura hexagonal en edem es un paso obligatorio en tu camino para convertirte en programador sin ir también recuerda que este lunes 2 de octubre comienzan nuestras actividades por nuestros 8 años no te las pierdas y si no sabías que son los principios solid hoy lo aprendiste en