Segue abaixo os 7 Princípios de Projeto de Software:
- S -> Single Responsiblity Principle (Princípio da responsabilidade única)
- O -> Open-Closed Principle (Princípio Aberto-Fechado)
- L -> Liskov Substitution Principle (Princípio da substituição de Liskov)
- I -> Interface Segregation Principle (Princípio da Segregação da Interface)
- D -> Dependency Inversion Principle (Princípio da inversão da dependência)
- Prefira Composição a Herança
- Demeter
Abordaremos 4 desses princípios para explicar a importância de sua utilização, sendo eles
- Open-Closed Principle (Princípio Aberto-Fechado)
- Liskov Substitution Principle (Princípio da Substituição de Liskov)
- Dependency Inversion Principle (Princípio da inversão da dependência)
- Prefira Composição a Herança
Principios-SOLID/open_close.cpp
Lines 6 to 43 in 5de5f45
Observe que em ambos os métodos calcular da classe FolhaDePagamento, é preciso passar por parâmetro o tipo do contrato, o qual queremos realizar o cálculo do saldo, para então chamar o método correspondente a esse tipo, CLT ou Estágio. Esse tipo de código, além do forte acolamento da classe, não é extensível. Sendo que, caso queira acrescentar um novo tipo de contrato, será preciso modificar a classe FolhaDePagamento. Fato este que viola o príncipio de Aberto-Fechado, que diz que uma classe deve estar Aberta para Extensão e Fechada para Modificação.
class FolhaDePagamento{
protected:
double saldo;
public:
void calcular(ContratoClt* contrato){
this->saldo = contrato->salario();
}
void calcular(ContratoEstagio* contrato){
this->saldo = contrato->bolsaAuxilio();
}
};Nesse exemplo, para o código estar de acordo com o princípio Aberto-Fechado, precisaremos criar uma interface que tenha um método abstrato para calcular o tipo de remuneração para que as classes de contrato possam utilizá-lo da maneira que lhe for viável.
Observe o [código melhorado] (
Principios-SOLID/open_close.cpp
Lines 47 to 75 in df476fb