Skip to the content.
Skip to the content.

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.

copy
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.

copy
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.