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
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:
- Crea una propiedad
processorutilizando la claseProcessor - Crea una propiedad
memoryutilizando la claseMemory - 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();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
1Objetos y la palabra clave this
Repaso rápido: ObjetosAgregar métodos a los objetosEntendiendo la palabra clave thisFunciones constructorasLa palabra clave newDesafío de repaso7Herencia y la palabra clave extends
HerenciaLa relación "es-un"La palabra clave extendsEl método super()Heredar propiedades y métodosDesafío de repaso13Composición vs. Herencia
La relación "tiene-un" vs. "es-un"Los límites de la herencia profundaConstrucción de objetos2Organización del código
¿Qué son los módulos?Exportar con exportImportar con importExportaciones por defecto vs. nombradas5Encapsulamiento y Acceso
EncapsulamientoCampos de clase públicos y privadosMétodos privadosDesafío de repaso8Organización del código OOP
Organizar clases en módulos11Proyecto: Un renderizador de figuras
Configuración: Clase Figura y exportaciónHerencia de la clase Círculo14Sistema de Gestión de Biblioteca
Diseño de la BibliotecaClase Libro con Composición9Métodos y propiedades estáticos
Nivel de clase vs. Nivel de instanciaPropiedades estáticasMétodos de utilidad estáticosDesafío de repaso