Property no Delphi - Quando usar?
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 =)
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
Curtidas 1
Melhor post
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?
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
21/06/2013
Ah, aqui estão dois exemplos de código que eu fiz:
1) Com property
2) Com atributo público
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
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.
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
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.
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
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é?
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
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.
Continue estudando POO, pois são vários os benefícios que ela nos garante.
Bons estudos.
GOSTEI 0
Carla Batista
21/06/2013
Ok então. Dúvida tirada =)
Obrigada mais uma vez.
Obrigada mais uma vez.
GOSTEI 0
Joel Rodrigues
21/06/2013
Fico feliz por ter ajudado, Carla.
Bons estudos e até mais.
Estou Concluindo o tópico.
Bons estudos e até mais.
Estou Concluindo o tópico.
GOSTEI 0