concepto · fundamentos · 6 min de lectura
Clase
Una clase define la estructura y el comportamiento común que usarán sus objetos, separando el plano compartido de los datos particulares de cada instancia.
No requiere conocimientos previos.
Alcance en breve
Cubre
- class definitions as reusable object blueprints
- instances, fields, methods, and constructors at a conceptual level
- the difference between shared behavior and per-object state
No cubre
- deep inheritance hierarchies and polymorphism
- design patterns built from classes
- framework-specific component classes
Supone
- The reader has basic programming literacy and has seen variables and functions before.
Resumen
Una clase es una definición reutilizable para crear objetos. Describe qué datos puede tener cada objeto, qué operaciones puede ejecutar y cómo se inicializa una nueva instancia. La clase no es el objeto en sí: es el plano que permite construir muchos objetos con la misma forma general.
Importa porque ayuda a organizar código alrededor de conceptos del dominio. En vez de pasar datos sueltos entre funciones, una clase puede agrupar el estado que pertenece a una entidad y las operaciones que mantienen coherente ese estado.
Alcance y supuestos
Este paquete cubre la idea de clase como concepto básico de programación orientada a objetos: definición, instancia, campos, métodos y constructor. Usa TypeScript como ejemplo porque su sintaxis hace visible la forma de la clase, pero el modelo mental aplica a lenguajes como Java, C#, Kotlin, Python o JavaScript moderno con matices propios.
No cubre jerarquías profundas de herencia, polimorfismo, interfaces, clases abstractas, patrones de diseño ni componentes de frameworks. Tampoco asume que toda solución deba usar clases: muchas veces una función y una estructura de datos simple alcanzan.
Modelo mental
Piensa en una receta de cocina y las pizzas que salen de esa receta. La receta dice qué ingredientes se necesitan y qué pasos seguir; cada pizza concreta puede tener su propio tamaño, temperatura o cantidad de queso. La clase es la receta. Cada objeto creado desde esa clase es una pizza concreta.
La receta no se come, pero permite producir muchas pizzas similares. Del mismo modo, una clase no representa un usuario, una factura o un carrito específico: representa la forma que tendrán esos objetos y las acciones disponibles sobre ellos.
Esa separación evita mezclar dos preguntas distintas: "¿qué puede hacer este tipo de objeto?" y "¿qué valores tiene este objeto ahora?". La clase responde la primera con métodos y reglas compartidas. La instancia responde la segunda con su estado particular.
Uso práctico
Usa una clase cuando un concepto tiene identidad, estado propio y reglas que conviene mantener cerca de ese estado:
- ✅
Cartpuede guardar ítems y exponeraddItem,removeItemytotalpara proteger las reglas del carrito. - ✅
Moneypuede evitar mezclar montos con monedas distintas si sus métodos validan la moneda antes de operar. - ❌ Una clase
Utilscon funciones sueltas no modela una entidad; suele esconder un módulo de funciones estáticas. - ❌ Una clase
UserDataque solo contiene campos públicos, sin reglas ni comportamiento, puede ser una estructura de datos simple.
Ejemplo trabajado: modelar un carrito con reglas propias
Supón que una tienda necesita calcular el total de un carrito y evitar cantidades inválidas. Si el código usa arrays sueltos, cualquier parte de la aplicación puede agregar una cantidad negativa y romper el total. Una clase permite centralizar esa regla donde vive el estado.
type CartItem = {
name: string;
unitPrice: number;
quantity: number;
};
class Cart {
private items: CartItem[] = [];
addItem(name: string, unitPrice: number, quantity: number) {
if (quantity <= 0) {
throw new Error("Quantity must be positive");
}
this.items.push({ name, unitPrice, quantity });
}
total() {
return this.items.reduce((sum, item) => {
return sum + item.unitPrice * item.quantity;
}, 0);
}
}
La clase Cart define la forma y las reglas del carrito. items guarda el estado interno de cada instancia. addItem protege la regla de cantidad positiva. total calcula un resultado a partir del estado actual.
const cart = new Cart();
cart.addItem("Notebook", 1200, 1);
cart.addItem("Mouse", 25, 2);
console.log(cart.total()); // 1250
cart es una instancia: tiene sus propios ítems y su propio total. Si creas const secondCart = new Cart(), ese segundo carrito comparte los mismos métodos definidos por la clase, pero no comparte el array items con el primero.
La frontera importante es esta: pon dentro de la clase las reglas que protegen el estado del objeto. No pongas dentro de la clase todo lo que exista alrededor del objeto. Por ejemplo, enviar un email de confirmación cuando se compra el carrito probablemente pertenece a un servicio o caso de uso, no al carrito mismo.
Un chequeo rápido antes de crear una clase:
- ¿Hay estado que debe permanecer consistente entre operaciones?
- ¿Hay reglas que siempre deben cumplirse al modificar ese estado?
- ¿Tiene sentido crear más de una instancia independiente?
- ¿El nombre representa un concepto del dominio y no solo una carpeta para funciones?
Si las respuestas son sí, una clase puede hacer el código más explícito. Si no, una función, un tipo o un módulo pueden ser más simples.
Evidencia
- Oracle Java Tutorials, What Is a Class? presenta la clase como el plano desde el cual se crean objetos individuales y distingue estado, métodos e instancias.
- MDN Web Docs, JavaScript Classes documenta la sintaxis
classde JavaScript como plantilla para crear objetos y explica constructores, métodos e instanciación.
Práctica
Conexiones
Qué habilita
Caminos que incluyen este nodo
Siguiente paso
Requerido por: AbstracciónFuentes citadas
- Oracle Java Tutorials, What Is a Class? (Oficial, 20-07-2026)
- MDN Web Docs, JavaScript Classes (Oficial, 20-07-2026)