... var Arquivo : TArquivoTXT; begin Arquivo := TArquivoTXT.Create; try Arquivo.GerarArquivo; finally Arquivo.Free; end; end;
Na implementação de nossas classes vemos que possuímos a geração de arquivos diferentes.
type TArquivo = class procedure GerarArquivo; virtual; abstract; end; type TArquivoTxt = class(TArquivo) procedure GerarArquivo; override; end; type TArquivoWord = class(TArquivo) procedure GerarArquivo; override; end;
... var Arquivo : TArquivo; begin Arquivo := TArquivo.Create; try Arquivo.GerarArquivo; finally Arquivo.Free; end; end;
O que fazer para atender o principio de Liskov?
Neste ponto não iremos programar orientado a classe e sim orientado a interface.
Veja o código abaixo.
type iArquivo = interface procedure GerarArquivo; end; type TArquivoTxt = class(TInterfacedObject,iArquivo) procedure GerarArquivo; end; type TArquivoWord = class(TArquivoTxt) procedure GerarArquivo; end;
Criamos uma interface e uma classe que a implementa, e as demais classe herda dessa classe.
Nosso código irá sofrer uma pequena alteração, onde nossa variável não terá seu tipo a classe e sim a interface, desta forma podemos alterar a geração de arquivos para qualquer um tipo TXT,Word, ect…
Como a classe Pai implementa a interface iArquivo, as classes que descendem dela também a implementa por herança, podemos alterar a geração sem que venhamos violar o principio de Liskov.
... var Arquivo : iArquivo; begin Arquivo := TArquivoTxt.Create; Arquivo.GerarArquivo; end;
Agora vamos gerar para Word.
... var Arquivo : iArquivo; begin Arquivo := TArquivoWord.Create; Arquivo.GerarArquivo; end;
Vê como seguindo os padrões de Clean code nossos códigos ficam mais limpos e de fácil implementação, esse e outros padrões SOLID você pode encontrar em nosso curso de CLEAN CODE.
No nosso treinamento CLEAN CODE E BOAS PRATICAS DE PROGRAMAÇÃO EM DELPHI você aprenderá não só a usar o principio de Liskov, irá aprender de forma prática, técnicas que irão te ajudar a ter um código bem estruturado, organizado e preparado para as mudanças repentinas, afinal sabemos que a todo o momento seja por força do governo ou por solicitações de clientes, precisamos realizar alterações em nossos projetos, então porque não ter um código já preparado para essas mudanças? No treinamento, eu desenvolvi um método que alinha exemplos reais de aplicação das técnicas para resolver problemas do dia a dia, Como:
* Reutilização de código
* Fácil adaptação a novas tecnologias / componentes
* Fácil implementação de novas features
* Até 70% de redução no tempo de manutenção do código
* Redução de Bugs na entrega de novas implementações