image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Giuliano Criscuoli
Giuliano Criscuoli03/02/2025 09:44
Compartilhe

SOLID: Princípio Aberto/Fechado

  • #PHP

O que é o princípio aberto fechado

O Princípio Aberto/Fechado é fundamental para criar um código fácil de estender, permitindo adicionar novas classes, métodos ou funções sem alterar o que já está funcionando. Isso reduz o risco de bugs e melhora a escalabilidade do sistema.

"Entidades de software (classes, módulos, funções, etc.) devem estar abertas para extensão, mas fechadas para modificação."

Isso significa que você deve projetar seu código de forma que novos comportamentos possam ser adicionados sem alterar o código existente.

Exemplo de código

// Contrato.php
<?php

interface TipoContrato {
  public function remuneracao();
}

class Contrato {
  private $tipoContrato;

  public function __construct(TipoContrato $tipoContrato) {
      $this->tipoContrato = $tipoContrato;
  }

  public function tipoRemuneracao() {
      return $this->tipoContrato->remuneracao();
  }
}
    
// ContratoCLT.php
<?php

class ContratoCLT implements TipoContrato {
public function remuneracao() {
  return "2000R$";
}
}
// ContratoPJ.php

<?php

class ContratroPJ implements TipoContrato {
  public function remuneracao() {
      return "3000R$";
  }
}
// index.php

<?php

require 'Contrato.php';
require 'ContratoCLT.php';
require 'ContratoPJ.php';

$contrato = new Contrato(new ContratoCLT);

echo $contrato->tipoRemuneracao();

Conclusão

O objetivo é fazer com que a classe Contrato não precise conhecer o tipo específico de contrato que está sendo utilizado. Ela só precisa saber que existe um método definido pela interface e que ele será implementado de acordo com o tipo de contrato passado no construtor. Isso simplifica a criação de novas classes, caso seja necessário adicionar um terceiro tipo de contrato, sem a necessidade de alterar o código que já está funcionando. Com isso, temos mais autonomia para implementar e escalar o código, reduzindo o risco de bugs em classes que já foram desenvolvidas.

Redes Sociais

🔗 GitHub: github.com/GiulianoCriscuoli

🔗 LinkedIn: Giuliano Criscuoli

🔗 Instagram: @southlaser

Compartilhe
Comentários (0)