Saltar al contenido principal

Ejercicios de Programación Orientada a Objetos en JavaScript

En este documento encontrarás una serie de ejercicios prácticos diseñados para reforzar los conceptos de programación orientada a objetos (POO) en JavaScript.

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

La programación es la actividad de construir un conjunto de instrucciones que permiten interactuar con un computador. A lo largo del tiempo han surgido diferentes paradigmas de programación, es decir, distintas formas de organizar y pensar el código.
La programación orientada a objetos (POO) es uno de esos paradigmas, y se basa en el concepto de objetos.

Un objeto es una estructura que agrupa datos (atributos) y comportamientos (métodos). La idea principal de la POO es modelar conceptos del mundo real dentro de un programa, lo que facilita la comprensión, modularidad y reutilización del código.

POO en JavaScript

Ejercicios prácticos

A continuación, encontrarás ejercicios para aplicar los conceptos de clases, herencia y polimorfismo en JavaScript.


Ejercicio 1: Clase Coche

Crea una clase Coche con propiedades marca, modelo y año.
Agrega métodos para:

  • Mostrar la información del coche.
  • Determinar si es antiguo (antes del año 2000).
  • Verificar si es de lujo (ejemplo: "Mercedes", "BMW", "Audi").
Ver solución
class Coche {
constructor(marca, modelo, año) {
this.marca = marca;
this.modelo = modelo;
this.año = año;
}

mostrarInfo() {
console.log(`${this.marca} ${this.modelo} (${this.año})`);
}

esAntiguo() {
return this.año < 2000;
}

esDeLujo() {
const marcasLujo = ["Mercedes", "BMW", "Audi"];
return marcasLujo.includes(this.marca);
}
}

const coche1 = new Coche("BMW", "X5", 1998);
coche1.mostrarInfo();
console.log(coche1.esAntiguo());
console.log(coche1.esDeLujo());

Ejercicio 2: Clase Rectángulo

Crea una clase Rectángulo con propiedades ancho y alto.
Agrega métodos para:

  • Calcular el área.
  • Calcular el perímetro.
  • Verificar si es un cuadrado.
Ver solución
class Rectangulo {
constructor(ancho, alto) {
this.ancho = ancho;
this.alto = alto;
}

area() {
return this.ancho * this.alto;
}

perimetro() {
return 2 * (this.ancho + this.alto);
}

esCuadrado() {
return this.ancho === this.alto;
}
}

const r1 = new Rectangulo(5, 5);
console.log(r1.area());
console.log(r1.perimetro());
console.log(r1.esCuadrado());

Ejercicio 3: Clase Persona con métodos adicionales

Crea una clase Persona con propiedades nombre, edad y profesión.
Incluye métodos para:

  • Presentarse mostrando todos sus datos.
  • Verificar si es mayor de edad.
Ver solución
class Persona {
constructor(nombre, edad, profesion) {
this.nombre = nombre;
this.edad = edad;
this.profesion = profesion;
}

presentarse() {
console.log(`Soy ${this.nombre}, tengo ${this.edad} años y soy ${this.profesion}.`);
}

esMayorDeEdad() {
return this.edad >= 18;
}
}

const p1 = new Persona("Ana", 22, "Ingeniera");
p1.presentarse();
console.log(p1.esMayorDeEdad());

Ejercicio 4: Herencia con Animal

Crea una clase base Animal con un método hacerSonido().
Luego, crea clases hijas Perro y Gato que sobrescriban ese método con sonidos distintos.

Ver solución
class Animal {
hacerSonido() {
console.log("Sonido genérico de animal");
}
}

class Perro extends Animal {
hacerSonido() {
console.log("Guau Guau");
}
}

class Gato extends Animal {
hacerSonido() {
console.log("Miau");
}
}

const perro = new Perro();
const gato = new Gato();
perro.hacerSonido();
gato.hacerSonido();

Ejercicio 5: Clase CuentaBancaria

Crea una clase CuentaBancaria con propiedades titular y saldo.
Agrega métodos para:

  • Depositar dinero.
  • Retirar dinero (validando que haya fondos).
  • Mostrar el saldo actual.
Ver solución
class CuentaBancaria {
constructor(titular, saldo = 0) {
this.titular = titular;
this.saldo = saldo;
}

depositar(monto) {
this.saldo += monto;
}

retirar(monto) {
if (monto <= this.saldo) {
this.saldo -= monto;
} else {
console.log("Fondos insuficientes");
}
}

mostrarSaldo() {
console.log(`Saldo de ${this.titular}: $${this.saldo}`);
}
}

const cuenta = new CuentaBancaria("Luis", 100);
cuenta.depositar(50);
cuenta.retirar(30);
cuenta.mostrarSaldo();

Ejercicio 6: Clase Triángulo

Crea una clase Triángulo que reciba tres lados.
Agrega métodos para:

  • Verificar si es equilátero, isósceles o escaleno.
  • Calcular su perímetro.
Ver solución
class Triangulo {
constructor(lado1, lado2, lado3) {
this.lado1 = lado1;
this.lado2 = lado2;
this.lado3 = lado3;
}

tipo() {
if (this.lado1 === this.lado2 && this.lado2 === this.lado3) {
return "Equilátero";
} else if (this.lado1 === this.lado2 || this.lado2 === this.lado3 || this.lado1 === this.lado3) {
return "Isósceles";
} else {
return "Escaleno";
}
}

perimetro() {
return this.lado1 + this.lado2 + this.lado3;
}
}

const t1 = new Triangulo(3, 3, 3);
console.log(t1.tipo());
console.log(t1.perimetro());

Ejercicio 7: Polimorfismo con Vehículo

Crea una clase base Vehículo con un método mover().
Crea clases hijas Bicicleta, Coche y Avión que sobrescriban el método mover() con mensajes diferentes.

Ver solución
class Vehiculo {
mover() {
console.log("El vehículo se está moviendo.");
}
}

class Bicicleta extends Vehiculo {
mover() {
console.log("La bicicleta avanza con pedales.");
}
}

class Coche extends Vehiculo {
mover() {
console.log("El coche rueda por la carretera.");
}
}

class Avion extends Vehiculo {
mover() {
console.log("El avión vuela por los cielos.");
}
}

const bici = new Bicicleta();
const coche = new Coche();
const avion = new Avion();

bici.mover();
coche.mover();
avion.mover();

Ejercicio 8: Clase Producto

Crea una clase Producto con propiedades nombre y precio.
Agrega un método para mostrar su información.
Luego, crea una clase hija ProductoElectronico que además tenga una garantía y muestre todos los datos incluyendo la garantía.

Ver solución
class Producto {
constructor(nombre, precio) {
this.nombre = nombre;
this.precio = precio;
}

mostrarInfo() {
console.log(`${this.nombre} cuesta $${this.precio}`);
}
}

class ProductoElectronico extends Producto {
constructor(nombre, precio, garantia) {
super(nombre, precio);
this.garantia = garantia;
}

mostrarInfo() {
console.log(`${this.nombre} cuesta $${this.precio} y tiene ${this.garantia} años de garantía.`);
}
}

const laptop = new ProductoElectronico("Laptop", 1500, 2);
laptop.mostrarInfo();

Ejercicio 9: Clase Libro

Crea una clase Libro con propiedades título, autor y año.
Agrega métodos para:

  • Mostrar la información del libro.
  • Verificar si es un libro antiguo (antes de 1950).
Ver solución
class Libro {
constructor(titulo, autor, año) {
this.titulo = titulo;
this.autor = autor;
this.año = año;
}

mostrarInfo() {
console.log(`${this.titulo} por ${this.autor}, publicado en ${this.año}`);
}

esAntiguo() {
return this.año < 1950;
}
}

const libro1 = new Libro("Cien años de soledad", "Gabriel García Márquez", 1967);
libro1.mostrarInfo();
console.log(libro1.esAntiguo());

Ejercicio 10: Sistema de Figuras

Crea una clase base Figura con un método calcularArea().
Crea clases hijas Círculo, Cuadrado y Rectángulo que implementen el método de forma distinta según su fórmula matemática.

Ver solución
class Figura {
calcularArea() {
return 0;
}
}

class Circulo extends Figura {
constructor(radio) {
super();
this.radio = radio;
}

calcularArea() {
return Math.PI * this.radio * this.radio;
}
}

class Cuadrado extends Figura {
constructor(lado) {
super();
this.lado = lado;
}

calcularArea() {
return this.lado * this.lado;
}
}

class Rectangulo extends Figura {
constructor(ancho, alto) {
super();
this.ancho = ancho;
this.alto = alto;
}

calcularArea() {
return this.ancho * this.alto;
}
}

const c = new Circulo(5);
const cu = new Cuadrado(4);
const r = new Rectangulo(3, 6);

console.log(c.calcularArea());
console.log(cu.calcularArea());
console.log(r.calcularArea());