🎯 Desvendando o Princípio do Aberto/Fechado (OCP)🔓🔒
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 👏