Fala ai Radizeiros e Radizeiras, tudo bem com vocês?
Vamos a mais um post, hoje eu vou mostrar mostrar as Classes Amigas, será que são tão amigas assim?rsrsrsrs
Você já conhece os private, property, e como elas nos auxiliam no encapsulamento dos nosso atributos.
Mas o private tem uma particularidade, que são as Classes Amigas.
O Objeto, é privado para uma classe apenas quando ela está em uma única Unit, por isso uma boa prática de programação é para cada classe criar uma Unit.
Para ser considerada Classes Amigas, as classes precisam estar na mesma Unit e irão compartilhar os seus atributos privados.
No código abaixo temos nossa classe TCliente e seus métodos e atributos privados.
type TCliente = class private FDataNascimento: TDateTime; FNome: String; FEndereco: String; FTelefone: String; procedure SetDataNascimento(const Value: TDateTime); function GetEndereco : String; procedure SetEndereco(const Value: String); procedure SetNome(const Value: String); procedure SetTelefone(const Value: String); public constructor Create; procedure CadastrarClientes; procedure CriarFinanceiro; function Idade : Integer; property Nome : String read FNome write SetNome; property DataNascimento : TDateTime read FDataNascimento write SetDataNascimento; property Telefone : String read FTelefone write SetTelefone; property Endereco : String read GetEndereco write SetEndereco; end;
Nessa mesma Unit irei criar uma classe.
type TClasseAmiga = class private Teste : String; end;
Você pode observar que temos um objeto privado chamado Teste, teoricamente não é para ninguém ter acesso a ele, mas ela é uma classe amiga da classe TCliente, porque elas convivem no mesmo ecossistema, na mesma Unit.
Em qualquer método de nossa classe TCliente, você poderá observar que temos acesso ao objeto privado da classe TClasseAmiga.
Mas você pode estar se perguntando, mas esse objeto não está como privado na classe TClasseAmiga?
Sim ela está, mas como elas estão na mesma Unit, elas estão compartilhando esses métodos privados.
A mesma coisa com métodos da classe TClasseAmiga.
type TClasseAmiga = class private Teste : String; public procedure TesteDeSoftware; end;
Observe que também temos acesso ao métodos e atributos privados da classe TCliente.
Tenha muito cuidado quando for criar mais de uma classe dentro da mesma Unit, pois você pode estar violando o encapsulamento, por isso é uma boa prática você criar cada classe em uma Unit separada.
Esse post faz parte do treinamento Técnicas avançadas de Delphi.
Nesse treinamento eu reuni as minhas melhores aulas dos meus mais diversos treinamento para entregar para você um conteúdo que vai direto ao ponto, para que você não perca tempo e nem dinheiro na hora de aprender Delphi.