Conseils de design, notification de changements

Conseils de design, notification de changements - Java - Programmation

Marsh Posté le 19-08-2002 à 12:08:09    

J'ajoute des objets de type Job (fait maison) à une ArrayList. Lors de l'ajout j'aimerais qu'un objet de la classe Recorder (maison aussi) appelle une méthode (connue) de l'objet ajouté. De même lors de changements d'état de mon objet, j'aimerai que mon Recorder soit notifié et qu'il appelle une méthode de l'objet qui a changé.
 
Il y a pleins de manières de faire ça, notamment à la babar, en indiquant explicitement à tous les points d'ajouts et de changements de mon programme ce que doit faire le recorder. Il doit aussi y avoir la possibilité de mettre un Listener.
 
D'autres suggestions ? Des conseils précieux pour un design de qualité ?


---------------
Le site de ma maman
Reply

Marsh Posté le 19-08-2002 à 12:08:09   

Reply

Marsh Posté le 19-08-2002 à 12:52:39    

:bounce:


---------------
Le site de ma maman
Reply

Marsh Posté le 19-08-2002 à 13:17:04    

la méthode babar, bof
le listener je sais pas, mais j'aurais fait comme ca :


class Babar
{
ArrayList maListe;
Recorder monRecorder;
 
public Babar()
{
maListe = new ArrayList
//ton recorder je sais pas d'ou il vient, je suppose qu'il passerait en parametre
}
 
public void add(Job j)
{
//ton bordel avec ton recorder
maListe.add(j);
}
}


 
pas tapai si ca plait pas a tout le monde  :D

Reply

Marsh Posté le 19-08-2002 à 13:38:15    

via des interfaces en tout cas


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 19-08-2002 à 15:15:23    

DarkLord a écrit a écrit :

via des interfaces en tout cas



Que veux-tu dire par là ?


---------------
Le site de ma maman
Reply

Marsh Posté le 19-08-2002 à 15:16:36    

Cherrytree a écrit a écrit :

Que veux-tu dire par là ?




 
busy je t'envoie un mp ce soir si tu sais patienter jusque là


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 19-08-2002 à 15:16:37    

HappyHarry a écrit a écrit :

la méthode babar, bof
le listener je sais pas, mais j'aurais fait comme ca :


class Babar
{
ArrayList maListe;
Recorder monRecorder;
 
public Babar()
{
maListe = new ArrayList
//ton recorder je sais pas d'ou il vient, je suppose qu'il passerait en parametre
}
 
public void add(Job j)
{
//ton bordel avec ton recorder
maListe.add(j);
}
}


 
pas tapai si ca plait pas a tout le monde  :D  



A priori c'est la solution la plus simple. Celle que je compte implémenter si je n'ai pas de flash. La curiosité et l'intuition me disent qu'on peut faire mieux.


---------------
Le site de ma maman
Reply

Marsh Posté le 19-08-2002 à 15:16:57    

DarkLord a écrit a écrit :

 
 
busy je t'envoie un mp ce soir si tu sais patienter jusque là



No problem.


---------------
Le site de ma maman
Reply

Marsh Posté le 19-08-2002 à 21:20:12    

Citation :


J'ajoute des objets de type Job (fait maison) à une ArrayList. Lors de l'ajout j'aimerais qu'un objet de la classe Recorder (maison aussi) appelle une méthode (connue) de l'objet ajouté.  


 
passe une interface à la méthode qui ajoute. Cette interface définit la méthode en question ...
 

Citation :


De même lors de changements d'état de mon objet, j'aimerai que mon Recorder soit notifié et qu'il appelle une méthode de l'objet qui a changé.


 
Sans hésiation, listener. Si tu veux de l'aide, demande avec le genre de d'évenements que tu veux gérer et on en discute.
 


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 19-08-2002 à 22:12:04    

Je sens que c'est ce que je veux faire. Cela étant, je reste dans le flou intégral. Y a une URL ou une page de Thinking in Java à laquelle je peux me rapporter ?


---------------
Le site de ma maman
Reply

Marsh Posté le 19-08-2002 à 22:12:04   

Reply

Marsh Posté le 20-08-2002 à 04:02:49    

Cherrytree a écrit a écrit :

Je sens que c'est ce que je veux faire. Cela étant, je reste dans le flou intégral. Y a une URL ou une page de Thinking in Java à laquelle je peux me rapporter ?




 
Probablement
pour l'interface c'est assez simple. Lorsque tu ajoutes un job tu voudrais appeller une méthode donnée sans te préoccuper de ce qui a derrière. Definis une interface qui a cette méthode, passe l'interface à ta méthode d'ajout (au niveau signature) et passe au runtime l'objet qui l'implémente.
 
Pour le listener y a eu une discussion sur ce sujet avec exemples.
 
http://forum.hardware.fr/forum2.php3?post=24323&cat=10
 
Si c'est pas clair, ask


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 20-08-2002 à 08:17:00    

Je viens de lire et c'est intéressant et bien expliqué. :jap:
Il ne me reste plus qu'à me documenter un peu sur le passage d'interfaces en paramètre.


---------------
Le site de ma maman
Reply

Marsh Posté le 20-08-2002 à 08:22:50    

exemple
 

Code :
  1. public interface Worker {
  2.    public void doThis(Object withThisParam);
  3. }


 
Ca c'est ton interface que l'objet qui est passé quel qu'il soit se doit de respecter.
 
Là tu es dans ton recorder qui a une méthode addObject
 

Code :
  1. public void addObject(Worker w) throws AnException {
  2.     // ici tu ne sais pas quel objet est passé en param mais tu t'en fous car tu sais que tu peux appeller doThis dessus
  3. }


 
Ensuite l'objet que tu veux ajouter (Job) n'a qu'a implémenter Worker et le tour est joué. Ton recorder appellera la méthode doThis que tu as du forcément implémenté (puisque Job implémente worker) sans savoir quel objet se cache derrière.
 
Je pense que Job devrait etre une interface en fait. Et que ton job réel devrait implémenter cette interface Job.


Message édité par darklord le 20-08-2002 à 08:24:01

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 20-08-2002 à 08:27:42    

Je pense que tu as raison. Après le petit déj, je me remets au code. Merci encore.


---------------
Le site de ma maman
Reply

Marsh Posté le 24-08-2002 à 15:02:52    

Cherrytree a écrit a écrit :

 
D'autres suggestions ? Des conseils précieux pour un design de qualité ?




 
Les design patterns permettent de faire enormement et de facon propre. Dans ton cas : utilise l'Observer Pattern.
 
Un exemple ici :
http://www.patterndepot.com/put/8/observer.pdf
 
Je te conseille vivement de chercher du cote des design patterns. Voici un site avec enormement de bons liens :
http://www.cetus-links.org/oo_patterns.html
 
Sinon un excellent bouquin, "Java Design" de Kirk Knoernschild (chez Addison Wesley), met en rapport Java, le design d'applications, UML et les Design Patterns. Un must.
 
Bye.

Reply

Marsh Posté le 25-08-2002 à 19:18:01    

En fait, j'attendais fébrilement, qu'on me sorte le nom d'un pattern à utiliser, merci !


---------------
Le site de ma maman
Reply

Marsh Posté le 25-08-2002 à 19:20:24    

Java Design est en effet très bien, reprenant le bouquin de base sur les DP, mais en Java, comme de bon aloi. :D


---------------
Le site de ma maman
Reply

Marsh Posté le 25-08-2002 à 22:09:01    

Cherrytree a écrit a écrit :

En fait, j'attendais fébrilement, qu'on me sorte le nom d'un pattern à utiliser, merci !




 
You're welcome ;)
 

Reply

Sujets relatifs:

Leave a Replay

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