DEV Community

Cover image for De POO a SOLID explicado con Pokémon - Los cuatro principios de POO
Jorge Méndez Ortega
Jorge Méndez Ortega

Posted on • Edited on • Originally published at Medium

De POO a SOLID explicado con Pokémon - Los cuatro principios de POO

Guía para entender los cuatro principios de POO.

JavaScript - Los cuatro principios de POO

En un post anterior hablamos sobre el paradigma de POO aplicándolo a JavaScript, de esta manera dimos el primer paso para poder comprender SOLID.

Con anterior hablamos sobre el paradigma de POO aplicándolo a JavaScript, de esta manera dimos el primer paso para poder comprender SOLID. Si te perdiste el post anterior puedes consultarlo en el menú de arriba.

Retomando nuestra aventura Pokémon procederemos a entender los principios de POO, para entrar en materia nos preguntaremos lo siguiente.

🔖 Nota: Todos los ejemplos de código utilizados están basados en JavaScript usando las especificaciones más actuales hasta el momento.


🤔 ¿Cuáles son los principios de POO?

Todo lo que es POO es posible simplificarlos en cuatro grandes principios que permiten fundamentar dicho paradigma.

Fig. 1: Los cuatro principios de POO.

📕 Encapsulamiento

Su propósito es que nadie se meta donde no le llaman, cada objeto es responsable de su propia información, estados los cuales solo pueden ser modificados por sus propios métodos, por lo cual sus atributos internos no tienen que ser accesibles desde fuera.

🔖 Nota: Cuando un atributo de un objeto no es accesible desde fuera en POO esto se conoce como privacidad.

Utilizando como base la clase Pokémon que creamos en un POST anterior procederemos a implementar el principio de encapsulamiento.

¡Genial! nuestra clase Pokémon está utilizando privacidad para que algunos de sus atributos no san accesibles desde fuera y así es cómo funciona el principio de encapsulamiento😱.

🔖 Nota: Todas las métodos y atributos que no tienen el # son por defecto públicos, esto quiere decir que pueden ser consultados desde afuera de la clase.


📗 Abstracción

Hace pensar que los objetos son similares a cajas negras, ya que sabremos cómo interactuar con ellos, pero no conocemos su comportamiento interno, esto trae como consecuencia la capacidad de modificar el comportamiento de un objeto sin afectar a quienes lo utilicen.

Siguiendo con el tema de Pokémon, imaginemos el funcionamiento de una Pokédex el cual está abstraído del usuario, pues basta solamente con saber cómo interactuar con él para realizar ciertas acciones, pero no tenemos ni la remota idea de cómo funciona internamente.

¡Genial! ya contamos con una nueva clase llamada Pokédex con la que podemos consultar la información de un Pokémon, como podemos apreciar en el ejemplo sin importar el origen de la data el método getInfo siempre muestra la información solicitada, por lo que la manera de interactuar con dicho método no cambia solo la clase padre es la que conoce sus cambios y es así como funciona el principio de Abstracción.


📘 Herencia

Es la capacidad que permite crear objetos a partir de otros ya existentes, los métodos y atributos del objeto padre (Super Clase) pasan a ser parte de los objetos hijos (Sub-Clase) los cuales son creados a partir de la Super Clase, la herencia se basa en la reutilización de código.

Imaginemos que se necesita crear un nuevo objeto que permita definir a Pokémons de Tipo Fuego, pero este nuevo objeto tiene que contar con las características de la clase Pokémon.

¡Genial! la clase TypeFire entra a juego nos permite crear Pokémons de tipo fuego y al mismo tiempo cuenta con todos los métodos y propiedades de la clase Pokémon, además estamos reutilizando código😱 y así es cómo funciona el principio de Herencia.

🔖 Nota: Recordemos que la clase Pokémon cuenta con atributos privados los cuales no pueden ser consultados directamente por la clase TypeFire pero puede consultarlos gracias a los métodos que tienen acceso a dichos a tributos.


📙 Polimorfismo

Es la capacidad que tiene un objeto de presentar diferentes comportamientos al momento de realizar una acción, el polimorfismo se presenta cuando se aplica el principio de Herencia.

Utilizaremos nuevamente la clase TypeFire ya que con anterioridad le aplicamos el principio de Herencia, la clase Pokémon tiene un método attack con un comportamiento establecido, pero al utilizarlo dentro de la clase TypeFire su comportamiento tiene que cambiar.

¡Genial! la clase TypeFire define un nuevo comportamiento para el método attack proveniente de la clase Pokémon, de esta manera las dos clases comparten el método y cada una define un comportamiento diferente y así es como funciona el Polimorfismo.

🔖 Nota: Al igual que la herencia no podemos tener accesos a métodos y atributos privados.


🤔 Conclusiones

Aprendimos los cuatro principios que le dan fundamento al Paradigma de POO, sabes cómo aplicarlos en nuestros desarrollos, es importante saber que JavaScript no cuenta con una implementación al 100 del paradigma de Paradigma de POO pero parece que busca dar el paso.

Hemos dado un paso más para poder entender los cinco principios de SOLID ya que hasta este punto podríamos decir que entendemos las bases de POO, por lo que en el siguiente Articulo hablaremos de SOLID😱.

Top comments (2)

Collapse
 
angulodev profile image
AnguloDEV

Hola buenas, estoy siguiendo muchos tus post y son geniales muchas gracias.
Al parecer el ejemplo de código abstracción es de polimorfismo
Y no queda claro al tener esa confusión

Collapse
 
jmz12 profile image
Jorge Méndez Ortega

Hola que tal, disculpa la demota, pero tienes razon el ejemplo que tenia estaba mal , ya coloque el ejemplo correcto,