segunda-feira, 7 de setembro de 2015

Composição versus Herança

Muitos hoje na equipe atual que estou me perguntam qual é melhor, usar herança ou composição na escrita de seus códigos? A minha resposta é sempre a mesma depende do código que será escrito e considerar vários pontos em questão.

Temos que levar em consideração o acoplamento, a manutenção desses objetos, se estamos usando adequadamente os objetos criados, entre outros fatores. As vezes digo que na dúvida use composição e veja até que ponto sua classe será escrita corretamente e não irá fugir do objetivo que ela foi construído.

Segue a explicação de herança para compararmos com composição. Herança é um objeto É UM, onde ele estende a classe de forma que ela vira do tipo da classe, um exemplo clássico é a classe Cachorro estende Animal, então a classe Cachorro acabou de virar do tipo animal, assim herdando os vários atributos e métodos públicos.





Já a composição ela passa no teste TEM UM, a classe possuí o objeto da classe X, exemplo é a classe Ferrari tem um objeto MotorV12, quando for olhar no código tem um objeto instanciado de MotorV12 e assim por diante. Não necessariamente temos criar uma dependência da classe estendendo a mesma, podemos usar composição para acessar métodos específicos.





Após a explicação de ambos, a questão que temos sobre qual usar depende muito do código que iremos escrever, as vezes ficamos tanto na dúvida que é melhor criar de uma forma e ver até onde é benéfico e depois refatorar o código de forma que seja bem escrito. Sempre falo que composição deve ser usado com muita sabedoria pois as vezes temos instâncias de objetos que nem fazem parte da classe, ou métodos de MotorV12 na classe Volante, onde não tem nada haver.

Sempre solicito a equipe um pensar de alto nível e abstrato, as vezes o estender uma classe resolve mais que criar uma instância da classe, hoje em dia várias pessoas dizem é melhor usar composição que herança, será?

Não mesmo, pois composição e herança tem suas particularidades e nem sempre a escrita daquele código é daquele jeito mesmo. Como eu disse anteriormente tem que parar pensar e analisar, pois as vezes vale a pena escrever um código usando composição e o outro código é melhor usar herança.

Fica a dica, pare, pense, análise e depois execute....