Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Encapsulamento em outras linguagens

O Python quando tornamos algum atributo privado avisa que o atributo foi criado para ser usado dentro da classe, por meio dos métodos. Porém, continuaremos a ter acesso aos valores.

Minha dúvida é a seguinte, em outras lingaguens por exemplo Java, saberia me dizer se o comportamento é parecido? Você ainda consegue acessar os atributos sem utilizar os métodos?

Desde já agradeço pela atenção.

2 respostas
solução!

Oiii Bruno, como você está?

Essa é uma particularidade da linguagem Python. No Python, por mais que criamos atributos "privados", sempre será possível burlar isso e acessá-los fora da classe sem a utilização dos métodos. Já no Java por exemplo, isso não é possível, não conseguiremos ter acesso a esse atributo diretamente, apenas através de métodos, como os de getter e setter por exemplo, que no Python são chamados de properties.

A título de curiosidade, vou deixar abaixo um exemplo do mesmo código na linguagem Python e na linguagem Java:

Python

class Animal:
    def __init__(self, nome):
        self._nome = nome

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

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

cachorro = Animal("Bob")
print(cachorro.nome) # chamando o método de property
print(cachorro._nome) # chamando diretamente o atributo privado, sem utilizar métodos

Java

class Animal {
  private String nome;

  Animal(String nome) {
    this.nome = nome;
  }

  public String getNome() {
    return this.nome;
  }

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

}

class Main {
  public static void main(String[] args) {
    Animal cachorro = new Animal("Bob");
    System.out.println(cachorro.getNome());
    System.out.println(cachorro.nome); // Dá erro, não conseguimos acessar o atributo privado diretamente
  }
}

Quando pegamos para comparar uma linguagem com a outra, você verá grandes diferenças a respeito de sintaxe e comportamento em relação a algum determinado caso, pois cada linguagem tem sua particularidade. Porém, a base a base permanece a mesma, ou seja, o if que você faz em Python, é o mesmo que você faz em Java, o for, while e assim por diante.

Qualquer dúvida estou por aqui, tá bom?

Grande abraço!

Muito obrigado Nadia por tirar um tempo para exemplificar, ficou claro.