Programación orientada a objetos

Clases, herencia y métodos.

JavaScript es un lenguaje de programación que utiliza prototipos para la herencia, pero con la introducción de ES6, se añadió una sintaxis más familiar para aquellos que provienen de lenguajes basados en clases como Java o C#. Este capítulo explora cómo JavaScript maneja las clases, la herencia y los métodos, permitiendo una estructura más organizada y modular de código en proyectos grandes.

Introducción a las Clases en JavaScript

Una clase en JavaScript es una «plantilla» para crear objetos. Define un tipo de objeto mediante la agrupación de propiedades y métodos. Es importante notar que las clases en JavaScript son una abstracción sobre la herencia prototípica y no introducen un nuevo modelo de herencia.

1. Definición de una Clase:

– Las clases se definen con la palabra clave class, seguida por el nombre de la clase

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

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

– El método constructor es un método especial para crear e inicializar un objeto creado a partir de una clase.

2. Creación de Instancias de Clase:

– Una vez definida la clase, puedes crear instancias utilizando la palabra clave new

				
					let alice = new Persona('Alice', 30);
alice.presentarse();  // Hola, mi nombre es Alice y tengo 30 años.

				
			

Herencia en JavaScript

La herencia permite que una clase herede propiedades y métodos de otra. JavaScript implementa la herencia a través de la palabra clave extends.

1. Extendiendo una Clase:

– Para crear una subclase, utiliza la palabra clave extends. Las subclases heredan todas las propiedades y métodos de la clase base.

				
					class Empleado extends Persona {
  constructor(nombre, edad, puesto) {
    super(nombre, edad);  // Llama al constructor de la clase Persona
    this.puesto = puesto;
  }

  describirTrabajo() {
    console.log(`Trabajo como ${this.puesto}.`);
  }
}
				
			

– El método super es usado para llamar funciones del padre de la clase.

2. Uso de la Herencia:

– Las instancias de la subclase pueden usar métodos tanto de la clase base como de la subclase

				
					let bob = new Empleado('Bob', 25, 'Desarrollador de Software');
bob.presentarse();  // Hola, mi nombre es Bob y tengo 25 años.
bob.describirTrabajo();  // Trabajo como Desarrollador de Software.
				
			

Métodos de Clase

Los métodos son funciones asociadas con una clase.

1. Métodos Estáticos:

– JavaScript permite definir métodos estáticos que son llamados en la clase misma, no en las instancias de la clase.

				
					class Utilidades {
  static numeroAleatorio() {
    return Math.floor(Math.random() * 100);
  }
}

console.log(Utilidades.numeroAleatorio());  // Devuelve un número aleatorio

				
			

2. Métodos de Instancia:

– Los métodos que no son estáticos se llaman métodos de instancia y están disponibles en las instancias de la clase.

				
					class Animal {
  constructor(nombre) {
    this.nombre = nombre;
  }

  hacerSonido() {
    console.log('Algun sonido...');
  }
}