comment un objet peut il acceder au attributs de l'objet appelant ? - Java - Programmation
Marsh Posté le 26-05-2003 à 22:42:33
karim63 a écrit : |
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
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.
Marsh Posté le 26-05-2003 à 22:58:08
karim63 a écrit : benh dans certains cas on est quand même obligé. |
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 () 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
Marsh Posté le 27-05-2003 à 00:43:15
karim63 a écrit : benh dans certains cas on est quand même obligé. |
tu file l'instance du "moniteur" au thread jvois pas ou est le probleme
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
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)
Marsh Posté le 27-05-2003 à 14:41:47
benh les cours de java en fac laissent à désirer. (tout comme ma présence )
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++
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 ?
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 ) |
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>
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é ? |
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.
Marsh Posté le 28-05-2003 à 01:22:01
karim63 a écrit : en dehors d'une classe ? c possible ? |
non, on sait pas faire ce que tu demande en Java, tout est d'office dans une classe
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
Marsh Posté le 28-05-2003 à 14:02:11
ce que tu dis me semble un peu contre toute forme d'evolution.
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 :
|
... M'enfin
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.
Marsh Posté le 04-06-2003 à 01:15:29
senternal a écrit :
... M'enfin |
peut etre pas jusque là, mais bon merci
Mais y a pas de methode equivelente pour des objects normaux ?
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 :
|
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 :
|
en éspérant avoir répondu...
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
Marsh Posté le 04-06-2003 à 21:06:37
Moustaaki 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.
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.
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.
Marsh Posté le 05-06-2003 à 10:52:15
nraynaud a écrit : |
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
et si tu veux forcer la mémoire à être libérée dans un prog java, tu peux toujours appeler le GC
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 ?
Marsh Posté le 05-06-2003 à 14:23:20
Moustaaki a écrit : |
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.
Marsh Posté le 05-06-2003 à 14:44:18
Moustaaki a écrit : |
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).
Marsh Posté le 05-06-2003 à 14:45:49
karim63 a écrit : |
tu dois bien avoir des files de messages (boites-aux-lettres), sinon utilises des objets synchronisés pour en fabriquer.
Marsh Posté le 11-06-2003 à 04:21:34
nraynaud a écrit : |
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 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à.
Marsh Posté le 11-06-2003 à 12:28:07
nraynaud a écrit : |
Même après récupération sur exception OutOfMemoryError, à ton avis ?
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