SOLID Padrões de Projeto Open Closed (Classes abertas/fechadas)

SOLID Padrões de Projeto Open Closed.

SOLID Padrões de Projeto Open Closed, este é o segundo post sobre SOLID.

Classes devem ser abertas para serem estendidas(herança), mas fechadas para serem modificadas.

Uma classe é aberta quando somos capazes de estender está classe por herança. Oque é herança em Orientação Objetos? Bom, vamos relembrar um pouco sobre isto.

A herança é um recurso utilizado na POO, para que uma outra classe possa reaproveitar a estrutura de uma outra classe. Exemplo prático: Temos uma classe para representar os

funcionários de uma empresa ela é capaz de representar as características e comportamentos gerais dos funcionários e temos no sistemas outros tipos de funcionários: como o gerente,

contador e o estagiário. Todos são funcionários, mas cada um tem algumas regras específicas que serão tratadas em uma nova classe, como por exemplo um método para calcular o salário.

Isso permite a classe filho herdar os métodos e propriedades da sua classe pai.

Vamos ver isso com um exemplo prático.

Temos uma classe responsável por conectar com o servidor
A nossa classe se conecta ao nosso servidor por ftp.

class Conexao { 
 
  public $host; 
  public $port; 
  public $stusuario; 
  public $stsenha; 
  
  function conectarFtp() { 
  }

}

Agora queremos uma classe para conectar por ssh. A nossa classe conexão, vai precisar ser alterada para atender a este novo recurso.
Então seguem as alterações:

class Conexao { 
  
  public $host; 
  public $port; 
  public $stusuario; 
  public $stsenha; 
  
  public function conectarFtp() { 
  } 
  
  public function conectarSSH() { 
  }

}

Foi preciso alterar a nossa classe Conexão e isso quebra o que foi proposto no princípio aberto/fechado. (Aberto para extensão e fechado para alteração).

Agora vamos refatorar esse código:

interface Conexao {
  
 public function conectarServidor()

}

class Ftp implements Conexao { 

  public function conectarServidor() { 
    echo 'Conecta por ftp no servidor'; 
  }

}

class SSH implements Conexao { 
  
  public function conectarServidor() { 
    echo 'Conecta por ssh no servidor'; 
  }

}

Desta forma a nossa classe segue o principio aberto/fechado.

E caso seja preciso adicionar um novo protocolo para conexão com servido, nós criamos uma nova classe que implemente a nossa interface.

Siga e compartilhe:
error

Deixe um comentário

Enter Captcha Here : *

Reload Image