12.8 Encapsulamento e Métodos Acessores (Getters e Setters): Encapsulamento em Diferentes Linguagens de Programação

Encapsulamento é um dos quatro pilares fundamentais da Programação Orientada a Objetos (POO), junto com a herança, a abstração e o polimorfismo. Encapsulamento é o princípio que permite ocultar os detalhes internos de como um objeto funciona, expondo apenas as operações seguras e necessárias para a interação com aquele objeto. Isso é feito através do controle de acesso às variáveis e métodos internos de uma classe, tornando alguns membros privados e outros públicos.

Os métodos acessores, conhecidos como getters e setters, são a forma mais comum de implementar encapsulamento em muitas linguagens de programação. Eles são métodos públicos que permitem a leitura (getters) e a escrita (setters) de propriedades privadas de uma classe. Através deles, é possível validar e controlar os valores que estão sendo atribuídos às variáveis, mantendo a integridade e a consistência do estado interno do objeto.

Encapsulamento em Java

Em Java, o encapsulamento é implementado usando modificadores de acesso: private, protected, public e default (sem modificador). Tipicamente, as variáveis de instância são definidas como private, o que significa que elas não podem ser acessadas diretamente de fora da classe. Para permitir o acesso a essas variáveis, são utilizados métodos getters e setters.


public class Pessoa {
    private String nome;
    private int idade;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getIdade() {
        return idade;
    }

    public void setIdade(int idade) {
        if (idade > 0) {
            this.idade = idade;
        }
    }
}

Neste exemplo, o método setIdade inclui uma validação para garantir que a idade não seja um valor negativo. Isso ilustra como os setters podem ser usados para impor regras de negócio e manter a integridade do objeto.

Encapsulamento em C#

C# é outra linguagem orientada a objetos que suporta encapsulamento de forma semelhante ao Java. No entanto, C# oferece uma sintaxe mais enxuta para declarar propriedades com getters e setters automáticos, conhecidas como propriedades autoimplementadas.


public class Pessoa {
    public string Nome { get; set; }
    public int Idade {
        get { return idade; }
        set { idade = value > 0 ? value : idade; }
    }
    private int idade;
}

Neste exemplo, a propriedade Nome é uma propriedade autoimplementada que cria automaticamente um campo privado subjacente. A propriedade Idade tem lógica personalizada no setter para garantir que a idade não seja negativa.

Encapsulamento em Python

Python não tem modificadores de acesso explícitos como Java ou C#. Em vez disso, a convenção é usar um sublinhado (_) antes do nome de um atributo para indicar que ele deve ser tratado como privado. Embora isso não impeça o acesso direto ao atributo, é um sinal para outros desenvolvedores de que o atributo é destinado para uso interno da classe. Métodos getters e setters em Python são frequentemente implementados usando decoradores @property, @atributo.setter, e @atributo.deleter.


class Pessoa:
    def __init__(self, nome, idade):
        self._nome = nome
        self._idade = idade

    @property
    def nome(self):
        return self._nome

    @nome.setter
    def nome(self, valor):
        self._nome = valor

    @property
    def idade(self):
        return self._idade

    @idade.setter
    def idade(self, valor):
        if valor > 0:
            self._idade = valor

Os decoradores @property e @nome.setter permitem que você defina métodos que se comportam como atributos normais, mas com lógica adicional para leitura e escrita.

Encapsulamento em JavaScript

JavaScript tradicionalmente não tinha suporte para encapsulamento de forma nativa, mas com a introdução das classes em ECMAScript 2015 (ES6), isso mudou. Ainda assim, os campos privados são uma adição mais recente à linguagem e são denotados por um cerquilha (#) antes do nome do campo.


class Pessoa {
    #nome;
    #idade;

    constructor(nome, idade) {
        this.#nome = nome;
        this.#idade = idade;
    }

    get nome() {
        return this.#nome;
    }

    set nome(valor) {
        this.#nome = valor;
    }

    get idade() {
        return this.#idade;
    }

    set idade(valor) {
        if (valor > 0) {
            this.#idade = valor;
        }
    }
}

Os métodos get e set funcionam como getters e setters e permitem o acesso controlado aos campos privados.

Conclusão

Encapsulamento é uma prática essencial para a criação de software robusto, seguro e fácil de manter. Embora as linguagens de programação possam variar em suas abordagens específicas para implementar encapsulamento, o conceito subjacente permanece o mesmo. Os métodos acessores getters e setters são ferramentas poderosas que permitem aos desenvolvedores proteger o estado interno dos objetos e expor uma interface limpa e compreensível para os usuários dessas classes. Ao dominar o encapsulamento e o uso adequado de métodos acessores, os programadores podem garantir que seus códigos sejam mais confiáveis e sustentáveis a longo prazo.

Agora responda o exercício sobre o conteúdo:

Qual dos seguintes afirma corretamente o uso de encapsulamento em linguagens de programação orientadas a objetos?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Encapsulamento e métodos acessores (getters e setters): Princípios de programação orientada a objetos relacionados ao encapsulamento

Próxima página do Ebook Gratuito:

83Encapsulamento e métodos acessores (getters e setters): Princípios de programação orientada a objetos relacionados ao encapsulamento

4 minutos

Ganhe seu Certificado deste Curso Gratuitamente! ao baixar o aplicativo Cursa e ler o ebook por lá. Disponível na Google Play ou App Store!

Disponível no Google Play Disponível no App Store

+ de 6,5 milhões
de alunos

Certificado Gratuito e
Válido em todo o Brasil

48 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, áudio e texto