Curso de JavaScript desde cero

La programación orientada a objetos con JavaScript

Capítulo 37: ¿Qué es la programación orientada a objetos?

Hasta ahora, has visto como crear objetos literales y como trabajar con ellos. Ha llegado el momento de que aprendas la teoría de la programación orientada a objetos para poder utilizar todas las ventajas de ellos.

Realmente, este tema te va a servir en programación a nivel general, no solo en JavaScript.

¿Qué es la programación orientada a objetos?

Empecemos viendo una definición simple, ya iremos complicando las cosas. Todo a su debido tiempo.

La programación orientada a objetos (abreviado como POO en español u OOP (Object Oriented Programming) en inglés) trata de acercar al mundo de la programación los objetos del mundo real. Es decir, se trata de poder emular objetos en programación como los que tenemos en el mundo real. Un ejemplo que me gusta dar, es el de los videojuegos, los cuales están llenos de objetos.

Los personajes son objetos, cada uno con sus propias características y también con características comunes. Por ejemplo, imagina los ciudadanos en un juego de mundo abierto.

Todos estos personajes son de tipo persona, en eso son todos iguales. Luego tendremos variaciones entre ellos, como la ropa que visten, el color del pelo y su peinado, estatura y tantas cosas más como queramos precisar.

Pues bien, para emular cualquier objeto de la vida real en un programa, un sitio web o un videojuego, la mejor manera es la programación orientada a objetos.

¿Qué es la encapsulación?

El hecho de almacenar propiedades con valores y métodos "encerrados" en un objeto se llama encapsular.

¿Qué son las clases?

Explicado de la forma más simple que se me ocurre, las clases son creadores de objetos. En una clase se definen una serie de propiedades y métodos, tal y como ocurre con los objetos literales. La gran diferencia es que podemos crear tantos objetos como queramos a partir de las clases.
Por ponerte un ejemplo, el objeto literal del usuario de los capítulos anteriores, si fuese una clase, podríamos ir creando objetos de tipo usuario, cada uno con su nombre, su edad, idiomas, etc. Así podríamos tener usuarios creados desde una clase.

let usuario = {
nombre_completo: ['Enrique', 'Barros', 'Fernández'],
edad: 30,
telefono: '0467489304',
pais_residencia: 'Australia',
idiomas: ['Español', 'Catalán', 'Inglés', 'Portugués', 'Italiano'],
};

¿Qué es la abstracción?

En el caso de describir un objeto, tenemos un montón de propiedades posibles. ¿Cuántas propiedades describirían completamente la forma de ser, habilidades, datos y más cosas sobre una persona?

  • Nombre
  • Apellidos
  • Edad
  • Teléfono
  • Dirección
  • Estudios
  • Altura
  • Color del pelo
  • Color de los ojos
  • Peso
  • Y un largo montón más de propiedades...

La pregunta que deberás hacerte a la hora de crear una clase que cree objetos, es ¿Necesita esta clase todas estas propiedades?

Si se trata de un formulario de registro de usuarios en una web de compra online, quizás necesites estas propiedades:

  • Nombre
  • Apellidos
  • Edad
  • Teléfono
  • Dirección
  • Contraseña
  • Forma de pago

¿Necesitaríamos en este caso el color de los ojos del usuario? La respuesta es efectivamente que no, para comprar por internet, no es algo relevante (a no ser que vendas perfiles para publicidad, aunque esto ya es otro tema).

De esto trata la abstracción. Creamos un modelo sencillo de objetos complejos del mundo real representando en código solo lo necesario. De esta forma, es todo mucho más fácil de manejar.

¿Qué es la instanciación?

El hecho de crear un objeto a partir de una clase se conoce como instanciación.

¿Qué es la herencia de clases?

Supongamos ahora que tenemos una clase llamada vehículos. Esta clase define propiedades comunes para cualquier vehículo:

  • Tipo : vehículo
  • Número de ruedas: 4
  • Método acelerar : El vehículo acelera
  • Método frenar : El vehículo frena

¿Y si quisiéramos dos tipos de vehículos? Por ejemplo, vehículos de gama baja y deportivos de gama alta.

Aquí es donde entrará la herencia en juego. Podremos crear dos clases que hereden todo lo de la clase vehículo para no repetir esas propiedades y métodos que son comunes para ambos tipos de vehículo.

Después, cada clase, tanto vehículos de gama baja como los de gama alta, tendrán más o menos velocidad al acelerar, unos llevarán alerones y los otros no. Unos tendrán neumáticos diferentes a los otros...

Pero igualmente, ambas objetos creados de esas clases tendrán 4 ruedas, acelerarán y frenarán.

Después de esta teoría, pasemos en el siguiente capítulo a ver como puedes crear los primeros constructores de objetos. Así, podrás empezar a entender de forma tangible toda esta información.


Comentarios

Si te quedan dudas sobre el temario, sobre JavaScript o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.

Twitter

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.