comment un objet peut il acceder au attributs de l'objet appelant ?

comment un objet peut il acceder au attributs de l'objet appelant ? - Java - Programmation

Marsh Posté le 26-05-2003 à 22:32:38    

Le seul moyen est il de passer le pointeur de l'objet appelant en parametre de l'objet appelé ?
Pasque c'est pas terrible niveau espace memoire :/


Message édité par karim63 le 26-05-2003 à 22:34:56
Reply

Marsh Posté le 26-05-2003 à 22:32:38   

Reply

Marsh Posté le 26-05-2003 à 22:42:33    

karim63 a écrit :


Pasque c'est pas terrible niveau espace memoire :/

:heink:
 
et sinon, ben... ouais... mais à priori tu as peut etre un peu besoin de théorie sur les objets ;)
 
enfin, lance-toi, et dans qques temps, quand tu auras un peu avancé, lis un bouquin genre "design patterns" (erich gamma et al.), ça t'éclairera sans doutes et te donneras de bonnes idées


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 26-05-2003 à 22:56:24    

benh dans certains cas on est quand même obligé.
Par exemple si on créé des thread, et bien ces thread peuvent avoir besoin d'acceder ou de modifer certaines variables du moniteur.
Ou alors si un thread doit communiquer avec un autre thread.
Y a pas trop le choix.  :heink:


Message édité par karim63 le 26-05-2003 à 22:57:55
Reply

Marsh Posté le 26-05-2003 à 22:58:08    

karim63 a écrit :

benh dans certains cas on est quand même obligé.
Par exemple si on créé des thread, et bien ces thread peuvent avoir besoin d'acceder ou de modifer certaines variables du montiteur.
Y a pas trop le choix.  :heink:  

ben j'ai pas dit que y'a le choix, c'est toi qui a l'air de dire que ça bouffe de la mémoire ([:mlc]) ou que c'est pas propre. alors si c ça, en effet, y'a des moyens pas propres du tout, mais d'autres tres propres :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-05-2003 à 00:43:15    

karim63 a écrit :

benh dans certains cas on est quand même obligé.
Par exemple si on créé des thread, et bien ces thread peuvent avoir besoin d'acceder ou de modifer certaines variables du moniteur.
Ou alors si un thread doit communiquer avec un autre thread.
Y a pas trop le choix.  :heink:


tu file l'instance du "moniteur" au thread jvois pas ou est le probleme


Message édité par veryfree le 27-05-2003 à 00:43:23
Reply

Marsh Posté le 27-05-2003 à 13:40:50    

benh je me retrouve dans des cas ou plusieurs objet son imbriques et donc a chaque fois je dois passer en parametre l'instance de l'objet appelant, et je trouve ça vachement redondant.
Bref  :whistle:

Reply

Marsh Posté le 27-05-2003 à 13:45:46    

bah tu as peut etre un problème de design, c'est difficile à dire comme ça...
si tu débutes, fais comme je t'ai dit, lance-toi, fais ton truc, et //ement, lis un bouquin sur le design objet... dans qques temps tu verras tes erreurs et tu comprendras mieux ;)
 
(plutot que de te noyer dans la théorie avant de commencer, pour de toutes façons faire les memes erreurs quand tu commenceras pour de vrai)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-05-2003 à 14:41:47    

benh les cours de java en fac laissent à désirer. (tout comme ma présence :whistle: )
J'ai eu une bonne note au module d'objet, mais bon on nous apprends pas a construire des plus grosses applications.
Surtout qu'on a commencé par le c++ direct.
Enfin quand ça sera avancé je mettrai des bouts de codes ici pour voir ce qui est foireux.
N'empeche que en java c'est plus dur de faire des trucs atroces que en C++ [:ddr555]
 
Sinon comment on peut faire en java pour avoir l'equivalent des constantes en c++ ?
Y a t'il un moyen d'en avoir autrement que en prefixant les variables de classes par la la classe ?


Message édité par karim63 le 27-05-2003 à 14:42:51
Reply

Marsh Posté le 27-05-2003 à 16:17:04    

karim63 a écrit :

benh les cours de java en fac laissent à désirer. (tout comme ma présence :whistle: )
J'ai eu une bonne note au module d'objet, mais bon on nous apprends pas a construire des plus grosses applications.
Surtout qu'on a commencé par le c++ direct.
Enfin quand ça sera avancé je mettrai des bouts de codes ici pour voir ce qui est foireux.
N'empeche que en java c'est plus dur de faire des trucs atroces que en C++ [:ddr555]
 
Sinon comment on peut faire en java pour avoir l'equivalent des constantes en c++ ?
Y a t'il un moyen d'en avoir autrement que en prefixant les variables de classes par la la classe ?


 
et la FAQ java de prog@HFR c'est du poulet ? Il y a plein de liens vers pas mal de docs utiles ...
 
final static <type> <nom_variable> = <valeur>


---------------
get amaroK plugin
Reply

Marsh Posté le 27-05-2003 à 19:56:14    

en dehors d'une classe ?  :heink:  c possible ?

Reply

Marsh Posté le 27-05-2003 à 19:56:14   

Reply

Marsh Posté le 27-05-2003 à 20:12:35    

karim63 a écrit :

Le seul moyen est il de passer le pointeur de l'objet appelant en parametre de l'objet appelé ?
Pasque c'est pas terrible niveau espace memoire :/


tiens, je pensais à ça hier soir et je me suis souvenus d'un truc marrante de smalltalk : la pseudo-variable thisContext qui te renvoie la frame courante de la pile d'exécution, avec des méthodes de navigation dans la pile.
Tu prends le thisContex, tu prends le message courrant, tu regades qui l'a envoyé et tu peux y accéder.
À part pour faire un lanceur d'exception ou un debuggeur ça n'a quasiment aucun intérèt mais c'est faisable.

Reply

Marsh Posté le 28-05-2003 à 01:22:01    

karim63 a écrit :

en dehors d'une classe ?  :heink:  c possible ?

non, on sait pas faire ce que tu demande en Java, tout est d'office dans une classe


Message édité par deltaden le 28-05-2003 à 01:22:27
Reply

Marsh Posté le 28-05-2003 à 08:47:11    

essayez de penser objet à la place de penser à ce qui vous arrangerait qu'il existe dans le langage  :sweat:  


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

Marsh Posté le 28-05-2003 à 14:02:11    

ce que tu dis me semble un peu contre toute forme d'evolution.

Reply

Marsh Posté le 28-05-2003 à 14:09:25    

karim63 a écrit :

ce que tu dis me semble un peu contre toute forme d'evolution.


 
Et le

Code :
  1. Thread.currentThread().getThreadGroup().getParent();

... M'enfin :sarcastic:

Reply

Marsh Posté le 29-05-2003 à 00:02:38    

karim63 a écrit :

ce que tu dis me semble un peu contre toute forme d'evolution.


Je suis pas sûr que se soit le rôle des débutants de faire évoluer les langages.
T'inquiètes pas que ça évolue.

Reply

Marsh Posté le 04-06-2003 à 01:15:29    

senternal a écrit :


 
Et le

Code :
  1. Thread.currentThread().getThreadGroup().getParent();

... M'enfin :sarcastic:  


 
peut etre pas jusque là, mais bon merci  :D
Mais y a pas de methode equivelente pour des objects normaux ?


Message édité par karim63 le 04-06-2003 à 01:19:49
Reply

Marsh Posté le 04-06-2003 à 18:04:44    

karim63 a écrit :

Pasque c'est pas terrible niveau espace memoire :/


 
heu...
qd tu passes un objet en paramètre d'une méthode en java, c'est effectivement un pointeur qui est transmis... hors, un pointeur, c quoi, un nombre... et aujourd'hui avec nos 512 Mo de RAM, tu vas pas me dire que tu veux économiser quelques octets :))
 
alors, en dehors des conseils de conception qu'il est impossible de donner ici, ce n'est pas un problème de passer un objet en parmètre d'une méthode pour que celle-ci puisse accéder à ces méthodes...
 
pour le problème de "redondance", qu'est ce que tu entends par là ??!
genre, tt'as une classe :
 

Code :
  1. class Pouet {
  2.    public void trruc(UneClasse arg){
  3.       arg.ldksfjlsdjkf
  4.    }
  5. }


 
et ça te fait chier de toujours mettre le param UneClasse ?  
 
si c toujours la même instance dee UneClasse que tu manipules... effectivement, ça va être redondant...
mais dans ce cas là, tu peux passer ton objet dans le constructeur de Pouet..
 

Code :
  1. public class Pouet {
  2. private UneClasse monObjetQueJaimeraisBienGarder;
  3. public Pouet (UneClasse arg){
  4. this.monObjetQueJaimeraisBienGarder = arg;
  5. }
  6. public void faireUnTruc(){
  7. this.monObjetQueJaimeraisBienGarder.truc();
  8. }
  9. }


 
en éspérant avoir répondu...

Reply

Marsh Posté le 04-06-2003 à 20:29:34    

oui j'ai fait comme ça.
J'ai effectivement 512mo de ram.
Si je me pose la question de la ram c'est pasque ce que je tente de faire est une simulation de reseau p2p, edonkey plus particulierement.
Donc j'ai une classe client qui represente donc un client.
Et y aura un max de thread client.
Comme chaque client a ça propre queue d'attente en upload et aussi les queues de download, niveau memoire ça va monter assez vite.
Donc chaque slot de la queue d'upload à besoin de savoir d'ou il vient dans l'implementation actuelle. Et c'est pareil pour l'upload.
 
Donc la le truc ou je galere c'est la communication des threads.
Nottament pour le transfert de données.
Ce transfert est bien sur virtuel et je transfert que des nombres correspondant a la quantité uploadé ou downloadé.
Et donc faut syncrhoniser en fonction de la capacité de up ou de down, et c'est pas tres evident.
Donc la j'ai choisit de faire en sorte que le thread qui upload controle l'autre, mais l'ideal serait une independance totale.
J'avais deja commencé un truc en c++ avec transfert de paquet mais bon j'ai laissé tombé un moment et repris ensuite a zero en java nottament pour la simplicité de la gestion memoire.
Donc a ce niveau je suis pret a entendre vos suggestions et conseils  :D  

Reply

Marsh Posté le 04-06-2003 à 21:06:37    

Moustaaki a écrit :


heu...
qd tu passes un objet en paramètre d'une méthode en java, c'est effectivement un pointeur qui est transmis... hors, un pointeur, c quoi, un nombre...  


Une référence sur la pile, c'est aussi une nouvelle racine pour le GC, donc une grappe d'objets "encore moins" libérable.
 
Je dis pas ça pour ce cas là (où de toutes façon il a besoin de son objet) mais pour le cas général : avoir une référence c'est un objet qui est _à coup sûr_ non libérable. Si vous jouez les jacky-mémoire, pensez-y.

Reply

Marsh Posté le 04-06-2003 à 21:33:52    

et niveau communication entre thread ?

Reply

Marsh Posté le 04-06-2003 à 22:03:34    

karim63 a écrit :

et niveau communication entre thread ?


Tu devrais songer à mettre un verbe dans ta phrase si tu veux qu'on te comprenne.

Reply

Marsh Posté le 04-06-2003 à 22:22:02    

je pense que t'as très bien compris, mais en effet rien ne t'oblige à répondre.

Reply

Marsh Posté le 05-06-2003 à 10:52:15    

nraynaud a écrit :


Une référence sur la pile, c'est aussi une nouvelle racine pour le GC, donc une grappe d'objets "encore moins" libérable.
 
Je dis pas ça pour ce cas là (où de toutes façon il a besoin de son objet) mais pour le cas général : avoir une référence c'est un objet qui est _à coup sûr_ non libérable. Si vous jouez les jacky-mémoire, pensez-y.


 
 
heu... oO
tu veux dire que le Garbage Collector (GC) mettra plus de tps à libérer un objet étant référencé plusieurs fois ?
bah tant qu'il est référencé, il n'a pas besoin d'être libéré ! qu'il est une ou 200 référence(s), c'est à peu près pareil... à part que tu stockes des pointeurs en plus... spa grand chose un pointeur.
 
non, je pense qu'il faut pas s'embêter avec ça... surtout au début... c bp dee prise de tête pour gagner pas grand chose :|  
et si t'as besoin d'un programme très rapide pour faire du tps réel... bah tu le fais en C ou en ASM :D
et si tu veux forcer la mémoire à être libérée dans un prog java, tu peux toujours appeler le GC :D
 
 
 
sinon, pour ce qui est des threads... je comprend pas bien ta question, en fait.. tu veux savoir comment gérer le partage de variable entre Thread ?

Reply

Marsh Posté le 05-06-2003 à 14:23:20    

Moustaaki a écrit :


sinon, pour ce qui est des threads... je comprend pas bien ta question, en fait.. tu veux savoir comment gérer le partage de variable entre Thread ?  


 
Non ça je sais faire.
Je parle de communication entre thread un peu comme deux machines dialoguent via un reseau.
Spa grave je vais me demerder.

Reply

Marsh Posté le 05-06-2003 à 14:44:18    

Moustaaki a écrit :


1) tu veux dire que le Garbage Collector (GC) mettra plus de tps à libérer un objet étant référencé plusieurs fois ?
 
2) non, je pense qu'il faut pas s'embêter avec ça... surtout au début... c bp dee prise de tête pour gagner pas grand chose :|  
et si t'as besoin d'un programme très rapide pour faire du tps réel... bah tu le fais en C ou en ASM :D
 
3) et si tu veux forcer la mémoire à être libérée dans un prog java, tu peux toujours appeler le GC :D


1) non, t'as pas compris c'est pas grave (chaque fois que tu rajoutes une référence, tu augmentes la probabilité qu'il en reste une quand les références antérieures sont éliminées).
 
2) ça ne s'adresse _pas_ aux débutants (de toute façon je leur parle pas, je les aime pas), c'est simplement qu'une remarque un peu plus analytique de temps en temps ne fait de mal à personne.
 
3) il est assez peu judicieux d'appeller le GC à la main lorsqu'on a besoin de mémoire rapidement. On ne l'appelle volontairement que si on a que ça à foutre (avant une mise en someil de l'appli par exemple). Sinon, l'allocateur se démerde avec, il le fait très bien (et incrémentalement sur les VM sérieuses).

Reply

Marsh Posté le 05-06-2003 à 14:45:49    

karim63 a écrit :


Je parle de communication entre thread un peu comme deux machines dialoguent via un reseau.


tu dois bien avoir des files de messages (boites-aux-lettres), sinon utilises des objets synchronisés pour en fabriquer.

Reply

Marsh Posté le 11-06-2003 à 04:21:34    

nraynaud a écrit :


tu dois bien avoir des files de messages (boites-aux-lettres), sinon utilises des objets synchronisés pour en fabriquer.


 
Dans l'ebauche de programme en c++ j'avais utilisé un truc qui ressemblait.
Les clients avaient une file de messages entrants et une file de message sortant.
Et en fait il y avait une espece de pool de stockage que j'avais appelé internet :D ou en fait les clients allaient chercher les messages correspondant a leur ip entre guillemet, et ou les messages envoyés par les clients etaient balancé dedans.
 
Pour toi les boites a letres doivent etre contenu par le thread client, ou bien exterieurs, dans une liste de boite a lettres par exemple ?
 
Aussi il y a un truc que je vois pas trop comment resoudre.
Quand j'envois un message et que ce message necessite une reponse, comment faire pour attendre cette reponse sans pour autant bloquer le programme ?
Ca devient un peu compliqué pour moi là.


Message édité par karim63 le 11-06-2003 à 04:26:06
Reply

Marsh Posté le 11-06-2003 à 12:28:07    

nraynaud a écrit :


(...)
 
3) il est assez peu judicieux d'appeller le GC à la main lorsqu'on a besoin de mémoire rapidement. On ne l'appelle volontairement que si on a que ça à foutre (avant une mise en someil de l'appli par exemple). Sinon, l'allocateur se démerde avec, il le fait très bien (et incrémentalement sur les VM sérieuses).


Même après récupération sur exception OutOfMemoryError, à ton avis ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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