Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ajouter un algorithme dans un programme

9 réponses
Avatar
Pascal
Bonjour,
Je dois programmer un logiciel qui doit avoir la possibilité de lui
ajouter d'autre algorithme. En gros, mon logiciel propose plusieurs
algorithme, mais l'utilisateur peut ajouter d'autres algorithme. Comment
faire?
--
Pascal

9 réponses

Avatar
jerome moliere
Pascal wrote:
Bonjour,
Je dois programmer un logiciel qui doit avoir la possibilité de lui
ajouter d'autre algorithme. En gros, mon logiciel propose plusieurs
algorithme, mais l'utilisateur peut ajouter d'autres algorithme. Comment
faire?


humm il y a plein de design patterns ayant trait à ceci ou plus
simplement un bon vieux fichier de conf et une interface devant être
implémentée par tout algorithme et un petit cahregement dynamique de
classe et hop :)

Jerome

PS:
belle adresse mail :)

--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941

Avatar
Yves Martin
Pascal writes:

Bonjour,
Je dois programmer un logiciel qui doit avoir la possibilité de lui
ajouter d'autre algorithme. En gros, mon logiciel propose plusieurs
algorithme, mais l'utilisateur peut ajouter d'autres
algorithme. Comment faire?


Définir une interface avec les méthodes (set/get et actions) qui
permettent de paramétrer et d'appliquer ton algorithme. Ton "moteur"
utilise l'algorithme au travers de l'interface.

L'utilisateur instancie une implémentation existante de l'interface
ou implémente l'interface, la paramètre et la passe en argument au
"moteur" pour réaliser le travail.

A+
--
Yves Martin

Avatar
jerome moliere
Pascal wrote:
jerome moliere wrote:

humm il y a plein de design patterns ayant trait à ceci ou plus
simplement un bon vieux fichier de conf et une interface devant être
implémentée par tout algorithme et un petit cahregement dynamique de
classe et hop :)



Tu pourrais me donner des noms stp ou des liens.


google en cherchant pattern depot pa rexemple t'auras la liste et la
pre"sentation classique des DP....
tu lis et t'auras face a ttoi la source inepuisable :)

Jerome

--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941


Avatar
Pascal
jerome moliere wrote:

humm il y a plein de design patterns ayant trait à ceci ou plus
simplement un bon vieux fichier de conf et une interface devant être
implémentée par tout algorithme et un petit cahregement dynamique de
classe et hop :)



Tu pourrais me donner des noms stp ou des liens.
--
Pascal

Avatar
jerome moliere
Pascal wrote:
Yves Martin wrote:

Définir une interface avec les méthodes (set/get et actions) qui
permettent de paramétrer et d'appliquer ton algorithme. Ton "moteur"
utilise l'algorithme au travers de l'interface.

L'utilisateur instancie une implémentation existante de l'interface
ou implémente l'interface, la paramètre et la passe en argument au
"moteur" pour réaliser le travail.



Je vois pas comment mon interface peut utiliser un algorithme avec des
acesseurs car il faudrait que le logiciel recompile non? Le logiciel
doit etre capable de charger un nouvel algorithme, et de le sauvegarder.
Je comptais donc récuperer l'algorithme et copier le fichier dans le
repertoire "algorithme", mais apres je vois pas comment faire pour
appeler l'algo sans recompiler le programme...


bonne question, si c'est juste cela ton probleme tu peux utiliser un
langage de script du type beanshell ou python (via jython)
et la plus de probleme

Jerome

--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941


Avatar
Pascal
Yves Martin wrote:

Définir une interface avec les méthodes (set/get et actions) qui
permettent de paramétrer et d'appliquer ton algorithme. Ton "moteur"
utilise l'algorithme au travers de l'interface.

L'utilisateur instancie une implémentation existante de l'interface
ou implémente l'interface, la paramètre et la passe en argument au
"moteur" pour réaliser le travail.


Je vois pas comment mon interface peut utiliser un algorithme avec des
acesseurs car il faudrait que le logiciel recompile non? Le logiciel
doit etre capable de charger un nouvel algorithme, et de le sauvegarder.
Je comptais donc récuperer l'algorithme et copier le fichier dans le
repertoire "algorithme", mais apres je vois pas comment faire pour
appeler l'algo sans recompiler le programme...
--
Pascal

Avatar
Pascal
Pascal wrote:

Bonjour,
Je dois programmer un logiciel qui doit avoir la possibilité de lui
ajouter d'autre algorithme. En gros, mon logiciel propose plusieurs
algorithme, mais l'utilisateur peut ajouter d'autres algorithme. Comment
faire?


En fait je pense pas avoir été très clair. Je dois implénter un svm
(support vector machines) qui propose plusieurs sorte d'algorithmes de
classification. Via l'interface l'utilisateur doit pouvoir ajouter un
algorithme. Mais comme c'est le meme logiciel, je pensais faire un sorte
de programme standalone pour l'algorithme. En fait mon logiciel ne
ferait alors qu'executer ce programme. Est ce possible? Est qu'un applet
peut faire ca?
De plus l'algorithme doit fournir des résultats (calculs du taux
d'erreurs, vitesse de traitement etc...), et l'interface de mon logiciel
doit les afficher. Donc comment faire pour que 2 logiciels
interagissent? J'ai pensé à la possibilité que l'algo écrive ses
résultat dans un fichier texte, que le logiciel lirait. Mais je trouve
cette méthode moyenne.
--
Pascal

Avatar
Pascal
jerome moliere wrote:

bonne question, si c'est juste cela ton probleme tu peux utiliser un
langage de script du type beanshell ou python (via jython)
et la plus de probleme


Ba en fait, c'est pas possible, car le langage est imposé. Et c'est java.
--
Pascal

Avatar
Yves Martin
Pascal writes:

Je dois programmer un logiciel qui doit avoir la possibilité de lui
ajouter d'autre algorithme. En gros, mon logiciel propose plusieurs
algorithme, mais l'utilisateur peut ajouter d'autres
algorithme. Comment faire?



public interface Algorithme {
public void setLimit();
public void setTolerance();
public Vector apply(Vector args);
}

public class Moteur {
public Vector work(Algorithme implementation);
}

public class AlgoImpl1 implements Algorithme { ... }

public class AlgoImpl2 implements Algorithme { ... }


Ensuite le choix de l'algorithme se fait en fournissant l'instance de
la classe AlgoImpl1 ou AlgoImpl2. Pour faire le choix, tu peux
utiliser un fichier de configuration avec la liste.

Comment ajouter un algo: faire un jar avec l'implementation de l'algo
que tu charges par un ClassLoader avec un fichier de propriété qui
permet de détecter le nom de la classe (comme l'API SAX et les
factory et Xerces, c'est un bon exemple). Par contre le chargement à
chaud dans un ClassLoader est assez complexe.

Effectivement la jar doit contenir des classes compilées. A moins
d'utiliser BeanShell pour interpréter directement un source Java.

--
Yves Martin