Como Utilizar “Get” e “Set” no Delphi e Lazarus

No desenvolvimento de software, a utilização de métodos getter e setter é uma prática comum para encapsular atributos de uma classe. No Delphi, esses métodos desempenham um papel crucial na criação de programas mais estruturados, flexíveis e seguros. Neste artigo, explicaremos o que são, como utilizá-los e quando aplicá-los de maneira eficiente.
O que são métodos “Get” e “Set”?
- Getter: Um método utilizado para obter o valor de um atributo privado de uma classe. Ele fornece acesso controlado às informações sem permitir modificações diretas.
- Setter: Um método usado para atribuir valores a um atributo, permitindo validar ou processar os dados antes de efetuar a atribuição.
Esses métodos ajudam a implementar o princípio da encapsulação, protegendo os atributos de acessos indevidos e facilitando a manutenção do código.
Por que utilizar Getters e Setters?
- Encapsulamento: Protege os atributos, garantindo que só sejam acessados de forma controlada.
- Validação: Permite implementar regras para verificar os valores antes de armazená-los.
- Flexibilidade: Facilita futuras mudanças na lógica de acesso ou atribuição sem impactar diretamente os consumidores da classe.
- Debugging: Ajuda a identificar alterações inesperadas em atributos.
Estrutura básica no Delphi / Lazarus
No Delphi, os métodos getter e setter geralmente são definidos como métodos privados ou protegidos na seção private ou protected da classe. O atributo correspondente também é mantido privado.
Exemplo básico:
type
TCliente = class
private
FNome: string;
procedure SetNome(const Value: string);
function GetNome: string;
public
property Nome: string read GetNome write SetNome;
end;
implementation
{ TCliente }
function TCliente.GetNome: string;
begin
Result := FNome;
end;
procedure TCliente.SetNome(const Value: string);
begin
if Value.Trim = '' then
raise Exception.Create('O nome não pode estar vazio.');
FNome := Value;
end;
Explicação do código acima
- Atributo Privado:
FNomeé o atributo privado da classe, inacessível diretamente de fora da classe. - Getter (
GetNome): Retorna o valor deFNome. Esse método pode incluir lógica adicional, como formatações ou cálculos, antes de retornar o valor. - Setter (
SetNome): Valida o valor antes de atribuí-lo aFNome. Nesse caso, o valor não é aceito se for uma string vazia. - Propriedade: A propriedade
Nomeconecta os métodosGetNomeeSetNome, tornando-os acessíveis como se fossem um campo público.
Exemplo avançado com mais validações
Suponha que temos uma classe que representa uma conta bancária. Vamos adicionar validações para evitar atribuições inválidas ao saldo.
type
TContaBancaria = class
private
FSaldo: Double;
function GetSaldo: Double;
procedure SetSaldo(const Value: Double);
public
property Saldo: Double read GetSaldo write SetSaldo;
end;
implementation
{ TContaBancaria }
function TContaBancaria.GetSaldo: Double;
begin
Result := FSaldo;
end;
procedure TContaBancaria.SetSaldo(const Value: Double);
begin
if Value < 0 then
raise Exception.Create('O saldo não pode ser negativo.');
FSaldo := Value;
end;
Neste exemplo:
- Getter: Apenas retorna o saldo.
- Setter: Bloqueia a atribuição de valores negativos ao saldo.
Uso no código principal
Depois de criar a classe, você pode usá-la assim:
var
Conta: TContaBancaria;
begin
Conta := TContaBancaria.Create;
try
Conta.Saldo := 100.00; // Atribuindo um valor válido
ShowMessage(Format('Saldo atual: %.2f', [Conta.Saldo]));
// Tentar atribuir um saldo inválido
Conta.Saldo := -50.00; // Irá gerar uma exceção
except
on E: Exception do
ShowMessage('Erro: ' + E.Message);
end;
Conta.Free;
end;
Melhores práticas
Use validações sempre que necessário: Valide os dados no setter para evitar erros no restante da aplicação.
Mantenha a lógica simples: Evite incluir lógicas complexas em getters e setters. Use métodos adicionais para processamentos mais sofisticados.
Documente sua classe: Adicione comentários claros para descrever os métodos getter e setter.
Conclusão
Os métodos get e set no Delphi / Lazarussão ferramentas poderosas para o controle e a segurança dos dados em uma aplicação. Eles permitem aplicar o conceito de encapsulamento, melhorar a manutenção do código e proteger os atributos da classe contra acessos indevidos. Ao utilizá-los adequadamente, você garante que seu código será mais robusto, seguro e preparado para mudanças futuras.
Gostou do conteúdo?
Ficou com alguma dúvida ou tem uma dica para compartilhar? 💬
Deixe seu comentário abaixo, vou adorar saber sua opinião! 🚀😊
💻 Não esqueça de compartilhar o post se ele te ajudou! 😊
📚 Obrigado por acompanhar até aqui! Explore outros posts relacionados no blog e continue evoluindo suas habilidades. Tem mais conteúdos sobre diversos assuntos te esperando! 👩💻 🔍✨
Até o próximo post. Valeu! 👋📖
#Delphi #Lazarus #Programação #Encapsulamento
#GetSet #DesenvolvimentoDeSoftware
#OrientaçãoAObjetos #Codificação #DevLife
#Tecnologia #GiovaniDaCruz