Aplicando os princípios SOLID com AdvPL/TL++ (Parte 3— LSP)

Eduardo Riera
TOTVS Developers
Published in
2 min readMay 7, 2018

Liskov Substitution Principle

“Se q (x) é uma propriedade demonstrável dos objetos do tipo T. Então q (y) é um verdadeiro objeto para objetos de tipo S, onde é um subtipo de T”.

Este talvez seja um dos princípios mais difíceis de compreender. Ela foi elaborada por Barbara Liskov e Jeannette Wing em 1994.

Este principio define o uso de um dos conceitos mais importantes da programação orientada à objetos, a herança.

A herança possibilita que as entidades do software possam ser extensíveis e reaproveitas. Na herança temos dois tipos de classes:

  • Classe Base
  • Classe Derivada

Chamamos de Base a classe que concede as características a uma outra classe e de Derivada a classe que herda. Agora que conceituamos os tipos de classes, vamos a um enunciado mais simples do LSP.

"Toda classe derivada deve ser substituível por sua classe pai"

Class Report From LongClassName

Method Gerar()

EndClass

Method Gerar() Class Report

Return(Nil)

Class ReportPdf From Report

Method Gerar()

EndClass

Method Gerar() Class ReportPdf

Return(Nil)

Class ReportWord From Report

Method Gerar()

EndClass

Method Gerar() Class ReportWord

Return(lSucess)

Class RunReports From LongClassName

Method RunReport()

EndClass

Method RunReport(aObjects) Class RunReports

Local nX

For nX := 1 To Len(aObjects)

aObjects[nX]:Gerar()

Next nX

O exemplo acima demonstra a aplicação do LSP, se observamos o método "Gerar" da Classe ReportPdf, ele pode ser substituído pelo da classe Base Report. Porém o mesmo não é verdadeiro no caso da classe ReportWord, pelo fato de terem retornos diferentes, o que "quebraria" o software.

O uso deste principio, nos remete a um uso mais adequado da herança, evitando o seu uso para propostas diferentes do que uma extensão da classe, deixando o código fonte organizado, extensível, coeso e sem as famosas "gambiarras".

--

--

Eduardo Riera
TOTVS Developers

Software engineer, ERP specialist and enthusiast technology, helping companies in the era of digital transformation.