[final em métodos] - Motivos obscuros em usa-los?

12 respostas
lina

Oi,

Todas as classes do projeto que estou trabalhando foram revisadas. Observei que o revisor acrescentou a quase todos os métodos o termo public final void.

Usar final em variáveis locais, ou na passagem de parâmetros tudo bem. Agora em métodos? Até onde eu sei, o final em métodos só servem para que um método da superclass não possa ser sobrescrito na classe filha. Não é?

Será que tem alguma coisa obscura nisso?

Tchauzin!

12 Respostas

nel

lina:
Oi,

Todas as classes do projeto que estou trabalhando foram revisadas. Observei que o revisor acrescentou a quase todos os métodos o termo public final void.

Usar final em variáveis locais, ou na passagem de parâmetros tudo bem. Agora em métodos? Até onde eu sei, o final em métodos só servem para que um método da superclass não possa ser sobrescrito na classe filha. Não é?

Será que tem alguma coisa obscura nisso?

Tchauzin!

Oi lina.

Acredito que não há nada de obscuro, mas que o revisor tenha feito isso justamente para não permitir que alguém altere o comportamento de determinadas classes/métodos. Todavia, é raro eu utilizar desse modificador para métodos, para não tirar a opção de sobrescrita de classes filhas, até porque 90% desenvolvo voltado a interfaces, mas tudo bem.

Você tem acesso a esse revisor ? Talvez fosse o caso de conversar com ele e perguntar porque tantos métodos receberam este modificador.

lina

nel:
lina:
Oi,

Todas as classes do projeto que estou trabalhando foram revisadas. Observei que o revisor acrescentou a quase todos os métodos o termo public final void.

Usar final em variáveis locais, ou na passagem de parâmetros tudo bem. Agora em métodos? Até onde eu sei, o final em métodos só servem para que um método da superclass não possa ser sobrescrito na classe filha. Não é?

Será que tem alguma coisa obscura nisso?

Tchauzin!

Oi lina.

Acredito que não há nada de obscuro, mas que o revisor tenha feito isso justamente para não permitir que alguém altere o comportamento de determinadas classes/métodos. Todavia, é raro eu utilizar desse modificador para métodos, para não tirar a opção de sobrescrita de classes filhas, até porque 90% desenvolvo voltado a interfaces, mas tudo bem.

Você tem acesso a esse revisor ? Talvez fosse o caso de conversar com ele e perguntar porque tantos métodos receberam este modificador.

Oi,

Pois é. Imaginei. Ele ainda não chegou. Quero ver a resposta dele quando eu perguntar! rsrs

Tchauzin!

E

Provavelmente o revisor deve ter visto que esse é uma recomendação do CheckStyle ou do PMD e não questionou os motivos.

Em particular eu acho isso péssimo, porque usar “final” não acelera o funcionamento do sistema (esse era um mito que havia a respeito do Java), e dificulta alguma correção de especificação que possa ser feita através de herança.

nel

lina:
nel:
lina:
Oi,

Todas as classes do projeto que estou trabalhando foram revisadas. Observei que o revisor acrescentou a quase todos os métodos o termo public final void.

Usar final em variáveis locais, ou na passagem de parâmetros tudo bem. Agora em métodos? Até onde eu sei, o final em métodos só servem para que um método da superclass não possa ser sobrescrito na classe filha. Não é?

Será que tem alguma coisa obscura nisso?

Tchauzin!

Oi lina.

Acredito que não há nada de obscuro, mas que o revisor tenha feito isso justamente para não permitir que alguém altere o comportamento de determinadas classes/métodos. Todavia, é raro eu utilizar desse modificador para métodos, para não tirar a opção de sobrescrita de classes filhas, até porque 90% desenvolvo voltado a interfaces, mas tudo bem.

Você tem acesso a esse revisor ? Talvez fosse o caso de conversar com ele e perguntar porque tantos métodos receberam este modificador.

Oi,

Pois é. Imaginei. Ele ainda não chegou. Quero ver a resposta dele quando eu perguntar! rsrs

Tchauzin!

rs. É claro que não conheço o sistema em questão, mas não vejo motivos para usar isso “em massa”. As vezes, podemos utilizar “uma vez ou outra”, mas em grande quantidades torna-se bastante questionável a ação. Não esqueça de postar a resposta dele rs.

entanglement:
Provavelmente o revisor deve ter visto que esse é uma recomendação do CheckStyle ou do PMD e não questionou os motivos.

Em particular eu acho isso péssimo, porque usar “final” não acelera o funcionamento do sistema (esse era um mito que havia a respeito do Java), e dificulta alguma correção de especificação que possa ser feita através de herança.

Concordo. É no mínimo crítico.

Rodrigo_Sasaki

É, essa linha já disse tudo, já vi muita coisa “estranha” em código por causa de CheckStyle e PMD.

E

Exemplo de coisas bizarras que as pessoas fazem em código por causa do CheckStyle e PMD.

Digamos que você tenha uma classe que tenha um monte de imports (isso costuma ocorrer muito porque normalmente você importa um monte de DAOs, por exemplo).

O problema é que alguém do cliente estipulou que o número de imports deveria ser no máximo X (onde X era um número indecentemente baixo).

Conclusão? Para evitar isso, as hierarquias de classes começaram a ficar muito profundas, porque você acabava tendo de contornar o problema implementando apenas alguns métodos em cada subclasse, para evitar que fossem importadas muitas classes.

Eu preferiria que as hierarquias ficassem mais rasas e que não se restringisse o número de imports. Mesmo estipular um número X muito grande vai acabar dando esse mesmo problema.

R

Encontrei em minha empresa alguns padrões de desenvolvimento que foram impostos e simplismente retiram o potencial da programação orientada a objetos, esse seu caso é extremista pois define final nos metodos. Tenho a esperença de um dia encontrar especificadores de padroes que conheçam o potencial da orientação a objetos sobre java. Espero que o bom senso seja levado em conta pois há casos e casos.

peerless

por muito tempo achava-se que isso melhoraria performance das aplicações, mas é mito. Provavelmente é um “arquiteto” a moda antiga. :smiley:

lina

Oi,

Segue a justificativa:

Foi colocado o final para garantir que o método não é estendido. Para quando visualizar a classe saber que aquele método não é estendido de nenhuma classe.

Tchauzin!

Rodrigo_Sasaki

lina:
Oi,

Segue a justificativa:

Foi colocado o final para garantir que o método não é estendido. Para quando visualizar a classe saber que aquele método não é estendido de nenhuma classe.

Tchauzin!

Não é estendido de nenhuma classe? não entendi.

Eu não posso sobrescrever um método e marcá-lo como final ?

lina

Oi,

Na verdade foi uma padronização adotada por ele. A partir de agora todo o método deverá ser criado como final e caso necessite sobrescreve-lo na classe filha, deve-se tirar essa propriedade.

Tchauzin!

nel

lina:
Oi,

Na verdade foi uma padronização adotada por ele. A partir de agora todo o método deverá ser criado como final e caso necessite sobrescreve-lo na classe filha, deve-se tirar essa propriedade.

Tchauzin!

Não era para ser ao contrário ? Na realidade, não era para ser feita uma análise e caso o comportamento do método não pudesse ser alterado, por exemplo, usufruir desse recurso? Não concordei muito com isso. Mas como me disseram uma vez, “nem sempre tu fará aquilo que quer e/ou concorda, as vezes fazemos o que não queremos simplesmente porque nos ‘mandaram’ fazer”.

É por ai né…

Criado 30 de agosto de 2012
Ultima resposta 30 de ago. de 2012
Respostas 12
Participantes 6