pt.wikipedia.org

Princípio da substituição de Liskov – Wikipédia, a enciclopédia livre

Origem: Wikipédia, a enciclopédia livre.

Barbara Liskov

Na programação orientada a objeto, o princípio da substituição de Liskov é uma definição particular para o conceito de subtipo. Foi introduzido em 1993 por Barbara Liskov e Jeannette Wing através de um artigo de nome Family Values: A Behavioral Notion of Subtyping.[1] Para outra definição de subtipo ver tipo de dado.

O princípio foi definido de forma resumida como:[2]

Se {\displaystyle q(x)} é uma propriedade demonstrável dos objetos {\displaystyle x} de tipo {\displaystyle T}. Então {\displaystyle q(y)} deve ser verdadeiro para objetos {\displaystyle y} de tipo {\displaystyle S} onde {\displaystyle S} é um subtipo de {\displaystyle T}.

Portanto, a visão de "subtipo" defendida por Liskov e Wing é baseada na noção da substituição; isto é, se S é um subtipo de T, então os objetos do tipo T, em um programa, podem ser substituídos pelos objetos de tipo S sem que seja necessário alterar as propriedades deste programa.

O princípio da substituição de Liskov tem um relacionamento próximo com a metodologia do projeto por contrato e coloca restrições na forma como os contratos interagem com o conceito de herança:

  • precondições não podem ser reforçadas em uma sub-classe. Isto significa que não é permitida uma sub-classe com precondições mais fortes que a sua super-classe.
  • condições posteriores não podem ser enfraquecidas em uma sub-classe. Isto significa que não é permitida uma sub-classe que contém condições posteriores mais fracas que a super-classe.

Em adição, o princípio implica que os métodos das sub-classes não podem lançar exceções não lançadas pela super-classe, exceto quando estas exceções são subtipos das exceções lançadas pelos métodos da super-classe. Ver covariância e contravariância.

Uma função, que utiliza uma hierarquia de classes que viola este princípio, precisa de uma referência para a classe base e ainda assim precisa de referências para as sub-classes da classe base. Esta função viola o princípio aberto/fechado pois precisa ser modificada quando uma nova sub-classe é criada.

Referências

  1. Barbara Liskov, Jeannette Wing. «Family Values: A Behavioral Notion of Subtyping» (em inglês). Consultado em 6 de julho de 2007
  2. Liskov, Barbara; Wing, Jeannette. «Behavioral Subtyping Using Invariants and Constraints» (PDF) (em inglês). Consultado em 29 de dezembro de 2024