12.8. Encapsulamento e métodos acessores (getters e setters): Encapsulamento em diferentes linguagens de programação

Página 82

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.

Now answer the exercise about the content:

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

You are right! Congratulations, now go to the next page

You missed! Try again.

Next page of the Free Ebook:

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

Earn your Certificate for this Course for Free! by downloading the Cursa app and reading the ebook there. Available on Google Play or App Store!

Get it on Google Play Get it on App Store

+ 6.5 million
students

Free and Valid
Certificate with QR Code

48 thousand free
exercises

4.8/5 rating in
app stores

Free courses in
video, audio and text