De POO a SOLID explicado con Pokémons - JavaScript - El paradigma de POO
Tags: oop, javascript, solid
Published: 2020-08-24 21:37:40

###### Guía para entender el paradigma de POO.
#### JavaScript - El paradigma de POO

En el [paradigma](https://es.wikipedia.org/wiki/Paradigma) de la Programación Orientada a Objetos (**POO** o **OOP** en sus siglas en inglés) existen los principios o reglas **SOLID** los cuales son una serie de normas que guían la forma en la que diseñamos nuestros sistemas. Aplicando dichos principios podemos encontrar los objetivos.

![Fig. 1: Objetivos de SOLID.](https://cdn-images-1.medium.com/max/1760/1*1__l-qufiqDtNmE19JLjvQ.png)

Un punto importante para poder comprender los principios de **SOLID** es necesario comprender el [paradigma](https://es.wikipedia.org/wiki/Paradigma) de **POO**, tomando lo anterior en cuenta la pregunta que tenemos que hacernos es.


***

## 🤔, Pero ¿Qué rayos es POO?

Es un [paradigma](https://es.wikipedia.org/wiki/Paradigma) de programación que utiliza la [abstracción](https://es.wikipedia.org/wiki/Abstracci%C3%B3n_(filosof%C3%ADa)) para crear modelos de **objetos** basados en el mundo real. Aplicando este paradigma podemos conseguir desarrollos más robustos y organizados además de conseguir beneficios tales como.

![Fig. 2: Beneficios de POO.](https://cdn-images-1.medium.com/max/1760/1*Ru9VSUzF1OBmb-G_kXHtlA.png)

El [paradigma](https://es.wikipedia.org/wiki/Paradigma) de POO es considerado como el diseño de [Software](https://es.wikipedia.org/wiki/Software) a través de conjuntos que cooperan entre sí, lo cual es muy diferente al antiguo [paradigma de programación estructurada](https://es.wikipedia.org/wiki/Programaci%C3%B3n_estructurada).

Muy interesante… si **POO** se basa en **objetos** la pregunta que tenemos que hacernos es.

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

***
## 🤔, Pero ¿Cómo logro pensar en Objetos?

Pensar en **objetos** es muy sencillo ya que es muy parecido a cómo lo haríamos en la vida real. Por ejemplo, imaginemos un **Pokémon** el cual, para poder pasarlo a un **modelo** de **POO**, diríamos que el elemento principal (también conocido como **clase**) es Pokémon, tomando esto en cuenta podemos realizarnos las siguientes preguntas.

***

## 🤔 ¿Qué propiedades tiene un Pokémon?

Todas las propiedades y características de un **Pokémon** se conocen como **atributos** los cuales cuentan con un identificador (nombre de la propiedad) y un tipo (conocido como tipo de dato).

![Fig. 3: Ejemplo Listado de atributos.](https://cdn-images-1.medium.com/max/1760/1*CCreUUtzuxKt_qTjq1lShw.png)

## 🤔 ¿Qué capacidades tiene un Pokémon?

Todas las capacidades que definan el posible comportamiento de nuestro **Pokémon** se conocen como **métodos** los cuales pueden modificar a los atributos o llamar a otros **métodos**.

![Fig. 4: Ejemplo de listado de métodos.](https://cdn-images-1.medium.com/max/1760/1*krpMjPULIEvSJzEBS60iWA.png)

> **🔖 Nota:** Por cuestiones de practicidad solo tomaremos algunas de las capacidades y propiedades de un Pokémon.

***

## 🤔, Pero ¿Que rayos es una Clase?

Funciona como un **molde** que nos permite crear **objetos** individuales en este caso del tipo **Pokémon** permitiendo así definir los atributos y métodos que describen su comportamiento y estados.

![Fig. 5: Representación de la clase Pokémon.](https://cdn-images-1.medium.com/max/1760/1*IXC6lgv0OoEFtduwpks9QA.png)

**¡Genial!** Poco a poco esto toma forma… ¡Ey! un momento falta realizarnos una pregunta la cual es.

## 🤔 ¿Entonces qué es un Objeto en POO?

Es la representación [abstracta]((https://es.wikipedia.org/wiki/Abstracci%C3%B3n_(filosof%C3%ADa))) de cualquier elemento de la vida real; mediante un componente de Software por lo que un **objeto** es una **instancia** de una **clase**.

![Fig. 6: Creando instancias de la clase Pokémon.](https://cdn-images-1.medium.com/max/2600/1*om0FfpzXNbTdqSOn3eOm6Q.png)

> **🔖 Nota:** Se conoce como instancia a todo objeto que derive de otro. De esta forma todos los objetos son instancias menos la **Clase** padre que es el origen.

**¡Genial!** ya conocemos algunos conceptos base del [paradigma](https://es.wikipedia.org/wiki/Paradigma) de **POO** es momento de aplicar lo aprendió y convertirlo en código, **¡Manos a la obra!**

{% gist https://gist.github.com/konami12/2359d276454cdcb81d291597a042e375 %}


**¡Genial!** hasta este punto ya generamos nuestra primera **Clase** aplicando los conceptos básicos del paradigma de **POO**, el código generado está basado en los diagramas utilizados.

Si quiere aprender un poco más sobre el uso de clase en **JavaScript** te recomiendo leer el siguiente **POST**.

{% medium https://medium.com/@jmz12/usando-clases-en-javascript-e07f0e25c67d %}

***

## Conclusiones

Aprendimos los conceptos base del [paradigma](https://es.wikipedia.org/wiki/Paradigma) de **POO** y los beneficios que podemos obtener cuando se aplica en nuestros desarrollos, es importante saber que gracias a las nuevas características de **JavaScript** podemos utilizar dicho paradigma.

Iniciamos el camino para poder entender los cinco principios de **SOLID**, pero antes de poder pasar al tema tenemos que conocer los cuatro principios que le dan sentido a **POO**, este tema lo expondremos en el siguiente Articulo.