Princípio da substituição de Liskov

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
NoFonti.svg
Esta página ou secção cita fontes confiáveis e independentes, mas que não cobrem todo o conteúdo (desde janeiro de 2016). Por favor, adicione mais referências e insira-as corretamente no texto ou no rodapé. Material sem fontes poderá ser removido.
Encontre fontes: Google (notícias, livros e acadêmico)

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). Consultado em 6 de julho de 2007. 
  2. Barbara Liskov. "Behavioral Subtyping Using Invariants and Constraints" (em inglês). Consultado em 6 de julho de 2007.  Texto ", Jeannette Wing" ignorado (Ajuda)