Chuck's Academy

JavaScript Básico

Programación Orientada a Objetos en JavaScript

La Programación Orientada a Objetos (POO) es un paradigma de programación que se basa en la idea de organizar el código en objetos. JavaScript soporta este paradigma y permite la creación de objetos y clases, junto con características como herencia y encapsulación. En este capítulo, aprenderás los conceptos básicos de la POO y cómo implementarlos en JavaScript.

Clases y Objetos

Una clase es un plano o plantilla a partir del cual se crean objetos. Un objeto es una instancia de una clase, con sus propias propiedades y métodos.

Definir una Clase

En JavaScript, puedes definir una clase utilizando la palabra clave class. Aquí tienes un ejemplo de una clase llamada Person:

javascript
"Aquí definimos una clase llamada Person que tiene un constructor para inicializar el nombre y la edad. La clase también tiene un método llamado greet que imprime un saludo con el nombre de la persona. Creamos un objeto llamado john basado en la clase Person y llamamos a su método greet."

Propiedades y Métodos

Las propiedades son variables que pertenecen a un objeto y los métodos son funciones que pertenecen a un objeto. En el ejemplo anterior, name y age son propiedades, y greet es un método.

Clases como Plantillas para Objetos

Cada vez que creas una instancia de una clase utilizando la palabra clave new, estás creando un objeto basado en esa clase. Cada objeto puede tener sus propios valores para las propiedades.

javascript
"Aquí creamos un nuevo objeto llamado alice basado en la clase Person. El valor de la propiedad name para alice es Alice, que es diferente al valor de la propiedad name del objeto john, aunque ambos objetos están basados en la misma clase."

Encapsulación

La encapsulación es el concepto de restringir el acceso directo a algunas de las propiedades y métodos de un objeto para proteger los datos. En JavaScript, las propiedades pueden considerarse públicas o privadas. Aunque JavaScript no tiene modificadores de acceso como otros lenguajes, es posible simular encapsulación utilizando guiones bajos para indicar que una propiedad es privada, o utilizando funciones getter y setter.

javascript
"En este ejemplo, la propiedad brand está encapsulada utilizando un guion bajo para indicar que es privada. Utilizamos métodos getter y setter para acceder y modificar esta propiedad de manera controlada."

Herencia

La herencia es un principio clave en la POO que permite a una clase heredar propiedades y métodos de otra clase. En JavaScript, puedes utilizar la palabra clave extends para crear una clase que hereda de otra.

javascript
"Aquí creamos una clase Animal que tiene una propiedad name y un método speak. Luego, creamos una clase Dog que extiende de Animal y sobrescribe el método speak para imprimir que el perro ladra. Creamos un objeto dog basado en la clase Dog y llamamos a su método speak."

En este ejemplo, Dog hereda la propiedad name de Animal, pero sobrescribe el método speak para proporcionar una implementación específica para los perros.

Polimorfismo

El polimorfismo permite que los métodos de diferentes clases se llamen de la misma manera, aunque el comportamiento sea diferente según la clase. Como vimos en el ejemplo de herencia, la clase Dog sobrescribe el método speak de la clase Animal, mostrando un comportamiento diferente.

javascript
"Aquí añadimos una clase Cat que también extiende de Animal, pero sobrescribe el método speak para que el gato maúlle. Creamos un objeto cat basado en la clase Cat y llamamos a su método speak."

Este es un ejemplo de polimorfismo, donde tanto Dog como Cat tienen un método speak, pero cada clase lo implementa de manera diferente.

Abstracción

La abstracción es el concepto de ocultar los detalles complejos de un sistema y exponer solo lo necesario. En JavaScript, la abstracción se logra diseñando clases y métodos con interfaces claras, mientras que los detalles internos están encapsulados. No existe una forma directa de definir clases abstractas en JavaScript, pero puedes usar clases base para establecer interfaces.

javascript
"Aquí creamos una clase Vehicle con un método start que lanza un error si no es implementado. Luego, creamos una clase Bike que extiende de Vehicle y proporciona una implementación para el método start. Creamos un objeto myBike basado en la clase Bike y llamamos a su método start."

En este ejemplo, la clase Vehicle actúa como una clase base abstracta que define una interfaz para sus subclases.

Conclusión

La Programación Orientada a Objetos en JavaScript proporciona una forma poderosa y estructurada de organizar y gestionar el código. En este capítulo, has aprendido sobre clases, objetos, encapsulación, herencia, polimorfismo y abstracción. Estas técnicas te permitirán escribir código más modular y reutilizable.


Pregúntame lo que sea