Les pointeurs en Java

Les pointeurs en Java - Java - Programmation

Marsh Posté le 10-03-2006 à 21:01:00    

Voila je programme en C++ et je me suis mis au Java et je suis surpris qu il n y ait pas de pointeur, je voudrai savoir comment remplacer les pointeurs pour passer des objets a une fonction et que cette fonction les modifies.
Merci.

Reply

Marsh Posté le 10-03-2006 à 21:01:00   

Reply

Marsh Posté le 10-03-2006 à 21:02:55    

ça fait plaisir de voir que tu n'as pas été plus loin que 'int i = 2; i = 4 * 3;' dans ton apprentissage du java ...

Reply

Marsh Posté le 10-03-2006 à 21:03:03    

Beh heu... C'est un peu le contraire. Les pointeurs n'apparaissent pas tels quels, à mon eternel regret, mais tu peux considérer qu'ils sont bien là.
 
Si tu passes un object à une méthode, ce dernier sera modifiable par la méthode (sauf cas immutables).


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 10-03-2006 à 21:10:33    

Merci, j ai pas encore fais un seul programme je me suis contenté de lire et j ai pas encore fini.

Reply

Marsh Posté le 10-03-2006 à 21:12:04    

Par contre, ce qui a dégagé, c'est l'arithmétique de pointeur, et ça, bon vent :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 10-03-2006 à 23:58:32    

Mouais ... Le fait que java ne te permette pas de faire joujou avec les pointeurs ... moi je dis que c'est pas plus mal .. ça te permet de te concentrer sur des trucs plus importants que de faire joujou avec les trucs de bas niveau .. Apres niveau perf y a des pertes c'est sur ... mais avec les vm actuelles ... bof ... c'est plus aussi tragique que ça a peu l'etre auparavant ..

Reply

Marsh Posté le 11-03-2006 à 16:41:39    

Sniff, mes pointeurs ils vont tellement me manquer.

Reply

Marsh Posté le 11-03-2006 à 18:40:52    

mais qu'est ce qu'on en a à faire des pointeurs enfin ! au contraire tu devrais etre content, t'auras plus à te faire chier avec l'alloc/désalloc, l'arithmétique de pointeur, et tout ! si vraiment tu n'arrives pas à faire sans pointeur (gage assuré de mauvaises pratiques de programmation), alors apprend le C# qui te permet d'utiliser des pointeurs en mode unsafe.
mais bon... [:kiki]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 11-03-2006 à 18:54:13    

sircam a écrit :

Beh heu... C'est un peu le contraire. Les pointeurs n'apparaissent pas tels quels, à mon eternel regret.


[:petrus dei]
 
Tu peux expliquer pourquoi tu regrettes que tout soit passé par référence dans la majorité des langages modernes [:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 11-03-2006 à 18:57:09    

<bk> les pointeurs proviennent de l'esprit tortueux du malin, qui a décidé que la programmation n'était pas assez compliquée et qu'il fallait un truc en plus pour faire chier le pauvre pisseur de code programmeur </bk>


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 11-03-2006 à 18:57:09   

Reply

Marsh Posté le 11-03-2006 à 19:01:39    

Je programme en c++ j utilise delete pour les pointeurs j avais pas envi d apprendre a malloc, et moi j aime bien ce qui est compliquer, en plus ils sont super utile les pointeurs en C je me demande comment on fai pour vivre sans.

Reply

Marsh Posté le 11-03-2006 à 19:03:41    


Réfléchis une dizaine de secondes au rôle des pointeurs en C/C++, réfléchis 10s de plus pour savoir comment s'en débarasser (hint: le C++ avait commencé, mais au final l'implémentation de la solution était pire que le problème).
 
Si ça te suffit pas pour trouver... arrête tout de suite [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 11-03-2006 à 19:08:07    


ah oui, c'est sur, tu préferes utiliser delete que malloc()... sauf que l'équivalent C de delete, c'est free(). en C++, malloc() est encapsulé dans new. bon, pas grave...
et pour ton info, en C++, on a tendance à ne plus trop utiliser les pointeurs, au profit des références. références qui sont en fait implémentées en natif dans tout langage moderne. en Java, chaque variable (ou presque, j'omets les types natifs) est une référence. il en est de même en C# ou autre
 
 
juste une question : que fais tu en C++ qui ne pourrait être réalisé sans pointeur ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 11-03-2006 à 19:12:40    

masklinn a écrit :

Réfléchis une dizaine de secondes au rôle des pointeurs en C/C++, réfléchis 10s de plus pour savoir comment s'en débarasser (hint: le C++ avait commencé, mais au final l'implémentation de la solution était pire que le problème).


Quelle est la solution que le C++ a essayé d'implémenter ? Je suis curieux la ...
Et en quoi est-ce qu'elle était pire ?

Reply

Marsh Posté le 11-03-2006 à 19:14:18    

++fab a écrit :

Quelle est la solution que le C++ a essayé d'implémenter ? Je suis curieux la ...


Les références [:spamafote]  

++fab a écrit :

Et en quoi est-ce qu'elle était pire ?


Parce qu'on se retrouve avec tout un bordel et une syntaxe à la con, au lieu d'avoir une hydre à une tête on a une hydre à deux têtes [:spamafote]
 
Et que les références C++ sont moins puissantes/pratiques que les pointeurs C pour un certain nombre d'utilisations (genre récupérer une référence sur une fonction [:petrus75])

Message cité 1 fois
Message édité par masklinn le 11-03-2006 à 19:15:28

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 11-03-2006 à 19:33:22    

masklinn a écrit :

Les références [:spamafote]


Ce n'est pas une solution de remplacement. C'est une solution parfois alternative seulement. Gardes aussi à l'esprit que la compatibilité avec C doit être "aussi bonne que possible".
 

Citation :

Parce qu'on se retrouve avec tout un bordel et une syntaxe à la con, au lieu d'avoir une hydre à une tête on a une hydre à deux têtes [:spamafote]


Le truc, c'est que les références nulles, ça n'existe pas en C++ (sauf si c'est machiavel qui code) ...
Après, je te retourne l'histoire de l'hydre : en C++, les types user-defined et fondamentaux sont utilisables de la même manière, en Java non, les uns passent par référence, les autres par valeur. Qui a deux têtes dans l'histoire ? :)
 

Citation :

Et que les références C++ sont moins puissantes/pratiques que les pointeurs C pour un certain nombre d'utilisations (genre récupérer une référence sur une fonction [:petrus75])


Oui, je vois ce que tu veux dire. Même si ton exemple me parait un peu vague, je pense que par fonction, tu voulais dire rvalue.

Reply

Marsh Posté le 11-03-2006 à 19:41:54    

++fab a écrit :


Après, je te retourne l'histoire de l'hydre : en C++, les types user-defined et fondamentaux sont utilisables de la même manière, en Java non, les uns passent par référence, les autres par valeur. Qui a deux têtes dans l'histoire ? :)


non mais ça c'est une connerie monumentale de Java d'avoir laissé des types primitifs :o
C# roulaize pour ça, il n'y a pas de types primitifs (ils sont boxés automatiquement, ou ce sont des alias, les avis divergent à ce sujet)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 11-03-2006 à 19:45:36    

++fab a écrit :

Citation :

Parce qu'on se retrouve avec tout un bordel et une syntaxe à la con, au lieu d'avoir une hydre à une tête on a une hydre à deux têtes [:spamafote]


Le truc, c'est que les références nulles, ça n'existe pas en C++ (sauf si c'est machiavel qui code) ...
Après, je te retourne l'histoire de l'hydre : en C++, les types user-defined et fondamentaux sont utilisables de la même manière, en Java non, les uns passent par référence, les autres par valeur. Qui a deux têtes dans l'histoire ? :)


Hum, non, le seul truc passé par recopie (par valeur) en Java ce sont les "primitive types", qui en plus d'être lourdement (et de plus en plus) critiqués ne sont pas des objets, et ne forme qu'une partie des built-ins Java.
 
La dychotomie passage par référence/valeur en Java est parallèle à la dychotomie "primitive types"/objects [:spamafote]  
 
Après, Java le langage (pour le séparer de Java la plateforme, Java la VM, ...) est imo un langage pourri, donc bon...

++fab a écrit :

Oui, je vois ce que tu veux dire. Même si ton exemple me parait un peu vague, je pense que par fonction, tu voulais dire rvalue.


Non, je voulais bel et bien dire fonction, prendre une fonction et la trimballer en tant qu'argument d'autres fonctions [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 11-03-2006 à 19:51:11    

masklinn a écrit :

Hum, non, le seul truc passé par recopie (par valeur) en Java ce sont les "primitive types", qui en plus d'être lourdement (et de plus en plus) critiqués ne sont pas des objets, et ne forme qu'une partie des built-ins Java.


Oui, c'est ce que je voulais dire, désolé si je ne connais pas le vocabulaire Java :)
 

Citation :

La dychotomie passage par référence/valeur en Java est parallèle à la dychotomie "primitive types"/objects [:spamafote]


On est d'accord.
 

Citation :

Après, Java le langage (pour le séparer de Java la plateforme, Java la VM, ...) est imo un langage pourri, donc bon...

C'est pas moi qui l'ai dit ! :)
 

Citation :

Non, je voulais bel et bien dire fonction, prendre une fonction et la trimballer en tant qu'argument d'autres fonctions [:spamafote]

Bon, alors je ne vois pas le problème, mais ce n'est peut-être pas très grave :)

Reply

Marsh Posté le 11-03-2006 à 21:38:36    

J'ai pas tout lu mias, je trouve aussi que les référence c'est pas tres bien, j'ai souvent des problemes qu'en je veux m'en servir, et je peux refaire tout mes programmes sans pointeurs mais ce sera moins bien.

Reply

Marsh Posté le 11-03-2006 à 21:43:27    

Ok lol, quand tu auras des exemples de limitations liés à l'utilisation de références et non de pointeurs en Java, C#, Python, Ruby, Lisp, Smalltalk tu nous en fais part ok?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 11-03-2006 à 21:52:11    

J'ai pas dit que les reference nous limitais mais que c'etait plus chiant que les pointeurs, ce n'est que mon avis rien d'autre.

Reply

Marsh Posté le 11-03-2006 à 22:00:00    

Mais en quoi c'est plus chiant nom de dieu [:mlc]
 
Donne des exemples [:mlc]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 11-03-2006 à 22:04:28    

masklinn a écrit :

Hum, non, le seul truc passé par recopie (par valeur) en Java ce sont les "primitive types", qui en plus d'être lourdement (et de plus en plus) critiqués ne sont pas des objets, et ne forme qu'une partie des built-ins Java.


Tant qu'à continuer dans l'enculage de mouche sur ce beau topic, en Java tout les passages se font par valeur.
 
Sun> In Java methods, arguments are passed by value. When invoked, the method receives the value of the variable passed in. When the argument is of primitive type, pass-by-value means that the method cannot change its value. When the argument is of reference type, pass-by-value means that the method cannot change the object reference, but can invoke the object's methods and modify the accessible variables within the object.

Message cité 1 fois
Message édité par push le 11-03-2006 à 22:47:20
Reply

Marsh Posté le 11-03-2006 à 22:06:33    

Deja il n y a pas de refenrece null...

Reply

Marsh Posté le 11-03-2006 à 22:13:31    


Bein en l'occurence en Java si, parceque qu'une référence en Java c'est un "pointeur".
 
Sun>The reference values (often just references) are pointers to these
objects, and a special null reference, which refers to no object.

 
C++> A reference shall be initialized to refer to a valid object or
function.  [Note: in particular, a null reference cannot exist in a
well-defined program, because the only way to create such a
reference would be to bind it to the "object" obtained by
dereferencing a null pointer, which causes undefined behavior.

 
Java reference != C++ reference


Message édité par push le 11-03-2006 à 22:14:00
Reply

Marsh Posté le 11-03-2006 à 22:14:59    

Je parlait pour le c++ et je ne parle presque pas anglais, je commence tout juste le java.

Reply

Marsh Posté le 11-03-2006 à 22:16:12    

push a écrit :

Tant qu'à continuer dans l'enculage de mouche sur ce beau topic, en Java tout les passages sont font par valeur.
 
Sun> In Java methods, arguments are passed by value. When invoked, the method receives the value of the variable passed in. When the argument is of primitive type, pass-by-value means that the method cannot change its value. When the argument is of reference type, pass-by-value means that the method cannot change the object reference, but can invoke the object's methods and modify the accessible variables within the object.


J'veux la source, parce que la sémantique du pass-by-value, c'est que la fonction reçoit une copie de l'argument, en java quand on transmet autre chose qu'un type primitif il n'y a pas construction d'un nouvel objet, juste transmission de la référence vers un objet existant (si tous les objets étaient copiés le coût d'appel des fonctions serait prohibitif), donc la sémantique est bel et bien celle du pass-by-ref
 
 [:mlc]
 
T'étais tout seul sur le coup alors, tous les autres parlaient de références dans un langage basé dessus [:spamafote]

Message cité 3 fois
Message édité par masklinn le 11-03-2006 à 22:17:53

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 11-03-2006 à 22:34:47    

masklinn a écrit :

J'veux la source, parce que la sémantique du pass-by-value, c'est que la fonction reçoit une copie de l'argument, en java quand on transmet autre chose qu'un type primitif il n'y a pas construction d'un nouvel objet, juste transmission de la référence vers un objet existant (si tous les objets étaient copiés le coût d'appel des fonctions serait prohibitif), donc la sémantique est bel et bien celle du pass-by-ref


Bein oui c'est ce qui est dit, sauf que c'est bien une référence à la java qui est passée par valeur et donc recopiée, le pass-by-ref sur une reference java n'a pas beaucoup de sens.


Message édité par push le 11-03-2006 à 22:46:07
Reply

Marsh Posté le 11-03-2006 à 22:43:30    

Mais bon je vois que certains parlent de pass-by-ref aussi dans ce cas, ça sent encore le conflit sémantique entres programmeurs Java/C++ tout ça, comme l'histoire des méthodes/fonctions.

Reply

Marsh Posté le 11-03-2006 à 22:44:59    

masklinn a écrit :

juste transmission de la référence


c'est à dire une copie de la valeur binaire de la référence (le pointeur quoi, l'adresse mémoire de l'objet) sur la pile d'appel.
 
C'est ce qu'il veut dire quand il dit que tout les appels de méthode en java se font par copie des paramètres : dans tous les cas c'est une copie binaire du paramètre (qu'il soit type primitif ou référence).


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 12-03-2006 à 00:12:54    

masklinn a écrit :

la sémantique est bel et bien celle du pass-by-ref


niet, la variable représente une référence, et cette référence est copiée lors du passage, tu ne peux donc pas ré-affecter une variable locale dans une fonction appellée : passage par valeur.

Reply

Marsh Posté le 12-03-2006 à 00:52:56    

nraynaud a écrit :

niet, la variable représente une référence, et cette référence est copiée lors du passage, tu ne peux donc pas ré-affecter une variable locale dans une fonction appellée : passage par valeur.


Modifier l'objet reçu en paramètre modifie l'objet local envoyé : pas passage par valeur


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 12-03-2006 à 01:00:39    

Reply

Marsh Posté le 12-03-2006 à 02:01:25    


k, lol
 
 
k, lol
bon maintenant les arguments ?
 
edit: je parle des arguments qui viendront étayer tes affirmations, pas des arguments passés aux fonctions [:el g]


Message édité par Harkonnen le 12-03-2006 à 02:02:10

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-03-2006 à 02:11:47    

kadreg a écrit :

Par contre, ce qui a dégagé, c'est l'arithmétique de pointeur, et ça, bon vent :o


 
z'entendez quoi par arithmetique du pointeur? [:petrus75]
 

Harkonnen a écrit :

<bk> les pointeurs proviennent de l'esprit tortueux du malin, qui a décidé que la programmation n'était pas assez compliquée et qu'il fallait un truc en plus pour faire chier le pauvre pisseur de code programmeur </bk>


[:chrisbk]


---------------
Mon feedback
Reply

Marsh Posté le 12-03-2006 à 08:32:33    

masklinn a écrit :

Modifier l'objet reçu en paramètre modifie l'objet local envoyé : pas passage par valeur


nan, parce que la partie "locale" c'est que la référence, le reste est sur le tas.
 
Le passage par référence te permet de modifier la frame locale de la pile d'appel, là c'est pas le cas.

Reply

Marsh Posté le 12-03-2006 à 09:21:26    


 
En fait il y en a, mais t'as pas besoin de savoir qu'ils existent :D  ;)  
Plus sérieusement si t'as fait du C++, tu devrai comprendre très vite comment ça marche. Sinon poste une question avec un exemple concret, car là on a l'impréssion (sans vouloir te froisser) que t'as juste la flemme d'apprendre (ce que je comprends tout à fait au passage  :D ).


Message édité par powel42 le 12-03-2006 à 10:16:08
Reply

Marsh Posté le 12-03-2006 à 16:19:02    

C'est pas que j'ai la flemme c'est que j'ai pas le temps, je me suis arreter quand ils disaient qu'il n'y avait pas de pointeur en Java,ce qui m'a surpris.

Reply

Marsh Posté le 12-03-2006 à 17:02:34    

C'est toujours plus hype de faire du pointeur  :o  
Le passage aux pointeurs est souvent un moment délicat dans l'apprentissage du noob. C'est un peu comme un rituel d'intégration  :o  
 
"Passe ton Ada et ton C++ d'abord !   :D "
 
 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed