Princípio da substituição de Liskov

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

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 q(x) é uma propriedade demonstrável dos objetos x de tipo T. Então q(y) deve ser verdadeiro para objetos y de tipo S onde S é um subtipo de 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.

Projeto por contrato[editar | editar código-fonte]

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). Visitado em 6 de julho de 2007.
  2. Barbara Liskov. Behavioral Subtyping Using Invariants and Constraints (em inglês). Visitado em 6 de julho de 2007.