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 foraUma 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); // undefinedDesafio
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 directlyUsando 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
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
1Objetos e a Palavra-chave this
Revisão Rápida: ObjetosAdicionando Métodos a ObjetosEntendendo a Palavra-chave thisFunções ConstrutorasA Palavra-chave newDesafio de Recapitulação7Herança e a palavra-chave extends
HerançaA relação "é um"A palavra-chave extendsO método super()Herdando propriedades e métodosDesafio de recapitulação10Polimorfismo
O que é Polimorfismo?Sobrescrevendo Métodos HerdadosUsando superDesafio de Recapitulação13Composição vs. Herança
A relação "tem um" vs. "é um"Os limites da herança profundaConstruindo objetos2Organizando o Código
O que são Módulos?Exportando com exportImportando com importExportações Default vs. Nomeadas5Encapsulamento e Acesso
EncapsulamentoCampos de Classe Públicos e PrivadosMétodos PrivadosDesafio de Recapitulação8Organizando Código POO
Organizar Classes em Módulos11Projeto: Um Renderizador de Formas
Configuração: Classe Shape e ExportaçãoHerança da Classe Circle14Sistema de Gerenciamento de Biblioteca
Projetando a BibliotecaClasse Livro com Composição