Uso de static em OOP: escolhendo a arma correta

Já vi sistemas desenvolvidos em linguagens orientadas a objetos em que todos os métodos das classes eram estáticos. Uma vez perguntei para uma pessoa o motivo dela estar programando dessa maneira. Ela não soube me responder.

Bom, por que não devemos colocar static em todos os métodos? Para mim, a melhor resposta é comparar o uso de métodos static com o uso de baionetas.

Baioneta montada em um M-16

Antes do uso da pólvora, as guerras eram travadas geralmente em combate corpo-à-corpo, com o uso de objetos cortantes como espadas ou machados.

No final do século XVIII, na França, começaram a ser produzidas as primeiras baionetas. Baioneta é uma arma branca de curto alcance que pode ser presa na ponta de um fuzil. Dessa maneira, em situações especiais como combate próximo (trincheiras) ou simplesmente falta de munição, os soldados possam utilizar suas armas de fogo como lanças.

Mas é claro que atualmente, na maioria das situações, é preferível utilizar fuzis com o objetivo que eles foram criados: disparar projéteis!

E o que isso tem a ver com orientação a objetos e uso de métodos estáticos? Antes da orientação a objetos, os programas eram codificados levando-se em consideração o paradigma procedural, que é basicamente o jeito que trabalhamos quando usamos métodos estáticos: sub-rotinas manipulando estruturas de dados. Isso é diferente da orientação a objetos, onde as sub-rotinas e estruturas de dados são “mesclados” em objetos.

Pois bem, utilizar métodos estáticos em programação orientada a objetos (descontroladamente, que fique bem claro) é como se estivéssemos retrocedendo e utilizando uma ferramenta de forma arcaica, sem obter seus principais benefícios. É a mesma coisa que utilizar um rifle equipado com uma baioneta como lança sendo que você tem munição de sobra e está em campo aberto! O uso desregrado de métodos estáticos mata o que a OOP tem de melhor: polimorfismo, herança, etc. É claro que em casos especiais iremos precisar de métodos estáticos, mas isso tende a ser exceção.

Concluíndo, o uso de métodos estáticos em linguagens orientadas a objetos como C# ou Java não é errado, desde que se saiba o que está fazendo. Dê preferência ao uso de métodos de instância em OOP para tirar o melhor proveito, mas principalmente dê preferência ao bom-senso…

[]’s

Comentários

Postagens mais visitadas deste blog

Trocando configurações padrão do Live TIM

Uma proposta de Clean Architecure com Modelo de Atores

Testes automatizados em sistemas autenticados com certificados digitais, usando Selenium e PhantomJS