Menu
Coddy logo textTech

Ocultação de Informações

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 12 de 87.

A ocultação de informações é o princípio de restringir o acesso direto aos dados internos de um objeto. Ao combinar campos private com getters e setters, você cria uma barreira protetora em torno do estado do seu objeto.

Considere o que acontece sem a ocultação de informações:

public class Temperature {
    public double celsius;  // Exposto diretamente
}

// Qualquer pessoa pode definir valores inválidos
Temperature t = new Temperature();
t.celsius = -500;  // Abaixo do zero absoluto - impossível!

Com a ocultação de informações, você controla como os dados são acessados e modificados:

public class Temperature {
    private double celsius;
    
    public void setCelsius(double celsius) {
        if (celsius >= -273.15) {
            this.celsius = celsius;
        }
    }
    
    public double getCelsius() {
        return celsius;
    }
}

Agora, temperaturas inválidas são rejeitadas automaticamente. A representação interna está oculta - você poderia alterar posteriormente como a temperatura é armazenada internamente (talvez para Kelvin) sem afetar o código que utiliza a classe.

Esta abordagem oferece três benefícios principais: a validação garante a integridade dos dados, a flexibilidade permite alterações internas sem quebrar o código externo, e o controle permite que você decida exatamente quais operações são permitidas em seus dados.

challenge icon

Desafio

Fácil

Vamos construir uma classe de gerenciamento de Password que demonstra a ocultação de informações, protegendo dados sensíveis e aplicando regras de segurança por meio de acesso controlado.

Você criará dois arquivos para organizar seu código:

  • Password.java: Crie uma classe Password que oculte seus dados internos e controle como as senhas podem ser definidas e acessadas:
    • Um campo privado password (String) que armazena a senha real
    • Um campo privado minLength (int) que define o comprimento mínimo aceitável da senha
    • Um construtor que recebe o requisito de comprimento mínimo
    • Um setter setPassword(String password) que só aceita senhas que atendam ao requisito de comprimento mínimo. Se for válida, armazene-a e retorne true; se for muito curta, não altere a senha e retorne false
    • Um getter getMaskedPassword() que retorna a senha com todos os caracteres substituídos por asteriscos (*) - nunca exponha a senha real!
    • Um método checkPassword(String attempt) que retorna true se a tentativa corresponder à senha armazenada, caso contrário, false
    • Um getter getLength() que retorna o comprimento da senha atual (ou 0 se nenhuma senha estiver definida)
  • Main.java: Crie um objeto Password com um comprimento mínimo de 6, depois leia duas entradas: uma senha para definir e uma tentativa para verificar. Imprima três linhas:
    • Set: true ou Set: false (resultado da definição da senha)
    • Masked: ****** (a versão mascarada da senha)
    • Match: true ou Match: false (resultado da verificação da tentativa)

Você receberá duas entradas: a senha para definir e a tentativa de senha para verificar.

Observe como a senha real nunca é acessível diretamente de fora da classe - isso é a ocultação de informações em ação. A classe controla exatamente quais informações são reveladas e como a senha pode ser modificada.

Folha de consulta

O ocultamento de informações restringe o acesso direto aos dados internos de um objeto usando campos private combinados com getters e setters.

Sem o ocultamento de informações, os campos ficam expostos e podem ser definidos com valores inválidos:

public class Temperature {
    public double celsius;  // Exposed directly
}

Temperature t = new Temperature();
t.celsius = -500;  // Invalid value allowed

Com o ocultamento de informações, você controla o acesso e valida os dados:

public class Temperature {
    private double celsius;
    
    public void setCelsius(double celsius) {
        if (celsius >= -273.15) {
            this.celsius = celsius;
        }
    }
    
    public double getCelsius() {
        return celsius;
    }
}

Principais benefícios do ocultamento de informações:

  • Validação: Garante a integridade dos dados ao rejeitar valores inválidos
  • Flexibilidade: Permite alterações internas sem afetar o código externo
  • Controle: Permite que você decida quais operações são permitidas em seus dados

Experimente você mesmo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Lê a senha a ser definida
        String passwordToSet = scanner.nextLine();
        // Lê a tentativa de senha para verificar
        String passwordAttempt = scanner.nextLine();
        
        // TODO: Create a Password object com comprimento mínimo de 6
        
        // TODO: Defina a senha e imprima o resultado ("Set: true" ou "Set: false")
        
        // TODO: Imprima a senha mascarada ("Masked: ******")
        
        // TODO: Verifique a tentativa de senha e imprima o resultado ("Match: true" ou "Match: false")
        
    }
}
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