e sets 3- Tornar mais legivel a utilizacao dos atributos das classes Para se ter uma ideia, iremos efetuar uma conta simples, toda property pode carregar consigo ate dois metodos, um get e um set, se nossa classe possui 50 atributos, tais como, nome,data de nascimento etc... seriam em tese (Sim em tese, pois no Delphi e possivel utilizar acesso direto a variavel encapsulada) 100 metodos de acesso, 50 gets e 50 sets, ao se listar os metodos dessa classe, voce tera que visualizar 100 metodos que alem de ser um valor relativamente grande pode nao representar intuitivamente a variavel encapsulada correta, ja com a utilizacao de propertys, 50 atributos sao representados por 50 propertys (1:1), que cuidam de realizar implicitamente o acesso aos metodos gest e sets sozinhas atraves do tipo de acesso que e feito a variavel, se uma atribuicao e feita o metodo set e disparado, se e necessario uma requisicao do valor do atributo o metodo get e utilizado, sinceramente nao entendo porque existem linguagens que nao implementam isso.As propertys sao utilizadas atribuindo-se um metodo read (Obrigatorio) e um metodo write (Opcional), repare que o metodo write e opcional pois determinada property pode ser somente para leitura "read-only", outra caracteristica das propertys e que apesar de nao ser obrigatorio geralmente ela e vinculada uma variavel encapsulada atraves dos metodos read e write.Aqui vou demonstrar a atribuicao de algumas propertys a classe TPessoa.type TPessoa = class(TObject) private FNome: string; FDataNascimento: TDate; FSexo: Char; procedure setNome(const AValue: string); procedure setNascimento(const AValue: TDate); procedure setSexo(const AValue: Char); function getNome: string; function getNascimento: TDate; function getSexo: Char; protected public property Nome: string read getNome write setNome; property DataNascimento: TDate read getNascimento write setNascimento; property Sexo: Char read getSexo write setSexo; published end; Implementamos em nossa classe TPessoa os atributos, Nome, Data de Nascimento e Sexo, agora vou mostrar como fica a implementacao dos metodos sets;procedure setNome(const AValue: string);begin FNome := AValue;end;procedure setNascimento(const AValue: TDate);begin FDataNascimento := AValue;end;procedure setSexo(const AValue: Char);begin FSexo := AValue;end;Repare o seguinte, eu posso adicionar uma validacao dos valores antes de atribui-los a minha variavel encapsulada, veja um exemplo com o metodo setNome.procedure setNome(const AValue: string);begin if Trim(AValue) = EmptyStr then raise Exception.Create('O Nome da pessoa nao por ser vazio ""'); FNome := AValue;end;Obs: Mais para frente abordaremos o tratamento de excecao e o comando raise que e utilizado para propaga-la.Isto garante que nenhum nome de minha classe seja vazio, eu poderia adicionar outras validacoes como um minimo de caracteres ou a necessidade de se digitar pelo menos um nome e um sobrenome. Implementacao dos metodos getsfunction getNome: string;begin Result := FNome;end;function getNascimento: TDate;begin Result := FDataNascimento;end;function getSexo: Char;begin Result := FSexo;end;Acima nos temos a implementacao dos metodos gets, e analisando bem eles voce ira reparar que eles sao bem simples, pra falar a verdade eles nao fazem praticamente nada, mas eles poderiam fazer por exemplo um acesso a um indice de array ou algum calculo antes de retornar o valor da variavel, uma coisa importante a se notar e que pelo Delphi utilizar property em casos como esse