On Mon, 10 Jan 2005 22:45:16 +0100, James Kanze wrote:supposons qu'un thread se termine. comment peut-il prevenir le
programme principal, afin qu'il enleve sa reference de la
liste de threads ?
solution 1 (mauvaise) : le thread a une reference vers la
liste, et il peut la modifier. or, cela est absurde en
programmation objet; le thread (qui est un objet) n'a pas a
contenir une reference vers la liste.
Pourquoi pas ? C'est justement parce que c'est un objet qu'il
peut s'inscrire et se désinscrire dans d'autres objets.
mais il ne DOIT PAS etre prevu pour s'inscrire et se desinscrire des
autres objets. un objet coherent n'a pas a savoir par qui il est
reference.
On Mon, 10 Jan 2005 22:45:16 +0100, James Kanze <kanze@none> wrote:
supposons qu'un thread se termine. comment peut-il prevenir le
programme principal, afin qu'il enleve sa reference de la
liste de threads ?
solution 1 (mauvaise) : le thread a une reference vers la
liste, et il peut la modifier. or, cela est absurde en
programmation objet; le thread (qui est un objet) n'a pas a
contenir une reference vers la liste.
Pourquoi pas ? C'est justement parce que c'est un objet qu'il
peut s'inscrire et se désinscrire dans d'autres objets.
mais il ne DOIT PAS etre prevu pour s'inscrire et se desinscrire des
autres objets. un objet coherent n'a pas a savoir par qui il est
reference.
On Mon, 10 Jan 2005 22:45:16 +0100, James Kanze wrote:supposons qu'un thread se termine. comment peut-il prevenir le
programme principal, afin qu'il enleve sa reference de la
liste de threads ?
solution 1 (mauvaise) : le thread a une reference vers la
liste, et il peut la modifier. or, cela est absurde en
programmation objet; le thread (qui est un objet) n'a pas a
contenir une reference vers la liste.
Pourquoi pas ? C'est justement parce que c'est un objet qu'il
peut s'inscrire et se désinscrire dans d'autres objets.
mais il ne DOIT PAS etre prevu pour s'inscrire et se desinscrire des
autres objets. un objet coherent n'a pas a savoir par qui il est
reference.
ma question n'a pas l'air de vous inspirer. je vais vous
donner un exemple de solution en java :
on donne un listener au thread pour qu'il nous previenne quand
il se termine. quand le listener se declenche, il met la liste
de threads a jour. c'est tout.
Je n'ai pas trouvé ça dans Java. Il n'y a aucun Listener pour
quoique ce soit des Threads.
La plupart des classes Thread que j'ai vu en C++ ont bien une
fonction statique pour obtenir la liste des threads actifs. En
Java, il y a une liste par ThreadGroup, plutôt qu'une liste
globale pour tout le monde ; ce n'est donc pas une fonction
statique, mais sinon, c'est le même principe.
les listeners sont couramment utilises en java. c'est donc une
solution propre et non-marginale. de plus, elle respecte les
principes de la programmation objet.
Le fait d'utiliser les listeners n'a rien à voir avec le
langage. C'était courant en C++ avant même que le Java existait,
et courant en Smalltalk avant que le C++ ait vu le jour.
Évidemment, il ne sont pas utilisé dans tous les programmes ; on
s'en sert (ou en Java ou en C++) que dans les cas où la solution
convient. (Si on trouve qu'ils sont plus fréquents en Java,
c'est peut-être que...
les listeners ne sont pas courants en c++.
Ça dépend du domaine d'application. Ils sont très courants où
ils conviennent.
maintenant que vous avez eu un exemple de ce que j'attendais
comme solution, ce sera de la rigolade pour vous d'y repondre.
Mais si tu sais ce que tu veux comme solution, pourquoi la
question ?
Si tu veux un listener sur la fin d'un Thread, c'est
assez facile à implémenter. L'avantage que les Thread ne font
pas partie de la bibliothèque standard, c'est que tu peux les
implémenter comme tu veux. (Le désavantage, évidemment, c'est
qu'il faut les implémenter, et que chacun les implémente un peu
différemment.)
ma question n'a pas l'air de vous inspirer. je vais vous
donner un exemple de solution en java :
on donne un listener au thread pour qu'il nous previenne quand
il se termine. quand le listener se declenche, il met la liste
de threads a jour. c'est tout.
Je n'ai pas trouvé ça dans Java. Il n'y a aucun Listener pour
quoique ce soit des Threads.
La plupart des classes Thread que j'ai vu en C++ ont bien une
fonction statique pour obtenir la liste des threads actifs. En
Java, il y a une liste par ThreadGroup, plutôt qu'une liste
globale pour tout le monde ; ce n'est donc pas une fonction
statique, mais sinon, c'est le même principe.
les listeners sont couramment utilises en java. c'est donc une
solution propre et non-marginale. de plus, elle respecte les
principes de la programmation objet.
Le fait d'utiliser les listeners n'a rien à voir avec le
langage. C'était courant en C++ avant même que le Java existait,
et courant en Smalltalk avant que le C++ ait vu le jour.
Évidemment, il ne sont pas utilisé dans tous les programmes ; on
s'en sert (ou en Java ou en C++) que dans les cas où la solution
convient. (Si on trouve qu'ils sont plus fréquents en Java,
c'est peut-être que...
les listeners ne sont pas courants en c++.
Ça dépend du domaine d'application. Ils sont très courants où
ils conviennent.
maintenant que vous avez eu un exemple de ce que j'attendais
comme solution, ce sera de la rigolade pour vous d'y repondre.
Mais si tu sais ce que tu veux comme solution, pourquoi la
question ?
Si tu veux un listener sur la fin d'un Thread, c'est
assez facile à implémenter. L'avantage que les Thread ne font
pas partie de la bibliothèque standard, c'est que tu peux les
implémenter comme tu veux. (Le désavantage, évidemment, c'est
qu'il faut les implémenter, et que chacun les implémente un peu
différemment.)
ma question n'a pas l'air de vous inspirer. je vais vous
donner un exemple de solution en java :
on donne un listener au thread pour qu'il nous previenne quand
il se termine. quand le listener se declenche, il met la liste
de threads a jour. c'est tout.
Je n'ai pas trouvé ça dans Java. Il n'y a aucun Listener pour
quoique ce soit des Threads.
La plupart des classes Thread que j'ai vu en C++ ont bien une
fonction statique pour obtenir la liste des threads actifs. En
Java, il y a une liste par ThreadGroup, plutôt qu'une liste
globale pour tout le monde ; ce n'est donc pas une fonction
statique, mais sinon, c'est le même principe.
les listeners sont couramment utilises en java. c'est donc une
solution propre et non-marginale. de plus, elle respecte les
principes de la programmation objet.
Le fait d'utiliser les listeners n'a rien à voir avec le
langage. C'était courant en C++ avant même que le Java existait,
et courant en Smalltalk avant que le C++ ait vu le jour.
Évidemment, il ne sont pas utilisé dans tous les programmes ; on
s'en sert (ou en Java ou en C++) que dans les cas où la solution
convient. (Si on trouve qu'ils sont plus fréquents en Java,
c'est peut-être que...
les listeners ne sont pas courants en c++.
Ça dépend du domaine d'application. Ils sont très courants où
ils conviennent.
maintenant que vous avez eu un exemple de ce que j'attendais
comme solution, ce sera de la rigolade pour vous d'y repondre.
Mais si tu sais ce que tu veux comme solution, pourquoi la
question ?
Si tu veux un listener sur la fin d'un Thread, c'est
assez facile à implémenter. L'avantage que les Thread ne font
pas partie de la bibliothèque standard, c'est que tu peux les
implémenter comme tu veux. (Le désavantage, évidemment, c'est
qu'il faut les implémenter, et que chacun les implémente un peu
différemment.)
On 11 Jan 2005 00:43:19 -0800, wrote:
ce que tu viens d'ecrire confirme ce que je pensais : tu es loin de la
programmation objet, et surtout, loin de l'esprit de conception.
la question que j'ai pose est une question de CONCEPTION. je peux donc
CONCEVOIR mes classes comme je le veux. si j'ai besoin que le thread
puisse accepter un listener, alors je le CONCOIS comme tel.
le threadgroup ne change rien au probleme. tu peux stocker la liste de
threads avec un tableau, un vecteur, une liste, un ensemble ou un
threadgroup, c'est pareil; la question est de savoir COMMENT mettre le
tableau, le vecteur, la liste, l'ensemble ou le threadgroup a jour.
les listeners sont couramment utilises en java. c'est donc une
solution propre et non-marginale. de plus, elle respecte les
principes de la programmation objet.
Le fait d'utiliser les listeners n'a rien à voir avec le
langage. C'était courant en C++ avant même que le Java existait,
et courant en Smalltalk avant que le C++ ait vu le jour.
je crois que tu confonds "etre courant" et "exister". les listeners
existent en c++, mais ils ne sont pas courants. demande a un
programmeur de c++ s'il sait ce qu'est un listener, il ne saura pas,
il n'en aura jamais utilise, tandis qu'en java, il y a cent chances
sur cent qu'il sache ce que c'est.
en java, il est evident que les listeners sont courants : il y en a
partout dans l'api du java. on est donc obliges de s'en servir.
d'autre part, je m'etonne qu'il n'y ait pas d'autre solution que de
faire un listener pour resoudre le probleme.
Évidemment, il ne sont pas utilisé dans tous les programmes ; on
s'en sert (ou en Java ou en C++) que dans les cas où la solution
convient. (Si on trouve qu'ils sont plus fréquents en Java,
c'est peut-être que...
je t'interromps ici. tu es sur le point d'expliquer POURQUOI les
listeners sont plus frequents en java. or, ON N'A PAS BESOIN de savoir
pourquoi. ton explication est donc hors-sujet.
le fait est la : les listeners SONT plus frequents en java. donc, ca
ne me derange pas d'utiliser cette solution en java. les listeners NE
SONT PAS frequents en c++, donc, ca me derange d'utiliser cette
solution en c++.
les listeners ne sont pas courants en c++.
Ça dépend du domaine d'application. Ils sont très courants où
ils conviennent.
je ne suis pas en train de me restreindre a un domaine quelconque. je
dis qu'en GENERAL (c'est-a-dire a partir d'une vision GLOBALE de tous
les domaines), les listeners ne sont pas courants en c++.
maintenant que vous avez eu un exemple de ce que j'attendais
comme solution, ce sera de la rigolade pour vous d'y repondre.
Mais si tu sais ce que tu veux comme solution, pourquoi la
question ?
parce que ma solution concerne le java, pas le c++.
je n'ai pas demande une solution quelconque. j'ai demande une solution
propre et non-marginale. si les listeners ne sont pas courants en c++,
alors la solution des listeners est marginale en c++.
On 11 Jan 2005 00:43:19 -0800, kanze@gabi-soft.fr wrote:
ce que tu viens d'ecrire confirme ce que je pensais : tu es loin de la
programmation objet, et surtout, loin de l'esprit de conception.
la question que j'ai pose est une question de CONCEPTION. je peux donc
CONCEVOIR mes classes comme je le veux. si j'ai besoin que le thread
puisse accepter un listener, alors je le CONCOIS comme tel.
le threadgroup ne change rien au probleme. tu peux stocker la liste de
threads avec un tableau, un vecteur, une liste, un ensemble ou un
threadgroup, c'est pareil; la question est de savoir COMMENT mettre le
tableau, le vecteur, la liste, l'ensemble ou le threadgroup a jour.
les listeners sont couramment utilises en java. c'est donc une
solution propre et non-marginale. de plus, elle respecte les
principes de la programmation objet.
Le fait d'utiliser les listeners n'a rien à voir avec le
langage. C'était courant en C++ avant même que le Java existait,
et courant en Smalltalk avant que le C++ ait vu le jour.
je crois que tu confonds "etre courant" et "exister". les listeners
existent en c++, mais ils ne sont pas courants. demande a un
programmeur de c++ s'il sait ce qu'est un listener, il ne saura pas,
il n'en aura jamais utilise, tandis qu'en java, il y a cent chances
sur cent qu'il sache ce que c'est.
en java, il est evident que les listeners sont courants : il y en a
partout dans l'api du java. on est donc obliges de s'en servir.
d'autre part, je m'etonne qu'il n'y ait pas d'autre solution que de
faire un listener pour resoudre le probleme.
Évidemment, il ne sont pas utilisé dans tous les programmes ; on
s'en sert (ou en Java ou en C++) que dans les cas où la solution
convient. (Si on trouve qu'ils sont plus fréquents en Java,
c'est peut-être que...
je t'interromps ici. tu es sur le point d'expliquer POURQUOI les
listeners sont plus frequents en java. or, ON N'A PAS BESOIN de savoir
pourquoi. ton explication est donc hors-sujet.
le fait est la : les listeners SONT plus frequents en java. donc, ca
ne me derange pas d'utiliser cette solution en java. les listeners NE
SONT PAS frequents en c++, donc, ca me derange d'utiliser cette
solution en c++.
les listeners ne sont pas courants en c++.
Ça dépend du domaine d'application. Ils sont très courants où
ils conviennent.
je ne suis pas en train de me restreindre a un domaine quelconque. je
dis qu'en GENERAL (c'est-a-dire a partir d'une vision GLOBALE de tous
les domaines), les listeners ne sont pas courants en c++.
maintenant que vous avez eu un exemple de ce que j'attendais
comme solution, ce sera de la rigolade pour vous d'y repondre.
Mais si tu sais ce que tu veux comme solution, pourquoi la
question ?
parce que ma solution concerne le java, pas le c++.
je n'ai pas demande une solution quelconque. j'ai demande une solution
propre et non-marginale. si les listeners ne sont pas courants en c++,
alors la solution des listeners est marginale en c++.
On 11 Jan 2005 00:43:19 -0800, wrote:
ce que tu viens d'ecrire confirme ce que je pensais : tu es loin de la
programmation objet, et surtout, loin de l'esprit de conception.
la question que j'ai pose est une question de CONCEPTION. je peux donc
CONCEVOIR mes classes comme je le veux. si j'ai besoin que le thread
puisse accepter un listener, alors je le CONCOIS comme tel.
le threadgroup ne change rien au probleme. tu peux stocker la liste de
threads avec un tableau, un vecteur, une liste, un ensemble ou un
threadgroup, c'est pareil; la question est de savoir COMMENT mettre le
tableau, le vecteur, la liste, l'ensemble ou le threadgroup a jour.
les listeners sont couramment utilises en java. c'est donc une
solution propre et non-marginale. de plus, elle respecte les
principes de la programmation objet.
Le fait d'utiliser les listeners n'a rien à voir avec le
langage. C'était courant en C++ avant même que le Java existait,
et courant en Smalltalk avant que le C++ ait vu le jour.
je crois que tu confonds "etre courant" et "exister". les listeners
existent en c++, mais ils ne sont pas courants. demande a un
programmeur de c++ s'il sait ce qu'est un listener, il ne saura pas,
il n'en aura jamais utilise, tandis qu'en java, il y a cent chances
sur cent qu'il sache ce que c'est.
en java, il est evident que les listeners sont courants : il y en a
partout dans l'api du java. on est donc obliges de s'en servir.
d'autre part, je m'etonne qu'il n'y ait pas d'autre solution que de
faire un listener pour resoudre le probleme.
Évidemment, il ne sont pas utilisé dans tous les programmes ; on
s'en sert (ou en Java ou en C++) que dans les cas où la solution
convient. (Si on trouve qu'ils sont plus fréquents en Java,
c'est peut-être que...
je t'interromps ici. tu es sur le point d'expliquer POURQUOI les
listeners sont plus frequents en java. or, ON N'A PAS BESOIN de savoir
pourquoi. ton explication est donc hors-sujet.
le fait est la : les listeners SONT plus frequents en java. donc, ca
ne me derange pas d'utiliser cette solution en java. les listeners NE
SONT PAS frequents en c++, donc, ca me derange d'utiliser cette
solution en c++.
les listeners ne sont pas courants en c++.
Ça dépend du domaine d'application. Ils sont très courants où
ils conviennent.
je ne suis pas en train de me restreindre a un domaine quelconque. je
dis qu'en GENERAL (c'est-a-dire a partir d'une vision GLOBALE de tous
les domaines), les listeners ne sont pas courants en c++.
maintenant que vous avez eu un exemple de ce que j'attendais
comme solution, ce sera de la rigolade pour vous d'y repondre.
Mais si tu sais ce que tu veux comme solution, pourquoi la
question ?
parce que ma solution concerne le java, pas le c++.
je n'ai pas demande une solution quelconque. j'ai demande une solution
propre et non-marginale. si les listeners ne sont pas courants en c++,
alors la solution des listeners est marginale en c++.
Pourquoi pas ? C'est justement parce que c'est un objet qu'il
peut s'inscrire et se désinscrire dans d'autres objets.
mais il ne DOIT PAS etre prevu pour s'inscrire et se desinscrire des
autres objets. un objet coherent n'a pas a savoir par qui il est
reference.
Mais en pratique, un objet est rarement "cohérent" *par lui-même*.
La
finalité d'un objet, c'est assez souvent de collaborer avec d'autres objets.
D'une manière ou d'une autre, le listener doit bien être tenu informé des
objets qu'il écoute. Soit il les créera ou les détruira de lui-même, auquel
cas l'objet lui-même n'aura pas besoin de s'inscrire et se désinscrire, soit
la création de l'objet se fait via une api qui echape au listener, auquel
cas ce sera à l'objet écouté de s'enregistrer/désenregistrer.
La cohérence, ça consiste avant tout à trouver une solution qui fournisse la
fonctionnalité attendue en fonction des différentes contraintes de
l'environnement.
Pourquoi pas ? C'est justement parce que c'est un objet qu'il
peut s'inscrire et se désinscrire dans d'autres objets.
mais il ne DOIT PAS etre prevu pour s'inscrire et se desinscrire des
autres objets. un objet coherent n'a pas a savoir par qui il est
reference.
Mais en pratique, un objet est rarement "cohérent" *par lui-même*.
La
finalité d'un objet, c'est assez souvent de collaborer avec d'autres objets.
D'une manière ou d'une autre, le listener doit bien être tenu informé des
objets qu'il écoute. Soit il les créera ou les détruira de lui-même, auquel
cas l'objet lui-même n'aura pas besoin de s'inscrire et se désinscrire, soit
la création de l'objet se fait via une api qui echape au listener, auquel
cas ce sera à l'objet écouté de s'enregistrer/désenregistrer.
La cohérence, ça consiste avant tout à trouver une solution qui fournisse la
fonctionnalité attendue en fonction des différentes contraintes de
l'environnement.
Pourquoi pas ? C'est justement parce que c'est un objet qu'il
peut s'inscrire et se désinscrire dans d'autres objets.
mais il ne DOIT PAS etre prevu pour s'inscrire et se desinscrire des
autres objets. un objet coherent n'a pas a savoir par qui il est
reference.
Mais en pratique, un objet est rarement "cohérent" *par lui-même*.
La
finalité d'un objet, c'est assez souvent de collaborer avec d'autres objets.
D'une manière ou d'une autre, le listener doit bien être tenu informé des
objets qu'il écoute. Soit il les créera ou les détruira de lui-même, auquel
cas l'objet lui-même n'aura pas besoin de s'inscrire et se désinscrire, soit
la création de l'objet se fait via une api qui echape au listener, auquel
cas ce sera à l'objet écouté de s'enregistrer/désenregistrer.
La cohérence, ça consiste avant tout à trouver une solution qui fournisse la
fonctionnalité attendue en fonction des différentes contraintes de
l'environnement.
On Tue, 11 Jan 2005 13:40:56 +0100, "Christophe Lephay"
wrote:Mais en pratique, un objet est rarement "cohérent" *par lui-même*.
c'est qu'il est mal concu.
La
finalité d'un objet, c'est assez souvent de collaborer avec d'autres
objets.
D'une manière ou d'une autre, le listener doit bien être tenu informé des
objets qu'il écoute. Soit il les créera ou les détruira de lui-même,
auquel
cas l'objet lui-même n'aura pas besoin de s'inscrire et se désinscrire,
soit
la création de l'objet se fait via une api qui echape au listener, auquel
cas ce sera à l'objet écouté de s'enregistrer/désenregistrer.
je ne vois pas ou tu veux en venir. quelle est la bonne solution ?
quelle est la mauvaise ? c'est le listener qui doit desinscrire
l'objet ? ou c'est l'objet lui-meme ?
La cohérence, ça consiste avant tout à trouver une solution qui fournisse
la
fonctionnalité attendue en fonction des différentes contraintes de
l'environnement.
c'est une autre coherence dont tu parles la. moi, je parlais de la
coherence par rapport a la programmation objet.
On Tue, 11 Jan 2005 13:40:56 +0100, "Christophe Lephay"
<christophe-lephay@wanadoo.fr> wrote:
Mais en pratique, un objet est rarement "cohérent" *par lui-même*.
c'est qu'il est mal concu.
La
finalité d'un objet, c'est assez souvent de collaborer avec d'autres
objets.
D'une manière ou d'une autre, le listener doit bien être tenu informé des
objets qu'il écoute. Soit il les créera ou les détruira de lui-même,
auquel
cas l'objet lui-même n'aura pas besoin de s'inscrire et se désinscrire,
soit
la création de l'objet se fait via une api qui echape au listener, auquel
cas ce sera à l'objet écouté de s'enregistrer/désenregistrer.
je ne vois pas ou tu veux en venir. quelle est la bonne solution ?
quelle est la mauvaise ? c'est le listener qui doit desinscrire
l'objet ? ou c'est l'objet lui-meme ?
La cohérence, ça consiste avant tout à trouver une solution qui fournisse
la
fonctionnalité attendue en fonction des différentes contraintes de
l'environnement.
c'est une autre coherence dont tu parles la. moi, je parlais de la
coherence par rapport a la programmation objet.
On Tue, 11 Jan 2005 13:40:56 +0100, "Christophe Lephay"
wrote:Mais en pratique, un objet est rarement "cohérent" *par lui-même*.
c'est qu'il est mal concu.
La
finalité d'un objet, c'est assez souvent de collaborer avec d'autres
objets.
D'une manière ou d'une autre, le listener doit bien être tenu informé des
objets qu'il écoute. Soit il les créera ou les détruira de lui-même,
auquel
cas l'objet lui-même n'aura pas besoin de s'inscrire et se désinscrire,
soit
la création de l'objet se fait via une api qui echape au listener, auquel
cas ce sera à l'objet écouté de s'enregistrer/désenregistrer.
je ne vois pas ou tu veux en venir. quelle est la bonne solution ?
quelle est la mauvaise ? c'est le listener qui doit desinscrire
l'objet ? ou c'est l'objet lui-meme ?
La cohérence, ça consiste avant tout à trouver une solution qui fournisse
la
fonctionnalité attendue en fonction des différentes contraintes de
l'environnement.
c'est une autre coherence dont tu parles la. moi, je parlais de la
coherence par rapport a la programmation objet.
cette solution n'est pas propre. en effet, la liste ne sera pas
toujours a jour. elle ne le sera que periodiquement.
cette solution n'est pas propre. en effet, la liste ne sera pas
toujours a jour. elle ne le sera que periodiquement.
cette solution n'est pas propre. en effet, la liste ne sera pas
toujours a jour. elle ne le sera que periodiquement.
j'ai plusieurs threads qui tournent. chaque thread est un
objet. dans le programme principal, j'ai une liste de tous ces
threads (dans un tableau par exemple).
supposons qu'un thread se termine. comment peut-il prevenir le
programme principal, afin qu'il enleve sa reference de la
liste de threads ?
solution 1 (mauvaise) : le thread a une reference vers la
liste, et il peut la modifier. or, cela est absurde en
programmation objet; le thread (qui est un objet) n'a pas a
contenir une reference vers la liste.
Pourquoi pas ? C'est justement parce que c'est un objet qu'il
peut s'inscrire et se désinscrire dans d'autres objets.
mais il ne DOIT PAS etre prevu pour s'inscrire et se desinscrire des
autres objets. un objet coherent n'a pas a savoir par qui il est
reference.
Ah? La conception est toujours une affaire de compromis entre
differents objectifs contradictoires, dont la simplicite et la
generalite. Si tous les objets d'une classe doivent etre reference
par un autre objet, le plus simple est de les faire s'inscrire dans
les constructeurs et desinscrire dans le destructeur.
C'est rare qu'il y ait des
solutions uniques a un probleme, il y a souvent plusieurs solutions
qui offrent des compromis differents.
suppose que tu fasses une serie de boutons que l'on peut cliquer.
chaque bouton est un objet. si on fait une liste de ces boutons dans
le programme principal, chaque bouton ne DOIT PAS savoir qu'il est
reference par une liste.
L'analogie entre boutons et threads me semblent fortement tirees par
les cheveux.
En fait, j'ai souvent le cas où une classe maintient un registre
statique de ses instances, accésible au moyen d'une fonction
statique. Solution qui me semble convenir parfaitement ici.
alors tes programmes ne respectent pas les principes de la
programmation objet.
Cela reste a mon avis a prouver mais en admettant cela en quoi est-ce
un probleme? La conception OO est un outil, pas une religion. Quand
un outil n'est pas celui qu'il me faut, j'en prend un autre.
j'ai plusieurs threads qui tournent. chaque thread est un
objet. dans le programme principal, j'ai une liste de tous ces
threads (dans un tableau par exemple).
supposons qu'un thread se termine. comment peut-il prevenir le
programme principal, afin qu'il enleve sa reference de la
liste de threads ?
solution 1 (mauvaise) : le thread a une reference vers la
liste, et il peut la modifier. or, cela est absurde en
programmation objet; le thread (qui est un objet) n'a pas a
contenir une reference vers la liste.
Pourquoi pas ? C'est justement parce que c'est un objet qu'il
peut s'inscrire et se désinscrire dans d'autres objets.
mais il ne DOIT PAS etre prevu pour s'inscrire et se desinscrire des
autres objets. un objet coherent n'a pas a savoir par qui il est
reference.
Ah? La conception est toujours une affaire de compromis entre
differents objectifs contradictoires, dont la simplicite et la
generalite. Si tous les objets d'une classe doivent etre reference
par un autre objet, le plus simple est de les faire s'inscrire dans
les constructeurs et desinscrire dans le destructeur.
C'est rare qu'il y ait des
solutions uniques a un probleme, il y a souvent plusieurs solutions
qui offrent des compromis differents.
suppose que tu fasses une serie de boutons que l'on peut cliquer.
chaque bouton est un objet. si on fait une liste de ces boutons dans
le programme principal, chaque bouton ne DOIT PAS savoir qu'il est
reference par une liste.
L'analogie entre boutons et threads me semblent fortement tirees par
les cheveux.
En fait, j'ai souvent le cas où une classe maintient un registre
statique de ses instances, accésible au moyen d'une fonction
statique. Solution qui me semble convenir parfaitement ici.
alors tes programmes ne respectent pas les principes de la
programmation objet.
Cela reste a mon avis a prouver mais en admettant cela en quoi est-ce
un probleme? La conception OO est un outil, pas une religion. Quand
un outil n'est pas celui qu'il me faut, j'en prend un autre.
j'ai plusieurs threads qui tournent. chaque thread est un
objet. dans le programme principal, j'ai une liste de tous ces
threads (dans un tableau par exemple).
supposons qu'un thread se termine. comment peut-il prevenir le
programme principal, afin qu'il enleve sa reference de la
liste de threads ?
solution 1 (mauvaise) : le thread a une reference vers la
liste, et il peut la modifier. or, cela est absurde en
programmation objet; le thread (qui est un objet) n'a pas a
contenir une reference vers la liste.
Pourquoi pas ? C'est justement parce que c'est un objet qu'il
peut s'inscrire et se désinscrire dans d'autres objets.
mais il ne DOIT PAS etre prevu pour s'inscrire et se desinscrire des
autres objets. un objet coherent n'a pas a savoir par qui il est
reference.
Ah? La conception est toujours une affaire de compromis entre
differents objectifs contradictoires, dont la simplicite et la
generalite. Si tous les objets d'une classe doivent etre reference
par un autre objet, le plus simple est de les faire s'inscrire dans
les constructeurs et desinscrire dans le destructeur.
C'est rare qu'il y ait des
solutions uniques a un probleme, il y a souvent plusieurs solutions
qui offrent des compromis differents.
suppose que tu fasses une serie de boutons que l'on peut cliquer.
chaque bouton est un objet. si on fait une liste de ces boutons dans
le programme principal, chaque bouton ne DOIT PAS savoir qu'il est
reference par une liste.
L'analogie entre boutons et threads me semblent fortement tirees par
les cheveux.
En fait, j'ai souvent le cas où une classe maintient un registre
statique de ses instances, accésible au moyen d'une fonction
statique. Solution qui me semble convenir parfaitement ici.
alors tes programmes ne respectent pas les principes de la
programmation objet.
Cela reste a mon avis a prouver mais en admettant cela en quoi est-ce
un probleme? La conception OO est un outil, pas une religion. Quand
un outil n'est pas celui qu'il me faut, j'en prend un autre.
j'ai plusieurs threads qui tournent. chaque thread est un objet. dans
le programme principal, j'ai une liste de tous ces threads (dans un
tableau par exemple).
supposons qu'un thread se termine. comment peut-il prevenir le
programme principal, afin qu'il enleve sa reference de la liste de
threads ?
solution 1 (mauvaise) : le thread a une reference vers la liste, et il
peut la modifier. or, cela est absurde en programmation objet; le
thread (qui est un objet) n'a pas a contenir une reference vers la
liste.
solution 2 (mauvaise) : la liste est une variable globale. le thread
peut donc y avoir acces. or, une fois de plus, cela est absurde en
programmation objet; le thread n'a pas a s'occuper de mettre la liste
de threads a jour. il n'est meme pas cense savoir qu'il est repertorie
dans une liste.
existe-t-il une solution propre et non-marginale a ce probleme de
conception objet ?
ta liste est elle meme un timer (thread) qui verifie periodiquement que
sa liste de thread est a jour.
j'ai plusieurs threads qui tournent. chaque thread est un objet. dans
le programme principal, j'ai une liste de tous ces threads (dans un
tableau par exemple).
supposons qu'un thread se termine. comment peut-il prevenir le
programme principal, afin qu'il enleve sa reference de la liste de
threads ?
solution 1 (mauvaise) : le thread a une reference vers la liste, et il
peut la modifier. or, cela est absurde en programmation objet; le
thread (qui est un objet) n'a pas a contenir une reference vers la
liste.
solution 2 (mauvaise) : la liste est une variable globale. le thread
peut donc y avoir acces. or, une fois de plus, cela est absurde en
programmation objet; le thread n'a pas a s'occuper de mettre la liste
de threads a jour. il n'est meme pas cense savoir qu'il est repertorie
dans une liste.
existe-t-il une solution propre et non-marginale a ce probleme de
conception objet ?
ta liste est elle meme un timer (thread) qui verifie periodiquement que
sa liste de thread est a jour.
j'ai plusieurs threads qui tournent. chaque thread est un objet. dans
le programme principal, j'ai une liste de tous ces threads (dans un
tableau par exemple).
supposons qu'un thread se termine. comment peut-il prevenir le
programme principal, afin qu'il enleve sa reference de la liste de
threads ?
solution 1 (mauvaise) : le thread a une reference vers la liste, et il
peut la modifier. or, cela est absurde en programmation objet; le
thread (qui est un objet) n'a pas a contenir une reference vers la
liste.
solution 2 (mauvaise) : la liste est une variable globale. le thread
peut donc y avoir acces. or, une fois de plus, cela est absurde en
programmation objet; le thread n'a pas a s'occuper de mettre la liste
de threads a jour. il n'est meme pas cense savoir qu'il est repertorie
dans une liste.
existe-t-il une solution propre et non-marginale a ce probleme de
conception objet ?
ta liste est elle meme un timer (thread) qui verifie periodiquement que
sa liste de thread est a jour.
On 11 Jan 2005 14:08:47 +0100, Jean-Marc BourguetAh? La conception est toujours une affaire de compromis entre
differents objectifs contradictoires, dont la simplicite et la
generalite. Si tous les objets d'une classe doivent etre reference
par un autre objet, le plus simple est de les faire s'inscrire dans
les constructeurs et desinscrire dans le destructeur.
non. si c'est le constructeur de l'objet qui inscrit l'objet dans la
liste, alors cela signifie que l'objet SAIT qu'il est dans une liste.
or, il ne doit pas le savoir.
C'est rare qu'il y ait des
solutions uniques a un probleme, il y a souvent plusieurs solutions
qui offrent des compromis differents.
mais il DOIT TOUJOURS y avoir une solution qui respecte les principes
de la programmation objet.
Cela reste a mon avis a prouver mais en admettant cela en quoi est-ce
un probleme? La conception OO est un outil, pas une religion. Quand
un outil n'est pas celui qu'il me faut, j'en prend un autre.
dans l'enonce de mon probleme, il faut faire une conception orientee
objet. si tu prends un autre outil, alors tu ne reponds pas au
probleme.
On 11 Jan 2005 14:08:47 +0100, Jean-Marc Bourguet <jm@bourguet.org>
Ah? La conception est toujours une affaire de compromis entre
differents objectifs contradictoires, dont la simplicite et la
generalite. Si tous les objets d'une classe doivent etre reference
par un autre objet, le plus simple est de les faire s'inscrire dans
les constructeurs et desinscrire dans le destructeur.
non. si c'est le constructeur de l'objet qui inscrit l'objet dans la
liste, alors cela signifie que l'objet SAIT qu'il est dans une liste.
or, il ne doit pas le savoir.
C'est rare qu'il y ait des
solutions uniques a un probleme, il y a souvent plusieurs solutions
qui offrent des compromis differents.
mais il DOIT TOUJOURS y avoir une solution qui respecte les principes
de la programmation objet.
Cela reste a mon avis a prouver mais en admettant cela en quoi est-ce
un probleme? La conception OO est un outil, pas une religion. Quand
un outil n'est pas celui qu'il me faut, j'en prend un autre.
dans l'enonce de mon probleme, il faut faire une conception orientee
objet. si tu prends un autre outil, alors tu ne reponds pas au
probleme.
On 11 Jan 2005 14:08:47 +0100, Jean-Marc BourguetAh? La conception est toujours une affaire de compromis entre
differents objectifs contradictoires, dont la simplicite et la
generalite. Si tous les objets d'une classe doivent etre reference
par un autre objet, le plus simple est de les faire s'inscrire dans
les constructeurs et desinscrire dans le destructeur.
non. si c'est le constructeur de l'objet qui inscrit l'objet dans la
liste, alors cela signifie que l'objet SAIT qu'il est dans une liste.
or, il ne doit pas le savoir.
C'est rare qu'il y ait des
solutions uniques a un probleme, il y a souvent plusieurs solutions
qui offrent des compromis differents.
mais il DOIT TOUJOURS y avoir une solution qui respecte les principes
de la programmation objet.
Cela reste a mon avis a prouver mais en admettant cela en quoi est-ce
un probleme? La conception OO est un outil, pas une religion. Quand
un outil n'est pas celui qu'il me faut, j'en prend un autre.
dans l'enonce de mon probleme, il faut faire une conception orientee
objet. si tu prends un autre outil, alors tu ne reponds pas au
probleme.
cette solution est equivalente a celle des listeners en java. or, ce
n'est pas quelque chose de courant en c++.
cette solution est equivalente a celle des listeners en java. or, ce
n'est pas quelque chose de courant en c++.
cette solution est equivalente a celle des listeners en java. or, ce
n'est pas quelque chose de courant en c++.