🎯 Desvendando o Princípio do Aberto/Fechado (OCP)🔓🔒

Miguel Batista
2 min readDec 11, 2023

--

O Princípio do Aberto/Fechado (Open/Closed Principle — OCP) afirma que as classes, módulos e entidades de software devem estar abertos para extensão, mas fechados para modificação. Isso significa que você deve ser capaz de adicionar novos recursos ou funcionalidades a um sistema sem alterar o código existente. Vou fornecer um exemplo em C# que ilustra o OCP:

Suponha que temos um sistema que calcula o custo de envio de produtos, e queremos estender esse sistema para calcular descontos com base no tipo de cliente. Para seguir o OCP, vamos criar uma estrutura que permita a extensão sem modificação do código existente.

using System;

// Interface para definir um contrato para calculadores de custo de envio.
interface IShippingCalculator
{
double CalculateShippingCost(double orderAmount);
}

// Implementação inicial do calculador de custo de envio.
class StandardShippingCalculator : IShippingCalculator
{
public double CalculateShippingCost(double orderAmount)
{
return orderAmount * 0.05; // Taxa de envio padrão.
}
}

// Nova funcionalidade: calculador de custo de envio com desconto para clientes premium.
class PremiumShippingCalculator : IShippingCalculator
{
public double CalculateShippingCost(double orderAmount)
{
return orderAmount * 0.02; // Taxa de envio com desconto para clientes premium.
}
}

class Program
{
static void Main()
{
// Usando os calculadores de custo de envio sem modificar o código existente.
IShippingCalculator standardCalculator = new StandardShippingCalculator();
double standardShippingCost = standardCalculator.CalculateShippingCost(100.0);
Console.WriteLine("Custo de envio padrão: $" + standardShippingCost);

IShippingCalculator premiumCalculator = new PremiumShippingCalculator();
double premiumShippingCost = premiumCalculator.CalculateShippingCost(100.0);
Console.WriteLine("Custo de envio premium: $" + premiumShippingCost);
}
}

Neste exemplo, temos uma interface IShippingCalculator que define um contrato para calculadores de custo de envio. Em seguida, temos a implementação inicial StandardShippingCalculator, que segue o OCP.

Quando desejamos adicionar uma nova funcionalidade, como calcular o custo de envio com desconto para clientes premium, criamos uma nova classe PremiumShippingCalculator que também segue o OCP ao implementar a mesma interface.

Isso nos permite estender o sistema sem alterar o código existente, demonstrando o princípio do Aberto/Fechado 👏

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Miguel Batista
Miguel Batista

Written by Miguel Batista

Formado em Sistemas para Internet, sempre em contato com programação de software. Aprender e compartilhar conhecimento para soluções tech de qualidade.

No responses yet

Write a response