Objetivo dos getters e setters?[duplicado]
-
27-09-2019 - |
Pergunta
Possíveis duplicatas:
Membros de dados públicos vs Getters, Setters
Objetivo dos membros privados em uma classe
Qual é a utilidade de getters e setters quando você pode simplesmente tornar suas variáveis públicas e evitar o incômodo de linhas como A.setVariableX(A.getVariableY())
?
Solução
Para ocultar detalhes de implementação.Se você optar por tornar suas propriedades públicas e, posteriormente, decidir alterar a maneira como elas funcionam, será necessário alterar todo o código associado.
Com getters e setters, muitas vezes você pode alterar os detalhes internos da implementação sem alterar a API visível (e assim evitar ter que alterar qualquer código que usa a API da classe em questão).
Outras dicas
Getters e setters podem fazer validação e instanciação lenta, enquanto membros públicos não podem.
Além disso, isso não é independente de linguagem, já que a maioria das linguagens que implementam propriedades abstraem a implementação para que pareçam membros públicos no código.
Porque às vezes há algumas restrições quanto ao que sua variável pode ser e ter que verificar isso ao defini-la faz sentido.
por exemplo, se sua Idade não puder ser -1, você deverá verificar isso em seu levantador.
if(value >= 0)
{
_age = value;
}
else
{
throw new InvalidAgeException("Age may not be less than 0");
}
Setters e getters se aplicam a propriedades, quaisquer que sejam as "propriedades" do seu código.
Por exemplo, você pode ter um angle
variável, que armazena um valor de ângulo expresso em radianos.você pode então definir setters e getters para esta variável, com qualquer unidade angular que achar relevante.
Faz parte do princípio do encapsulamento.Você usa setters e getters como uma interface para interagir com seu objeto para que você possa - por exemplo - adicionar posteriormente qualquer funcionalidade (como validar dados de entrada) sem tocar no código que usa a(s) classe(s).