Property no Delphi - Quando usar?

21/06/2013

69

Olá, pessoal.
Estou estudando POO no Delphi e agora estou na parte de Property. Beleza, entendi que é uma propriedade para "encapsular" (ainda não entendi bem) um atributo privado. Mas qual é a diferença entre usar Property e usar um atributo público? Quando usar cada um?

Muito obrigada =)
Responder

Post mais votado

21/06/2013

Olá, se você entendeu que a propriedade é para encapsular o atributo, aí está a chave para a resposta.
Utilizando um atributo público você não tem o real encapsulamento. Então, vocêquer seguir as boas práticas da POO, use propriedades. Se quer fazer algo rápido, onde não necessita de tanta organização, pode usar os atributos públicos.

Oii, obrigada pela ajuda.
Mas tem alguma diferença prática nisso? Por que até agora só está me parecendo ser mais código com mesma função.
Obigada.
Responder

Mais Posts

21/06/2013

Carla Batista

Ah, aqui estão dois exemplos de código que eu fiz:

1) Com property
  TGrupo = class
    private
      _codigo : Integer;
      _descricao : String;
      procedure setCodigo(valor:Integer);
      procedure setDescricao(valor:string);
    public
      property Codigo : Integer read _codigo write setCodigo;
      property Descricao : String read _descricao write setDescricao;
  end;
...


2) Com atributo público
  TCategoria = class
    public
    Codigo : Integer;
    Descricao : String;
  end;
Responder

21/06/2013

Joel Rodrigues

Olá, se você entendeu que a propriedade é para encapsular o atributo, aí está a chave para a resposta.
Utilizando um atributo público você não tem o real encapsulamento. Então, vocêquer seguir as boas práticas da POO, use propriedades. Se quer fazer algo rápido, onde não necessita de tanta organização, pode usar os atributos públicos.
Responder

21/06/2013

Joel Rodrigues

Vou dar um exemplo simples, porém que eu acho que facilitará o entendimento.
Suponha que você tenha uma classe Pessoa e uma regra que diz que uma pessoa não pode ser cadastrada sem CPF.

Se você tiver apenas um atributo público CPF, você poderá muito bem atribuir uma string vazia a ele em qualquer parte do programa. Como garantir que essa string vazia não será aceita? Terá de fazer uma verificação em toda parte do sistema onde se atribui valor a este atributo. Já viu o trabalho, né?

Por outro lado, se você tiver um atributo privado e uma propriedade que o encapsula, você poderá tratar essa atribuição de valores no método set dessa propriedade. Assim, sempre que se tentasse atribuir um valor vazio à propriedade CPF, o método setCPF seria chamado e nele você faria a verificação, permitindo ou não a atribuição do valor. Perceba que dessa forma você terá a verificação uma única vez e poderá executar outras validações no método set, pois ele sempre será chamado quando você tentar preencher a propriedade CPF.

Deu pra entender a ideia?
Responder

21/06/2013

Carla Batista

Entendi sim, obrigada mesmo.
Acho que depende da situação, mas o mais correto e seguro parece ser encapsular (seria isso?) os atributos, pois temos maior controle sobre o que entra neles. É isso, né?
Responder

21/06/2013

Joel Rodrigues

Perfeitamente, Carlinha. Vejo que você pegou a ideia.
Continue estudando POO, pois são vários os benefícios que ela nos garante.

Bons estudos.
Responder

21/06/2013

Carla Batista

Ok então. Dúvida tirada =)
Obrigada mais uma vez.
Responder

21/06/2013

Joel Rodrigues

Fico feliz por ter ajudado, Carla.
Bons estudos e até mais.
Estou Concluindo o tópico.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar