Menu
Coddy logo textTech

La relación "es-un"

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

La relación "es-un" es una prueba sencilla para determinar cuándo tiene sentido la herencia. Si puedes decir "X es un Y" y suena correcto, entonces X probablemente debería heredar de Y.

Correcto (Usar herencia):

  • "Un Perro es un Animal" → class Dog extends Animal
  • "Un Coche es un Vehículo" → class Car extends Vehicle
  • "Un Textbook es un Book" → class Textbook extends Book

Incorrecto (No uses la herencia):

  • "Un Driver es un Car" → No, un driver usa un car
  • "Una rueda es un coche" → No, una rueda es parte de un coche
  • "Un Estudiante es un Aula" → No, un estudiante está en un aula

Por ejemplo, consideremos dos objetos:

// Clase base - lo que todos SON
class Book {
  constructor(title, author, pages) {
    this.title = title;
    this.author = author;
    this.pages = pages;
  }
  
  read() {
    console.log(`Reading ${this.title} by ${this.author}`);
  }
}
// Una novela ES-UN libro (herencia correcta)
class Novel extends Book {
  constructor(title, author, pages, genre) {
    super(title, author, pages);
    this.genre = genre;
  }
}
// Usando las clases
const fiction = new Novel("1984", "George Orwell", 328, "Dystopian");
fiction.read();    // "Reading 1984 by George Orwell" - heredado de Book
challenge icon

Desafío

Se te proporciona una clase ElectronicDevice y una clase Smartphone. Un Smartphone es un tipo de ElectronicDevice con características adicionales. Tu tarea es crear un objeto `myPhone` con la marca "Samsung" y el modelo “Galaxy S23”.

Hoja de referencia

La relación "es-un" es una prueba para determinar cuándo tiene sentido la herencia. Si puedes decir "X es un Y" y suena correcto, entonces X debería heredar de Y.

Ejemplos correctos (usar herencia):

  • "Un Perro es un Animal" → class Dog extends Animal
  • "Un Coche es un Vehículo" → class Car extends Vehicle
  • "Un Libro de texto es un Libro" → class Textbook extends Book

Ejemplos incorrectos (no usar herencia):

  • "Un Conductor es un Coche" → No, un conductor usa un coche
  • "Una Rueda es un Coche" → No, una rueda es parte de un coche
  • "Un Estudiante es un Aula" → No, un estudiante está en un aula

Ejemplo:

// Clase base
class Book {
  constructor(title, author, pages) {
    this.title = title;
    this.author = author;
    this.pages = pages;
  }
  
  read() {
    console.log(`Reading ${this.title} by ${this.author}`);
  }
}

// Una Novela ES-UN Libro (herencia correcta)
class Novel extends Book {
  constructor(title, author, pages, genre) {
    super(title, author, pages);
    this.genre = genre;
  }
}

const fiction = new Novel("1984", "George Orwell", 328, "Dystopian");
fiction.read();    // "Reading 1984 by George Orwell" - heredado de Book

Pruébalo tú mismo

import { ElectronicDevice } from './electronicDevice.js';
import { Smartphone } from './smartphone.js';


// TODO: Crea un objeto `myPhone` con la marca "Samsung" y el modelo “Galaxy S23”.


// Código de prueba - no modificar
console.log(myPhone.turnOn());  // Debería mostrar "Samsung Galaxy S23 is now ON"
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