| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 12:40:42
|
faq
JavaChild
![[Avatar]](/images/avatar/89db09d856d45d361982edc10ce738a2.jpg)
Membro desde: 03/08/2005 15:06:13
Mensagens: 141
Offline
|
IMHO:
Faz sentido a implementação do "+" ser kill, concat ou whatever? Se sim, quem está fuçando no código vai saber.
A criação de um novo simbolo realmente é uma coisa estranha (mas que, dependendo de como o seu sistema/ambiente/plataforma oferece acesso/suporte, pode ser legal) , a redefinicão de uma mensagem é uma coisa normal.
Em java, sobreescrever "+" faz 0 de diferença. Eu quero reescrever o new, o class, o ...
|
"There are worse things than being alone" Charles Bukowski |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 12:59:18
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5169
Localização: Sydney - Australia
Offline
|
Sobrecarga de operadores é um artifício muito útil, especialmente para construir Human Interfaces e DSLs internas, mas não é essencial.
O 'mistério' que poderia fazer com que olhar o JavaDoc para cada classe e ver o que o + (ou-, ou/,ou []) faz deriva do fato de que você está assumindo que + é um operador quando em uma linguagem decente que tenha sobrecarga de operadores ela é apenas um apelido para um método e assim como todos os métodos você precisa saber o que esperar.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 13:01:46
|
maquiavelbona
Forum Spammer
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
Membro desde: 29/06/2006 09:06:51
Mensagens: 2444
Localização: São Paulo - SP
Offline
|
faq wrote:IMHO:
Faz sentido a implementação do "+" ser kill, concat ou whatever? Se sim, quem está fuçando no código vai saber.
Não necessariamente. O cara pode estar se adaptando ao código e encontrar isso. O nome auto-explicativo dos métodos vai para onde?
faq wrote:
A criação de um novo simbolo realmente é uma coisa estranha (mas que, dependendo de como o seu sistema/ambiente/plataforma oferece acesso/suporte, pode ser legal) , a redefinicão de uma mensagem é uma coisa normal.
Em java, sobreescrever "+" faz 0 de diferença. Eu quero reescrever o new, o class, o ...
Faz diferença sim, como já mostrei. E depois ainda queres trazer os define para o Java?
Até!
|
----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)
"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 13:20:27
|
AndrewAguiar
JavaChild
Membro desde: 18/07/2006 10:03:59
Mensagens: 124
Offline
|
maquiavelbona wrote:
AndrewAguiar wrote:...
Que complicação haveria em dar manutencao nestes metodos ?
Pense que você tem 200 classes que o "+", "-", "/" ">>" fazem coisas diferentes? Como saber qual será o comportamento sendo que ">>" pode simplesmente dar um System.out.println() ou pode fazer uma operação maluca? Isso em não garante legibilidade, garante que você pode se confundir com o tempo.
Até!
Voce olha no javadoc, qualquer API que voce pegar para usar voce vai ser obrigado a olhar a documentação. se voce ve o seguinte metodo numa api que voce pegou de um terceiro
blz voce ( Presume ) pelo nome que este metodo envie a mensagem.
porem voce ainda não sabe que exceções ele lança, não sabe se há uma restrição no seu uso, não sabe no que impacta no Objeto, não sabe se esta depreciado ou não etc.
Simplesmente olhar o nome do método não te diz muita coisa.
Imagine que voce nunca usou a Thread, voce conseguiria só vendo o nome do metodo start dizer que ele lança um IllegalThreadStateException se voce tentar startar ela denovo ?
O fato do nome do metodo ser verboso ajuda, mais não te livra de ler sua documentação.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 13:52:11
|
faq
JavaChild
![[Avatar]](/images/avatar/89db09d856d45d361982edc10ce738a2.jpg)
Membro desde: 03/08/2005 15:06:13
Mensagens: 141
Offline
|
Não necessariamente. O cara pode estar se adaptando ao código e encontrar isso. O nome auto-explicativo dos métodos vai para onde?
Ok. Vamos levar em consideração que quem escreveu o código tem bom senso. Você costuma ver muitos "adds" fazendo - subtrações - ? Eu espero que o "+" faça algo como somar.
Maquiavel sobre criação de novos simbolos:
Faz diferença sim, como já mostrei. E depois ainda queres trazer os define para o Java?
Define do c? Eu não quero trazer nada pro java. Só acho que criar novos simbolos pode ser legal.
Acho que no fim cada um continua com uma opinião. Uns achando que a linguagem deve ser o que deve ser (sem reescritas) e outros achando que reescrever coisas é legal. Eu fico com o segundo grupo, pois até onde sei/entendo é esse tipo de coisa que permite expressividade e simplicidade.
|
"There are worse things than being alone" Charles Bukowski |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 15:38:06
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5169
Localização: Sydney - Australia
Offline
|
http://blog.fragmental.com.br/2007/07/27/construindo-expressividade-com-linguagens-elegantes/
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 21:24:36
|
maquiavelbona
Forum Spammer
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
Membro desde: 29/06/2006 09:06:51
Mensagens: 2444
Localização: São Paulo - SP
Offline
|
pcalcado wrote:http://blog.fragmental.com.br/2007/07/27/construindo-expressividade-com-linguagens-elegantes/
Eu achei que simplificaste demais a acepção do uso da Sobrecarga de Operadores. O que mais critico nela ( como na tupla também, apesar de ser assunto para outro tópico ) é o péssimo uso e a falta de senso na aplicação da mesma. E o pior que isso não afeta somente as linguagens de programação.
Estava conversando com um doutorando na área de literatura, e ele me dizia que no meio acadêmico estuda-se a penetração e crescimento das sinonímias e paronímias vulgares dentro de línguas consagradas ( português é um exemplo ), e como isso afetava a norma culta, levando tanto ao emprego errôneo de várias palavras, quanto ao desuso e desconhecimento de outras. Na frase "Percebo R$5000,00 todo mês", quantas pessoas pensariam que o cara estaria falando do seu salário? Mas "Tomaram o cara" todo mundo entende. É a mesma cosia da vulgarização do método add(), pode significar várias coisas e nenhuma ao mesmo tempo.
Outro termo que ele estávamos discutindo é o uso dos verbos reduzidos de infinitivo, que o uso correto e lógico dentro de uma frase, pode torná-la mais compreensível ao nosso cotidiano, mas que quase nunca é empregado corretamente ( não lembra a sobrecarga do "+" ? ).
Como na língua portuguesa, poderíamos ter a disposição vários artifícios como esses, o problema seria fazê-los compreensíveis a todos e que a implementação dos mesmos não ficasse tão vulgar quanto o uso do define do C.
Até!
|
----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)
"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 23:02:23
|
Andre Breves
Moderador
![[Avatar]](/images/avatar/6512bd43d9caa6e02c990b0a82652dca.jpg)
Membro desde: 12/08/2002 23:33:19
Mensagens: 86
Localização: Brasília
Offline
|
maquiavelbona wrote:... estuda-se a penetração e crescimento das sinonímias e paronímias vulgares dentro de línguas consagradas ( português é um exemplo ), e como isso afetava a norma culta...
As Línguas de maneira geral, como o Português e Java num menor grau, têm que ser dinâmicas e se adaptarem aos usos e necessidades, se quiserem sobreviver. Quem realmente dita as regras é quem usa, não quem especifica (por isso as reformas da norma culta e o JCP ). As novas regras de qualquer língua têm sua origem no uso vulgar.
Quanto à semântica de um operador sobrecarregado, não consigo ver como isso seria diferente de um nome de método. O programador dá o significado que quiser em ambos os casos.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 23:43:11
|
maquiavelbona
Forum Spammer
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
Membro desde: 29/06/2006 09:06:51
Mensagens: 2444
Localização: São Paulo - SP
Offline
|
André Breves wrote:...
Na língua portuguesa, a "reforma" vulgar não vem da "lei do menor esforço" e sim da "lei estudar-para-que?". No Java, algumas (eu disse algumas) mudanças seriam bem aceitas, mas outras seriam simplesmente um paleativo para pessoas que sabem que estão usando errado e querem um jeito de não ser tão feio o que estão fazendo ou não saber realmente como fazer e para infelicidade do destino, descobre-se que ele pode refazer os operadores ( ao melhor jeito do define ) e transformá-los em mutantes comedores de código legível. No começo do código, o "<<" vai estar jogando um valor num objeto e no fim vai estar juntando um valor randômico com o número do MAC adress e escrevendo isso num socket.
Não é porque você pode ( e consegue ) escrever código legível com isso, que os estagiários que mantiveram as URAs donde trabalhas vão ter o mesmo esmero.
Até!
|
----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)
"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/07/2007 23:54:13
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5410
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
Durante muitos anos estive convencido de que uma das melhores coisas do Java era não ter sobrecarga de operadores que foi uma das coisas que mais sofri quando aprendi C++ há uns 15 anos atrás.
Mas depois que andei estudando erlang, Scala e até mesmo Ruby, que são linguagen que tem coisas bem mais esquisitas do que isto, penso que Java poderia ter isto sim.
Como disse o CV, não é coisa que todo mundo iria usar a toda hora. Mas nos poucos momentos em que pode ser útil seria muito vantajoso. Um exemplo clássico são as aplicações que precisam de números complexos. Outro momento em que faz falta é quando a gente usa BigDecimal ou quer fazer operações aritméticas com vetores.
Hoje em dia acho que o Java precisa de muitas coisas a mais na linguagem para continuar útil nos próximos anos. Muitas destas coisas talvez devam ser oriundas das linguagens funcionais e podem complicar a VM mas sobrecarga de operadores deve ser coisa simples porque de certa forma já existe nas Strings.
Quem quiser brincar pode experimentar o JFront (A preprocessor to add C++ style operator overloading to Java.):
http://www.gginc.biz/jfront/index.html
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2007 00:08:18
|
maquiavelbona
Forum Spammer
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
Membro desde: 29/06/2006 09:06:51
Mensagens: 2444
Localização: São Paulo - SP
Offline
|
Luca wrote:Olá
Durante muitos anos estive convencido de que uma das melhores coisas do Java era não ter sobrecarga de operadores que foi uma das coisas que mais sofri quando aprendi C++ há uns 15 anos atrás.
Mas depois que andei estudando erlang, Scala e até mesmo Ruby, que são linguagen que tem coisas bem mais esquisitas do que isto, penso que Java poderia ter isto sim.
Como disse o CV, não é coisa que todo mundo iria usar a toda hora. Mas nos poucos momentos em que pode ser útil seria muito vantajoso. Um exemplo clássico são as aplicações que precisam de números complexos. Outro momento em que faz falta é quando a gente usa BigDecimal ou quer fazer operações aritméticas com vetores.
Não acho ruim a funcionalidade em si, e sim o que pode ser gerado com issso. Poderia facilitar N códigos que trabalho e de muitas outras pessoas.
Luca wrote:Hoje em dia acho que o Java precisa de muitas coisas a mais na linguagem para continuar útil nos próximos anos. Muitas destas coisas talvez devam ser oriundas das linguagens funcionais e podem complicar a VM mas sobrecarga de operadores deve ser coisa simples porque de certa forma já existe nas Strings.
Ter em algum lugar é diferente de disponibilizar para uso indiscriminado. O seu colega, leitor fanático do JavaRanch, vai ver que tem isso na linguagem e vai sair colocando essa joça em todos os lugares possíveis e imagináveis e transformar um simples "shift-right" em um disparador de processos e consultas intermináveis que só pararia depois de um ack/0 (sim, dividir por 0, claro que ele mudou a "/" também).
Depois vou dar uma olhada, conhecer esse tipo de ferramenta faz bem a saúde.
O exemplo que eu coloquei é real, só mude a linguagem de Java para C++ e mude o JavaRanch pelo cprogramming.com . E o pior que ele tinha evangelizado o estagiário a usar isso.
Até!
|
----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)
"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2007 05:32:13
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5169
Localização: Sydney - Australia
Offline
|
maquiavelbona wrote:
pcalcado wrote:http://blog.fragmental.com.br/2007/07/27/construindo-expressividade-com-linguagens-elegantes/
Eu achei que simplificaste demais a acepção do uso da Sobrecarga de Operadores. O que mais critico nela ( como na tupla também, apesar de ser assunto para outro tópico ) é o péssimo uso e a falta de senso na aplicação da mesma. E o pior que isso não afeta somente as linguagens de programação
....
Como na língua portuguesa, poderíamos ter a disposição vários artifícios como esses, o problema seria fazê-los compreensíveis a todos e que a implementação dos mesmos não ficasse tão vulgar quanto o uso do define do C.
Pode dar algum exemplo ou argumento concreto do porque eu fui simplista?
Eu acho que você perdeu exatamente o ponto principal do meu post e de todos os recursos citados: meta-programação. Sem os mecanismos que você critica (não apenas esses) não existe meta-programação, se uma linguagem não é redefinida usando a si mesma seu modelo de MOP é fraco. Se é para programar 'normalmelte', quando os construtos da linguagem te bastam, concordo com você mas quando se quer ir além, como quando usamos Model Driven Design e DSLs, não.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/07/2007 21:01:50
|
AndrewAguiar
JavaChild
Membro desde: 18/07/2006 10:03:59
Mensagens: 124
Offline
|
maquiavelbona wrote:O seu colega, leitor fanático do JavaRanch, vai ver que tem isso na linguagem e vai sair colocando essa joça em todos os lugares possíveis e imagináveis e transformar um simples "shift-right" em um disparador de processos e consultas intermináveis
E qual a diferença entre ele fazer isso sobrescrevendo o operador e fazer com um método. Isso é um problema do programador não da linguagem.
maquiavelbona wrote:só pararia depois de um ack/0 (sim, dividir por 0, claro que ele mudou a "/" também).
Não digo permitir voce sobreescrever em classes bases pois isso sim seria uma zona, mais nas classes que voce criar seria bom.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/09/2007 20:59:45
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 9568
Localização: Curitiba
Offline
|
Muitos livros de C++ recomendam sobrecarga de operadores apenas em classes que representam tipos matemáticos.
Veja por exemplo como seria bom sobrecarga em classes como BigNumber, BidDecimal, Vector (vetor matemático), Angle, etc.
Nas demais classes, o uso é um tanto questionável. Já vi abominações em C++.
O fato é que, infelizmente, não se pode contar que todos os programadores de uma equipe tenham bom senso e nem que todos sejam experientes. Então, via de regra, gosto da idéia do Java de restringir coisas que podem gerar um código pouquíssimo legível.
|
Desenvolve jogos de computadores?
http://www.pontov.com.br
Ei... você está usando DefaultTableModel no seu projeto?? Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
Trabalhe com JTable de uma forma inteligente com o ObjectTableModel e com o Auto-Filtro! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/09/2007 22:24:45
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7817
Localização: São Paulo, SP
Offline
|
maquiavelbona wrote:
Luca wrote:Como disse o CV, não é coisa que todo mundo iria usar a toda hora. Mas nos poucos momentos em que pode ser útil seria muito vantajoso. Um exemplo clássico são as aplicações que precisam de números complexos. Outro momento em que faz falta é quando a gente usa BigDecimal ou quer fazer operações aritméticas com vetores.
Não acho ruim a funcionalidade em si, e sim o que pode ser gerado com issso. Poderia facilitar N códigos que trabalho e de muitas outras pessoas.
Entao pronto, ueh. Se vc acha que Java nao dah corda suficiente pra imbecis se enforcarem, ou vc trabalha em algum lugar excepcional ou nao tem la tana experiencia. Adicionar sobrecarga de operadores, heranca multipla, closures ou qualquer outra coisa que seja "enabling" nao eh lah uma diferenca tao grande, a nao ser pela mudanca de mentalidade da linguagem em geral.
Leia http://www.martinfowler.com/bliki/SoftwareDevelopmentAttitude.html
|
|
|
 |
|
|