Encapsulamiento
Parte de la sección Programación Orientada a Objetos del Journey de JavaScript de Coddy — lección 17 de 56.
El encapsulamiento es un proceso de combinación de datos dentro de una clase en una sola unidad.
Esto ayuda a imponer restricciones al acceso directo a los datos de la clase, lo que finalmente nos ayuda a prevenir cualquier modificación accidental de los datos.
Veamos la encapsulación en acción con un ejemplo sencillo. Crea un objeto básico con propiedades públicas:
const user = {
name: "John",
email: "john@example.com"
};Cualquiera puede acceder y modificar directamente estas propiedades:
user.name = "Jane"; // Fácil de modificar desde fuera
console.log(user.email); // Fácil de acceder desde fueraUn enfoque más encapsulado utiliza cierres (closures) para ocultar datos:
function createUser(name, email) {
// Estas variables son privadas (encapsuladas)
let userName = name;
let userEmail = email;
// Devuelve un objeto con métodos para interactuar con los datos privados
return {
getName: function() {
return userName;
},
getEmail: function() {
return userEmail;
},
setName: function(newName) {
userName = newName;
}
};
}
const encapsulatedUser = createUser("John", "john@example.com");Ahora, para interactuar con los datos:
console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"
// No se puede acceder directamente a los datos
console.log(encapsulatedUser.userName); // undefinedDesafío
Se te proporciona un código que utiliza el encapsulamiento para proteger los datos del usuario. Tu tarea es añadir un método getAge() para acceder a la edad.
Las pruebas verificarán:
- Que el método
getAge()exista - Que devuelva la edad correcta
- Que la información de la edad permanezca privada
Salida esperada:
john_doe
25
Hoja de referencia
El encapsulamiento es un proceso de combinación de datos dentro de una clase en una sola unidad y de restricción del acceso directo a esos datos, evitando modificaciones accidentales.
Sin encapsulamiento, las propiedades de los objetos son accesibles públicamente:
const user = {
name: "John",
email: "john@example.com"
};
user.name = "Jane"; // Puede modificarse directamente
console.log(user.email); // Puede accederse directamenteUso de cierres (closures) para encapsular datos:
function createUser(name, email) {
// Variables privadas (encapsuladas)
let userName = name;
let userEmail = email;
// Métodos públicos para interactuar con datos privados
return {
getName: function() {
return userName;
},
getEmail: function() {
return userEmail;
},
setName: function(newName) {
userName = newName;
}
};
}
const encapsulatedUser = createUser("John", "john@example.com");
console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"
console.log(encapsulatedUser.userName); // undefined (los datos privados no son accesibles)Pruébalo tú mismo
import { createUser } from './createUser.js';
// Código de prueba - no modificar
const user = createUser("john_doe", 25);
console.log(user.getUsername()); // Debería mostrar "john_doe"
console.log(user.getAge()); // Debería mostrar 25
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