Property no Delphi - Quando usar?

Delphi

21/06/2013

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 =)
Carla Batista

Carla Batista

Curtidas 1

Melhor post

Joel Rodrigues

Joel Rodrigues

21/06/2013

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?
GOSTEI 3

Mais Respostas

Carla Batista

Carla Batista

21/06/2013

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;
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

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.
GOSTEI 0
Carla Batista

Carla Batista

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.
GOSTEI 1
Carla Batista

Carla Batista

21/06/2013

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é?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

21/06/2013

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.
GOSTEI 0
Carla Batista

Carla Batista

21/06/2013

Ok então. Dúvida tirada =)
Obrigada mais uma vez.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

21/06/2013

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