SOLID (3/5)
Um dos conceitos mais solicitados hoje no mundo do desenvolvimento é o conhecimento de SOLID. Nesse post, vamos explorar o LSP - Liskov Substitution Principle.
O LSP, ou Princípio de Substituição de Liskov, Foi criado por Barbara Liskov em 1987. Esse princípio diz que objetos de uma classe derivada deve poder substituir objetos da classe base sem alterar o comportamento esperado do programa.
Ou seja se uma classe Pessoa
é uma classe base e temos uma classe Funcionario
que herda de Pessoa
, então podemos substituir um objeto do tipo Pessoa
por um objeto do tipo Funcionario
sem que o comportamento esperado do programa seja alterado.
public class Pessoa {
public string Nome { get; set; }
}
public class Funcionario : Pessoa {
public string Cargo { get; set; }
}
public class Cliente : Pessoa {
public string Email { get; set; }
}
public class TesteLSP {
public void Exemplo() {
Pessoa pessoa = new Funcionario();
pessoa.Nome = "João";
// Comportamento esperado, não altera o comportamento do programa
Console.WriteLine(pessoa.Nome);
}
}
Porém, além de herança, o LSP também se aplica a interfaces. Se uma classe implementa uma interface, ela deve ser capaz de substituir qualquer implementação dessa interface sem alterar o comportamento esperado do programa.
public interface IPessoa {
string Nome { get; set; }
void ExibirNome();
}
public class Funcionario : IPessoa {
public string Nome { get; set; }
public void ExibirNome() {
Console.WriteLine(Nome);
}
}
public class Cliente : IPessoa {
public string Nome { get; set; }
public void ExibirNome() {
Console.WriteLine(Nome);
}
}
public class TesteLSP {
public void Exemplo() {
var pessoas = new List<IPessoa>();
pessoas.Add(new Funcionario { Nome = "João" });
pessoas.Add(new Cliente { Nome = "Maria" });
foreach (var pessoa in pessoas) {
pessoa.ExibirNome();
}
}
}
Apesar do exemplo ser bastante simples, podemos ver que o LSP é fundamental para um código flexível e reutilizável.