JavaScript es un lenguaje de programación versátil que soporta múltiples paradigmas, incluyendo la programación orientada a objetos (POO). Aunque tradicionalmente se ha considerado un lenguaje orientado a prototipos, la introducción de la sintaxis de clases en ECMAScript 6 (ES6) ha hecho que la POO sea más accesible y estructurada para los desarrolladores. En este post, exploraremos los conceptos básicos de la POO en JavaScript y cómo aplicarlos en tus proyectos.

Desarrollo del tema

Clases y Objetos

En ES6, las clases se introdujeron como una forma más clara y concisa de crear objetos y manejar herencia.

class Persona {
  constructor(nombre, edad) {
    this.nombre = nombre;
    this.edad = edad;
  }

  saludar() {
    console.log(`Hola, mi nombre es ${this.nombre} y tengo ${this.edad} años.`);
  }
}

const juan = new Persona('Juan', 30);
juan.saludar();

Herencia

La herencia permite crear nuevas clases basadas en clases existentes. En JavaScript, esto se hace con la palabra clave extends.

class Estudiante extends Persona {
  constructor(nombre, edad, carrera) {
    super(nombre, edad);
    this.carrera = carrera;
  }

  estudiar() {
    console.log(`${this.nombre} está estudiando ${this.carrera}.`);
  }
}

const ana = new Estudiante('Ana', 22, 'Ingeniería');
ana.saludar();
ana.estudiar();

Encapsulación

La encapsulación se refiere a restringir el acceso a ciertos detalles de un objeto. En JavaScript, esto se puede lograr utilizando propiedades y métodos privados.

class CuentaBancaria {
  #saldo = 0;

  depositar(cantidad) {
    if (cantidad > 0) {
      this.#saldo += cantidad;
    }
  }

  obtenerSaldo() {
    return this.#saldo;
  }
}

const cuenta = new CuentaBancaria();
cuenta.depositar(100);
console.log(cuenta.obtenerSaldo()); // 100
console.log(cuenta.#saldo); // Error: propiedad privada

Polimorfismo

El polimorfismo permite a los métodos de diferentes clases usar el mismo nombre pero comportarse de manera diferente. En JavaScript, esto se logra con métodos sobrescritos.

class Animal {
  hacerSonido() {
    console.log('Sonido de animal');
  }
}

class Perro extends Animal {
  hacerSonido() {
    console.log('Ladrido');
  }
}

const animal = new Animal();
const perro = new Perro();
animal.hacerSonido(); // Sonido de animal
perro.hacerSonido(); // Ladrido

Conclusión

La programación orientada a objetos en JavaScript proporciona una manera estructurada y eficiente de organizar el código, haciendo que sea más fácil de mantener y reutilizar. Al dominar los conceptos de clases, herencia, encapsulación y polimorfismo, puedes crear aplicaciones más robustas y escalables. Integrar estos principios en tus proyectos de JavaScript te permitirá aprovechar al máximo el poder del lenguaje.