Menu
Coddy logo textTech

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 fuera

Un 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); // undefined
challenge icon

Desafí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 directamente

Uso 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

quiz iconPonte a prueba

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