Fala Radizeiro e Radizeira, tudo bem com vocês?
Trabalhar com interfaces na orientação a objetos é algo de extrema importância.
Quando programamos para uma interface e não para uma implementação.
Isso nos dá maior capacidade de manutenção no código, maior extensibilidade, onde resolvemos apenas um problema.
Maior facilidade para realizar os testes unitários nas suas aplicações.
No post anterior nós criamos uma classe que implementa a interface, e nesta classe temos um método que é uma class method.
Você deve está se perguntando o que é esse tipo de método.
Class Method nada mais é do que um método pode ser invocado em um nome da classe, bem como uma instância dessa classe.
Por exemplo:
TPessoa = class class function Validar : TPessoa; ... var Pessoa : TPessoa; begin Pessoa.Validar; end;
Observe que não precisa instanciar a classe, simplesmente chamei o método validar, é dessa forma que os class method trabalham.
Desse jeito ele irá executar sem que venha dar erro, ele irá executar tudo que está dentro desse método.
E na classe que implementa a interface eu criei esse método New para que possamos dar um sentido que estamos criando um novo objeto, uma nova instância da classe.
Diferente de nós usarmos o Create, iremos utilizar o New, ao utilizá-lo irei dizer dentro da sua implementação que crie a instância dessa classe.
E o legal disso é que ele retorna a interface para que possamos trabalhar com o padrão Fluent Interface.
Lembrando que a interface é só um camada abstrata, ele não possui implementações, e para isso ele precisa de um motor para que venha trabalhar os métodos dessa interface.
Agora que você já compreendeu como é trabalhado a implementação da classe que estende uma interface, vamos ver como é feita a chamada dos métodos dessa classe.
Dentro do form principal, onde iremos colocar um botão, dois edits e um memo.
Dentro do botão irei chamar essa classe TPessoa.
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Text := TModelPessoa .New .Nome(Edit1.Text) .SobreNome(Edit2.Text) .NomeCompleto; end;
A princípio estou mostrando de uma forma mais simples para que fique melhor o entendimento, mas em próximos post estarei subindo um pouco o nível para que você consiga entender melhor o uso de interface no POO.
Observe no código acima, que chamei diretamente a classe TModelPessoa, e a chamada dos métodos eu tenho duas opções, o Create ou New.
Ao utilizarmos o New ele irá me retornar a interface, com isso já instanciando nossa classe.
Ao chamar o New, organizei o código para ficar melhor a visualização, e já tive acesso aos demais métodos.
Dessa forma já passo para o mesmo o retorno do método NomeCompleto sem ter que ficar chamando repetidas vezes a classe.
Veja agora como fica o resultado.
Agora você deve estar se perguntando como eu tive acesso aos métodos da classe simplesmente colocando o ponto.
Isso se dá pelo fato de que na interface os métodos estão retornando a própria interface.
Dessa forma ao colocar o ponto ele me dá acesso a todos os métodos mais uma vez.