DEV Community

Cover image for Programação Orientada a Objetos: Encapsulamento
Fabiano Santos Florentino
Fabiano Santos Florentino

Posted on • Edited on

Programação Orientada a Objetos: Encapsulamento

Encapsulamento

é um dos princípios fundamentais da programação orientada a objetos (POO). O encapsulamento consiste em ocultar os detalhes internos de um objeto e expor apenas a interface necessária. Essa prática tem como objetivo proteger o estado interno do objeto contra acessos diretos e não autorizados, promovendo a modularidade e facilitando a manutenção do código.

Principais Conceitos

Atributos Privados: Variáveis que armazenam o estado interno de um objeto e são acessíveis apenas dentro da classe onde são definidas. Em linguagens como Java e Python, usa-se o modificador de acesso private ou o prefixo _ para denotar atributos privados.

Métodos Públicos: Funções que permitem a interação com o objeto e seu estado de forma controlada. Estes métodos expõem a funcionalidade do objeto sem revelar os detalhes de implementação.

Getters e Setters: Métodos específicos para acessar e modificar atributos privados. Um getter permite ler o valor de um atributo privado, enquanto um setter permite modificá-lo.

Como funciona em Go

Campos e Funções não Exportados: Em Go, se um campo ou uma função começa com uma letra minúscula, ele é acessível apenas dentro do pacote onde foi definido. Esse é o modo como Go implementa encapsulamento.

Campos e Funções Exportados: Se um campo ou uma função começa com uma letra maiúscula, ele é exportado e pode ser acessado de outros pacotes.

package main

import "fmt"

// Conta é uma estrutura que representa uma conta bancária.
type Conta struct {
    numero int
    saldo  float64
}

// Depositar é um método que adiciona um valor ao saldo da conta.
func (c *Conta) Depositar(valor float64) {
    c.saldo += valor
}

// Sacar é um método que subtrai um valor do saldo da conta.
func (c *Conta) Sacar(valor float64) {
    c.saldo -= valor
}

// Saldo é um método que retorna o saldo da conta.
func (c *Conta) Saldo() float64 {
    return c.saldo
}

func main() {
    // Cria uma nova conta com saldo inicial de 100.0.
    conta := Conta{numero: 123, saldo: 100.0}

    // Tell, Don't Ask - Princípio de design de software.
    // Depositar e Sacar são métodos que informam a conta sobre as ações a serem realizadas.
    conta.Depositar(50.0)
    conta.Sacar(25.0)

    fmt.Println(conta.Saldo())
}
Enter fullscreen mode Exit fullscreen mode
encampulamento ➜ go run main.go
125
Enter fullscreen mode Exit fullscreen mode

Neste exemplo, a estrutura Conta possui dois campos privados (numero e saldo) e três métodos públicos (Depositar, Sacar e Saldo). Dessa forma, o estado interno da conta é protegido contra acessos diretos e não autorizados, garantindo que as operações de depósito e saque sejam realizadas de forma segura.

Tell, Don't Ask

Tell, Don't Ask é um princípio de design de software que sugere que os objetos devem ser responsáveis por realizar ações e não por fornecer informações. Em vez de perguntar a um objeto sobre seu estado interno e tomar decisões com base nesse estado, o princípio Tell, Don't Ask recomenda que o objeto seja informado sobre o que deve ser feito e tome as ações necessárias.

Afirmando o Princípio

No mesmo exemplo acima, a estrutura Conta possui três métodos públicos (Depositar, Sacar e Saldo) que permitem interagir com o objeto sem acessar diretamente seu estado interno. Dessa forma, o princípio Tell, Don't Ask é seguido, pois o objeto Conta é informado sobre as ações a serem realizadas (depósito e saque) e toma as ações necessárias.

Conclusão

O encapsulamento é um conceito fundamental da programação orientada a objetos que visa proteger o estado interno de um objeto contra acessos diretos e não autorizados. Em Go, o encapsulamento é implementado por meio de campos e funções não exportados, que são acessíveis apenas dentro do pacote onde foram definidos. Dessa forma, é possível garantir a integridade e a segurança do objeto, promovendo a modularidade e facilitando a manutenção do código.

Projeto

Github

Agradecimento

Deixo aqui meu agradecimento ao @moretoend (fala comigo!), como sempre ajudando a melhorar o conteúdo dos meus artigos, e nesse em especial, me ajudando a entender melhor o conceito de Tell, Don't Ask. vlw!

Referências

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

👋 Kindness is contagious

Engage with a sea of insights in this enlightening article, highly esteemed within the encouraging DEV Community. Programmers of every skill level are invited to participate and enrich our shared knowledge.

A simple "thank you" can uplift someone's spirits. Express your appreciation in the comments section!

On DEV, sharing knowledge smooths our journey and strengthens our community bonds. Found this useful? A brief thank you to the author can mean a lot.

Okay