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 probablemente X debería heredar de Y.
Correcto (usa herencia):
- «Un perro es un animal» →
class Dog extends Animal
- "Un automóvil es un vehículo" →
class Car extends Vehicle
- "Un libro de texto es un libro" →
class Textbook extends Book
Incorrecto (No uses herencia):
- «Un conductor es un automóvil» → No, un conductor usa un automóvil
- «Una rueda es un coche» → No, una rueda forma 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}`);
}
}
// Un Novel ES UN Book (herencia correcta)
class Novel extends Book {
constructor(title, author, pages, genre) {
super(title, author, pages);
this.genre = genre;
}
}
// Uso de 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 proporcionan una clase ElectronicDevice y una clase Smartphone. Un Smartphone es un tipo de ElectronicDevice con funciones adicionales. Tu tarea es crear un objeto `myPhone` con la marca "Samsung" y el modelo “Galaxy S23”.
Pruébalo tú mismo
import { ElectronicDevice } from './electronicDevice.js';
import { Smartphone } from './smartphone.js';
// TODO: Crea un objeto `myPhone` de marca "Samsung" y modelo “Galaxy S23”.
// Código de prueba - no lo modifiques
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írculoSobrescritura y método de áreaContador de figuras estático14Sistema de Gestión de Biblioteca
Diseño de la BibliotecaClase Libro con ComposiciónValidación del Autor del Libro9Métodos y propiedades estáticos
Nivel de clase vs. Nivel de instanciaPropiedades estáticasMétodos de utilidad estáticosDesafío de repasoPractica por tu cuenta: Compilador de JavaScript online