Sem duvida esse é o mais difícil de entender quando é apresentado pela primeira vez.

Simplificando, se a classe A for um subtipo da classe B , poderemos substituir B por A sem interromper o comportamento do nosso programa.Isso pode ser formulado matematicamente como

Se F(x) é uma propriedade demonstrável sobre objetos x de tipo B .
Então
F(y) deve ser verdadeiro para objetos y de tipo A , em que A é um subtipo de B .

De maneira mais geral, afirma que os objetos em um programa devem ser substituíveis por instâncias de seus subtipos sem alterar a correção desse programa.

Vamos dar uma olhada em um exemplo de como violar esse princípio

Uma classe pessoaJuridica herdando de PessoaFisica violaria o LSP, pois uma pessoa jurídica não pode executar o Metodo Andar().

Porém se adicionarmos no conceito a classe Pessoa.cs

Pessoa — classe Pai, classe Base ou SuperClasse

  • PessoaFisica — classe Filha ou sub-classe
  • PessoaJuridica — classe Filha ou sub-classe

- A classe Pessoa é a classe genérica;
- As classes PessoaJuridica e PessoaFisica são especializações;

- PessoaFisica É uma pessoa;
- PessoaJuridica É uma pessoa;

Vamos lembrar os conceitos de herança: Quando uma classe herda de outra classe dissemos que temos a relação “É Um”.

Quando a classe PessoaJuridica ou PessoaFisica herda da classe Pessoa, ela passa a ser uma classe Pessoa estendida, pois contém todos os métodos e propriedades de Pessoa (nome e endereço) e mais as suas próprias funcionalidades (CPF ou CNPJ).

O método Andar() passou a ser uma especialização da classe PessoaFisica.

Tentei ser o mais simples possível para explicar, porém esse principio é um pouco mais complicado que os outros.

Mais artigos SOLID

Parte 1 — Inicio

Parte 2 — SRP

Parte 3 — OCP

Parte 4 — LSP — em breve

Parte 5 — ISP — em breve

Parte 6 — DIP — em breve

--

--

Jones Roberto Nuzzi

Associado | Arquitetura de Sistemas na Riza Asset, Sempre focado em desenvolvimento de sistemas para o mercado financeiro, com mais de 15 anos de experiência!