Menu
Coddy logo textTech

Encapsulamento

Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 17 de 56.

Encapsulamento é um processo de combinar dados dentro de uma classe em uma única unidade.

Isso ajuda a colocar restrições no acesso direto aos dados da classe, ajudando-nos, eventualmente, a evitar qualquer modificação acidental de dados. 

Vamos ver o encapsulamento em ação com um exemplo simples. Crie um objeto básico com propriedades públicas:

const user = {
  name: "John",
  email: "john@example.com"
};

Qualquer pessoa pode acessar e modificar diretamente estas propriedades:

user.name = "Jane"; // Fácil de modificar por fora
console.log(user.email); // Fácil de acessar por fora

Uma abordagem mais encapsulada usa closures para ocultar dados:

function createUser(name, email) {
  // Estas variáveis são privadas (encapsuladas)
  let userName = name;
  let userEmail = email;
  
  // Retorna um objeto com métodos para interagir com os dados privados
  return {
    getName: function() {
      return userName;
    },
    getEmail: function() {
      return userEmail;
    },
    setName: function(newName) {
      userName = newName;
    }
  };
}
const encapsulatedUser = createUser("John", "john@example.com");

Agora, para interagir com os dados:

console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"

// Não é possível acessar os dados diretamente
console.log(encapsulatedUser.userName); // undefined
challenge icon

Desafio

Você recebeu um código que utiliza encapsulamento para proteger os dados do usuário. Sua tarefa é adicionar um método getAge() para acessar a idade.

Os testes irão verificar:

  • Se o método getAge() existe
  • Se ele retorna a idade correta
  • Se a informação da idade permanece privada

Saída Esperada:

john_doe

25

Folha de consulta

O encapsulamento é um processo de combinar dados dentro de uma classe em uma única unidade e restringir o acesso direto a esses dados, evitando modificações acidentais.

Sem o encapsulamento, as propriedades do objeto são acessíveis publicamente:

const user = {
  name: "John",
  email: "john@example.com"
};

user.name = "Jane"; // Can be modified directly
console.log(user.email); // Can be accessed directly

Usando closures para encapsular dados:

function createUser(name, email) {
  // Private variables (encapsulated)
  let userName = name;
  let userEmail = email;
  
  // Public methods to interact with private data
  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 (private data not accessible)

Experimente você mesmo

import { createUser } from './createUser.js';

// Código de teste - não modifique
const user = createUser("john_doe", 25);
console.log(user.getUsername()); // Deve exibir "john_doe"
console.log(user.getAge());      // Deve exibir 25

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos