Organizar clases en módulos
Parte de la sección Programación Orientada a Objetos del Journey de JavaScript de Coddy — lección 30 de 56.
Cuando tu proyecto crece, tener todas las clases en un solo archivo se vuelve desordenado. Imagina 10 clases en un solo archivo: se vuelve difícil encontrar y mantener el código.
Ya aprendimos cómo organizar el código con módulos: exportando e importando funciones y variables. ¡Con las clases, es la misma lógica y sintaxis! Puedes exportar clases desde un archivo e importarlas en otro, tal como lo hicimos con las funciones.
Practiquemos la organización de clases en módulos para mantener nuestro código limpio y manejable.
Por ejemplo:

Cómo funciona:
Archivo 1: furniture-base.js (Exportar la clase base)
export class Furniture {
constructor(material) {
this.material = material;
}
describe() {
return `${this.material} furniture`;
}
}Archivo 2: chair.js (Importar y extender)
import { Furniture } from './furniture-base.js';
export class Chair extends Furniture {
constructor(material, legs) {
super(material);
this.legs = legs;
}
sit() {
return "Sitting comfortably";
}
}Archivo 3: main.js (Usa todo junto)
import { Chair } from './chair.js';
import { Table } from './table.js';
const myChair = new Chair("wood", 4);
const myTable = new Table("glass", "round");
console.log(myChair.describe()); // "wood furniture"
console.log(myTable.describe()); // "glass furniture"Desafío
Tienes un sistema de tienda de electrónica organizado en módulos. Las clases Laptop y Smartphone se crean en archivos separados pero deben estar disponibles para otros archivos.
Tu tarea:
- Exporta las clases (usa exportaciones con nombre - no por defecto):
- En
laptop.js: Agregaexportpara que la claseLaptopesté disponible - En
smartphone.js: Agregaexportpara que la claseSmartphoneesté disponible
- En
- Importa las clases en
main.js:- Importa la clase
Laptopdesdelaptop.js - Importa la clase
Smartphonedesdesmartphone.js
- Importa la clase
Hoja de referencia
Las clases se pueden exportar e importar entre módulos utilizando la misma sintaxis que las funciones y las variables.
Exportar una clase:
export class Furniture {
constructor(material) {
this.material = material;
}
describe() {
return `${this.material} furniture`;
}
}Importar y extender una clase:
import { Furniture } from './furniture-base.js';
export class Chair extends Furniture {
constructor(material, legs) {
super(material);
this.legs = legs;
}
sit() {
return "Sitting comfortably";
}
}Importar múltiples clases:
import { Chair } from './chair.js';
import { Table } from './table.js';
const myChair = new Chair("wood", 4);
const myTable = new Table("glass", "round");Pruébalo tú mismo
// TODO: Importar la clase Laptop desde laptop.js
// TODO: Importar la clase Smartphone desde smartphone.js
const myLaptop = new Laptop();
const myPhone = new Smartphone();
console.log(myLaptop.type); // Salida: "laptop"
console.log(myPhone.type); // Salida: "smartphone"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