Exemplo de LSP usando Ruby no mundo real

Deyvid Nascimento
2 min readJan 10, 2023

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.

--

--