O uso de composição em Python é mais aconselhável do que Heranças Múltipla?
O uso de composição em Python é mais aconselhável do que Heranças Múltipla?
Oi Fredson, tudo bom?
Acredito que em qualquer linguagem tanto a herança quanto a composição tem suas vantagens e desvantagens.
Um bom macete pra saber quando utilizar um ou outro no dia-a-dia é colocar os verbos ser e ter entre suas classes.
Por exemplo, uma classe Gerente e Funcionario.
Gerente é Funcionario?
Se a resposta pra essa pergunta for sim, você tem um vinculo semantico entre elas e, por isso, a herança pode ser uma boa saida.
Por outro loado, se o cenário fosse Gerente e SeguroDeVida
Gerente tem Seguro de vida?
Se a resposta for sim, aqui temos um caso bom de composição.
Claro que esse macete tem seus buracos mas se aplica bem pra uns 95% dos casos =)
Agora quanto a questão de heranças multiplas, em boa parte das linguagens orientadas a objeto isso nem é permitido. Isso porque o vinculo que a herança gera entre uma classe e outra é muito alto e, qualquer alteração em uma classe mãe pode gerar problemas em diversas classes filhas que a gente pode deixar passar e gerar comportamentos inespearados (bugs).
Normalmente, a herança é única pra garantir que esse alto acoplamento aconteça apenas uma vez e não gere uma arvore de propagação.
Porém, se sua herança for apenas de classes abstratas com métodos abstratos (algo parecido com uma interface) o problema do acoplamento já tende a amenizar já que estamos apenas extendendo comportamentos.
Acredito que aqui a gente tenha um problema com o suporte do python ao paradigma O.O. (interfaces fazem falta rs), mas podemos amenizar isso com boas práticas =)
Abraço