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 ?
les listeners ne sont pas courants en c++. donc, ma question est toujours la meme : comment resoudre le probleme en c++, tout en respectant dans les principes de la programmation objet ? maintenant que vous avez eu un exemple de ce que j'attendais comme solution, ce sera de la rigolade pour vous d'y repondre.
Utiliser un pattern Observateur est très courant en C++...
je crois que tu confonds "etre courant" et "exister". les observateurs existent en c++, mais ils ne sont pas courants.
Je me demande dans quelle mesure la population que tu as cotoyée est représentative des développeurs C++. Déjà, rien qu'en regardant les réponse de ce groupe (qui n'est certes pas représentatif), tu as 100% des gens qui connaissent...
demande a un programmeur de c++ s'il sait ce qu'est un observateur, 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 qu'un listener.
Qu'à la limite, il ne sache pas que ça s'appelle un observateur, je n'y crois pas, mais passe encore. Qu'il n'en ai jamais utilisé, je suis près à parier le contraire.
Et puis, même dans le standard, ce pattern est utilisé (set_new_handler, par exemple).
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.
Et ? La plupart des API graphiques que je connais en C++ utilisent aussi ce pattern (par exemple, ça s'appelle signal/slot en Qt, à moins que tu dises aussi que les utilisateurs de Qt sont marginaux en C++ ?). Je pense que la seule différence ici est que la bibliothèque standard de Java est plus étendue que celle du C++, et donc qu'on y trouve plus de choses. Pour comparer Java et C++ en terme d'étendue, il faut adjoindre 2/3 bibliothèques très reconnues et courant au C++ pour que ce soit intéressant.
d'autre part, je m'etonne qu'il n'y ait pas d'autre solution que de faire un listener/observateur pour resoudre le probleme.
J'aurais bien envisagé un truc à base de shared_ptr / weak_ptr, mais ce n'est qu'un cas particulier du pattern observer. James a proposé une alternative, que tu as qualifiée de n'entrant pas dans la norme du parti.
Si la norme du parti, c'est les observateurs, et que tu postules qu'il ne faut pas faire d'observateurs en C++, alors tu en arrives à la conclusion que C++ est inutilisable dans le parti... Mais le raisonnement est un peu spécieux, non ?
-- Loïc
luc2 wrote:
les listeners ne sont pas courants en c++. donc, ma question est
toujours la meme : comment resoudre le probleme en c++, tout en
respectant dans les principes de la programmation objet ? maintenant
que vous avez eu un exemple de ce que j'attendais comme solution, ce
sera de la rigolade pour vous d'y repondre.
Utiliser un pattern Observateur est très courant en C++...
je crois que tu confonds "etre courant" et "exister". les observateurs
existent en c++, mais ils ne sont pas courants.
Je me demande dans quelle mesure la population que tu as cotoyée est
représentative des développeurs C++. Déjà, rien qu'en regardant les
réponse de ce groupe (qui n'est certes pas représentatif), tu as 100%
des gens qui connaissent...
demande a un
programmeur de c++ s'il sait ce qu'est un observateur, 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 qu'un listener.
Qu'à la limite, il ne sache pas que ça s'appelle un observateur, je n'y
crois pas, mais passe encore. Qu'il n'en ai jamais utilisé, je suis près
à parier le contraire.
Et puis, même dans le standard, ce pattern est utilisé (set_new_handler,
par exemple).
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.
Et ?
La plupart des API graphiques que je connais en C++ utilisent aussi ce
pattern (par exemple, ça s'appelle signal/slot en Qt, à moins que tu
dises aussi que les utilisateurs de Qt sont marginaux en C++ ?). Je
pense que la seule différence ici est que la bibliothèque standard de
Java est plus étendue que celle du C++, et donc qu'on y trouve plus de
choses. Pour comparer Java et C++ en terme d'étendue, il faut adjoindre
2/3 bibliothèques très reconnues et courant au C++ pour que ce soit
intéressant.
d'autre part, je m'etonne qu'il n'y ait pas d'autre solution que de
faire un listener/observateur pour resoudre le probleme.
J'aurais bien envisagé un truc à base de shared_ptr / weak_ptr, mais ce
n'est qu'un cas particulier du pattern observer. James a proposé une
alternative, que tu as qualifiée de n'entrant pas dans la norme du parti.
Si la norme du parti, c'est les observateurs, et que tu postules qu'il
ne faut pas faire d'observateurs en C++, alors tu en arrives à la
conclusion que C++ est inutilisable dans le parti... Mais le
raisonnement est un peu spécieux, non ?
les listeners ne sont pas courants en c++. donc, ma question est toujours la meme : comment resoudre le probleme en c++, tout en respectant dans les principes de la programmation objet ? maintenant que vous avez eu un exemple de ce que j'attendais comme solution, ce sera de la rigolade pour vous d'y repondre.
Utiliser un pattern Observateur est très courant en C++...
je crois que tu confonds "etre courant" et "exister". les observateurs existent en c++, mais ils ne sont pas courants.
Je me demande dans quelle mesure la population que tu as cotoyée est représentative des développeurs C++. Déjà, rien qu'en regardant les réponse de ce groupe (qui n'est certes pas représentatif), tu as 100% des gens qui connaissent...
demande a un programmeur de c++ s'il sait ce qu'est un observateur, 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 qu'un listener.
Qu'à la limite, il ne sache pas que ça s'appelle un observateur, je n'y crois pas, mais passe encore. Qu'il n'en ai jamais utilisé, je suis près à parier le contraire.
Et puis, même dans le standard, ce pattern est utilisé (set_new_handler, par exemple).
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.
Et ? La plupart des API graphiques que je connais en C++ utilisent aussi ce pattern (par exemple, ça s'appelle signal/slot en Qt, à moins que tu dises aussi que les utilisateurs de Qt sont marginaux en C++ ?). Je pense que la seule différence ici est que la bibliothèque standard de Java est plus étendue que celle du C++, et donc qu'on y trouve plus de choses. Pour comparer Java et C++ en terme d'étendue, il faut adjoindre 2/3 bibliothèques très reconnues et courant au C++ pour que ce soit intéressant.
d'autre part, je m'etonne qu'il n'y ait pas d'autre solution que de faire un listener/observateur pour resoudre le probleme.
J'aurais bien envisagé un truc à base de shared_ptr / weak_ptr, mais ce n'est qu'un cas particulier du pattern observer. James a proposé une alternative, que tu as qualifiée de n'entrant pas dans la norme du parti.
Si la norme du parti, c'est les observateurs, et que tu postules qu'il ne faut pas faire d'observateurs en C++, alors tu en arrives à la conclusion que C++ est inutilisable dans le parti... Mais le raisonnement est un peu spécieux, non ?
-- Loïc
Olivier Azeau
luc2 wrote:
On 11 Jan 2005 00:43:19 -0800, wrote:
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.
C'est toi qui confonds "être courant" et "être nommé"
Nombre de programmeurs C++ utilisent des Observateurs tout comme Mr Jourdain faisait de la prose : sans le savoir.
luc2 wrote:
On 11 Jan 2005 00:43:19 -0800, kanze@gabi-soft.fr wrote:
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.
C'est toi qui confonds "être courant" et "être nommé"
Nombre de programmeurs C++ utilisent des Observateurs tout comme Mr
Jourdain faisait de la prose : sans le savoir.
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.
C'est toi qui confonds "être courant" et "être nommé"
Nombre de programmeurs C++ utilisent des Observateurs tout comme Mr Jourdain faisait de la prose : sans le savoir.
luc2
On Tue, 11 Jan 2005 18:45:52 +0100, "PurL" wrote:
mais le mot "courante" de l'enonce voulait dire "courante EN GENERAL".
Moi je vois qu'une seule chose : c'est que l'énoncé est stupide !
alors la mon pauvre ami, on n'a pas toujours le choix de l'enonce.
De plus, a partir de quoi quelque chose est courant ou ne l'est pas ? C'est vraiment tres subjectif...
non, c'est objectif quand on est de bonne foi.
On Tue, 11 Jan 2005 18:45:52 +0100, "PurL" <purl-nospam@chez.com>
wrote:
mais le mot "courante" de l'enonce voulait dire "courante EN GENERAL".
Moi je vois qu'une seule chose : c'est que l'énoncé est stupide !
alors la mon pauvre ami, on n'a pas toujours le choix de l'enonce.
De plus, a partir de quoi quelque chose est courant ou ne l'est pas ?
C'est vraiment tres subjectif...