vale a pena criar uma especialização de BigDecimal?  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
bonfarj
Java Ninja
[Avatar]

Membro desde: 28/03/2006 09:55:47
Mensagens: 298
Offline

Vamos começar a usar BigDecimal aqui na empresa e reparei que ele não possui métodos para comparação. Podemos sua implementação do compareTo(), mas queríamos algo mais simples, como um método "BigDecimal.greaterThen(BigDecimal)" que retorne um boolean. Para isso, pensamos em criar uma especialização de BigDecimal, algo como:



Quais seriam as desvantagens dessa solução? Estou pensando em fazer um teste no Hibernate, não sei se ele conseguiria transformar uma informação armazenada no banco de dados com o tipo de dado DECIMAL (MySQL) em um objeto da classe MyBigDecimal.

Abraços a todos!

IGOR BRITO ALVES
@igoralves
von.juliano
GUJ Master
[Avatar]

Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline

Essa é a mágica da herança, se a uma classe não satisfaz suas necessidades por estar "incompleta", criar uma classe persnalizada à partir dela é sem dúvida uma ótima saída. Suponho que BigDecimal.greaterThen(BigDecimal) não é a única coisa que vc pretende implementar, então vai fundo!

Quanto ao hibernate, creio que isso tb não vai gerar problemas, pois se vc implementar uma classe derivada de BigDecimal, sua classe tb será um BigDecimal!

Blz? Flw!

É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!

Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/
[Email] [WWW]
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

É válido, para cobrir necessidades....
Mas se tivéssemos classes abertas a coisa ficaria interessante.

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Acho que não vale a pena; é melhor ter uma classe Calc que use BigDecimal para facilitar as contas.
Embora BigDecimal não seja "final" acho que ela deveria ser considerada como "final", como a classe String.

Um exemplo (é claro que eu não tenho aqui uma classe "Calc" mas é um exemplo para você ter uma idéia do que parece melhor para você):


onde "a" é o primeiro parâmetro, "b" o segundo, "c" o terceiro etc, e "calc" uma função que calculasse a expressão e retornasse um BigDecimal, e "comp" uma função que calculasse a expressão e retornasse um boolean.

Outra forma (talvez seja um pouco mais flexível):

This message was edited 2 times. Last update was at 09/01/2008 16:16:23

[WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Note que se houvesse overload de operadores apenas para o BigDecimal seria legal - evitaria essa gambiarra de criar uma classe para fazer avaliação de expressões.
[WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Cuidado com a língua "ingresa" - se você vai realmente criar um MyBigDecimal pelo menos batize a função de "greaterThan" (maior que), não "greaterThen" (maior então?)

This message was edited 1 time. Last update was at 09/01/2008 16:21:57

[WWW]
von.juliano
GUJ Master
[Avatar]

Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline

thingol wrote:...

Cara... agora me senti um verdadeiro ignorante!!! :XD:

Flw! :thumbup:

This message was edited 1 time. Last update was at 09/01/2008 16:23:52

[Email] [WWW]
victorwss
JWizard
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline

Eu pessoalmente trabalho com BigDecimal a algum tempo, e embora estes métodos façam alguma falta, eu me viro com o compareTo. É melhor você criar um método estático para fazer a comparação do que criar uma subclasse de BigDecimal.

Criar subclasses neste caso é uma má idéia porque os seus métodos novos não serão aplicáveis a qualquer BigDecimal, apenas aos seus! Assim, se alguma API te retornar um BigDecimal (JDBC por exemplo), ele não vai te servir porque você não está trabalhando com BigDecimal, e sim com uma subclasse de BigDecimal, e o BigDecimal obtido não é da sua subclasse.

Embora muitos textos de introdução a OO demonstrem o poder de alterar/consertar uma classe criando-se subclasses, na minha opinião, isso é uma péssima idéia. Aliás, isso inclusive é um (anti)padrão POG muito bem conhecido chamado BaseBean.

Victor Williams Stafusa da Silva

Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.

Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.

Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.


É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).


Se você escreve "concerteza", "concerteza" você andou matando aulas de português.
[MSN]
Ironlynx
Moderador
[Avatar]

Membro desde: 02/05/2003 01:06:41
Mensagens: 3515
Localização: The other side of the screen
Offline

Criar subclasses neste caso é uma má idéia porque os seus métodos novos não serão aplicáveis a qualquer BigDecimal, apenas aos seus! Assim, se alguma API te retornar um BigDecimal (JDBC por exemplo), ele não vai te servir porque você não está trabalhando com BigDecimal, e sim com uma subclasse de BigDecimal, e o BigDecimal obtido não é da sua subclasse.

Perfeito.

Eu sempre recomendo criar uma classe "Currency"(Moeda) ou algo assim para esses casos.Fora o risco de comportamentos "bizarros" que podem ocorrer, como umas Exceptions enjoadas(hoje isso melhorou...)

Não basta persistir...tem que prevalecer!
Ironlynx
Anarquista de Sistemas
http://osereojava.blogspot.com/
[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team