Neste tutorial, você aprenderá sobre encapsulamento e ocultação de dados em Java com a ajuda de exemplos.
Encapsulamento Java
O encapsulamento é um dos principais recursos da programação orientada a objetos. O encapsulamento se refere ao agrupamento de campos e métodos dentro de uma única classe.
Impede que classes externas acessem e alterem campos e métodos de uma classe. Isso também ajuda a conseguir ocultar os dados .
Exemplo 1: Encapsulamento Java
class Area ( // fields to calculate area int length; int breadth; // constructor to initialize values Area(int length, int breadth) ( this.length = length; this.breadth = breadth; ) // method to calculate area public void getArea() ( int area = length * breadth; System.out.println("Area: " + area); ) ) class Main ( public static void main(String() args) ( // create object of Area // pass value of length and breadth Area rectangle = new Area(5, 6); rectangle.getArea(); ) )
Resultado
Área: 30
No exemplo acima, criamos uma classe chamada Area. O objetivo principal desta aula é calcular a área.
Para calcular uma área, precisamos de duas variáveis: comprimento e largura e um método: getArea()
. Portanto, agrupamos esses campos e métodos dentro de uma única classe.
Aqui, os campos e métodos também podem ser acessados de outras classes. Portanto, isso não é ocultação de dados .
Isso é apenas encapsulamento . Estamos apenas mantendo códigos semelhantes juntos.
Observação : as pessoas costumam considerar o encapsulamento como ocultação de dados, mas isso não é totalmente verdade.
O encapsulamento se refere ao agrupamento de campos e métodos relacionados. Isso pode ser usado para alcançar a ocultação de dados. O encapsulamento em si não é ocultação de dados.
Por que encapsulamento?
- Em Java, o encapsulamento nos ajuda a manter campos e métodos relacionados juntos, o que torna nosso código mais limpo e fácil de ler.
- Ajuda a controlar os valores dos nossos campos de dados. Por exemplo,
class Person ( private int age; public void setAge(int age) ( if (age>= 0) ( this.age = age; ) ) )
Aqui, estamos criando a variável de idadeprivate
e aplicando a lógica dentro dosetAge()
método. Agora, a idade não pode ser negativa. - Os métodos getter e setter fornecem acesso somente leitura ou somente gravação aos nossos campos de classe. Por exemplo,
getName() // provides read-only access setName() // provides write-only access
- Ajuda a desacoplar componentes de um sistema. Por exemplo, podemos encapsular o código em vários pacotes.
Esses componentes desacoplados (bundle) podem ser desenvolvidos, testados e depurados de forma independente e simultânea. E, quaisquer alterações em um determinado componente não têm nenhum efeito em outros componentes. - Também podemos obter ocultação de dados usando encapsulamento. No exemplo acima, se alterarmos a variável de comprimento e largura para privada, o acesso a esses campos é restrito.
E, eles são mantidos ocultos das classes externas. Isso é chamado de ocultação de dados .
Ocultação de dados
A ocultação de dados é uma forma de restringir o acesso de nossos membros de dados, ocultando os detalhes de implementação. O encapsulamento também fornece uma maneira de ocultar os dados.
Podemos usar modificadores de acesso para conseguir ocultar os dados. Por exemplo,
Exemplo 2: ocultação de dados usando o especificador privado
class Person ( // private field private int age; // getter method public int getAge() ( return age; ) // setter method public void setAge(int age) ( this.age = age; ) ) class Main ( public static void main(String() args) ( // create an object of Person Person p1 = new Person(); // change age using setter p1.setAge(24); // access age using getter System.out.println("My age is " + p1.getAge()); ) )
Resultado
Minha idade é 24
No exemplo acima, temos um private
campo age. Como está private
, não pode ser acessado de fora da classe.
Para acessar a idade, usamos os public
métodos: getAge()
e setAge()
. Esses métodos são chamados de métodos getter e setter.
Tornar a idade privada nos permitiu restringir o acesso não autorizado de fora da classe. Isso é ocultação de dados .
Se tentarmos acessar o campo idade da classe Principal, obteremos um erro.
// error: age has private access in Person p1.age = 24;