1
resposta

Diferença entre o método que implementa comportamento e propriedade

Prezado, quando devemos usar propriedade para 'setar' e para capturar valores e quando devemos implementar métodos 'get...' e 'set...'?

Me pareceu que são funções idênticas, mas, se há exemplos de um e de outro, deve haver uma razão boa para isto.

As propriedades não substituem satisfatoriamente os métodos (implementação de comportamento) getXXX e setXXX?

1 resposta

(1) Propriedades: Uma propriedade é como uma variável pública que é acessada diretamente. No entanto, diferente de uma variável pública comum, você pode definir lógica personalizada para as operações get e set de uma propriedade. Assim, quando a propriedade é acessada ou modificada, essa lógica personalizada é executada. As propriedades são úteis quando você deseja executar algum código toda vez que um valor é obtido ou definido, mas você deseja que a sintaxe para o usuário da classe pareça que eles estão acessando uma variável normalmente, não chamando um método.

Exemplo em C#:

```csharp
private string _nome;
public string Nome
{
    get { return _nome; }
    set
    {
        if (value == null) throw new ArgumentNullException("Nome");
        _nome = value;
    }
}

(2) Métodos get/set: Em vez de usar propriedades, você pode usar métodos explícitos para obter e definir o valor de uma variável privada. Isso pode ser útil se a lógica para obter ou definir o valor é complexa e envolve mais do que apenas retornar ou definir o valor de uma variável. Ao usar métodos get/set explícitos, é claro para o usuário da classe que uma operação potencialmente complexa está sendo realizada, não apenas uma operação simples de acesso à variável.

Exemplo em Java:
```java
private String nome;
public String getNome() {
    return nome;
}
public void setNome(String nome) {
    if (nome == null) throw new IllegalArgumentException("Nome cannot be null");
    this.nome = nome;
}

Em resumo, a escolha entre usar propriedades ou métodos get/set depende em grande parte do design da sua classe e das convenções da linguagem que você está usando. Algumas linguagens, como C# e Python, têm suporte nativo para propriedades, enquanto outras, como Java, tendem a usar métodos get/set. A sintaxe e a facilidade de uso das propriedades podem torná-las uma escolha atraente em algumas situações, mas métodos get/set também têm o seu lugar, especialmente quando a lógica para obter ou definir um valor é complexa.