Menu
Coddy logo textTech

La relación "tiene-un" vs. "es-un"

Parte de la sección Programación Orientada a Objetos del Journey de JavaScript de Coddy — lección 47 de 56.

En la programación orientada a objetos, existen dos tipos principales de relaciones entre objetos: "tiene-un" (composición) y "es-un" (herencia). Mientras que la herencia crea jerarquías de padre-hijo, la composición construye objetos combinando componentes más pequeños y enfocados.

Primero entendamos la relación "es-un" a través de la herencia:

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  eat() {
    console.log(`${this.name} is eating.`);
  }
}

// Dog "es-un" Animal - relación de herencia
class Dog extends Animal {
  bark() {
    console.log(`${this.name} says woof!`);
  }
}

Ahora veamos la relación "tiene-un" (has-a) a través de la composición:

class Engine {
  start() {
    console.log("Engine started");
  }
}

// Car "has-a" Engine - composition relationship
class Car {
  constructor() {
    this.engine = new Engine(); // Composición
  }
  
  startCar() {
    this.engine.start();
    console.log("Car is running");
  }
}

La diferencia clave:

  • "is-a" (herencia): Un Perro ES UN Animal
  • "has-a" (composición): Un Coche TIENE UN Motor
challenge icon

Desafío

Se te proporcionan las clases de componentes (Processor, Memory) y la mayor parte de la clase Computer. Tu tarea es completar el constructor en el archivo computer.js:

  1. Crea una propiedad processor utilizando la clase Processor
  2. Crea una propiedad memory utilizando la clase Memory
  3. Pasa processorSpeed al constructor de Processor y memorySize al constructor de Memory

Hoja de referencia

En la programación orientada a objetos, existen dos tipos principales de relaciones entre objetos:

  • Relación "es-un" (herencia): Crea jerarquías de padre-hijo donde una subclase extiende a una clase padre.
  • Relación "tiene-un" (composición): Construye objetos combinando componentes más pequeños y especializados.

Ejemplo de herencia ("es-un"):

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  eat() {
    console.log(`${this.name} is eating.`);
  }
}

// Dog "is-a" Animal
class Dog extends Animal {
  bark() {
    console.log(`${this.name} says woof!`);
  }
}

Ejemplo de composición ("tiene-un"):

class Engine {
  start() {
    console.log("Engine started");
  }
}

// Car "has-a" Engine
class Car {
  constructor() {
    this.engine = new Engine(); // Composition
  }
  
  startCar() {
    this.engine.start();
    console.log("Car is running");
  }
}

Pruébalo tú mismo

import { Computer } from './computer.js';

const myComputer = new Computer(3.5, 16);
myComputer.start();
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos