Princípio open-closed na prática usando Ruby

Deyvid Nascimento
2 min readDec 19, 2022

--

O princípio open-closed, um dos princípios do SOLID, diz que uma classe deve ser aberta para extensão, mas fechada para modificação. Em outras palavras, uma classe deve ser projetada de maneira a permitir que novas funcionalidades sejam adicionadas sem alterar o código existente.

Um exemplo simples de aplicação do princípio open-closed em Ruby seria uma classe de formatação de números.

Considere a seguinte classe:

class NumberFormatter
def initialize(number)
@number = number
end

def format
# formata o número de acordo com algum padrão específico
end
end

Essa classe possui um método format que formata um número de acordo com algum padrão específico. No entanto, se quisermos adicionar novos tipos de formatação, teríamos que modificar o código existente na classe NumberFormatter. Isso viola o princípio open-closed, pois estamos modificando o código existente ao invés de estender sua funcionalidade.

Para aplicar o princípio open-closed, podemos refatorar a classe NumberFormatter da seguinte maneira:

class NumberFormatter
def initialize(number, formatter)
@number = number
@formatter = formatter
end

def format
@formatter.format(@number)
end
end

class SpecificFormatter
def format(number)
# formata o número de acordo com algum padrão específico
end
end

Agora, a classe NumberFormatter é responsável por chamar o método de formatação, enquanto a classe SpecificFormatter é responsável por implementar a lógica de formatação.

Dessa forma, podemos adicionar novos tipos de formatação criando novas classes que implementem o método de formatação, sem precisar modificar o código existente na classe NumberFormatter. Isso nos permite estender a funcionalidade da classe sem violar o princípio open-closed.

--

--

Deyvid Nascimento