O - Open-Closed

Introdução

O princípio SOLID é um conjunto de cinco princípios de design de software que visam tornar o código mais fácil de entender, manter e estender. Cada letra do acrônimo SOLID representa um desses princípios.

O - Open-Closed

Este princípio afirma que as classes devem estar abertas para extensão, mas fechadas para modificação. Se você deseja que a classe execute mais funções, a abordagem ideal é adicionar funções ao invés de alterá-las.

Esse princípio visa estender o comportamento de uma classe sem alterar o comportamento existente dessa classe. Isso evita causar bugs onde quer que a classe esteja sendo usada.

Exemplo - Violação do Princípio Open-Closed

O exemplo abaixo viola o OCP

<?php
class Programmer
{
    public function code()
    {
        return 'coding';
    }
}

class Tester
{
    public function test()
    {
        return 'testing';
    }
}

class ProjectManagement
{
    public function process($member)
    {
        if ($member instanceof Programmer) {
            $member->code();
        } elseif ($member instanceof Tester) {
            $member->test();
        };

        throw new Exception('Invalid input member');
    }
}

Exemplo do Princípio Open-Closed:

O Exemplo abaixo demonstra como podemos fazer uso do OCP.

<?php
interface Workable
{
    public function work();
}

class Programmer implements Workable
{
    public function work()
    {
        return 'coding';
    }
}

class Tester implements Workable
{
    public function work()
    {
        return 'testing';
    }
}

class ProjectManagement
{
    public function process(Workable $member)
    {
        return $member->work();
    }
}

Conclusão

Ao utilizarmos o princípio do OCP fica fácil adicionarmos mais funções para as classes do sistema.