👩💻 Objetivo:
Aprender a usar Encapsulamento, utilizando métodos de acesso como public, protected, private e Getters e Setters. Com isso no futuro conseguiremos entender Herança na Programação Orientada a Objetos.
🔐 Encapsulamento
Encapsular significa esconder os detalhes internos do funcionamento de um objeto e controlar o acesso aos seus dados.
Uma das grandes vantagens do paradigma de programação orientada a objetos é facilidade de criação de códigos reutilizáveis. O encapsulamento de código é um conjunto de técnicas e boas práticas de programação que garantam que o código escrito seja visto como uma "cápsula", algo que contém uma parte externa (a "casca") e uma parte interna (o "núcleo"). A parte externa (”casca”) pode ser facilmente visualizada e entendida, porém não é possível (ou é desnecessário) o conhecimento do seu interior (”núcleo”).
🧪 Exemplo do mundo real:
Imaginemos um celular:
- Ele possui uma parte externa bem definida (geralmente um invólucro de plástico com um teclado e uma tela) e uma parte interna desconhecida (circuitos, fios, chips, capacitores…).
- Ao utilizarmos um celular, não o vemos como um emaranhado de circuitos com uma antena; o vemos como uma espécie de caixa-preta que pode fazer e receber ligações.
- Podemos até conhecer e entender como as ligações são transmitidas (ondas de rádio através de antenas, etc), porém isso não é de nosso interesse.
- Não sabemos quais chips recebem corrente elétrica quando uma ligação é feita, ou quantos amperes cada capacitor recebe apenas queremos fazer ligações e trocar mensagens.
Na visão de orientação a objetos, o celular é uma cápsula:
- Ele possui uma interface pública (a tela e o teclado), porém o conteúdo do aparelho em si (e seu funcionamento interno) não nos interessa.
- Dessa forma, se algum dia o fabricante do celular decidir modernizar os componentes eletrônicos internos do celular para que as ligações sejam melhores, basta que o celular seja levado em uma loja e que os componentes sejam trocados.
- Depois disso, o celular fará e receberá chamadas melhores, porém a sua tela e o seu teclado continuam iguais. Qualquer um que utilize aquele celular continuará utilizando-o da mesma forma, porém agora com capacidade melhorada.
O encapsulamento na programação orientada a objetos tenta criar esse cenário.
💊 Encapsulamento na Orientação a Objetos
As classes são desenhadas de forma a funcionarem como cápsulas, caixas-pretas:
- Existe uma interface pública (os métodos públicos) que disponibiliza um conjunto de funcionalidades, porém por trás disso existem códigos que implementam essas funcionalidades.
- A única preocupação do programador ao usar uma classe é saber o que ela faz, não como ela faz.
- É através dos modificadores de visibilidade (ou acesso), como o private, que vimos o encapsulamento sendo obtido.
- Esses modificadores são palavras-chave que são colocadas junto a métodos e atributos da classe e indicam quais desses membros são visíveis para classes externas.
- Em Java, existem três tipos de modificadores de visibilidade: public, protected e private.
Exemplo

👀 Modificadores de Visibilidade
| Modificador |
Mesma Classe |
Mesmo Pacote |
Subclasse (Mesmo Pacote) |
Subclasse (Outro Pacote) |
Outro Pacote |
public |
Sim |
Sim |
Sim |
Sim |
Sim |
protected |
Sim |
Sim |
Sim |
Sim |
Não |
| default |
Sim |
Sim |
Sim |
Não |
Não |
private |
Sim |
Não |
Não |
Não |
Não |
🎯 Por que usar?
- Protege os dados
- Controla como os atributos são lidos e modificados
- Melhora a manutenção do código
⚠️ Encapsulamento - Problema❗