ponteiro em Java  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
rodrigo.achilles
JavaGuru
[Avatar]

Membro desde: 18/11/2004 20:43:04
Mensagens: 214
Localização: Rio de Janeiro
Offline

Olá pessoal,

gostaria de implementar uma estrutura com ponteiro em Java:



+/- assim...
alguém tem idéia para implementar esse tipo de ponteiro.

Obrigado

-----------------------------------------------------------------------
Java é sinistro!

Att.
Rodrigo Achilles Pereira
[Email] [WWW] [MSN]
fmeyer
Moderador
[Avatar]
Membro desde: 22/02/2005 17:26:29
Mensagens: 1583
Localização: Sao Paulo
Offline

AAAAAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
MULEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEQUE ....


Java nao trabalha explicitamente com ponteiros ....

oque voce pode fazer é criar uma classe com esses atributos ... e ao inves de ponteiros voce REFERENCIA uma classe ao seu objeto.

Ps. Scottys0 com arrepios lembrando de alocação de memoria em C++

This message was edited 1 time. Last update was at 18/04/2005 21:52:32


Fernando Meyer http://fernandomeyer.com
[Email] [WWW]
rodrigo.achilles
JavaGuru
[Avatar]

Membro desde: 18/11/2004 20:43:04
Mensagens: 214
Localização: Rio de Janeiro
Offline

Ah, saquei...

É lógico, que ridículo, valeu mesmo scottys0. Que burro eu sou.

É simples assim!

PS: Desculpa ter te lembrado esses tempos difíceis.

-----------------------------------------------------------------------
Java é sinistro!

Att.
Rodrigo Achilles Pereira
[Email] [WWW] [MSN]
LuizAvila
JavaTeenager
[Avatar]

Membro desde: 07/11/2004 22:35:12
Mensagens: 189
Localização: Florianópolis
Offline

rodrigo.achilles wrote:Ah, saquei...

É lógico, que ridículo, valeu mesmo scottys0. Que burro eu sou.

É simples assim!

PS: Desculpa ter te lembrado esses tempos difíceis.


ahuuuuummmmmmm

Repita este mantra:

Java não é C++; Java não é C++; Java não é C++; Java não é C++;

ahuuuuummmmmmm

Eleve seu espírito, tire todas as impurezas de acesso direto a memória

ahuuuuummmmmmm

Luiz Ávila
GU Java SC
http://www.gujava.org.br
http://www.baixoacoplamento.blog.br
[WWW] [MSN]
fmeyer
Moderador
[Avatar]
Membro desde: 22/02/2005 17:26:29
Mensagens: 1583
Localização: Sao Paulo
Offline

LuizAvila wrote:
rodrigo.achilles wrote:Ah, saquei...

É lógico, que ridículo, valeu mesmo scottys0. Que burro eu sou.

É simples assim!

PS: Desculpa ter te lembrado esses tempos difíceis.


ahuuuuummmmmmm

Repita este mantra:

Java não é C++; Java não é C++; Java não é C++; Java não é C++;

ahuuuuummmmmmm

Eleve seu espírito, tire todas as impurezas de acesso direto a memória

ahuuuuummmmmmm


A nao fala mau de C++ pq ... tem muita coisa feito nele q funciona bem pra caramba ...

O negocio é nao misturar as coisas ...

uma das coisas que os caras amam fazer em provas de certificação java eh confundir o cara com C++, pelo menos é assim com SCJP ... isso por que o objetivo do teste é ver se voce esta preparado para "as situações do mundo real" ... então se o Eclipse/Netbeans/IntelliJ ou outra IDE tentar fazer voce digitar codigos em C++ ... voce grita :

" EU RENUNCIO EM NOME DE JESUS .... "


Fernando Meyer http://fernandomeyer.com
[Email] [WWW]
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline



Java tem ponteiro sim, só que aqui o nome é referencia. Vc só não tem acesso direto ao endereço de memória que ele representa, e por isso vc não pode manipular esse endereço.

A sun pode, através da class sun.misc.Unsafe.




Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

Sérgio, sempre que vejo alguém dizer que Java tem ponteiro eu me lembro do tempo em que programava em Fortran. Naquela época a gente fazia na mão todo o endereçamento da memória. A gente alocava um array de uma dimensão com toda a memória livre da máquina e ficava movendo da memória para o disco e vice-versa. Fortran não tinha ponteiros mas a gente criava os ponteiros de endereçamento indireto e fazia aritmética com estes ponteiros.

Muitos anos depois inventaram o C e então pudemos usar os ponteiros com suporte dentro da linguagem. É óbvio que se a gente podia acessar uma determinada posição da memória então se podia acessar a tal posição acrescida de uma variável. Ou seja, a linguagem ter ponteiro significa que ela tem suporte a aritmética de ponteiro.

Para mim (e para todos os livros básicos que já li de Java), nossa linguagem favorita não tem suporte a ponteiros. O que a API faz lá dentro de modo nativo ou o fato de passar referências de forma alguma significa que Java tem ponteiros.

Não é a primeira vez aqui no GUJ que sou obrigado a me manifestar deste modo. Java não tem ponteiros e esta é uma das principais vantagens do Java.

Mas se você conseguir, me mostre um exemplo de uso de ponteiros em Java sem ser do modo que eu falei acima que fazia com Fortran. Mostre suporte da linguagem a aritmética com ponteiros.

[]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/
[Email] [WWW]
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline

Luca wrote:Mas se você conseguir, me mostre um exemplo de uso de ponteiros em Java sem ser do modo que eu falei acima que fazia com Fortran. Mostre suporte da linguagem a aritmética com ponteiros.


Não dá para fazer aritimética com ponteiros, nem para perguntar qual é o endereço físico de um ponteiro em Java. Foi o que eu falei.

Estou usando a palavra ponteiro como sinônimo de referencia. Talvez isso não seja legal, pois o cara confunde com os ponteiros do C. Deve ser por isso que o nome em Java é referência.

Posso estar errado. Estou apenas levantando a bola para discussão, mas penso que em Java há ponteiros, só que eles são totalmente protegidos do programador. Não temos acesso a eles.

Mas eles estão lá. Existem! Tanto existem que existe uma classe sun.misc.Unsafe que te permite acessar o endereço físico de uma referencia em Java e fazer artimética com ela. Acredite se quiser. Mas só os pacotes do core da linguagem podem fazer uso dessa classe. Ela tem funções que te retornam o endereço físico de memória de um objeto, acredite se quiser!

OBS: O "acredite se quiser" aqui refere-se aquela série famosa da televisão onde o apresentador mostrava casos e situações bizarras e no final terminava com a frase: "Acredite se quiser!". Ou seja, é apenas para enfatizar que a coisa é estranha mesmo!

This message was edited 3 times. Last update was at 19/04/2005 00:33:19


Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
fmeyer
Moderador
[Avatar]
Membro desde: 22/02/2005 17:26:29
Mensagens: 1583
Localização: Sao Paulo
Offline

Essa bagunca ai em baixo é ponteiro...



... não sei ,,, mas não consigo abstrair o conceito de ponteiro em java ... pois eu ainda não vi uma referencia que aponte para outra referencia e assim sucessivamente. Se existir ... alguem fale .


Fernando Meyer http://fernandomeyer.com
[Email] [WWW]
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline

Não sei se é a mesma coisa, mas Java tem lista encadeada não tem ??? (LinkedList).



Na verdade aí vc tem um objeto que aponta para outro que contém uma referencia para outro objeto do mesmo tipo, formando uma cadeia. Acho que não equivale ao que vc falou.

Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

saoj wrote: acredite se quiser!


Fortran tem arrays e tem índices dos arrays. Então quando se compila o fonte a linguagem gera uma aritmética em cima dos endereços dos índices porque assembler não tem arrays, somente tem aritmética direto sobre as posições de memória.

Estou fazendo esta comparação com uma linguagem que existe há mais de 40 anos para você ver que o que a linguagem de alto nível tem lá dentro para converter para linguagem de máquina não é uma facilidade da linguagem disponível ao programador.

Eu não tenho a menor idéia sobre como Java acessa as coisas nativas do sistema operacional porque não estão disponíveis para mim. E igualmente sigo afirmando que Java não disponibiliza ponteiros para uso do programador.

<editado>Editei para falar ao contrário: linguagem de máquina não tem estruturas de dados como arrays ou outros tipos (classes, struts, etc.), tem somente ponteiros. É assim que a gente programa em assembler.</editado>

[]s
Luca

This message was edited 1 time. Last update was at 19/04/2005 00:27:32


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/
[Email] [WWW]
fmeyer
Moderador
[Avatar]
Membro desde: 22/02/2005 17:26:29
Mensagens: 1583
Localização: Sao Paulo
Offline

saoj wrote:Não sei se é a mesma coisa, mas Java tem lista encadeada não tem ??? (LinkedList).



Na verdade aí vc tem um objeto que aponta para outro que contém uma referencia para outro objeto do mesmo tipo, formando uma cadeia. Acho que não equivale ao que vc falou.


Ai voce esta falando de estrutura de dados ... em .. c++


estou falando de referencia pura ... exemplo, uma variavel que contenha o endereco de outra sucessivamente ate acessar um valor na heap;


Fernando Meyer http://fernandomeyer.com
[Email] [WWW]
saoj
JWizard
[Avatar]

Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline

scottys0 wrote:
estou falando de referencia pura ... exemplo, uma variavel que contenha o endereco de outra sucessivamente ate acessar um valor na heap;


Sinistro !!! Acho que em Java não tem isso não, nem nas entranhas da VM, pois toda referencia aponta para um objeto, e todo objeto criado tem um header. Logo vc pode ter algo assim:

ponteiro -> header + ponteiro -> header + ponteiro, etc e tal....

ponteiro que aponta para outro ponteiro puro acho que não existe na especificação da VM mesmo...

This message was edited 1 time. Last update was at 19/04/2005 00:48:41


Sergio A Oliveira Jr. - saoj

ExperiMENTA:

Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org


[Email] [WWW]
fmeyer
Moderador
[Avatar]
Membro desde: 22/02/2005 17:26:29
Mensagens: 1583
Localização: Sao Paulo
Offline

Procurei ate cair cabelo ... na especificação da linguagem e nao achei nada que falasse explicitamente de enderecamento e logica de acesso a heap... então ...
http://java.sun.com/docs/books/jls/second_edition/html/jIX.fm.html

touche

Fernando Meyer http://fernandomeyer.com
[Email] [WWW]
Ironlynx
Moderador
[Avatar]

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

Estou usando a palavra ponteiro como sinônimo de referencia. Talvez isso não seja legal, pois o cara confunde com os ponteiros do C. Deve ser por isso que o nome em Java é referência.


Eu jah tinha postado isso aqui:
http://www.guj.com.br/posts/list/19722.java

Mas para ficar BEM claro a separação das coisas entre C,C++ e Java:
método em java(passagem por referência a objeto):


chamada ao método:
troca(ref,x,x+1);

função em C(passagem por referência por ponteiros):


chamada a função:
troca(&x,&y);

função em C++(passagem por referência):


chamada ao método:
troca(x,y);


int *x e int *y são os dois ponteiros que a função recebe como parâmetros.
O operador &(uppersign) é chamado de operador de endereços em C(que são passados aos ponteiros pela chamada da função).
Em C++,o operador & é o operador de referência(ele fica geralmente associado ao tipo da variável para se distinguir do operador de endereços de C) para as que forem passadas a função troca.
Ficou claro

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