Exemplo de LSP usando Ruby no mundo real
LSP (Liskov Substitution Principle) é um princípio do SOLID que diz que “subtipos devem ser substituíveis por seus tipos base”.
Em outras palavras, se você tem uma classe base e uma classe derivada, a classe derivada deve ser capaz de ser usada no lugar da classe base sem quebrar o código.
Um exemplo no mundo real, onde existem 2 classes:
- Estoque <- Classe base (ou classe pai)
class Estoque
def initialize
@itens = []
end
def adicionar_item(item)
@itens << item
end
def remover_item
@itens.pop
end
end
- EstoqueLimitado <- Classe derivada (ou classe filho)
class EstoqueLimitado < Estoque
def initialize(limite)
super()
@limite = limite
end
def adicionar_item(item)
raise EstoqueExcedidoError if @itens.size >= @limite
super
end
end
Aqui estamos criando uma instância de Estoque e adicionando e removendo itens
estoque = Estoque.new
estoque.adicionar_item("item 1")
estoque.adicionar_item("item 2")
estoque.remover_item
Aqui estamos criando uma instância de EstoqueLimitado com um limite de 10 itens e adicionando e removendo itens
estoque = EstoqueLimitado.new(10)
estoque.adicionar_item("item 1")
estoque.adicionar_item("item 2")
estoque.remover_item
Aqui estamos criando uma instância de EstoqueLimitado com um limite de 1 item e tentando adicionar um segundo item, o que deve gerar uma exceção
estoque = EstoqueLimitado.new(1)
estoque.adicionar_item("item 1")
begin
estoque.adicionar_item("item 2")
rescue EstoqueExcedidoError
puts "Não é possível adicionar mais itens, o estoque está cheio"
end
OBS: Código está em português para ficar mais didático.