DEV Community

Programação procedural orientada a classes

Vinicius Dias on April 13, 2020

Farsa da programação Orientada a Objetos Acredito que todos concordamos que a programação Orientada a Objetos torna nosso código mais le...
Collapse
 
raphaeldasilva profile image
Raphael da Silva • Edited

Eu passei por algumas fases no meio do processo de tentar entender programação orientada a objetos. Escrevi um post sobre isso. No começo a gente acha que está usando objetos de verdade e mal sabe a profundidade dos assuntos.

Collapse
 
mhgontijo profile image
Matheus Gontijo

Excelente reflexão, Vinícius. Obrigado por compartilhar conhecimento ;- )

Curioso em ~ouvir~ ler você sobre: Se a classe Pessoa tivesse +40 atributos, você não acha que o __construct ficaria longo demais?

Collapse
 
cviniciussdias profile image
Vinicius Dias PHP Rio • Edited

Opa, obrigado demais pelo feedback.

Existe uma "regra" no conceito de Object Calisthenics que diz que um método não deve possuir mais de 2 parâmetros.

Embora eu acredite ser um exagero, a sugestão de solução poderia ser aplicada a esse caso.

Muito provavelmente desses 40 atributos, vários deles seriam relacionados e passíveis de extração para uma nova classe.

Exemplo simples. Antes:

class Pessoa
{
    public function __construct(string $primeiroNome, string $ultimoNome, string $dddTelefone, string $numeroTelefone)
    {
        // ...
    }
}

Depois:

class Pessoa
{
    public function __construct(Nome $nome, Telefone $telefone)
    {
        // ...
    }
}

Assim ganhamos ainda mais em coesão, tirando possíveis responsabilidades de validação desses atributos da classe Pessoa.

Entendeu a ideia? O que acha?

Collapse
 
hilderjares profile image
Hilderjares(sid)

Penso eu que quando uma classe chega a ter esse tando de atributos, ela foi mal pensanda; é uma classe que tem muitas responsabilidades.

Thread Thread
 
cviniciussdias profile image
Vinicius Dias PHP Rio

Muito provavelmente, sim!

Thread Thread
 
mhgontijo profile image
Matheus Gontijo

Uhmmm sim! Até aqui todos concordamos plenamente ;- ) Quando o assunto são classes de negócios, +40 atributos é algo altamente doloroso. É muita "gente" envolvida para a mesma classe. Exemplo: EnvieEmailDeAniversario. Quebra SRP completamente.

O lance "desafiador" aqui é a ampla interpretação do problema... O que gostaria de saber é em relação a classes de "entidades"... Veja Pessoa, Corretor, Jogador, Cliente. Obviamente, podemos extrair e distribuir os atributos em diferentes responsabilidades. No entanto, é possível que mesmo após uma boa distribuição de responsabilidades, e um cuidado imenso em quais responsabilidades cada classe deve ter, tenhamos classes com muitos atributos. Vamos dizer que de ~60 atributos requisitados consigamos enxugar para 25, em algumas outras entidades. Ainda sim temos um número considerável de atributos no __construct. Essa foi a ideia inicial.

O que acham? Gostaria de ouvir vocês.

Thread Thread
 
cviniciussdias profile image
Vinicius Dias PHP Rio

Entendi seu ponto, mas continuaria sendo um caso de má abstração uma classe ter esse número de atributos.

Você consegue compartilhar um gist com um exemplo real pra poder analisar um ponto mais concreto?

:-D