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
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"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