Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Princípios de Projeto de Software

Documentação sobre a utilização dos Princípios de Projeto de Software, como o SOLID.

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

  1. Open-Closed Principle (Princípio Aberto-Fechado)
  2. Liskov Substitution Principle (Princípio da Substituição de Liskov)
  3. Dependency Inversion Principle (Princípio da inversão da dependência)
  4. Prefira Composição a Herança

Exemplo Open-Closed Principle

[code](
class ContratoClt{
private:
string funcionario;
public:
ContratoClt(string funcionario){
this->funcionario = funcionario;
}
double salario(){
// double valor;
// return valor;
}
};
class ContratoEstagio{
private:
string funcionario;
public:
double bolsaAuxilio();
};
class FolhaDePagamento{
protected:
double saldo;
public:
void calcular(ContratoClt* contrato){
this->saldo = contrato->salario();
}
void calcular(ContratoEstagio* contrato){
this->saldo = contrato->bolsaAuxilio();
}
};
)

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] (

class Interface{
public:
virtual double remuneracao() = 0;
};
class ContratoClt:public Interface{
public:
double remuneracao(){};
};
class ContratoEstagio:public Interface{
public:
double remuneracao(){};
};
class NovoContrato:public Interface{
public:
double remuneracao(){};
};
class FolhaDePagamento{
protected:
double saldo;
public:
void calcular( Interface* contrato){
this->saldo = contrato->remuneracao();
}
};
)

About

Documentação sobre a utilização dos Princípios de Projeto de Software, como o SOLID.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages