Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1404 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [java] existe t'il l'équivalent du 'call' cobol ?

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Page Précédente
Auteur Sujet :

[java] existe t'il l'équivalent du 'call' cobol ?

n°217255
ptibonom
Posté le 19-09-2002 à 16:31:20  profilanswer
 

pour préciser, j'ai une méthode contrôles(nom) qui doit appeler une centaine de méthodes contrôles_nom(param...).
 
je pourrais coder un switch ... case nom1; contrôles_nom1(...) ... mais je souhaite 'dynamiser' cette gestion en associant au champ nom un champ méthode contrôles correspondant, dans un table oracle. Puis dire dans java : lit la table pour l'occurence nom et exécute la méthode contenu dans le champ ...
 
en cobol, on place dans le champ de la table le nom du programme à exécuter puis on fait un CALL champ_de_la_table.
 
y a t'il un équivalent ? ai-je posé le problème clairement ?
 
help  :D  :pt1cable:

mood
Publicité
Posté le 19-09-2002 à 16:31:20  profilanswer
 

n°217257
--greg--
Posté le 19-09-2002 à 16:33:48  profilanswer
 

mon dieu [:totoz]


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°217258
lorill
Posté le 19-09-2002 à 16:35:17  profilanswer
 

oui, via l'objet method. mais c'est pas aussi simple qu'avec un eval()

n°217259
lorill
Posté le 19-09-2002 à 16:39:28  profilanswer
 

En gros tu as tes methodes qui trainent dans une ou plusieurs classes. Si la classe n'est pas connue, tu l'obtiens pas Class.forName(). A partir de l'objet class, tu peux recuperer les methodes. Et enfin les appeler. Exemple pour une methode sans parametre :
 

Code :
  1. Class c = Class.forName("LaClasseLueDansLaBDD" );
  2. Method m = c.getDeclaredMethod("leNomDeMethode", new Class[0]);
  3. Object o = m.invoke(null, new Object[0]);


 
et voila !

n°217261
--greg--
Posté le 19-09-2002 à 16:40:51  profilanswer
 

[:sisicaivrai] faut pas leur apprendre à faire ça [:sisicaivrai]
 
mauvais design, changer design, comme dirait l'autre.


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°217264
lorill
Posté le 19-09-2002 à 16:44:03  profilanswer
 

certes, mais l'appel dynamique peux toujours servir a quelqu'un d'autre qui passerait par la  :na:

n°217265
darklord
You're welcome
Posté le 19-09-2002 à 16:44:12  profilanswer
 

[:totoz]


---------------
Just because you feel good does not make you right
n°217266
darklord
You're welcome
Posté le 19-09-2002 à 16:44:23  profilanswer
 

lorill a écrit a écrit :

certes, mais l'appel dynamique peux toujours servir a quelqu'un d'autre qui passerait par la  :na:  




 
c'est LOURD et c'est BAD


---------------
Just because you feel good does not make you right
n°217268
lorill
Posté le 19-09-2002 à 16:45:39  profilanswer
 

DarkLord a écrit a écrit :

 
c'est LOURD et c'est BAD




 
Je t'avouerais que je m'en suis jamais servi en java, le truc du dessus c'est deviné apres lecture rapide de la doc. Mais j'ai deja fait des eval() dans d'autres langages, si tu maitrises ce que tu appeles je ne vois pas le probleme

n°217269
ptibonom
Posté le 19-09-2002 à 16:46:25  profilanswer
 

meeeeeeeerci.  :jap:

mood
Publicité
Posté le 19-09-2002 à 16:46:25  profilanswer
 

n°217270
--greg--
Posté le 19-09-2002 à 16:47:45  profilanswer
 

lorill a écrit a écrit :

 
 
Je t'avouerais que je m'en suis jamais servi en java, le truc du dessus c'est deviné apres lecture rapide de la doc. Mais j'ai deja fait des eval() dans d'autres langages, si tu maitrises ce que tu appeles je ne vois pas le probleme



ben en l'occurence... avec les noms de méthodes stockés dans une db, on peut pas dire qu'il maitrise :/


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°217278
lorill
Posté le 19-09-2002 à 16:50:41  profilanswer
 

--greg-- a écrit a écrit :

ben en l'occurence... avec les noms de méthodes stockés dans une db, on peut pas dire qu'il maitrise :/




 
C'est sur que c'est pas malin ni efficace. Mais ca ne remet pas en cause l'interet de la possibilité de decider quoi appeler a l'execution.

n°217281
ptibonom
Posté le 19-09-2002 à 16:54:17  profilanswer
 

--greg-- a écrit a écrit :

ben en l'occurence... avec les noms de méthodes stockés dans une db, on peut pas dire qu'il maitrise :/




 
en quoi est-ce que ce n'est pas propre ? c'est une appli batch qui reçoit des centaines de types de fichiers différents. On utilise une BDD pour recenser les types de flux. Plutôt que de coder en dur un switch avec des centaines de case identifiant_fichier; appelle méthodeX, on préfère recenser les méthodes à appeler dans la BDD et appeler la méthode dynamiquement.
 
Cela présente un avantage majeur: lorsqu'on doit adapter l'appli pour recevoir un nouveau type de flux, il suffit de mettre à jour la table et créer la méthode; il n'y a pas besoin de modifier la méthode appelante.
 
ça peut paraitre louche, mais bon on fait du batch pur et dur  ;)
 
edit : je précise aussi (pour les questions de temp de traitement) qu'on fait pour d'autres raisons accès à la table en question, alors ramener un champ de plus ...


Message édité par ptibonom le 19-09-2002 à 16:56:08
n°217294
--greg--
Posté le 19-09-2002 à 17:07:20  profilanswer
 

ben deja si c'etait dans un fichier de config, et pas dans une bd...


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°217295
darklord
You're welcome
Posté le 19-09-2002 à 17:07:47  profilanswer
 

--greg-- a écrit a écrit :

ben deja si c'etait dans un fichier de config, et pas dans une bd...




 
note c'est des choses qui arrivent malgré nous aussi  [:titprem]


---------------
Just because you feel good does not make you right
n°217296
--greg--
Posté le 19-09-2002 à 17:08:24  profilanswer
 

DarkLord a écrit a écrit :

 
 
note c'est des choses qui arrivent malgré nous aussi  [:titprem]  



pas dans une bd quand meme :/
et puis là c'est pas malgré lui apparement:D


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°217299
ptibonom
Posté le 19-09-2002 à 17:09:38  profilanswer
 

--greg-- a écrit a écrit :

ben deja si c'etait dans un fichier de config, et pas dans une bd...




 
qu'est ce que vous trouvez choquant à mettre ce genre d'infos en BDD ? le pb du fichier de config, c'est de le mettre à jour quand il y a des nouveaux types de fichiers.

n°217300
--greg--
Posté le 19-09-2002 à 17:10:07  profilanswer
 

ptibonom a écrit a écrit :

 
 
qu'est ce que vous trouvez choquant à mettre ce genre d'infos en BDD ? le pb du fichier de config, c'est de le mettre à jour quand il y a des nouveaux types de fichiers.



paske mettre à jour la db c'est pas chiant? :D


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°217302
ptibonom
Posté le 19-09-2002 à 17:12:08  profilanswer
 

--greg-- a écrit a écrit :

paske mettre à jour la db c'est pas chiant? :D
 




 
on a des accesseurs faits pour ...

n°217306
ptibonom
Posté le 19-09-2002 à 17:15:41  profilanswer
 

lorill a écrit a écrit :

 
 
C'est sur que c'est pas malin ni efficace. Mais ca ne remet pas en cause l'interet de la possibilité de decider quoi appeler a l'execution.




 
bien sûr qu'on décide quoi appeler au moment de l'exécution; on a un composant manager qui reçoit les fichiers; en fonction du type, il exécute différentes méthodes de contrôles en fonction du fichier et il faut bien lui stipuler les méthodes à exécuter en fonction du fichier qu'il est en train de traiter.

n°217307
darklord
You're welcome
Posté le 19-09-2002 à 17:17:14  profilanswer
 

--greg-- a écrit a écrit :

pas dans une bd quand meme :/
et puis là c'est pas malgré lui apparement:D




 
bin  :ange:


---------------
Just because you feel good does not make you right
n°217319
BifaceMcLe​OD
The HighGlandeur
Posté le 19-09-2002 à 17:37:04  profilanswer
 

Oui, sauf que la machine virtuelle sait déjà faire cette sélection dynamique toute seule, et de manière bien plus efficace !!!  :ouch:  Ca s'appelle la liaison dynamique (late binding en anglais).  :sarcastic:  
 
Pour ce faire, il suffit d'une interface, qui définit le prototype de la méthode à appeler, une classe implémentant cette interface pour chacun de tes "contrôles", et une méthode factory qui va créer un objet de la bonne classe en fonction du nom du contrôle (enfin plutôt qu'une string pour ton "identifiant de contrôle", préfère un entier, car le switch sera, de très loin, beaucoup plus rapide). Et ne me dis pas que ça fait beaucoup de classes, car avoir des classes en plus n'a aucun coût supplémentaire à l'exécution et en l'occurrence, ça améliore la lisibilité et la maintenance du code.
 
Alors bien sûr, l'invocation dynamique explicite, telle que décrite par lorill, est possible, mais elle est coûteuse et elle outrepasse tous les contrôles que pourrait faire le compilateur. Et elle n'est vraiment nécessaire que quand on a besoin de faire une liaison dynamique à la fois sur le type de l'objet receveur ("this", quoi) et sur le type d'un ou plusieurs des arguments de la méthode.


Message édité par BifaceMcLeOD le 19-09-2002 à 17:41:16
n°217322
--greg--
Posté le 19-09-2002 à 17:39:16  profilanswer
 

et que j'y pense, bonjour la conception objet  :sarcastic:  
si au lieu d'avoir 204803 méthodes, tu avais 204803 objets qui implementent la meme interface... ça serait UN PEU plus "propre".
 
edit: enfin c ce que biface vient de dire en fait :D


Message édité par --greg-- le 19-09-2002 à 17:39:53

---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°217323
BifaceMcLe​OD
The HighGlandeur
Posté le 19-09-2002 à 17:40:34  profilanswer
 

Pas assez rapide, petit scarabée... ;) :D

n°217336
ptibonom
Posté le 19-09-2002 à 17:55:09  profilanswer
 

BifaceMcLeOD a écrit a écrit :

Oui, sauf que la machine virtuelle sait déjà faire cette sélection dynamique toute seule, et de manière bien plus efficace !!!  :ouch:  Ca s'appelle la liaison dynamique (late binding en anglais).  :sarcastic:  
 
Pour ce faire, il suffit d'une interface, qui définit le prototype de la méthode à appeler, une classe implémentant cette interface pour chacun de tes "contrôles", et une méthode factory qui va créer un objet de la bonne classe en fonction du nom du contrôle (enfin plutôt qu'une string pour ton "identifiant de contrôle", préfère un entier, car le switch sera, de très loin, beaucoup plus rapide). Et ne me dis pas que ça fait beaucoup de classes, car avoir des classes en plus n'a aucun coût supplémentaire à l'exécution et en l'occurrence, ça améliore la lisibilité et la maintenance du code.
 
Alors bien sûr, l'invocation dynamique explicite, telle que décrite par lorill, est possible, mais elle est coûteuse et elle outrepasse tous les contrôles que pourrait faire le compilateur. Et elle n'est vraiment nécessaire que quand on a besoin de faire une liaison dynamique à la fois sur le type de l'objet receveur ("this", quoi) et sur le type d'un ou plusieurs des arguments de la méthode.




 
pas la peine de s'échauffer, non plus, il y a des contraintes que je n'ai pas détaillées parce que je mettrai 100 pages à expliquer l'appli. reste que je ne peux pas mettre de switch, justement. j'avais bien pensé initialement avoir une interface "contrôles" et des classes spécifiques; je ne sais plus pkoi la solution a été écartée.

n°217341
BifaceMcLe​OD
The HighGlandeur
Posté le 19-09-2002 à 18:01:01  profilanswer
 

Ben, au jeu de la devinette, je dirais que pas de switch parce que l'identifiant n'est pas un atomique (typiquement une String -- bien qu'on puisse faire quand même un switch sur le hashCode d'une String si jamais c'est vraiment nécessaire).
Et au hasard, pas d'interface "contrôles" parce que toutes les méthodes n'ont pas le même prototype ?  :??:

n°217344
lorill
Posté le 19-09-2002 à 18:03:22  profilanswer
 

BifaceMcLeOD a écrit a écrit :

Ben, au jeu de la devinette, je dirais que pas de switch parce que l'identifiant n'est pas un atomique (typiquement une String -- bien qu'on puisse faire quand même un switch sur le hashCode d'une String si jamais c'est vraiment nécessaire).
Et au hasard, pas d'interface "contrôles" parce que toutes les méthodes n'ont pas le même prototype ?  :??:  




si elles ont pas le meme prototype tu peux courir pour faire de l'invocation dynamique

n°217347
kadreg
profil: Utilisateur
Posté le 19-09-2002 à 18:05:54  profilanswer
 

lorill a écrit a écrit :

 
si elles ont pas le meme prototype tu peux courir pour faire de l'invocation dynamique




 
classe java.lang.reflect.Method
Méthode invoke.
 
mé gruik :)


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°217349
BifaceMcLe​OD
The HighGlandeur
Posté le 19-09-2002 à 18:09:26  profilanswer
 

C'est clair que dans ce cas, on est obligé de recourir à Method.invoke(). Et il faut placer la séquence de code que tu as donnée dans chaque "case" du switch pour adapter le nombre et/ou le type des paramètres à chaque cas dans l'appel à Class.getDeclaredMethod().

n°217527
phenixl
Posté le 20-09-2002 à 00:04:49  profilanswer
 

--greg-- a écrit a écrit :

[:sisicaivrai] faut pas leur apprendre à faire ça [:sisicaivrai]
 
mauvais design, changer design, comme dirait l'autre.




 
Je n'ai pas lu sa question, mais :
 
Tout depend de l'usage que tu en fais, je ne vois pas ce qu'il y a de mal a utiliser la reflexion.

n°217531
--greg--
Posté le 20-09-2002 à 00:11:21  profilanswer
 

phenixl a écrit a écrit :

 
 
Je n'ai pas lu sa question, mais :
 
Tout depend de l'usage que tu en fais, je ne vois pas ce qu'il y a de mal a utiliser la reflexion.
 



ben lis sa question alors :o


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°217547
phenixl
Posté le 20-09-2002 à 01:20:56  profilanswer
 

--greg-- a écrit a écrit :

ben lis sa question alors :o




 
Au vu de sa question je ne vois toujours pas de BONNE raison pour ne pas utiliser la reflexivite...  
 
Penser avoir qqch de dynamique et lui proposer d'utiliser des classes me fait rire : et si un type inattendu (classe non existante) doit etre traite ? Et si sa BDD est mise a jour par un autre moyen de maniere continue, et si, et si, etc... Rien ne t'assure que pour deux types differents tu doive toujours appeller deux methodes differentes...
 
Il peut y avoir 100000 raisons VALABLES d'utiliser une BDD et la reflexivite.
 
Le moyen le plus propre si c'est le cas est bel et bien de faire ce qu'il dit et de catcher une eventuelle exception. C'est loin d'etre sale si c'est adapte a ses besoins (s'il y besoin d'une vraie dynamique et ne peut se permettre de refaire la classe a tout bout de champ).
 
Par contre la pire des saletes est d'utiliser un fichier de config pour ce genre de trucs... Alors ca oui c'est SALE...
 
Ah oui dire que c'est un mauvais design alors que tu ne te demande meme pas pourquoi il utilise une BDD et quelles sont les implications de ce choix est un peu gonfle AMHA. PEut etre que tu n'as pas tors, mais ce n'est certainement pas avec le peu d'elements qu'il a fourni que tu peux juger en connaissance de cause.
 
(et pas besoin de t'enerver tout rouge j'ai certainement eu une journee plus difficile que la tienne)
 
Bobaille
 
 :hello:

n°217550
--greg--
Posté le 20-09-2002 à 02:39:38  profilanswer
 

Citation :

j'ai certainement eu une journee plus difficile que la tienne

:heink:  
 
quand au reste,  :sarcastic: <-- ça veut pas dire que je trouve que tu racontes n'importe quoi, juste que j'ai la flemme d'argumenter  :sleep:  
chuis juste sur et certain qu'il y a moyen de trouver un design plus propre et/ou élégant, et surtout au final plus efficace/facile à maintenir/facire evoluer.
 
 :hello:


Message édité par --greg-- le 20-09-2002 à 02:43:13

---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°217576
phenixl
Posté le 20-09-2002 à 09:13:40  profilanswer
 

--greg-- a écrit a écrit :

Citation :

j'ai certainement eu une journee plus difficile que la tienne

:heink:  




 
 :lol:  
 
Je m'explique : malade et fievreux, reveil a 3h30 du mat, 10h de train dans la journee, 9h de conferences et de social relations, passe la journee a ecouter des gars parler de XML, .NET, CORBA, UDDI... retour et a 1h30 encore devant la machine a envoyer des mails.
 
Bref j'etais naze et ton " :o " m'a enerve ;)
 
J'ai quand meme adore certaines discussions que j'ai eues dont une avec un responsable de la technologie .NET .  
 
J'ai adore lorsque apres 10 minutes de Discussions sur UDDI et JXTA et qu'on le travaille sur ce sujet et sur RDF, il m'a sorti "vous savez j'ai QUAND MEME travaille chez Silicon Graphics avant et je suis AVANT TOUT un ingenieur Linux... Donc ca m'interesse personnellement. Seulement ce dont vous me parlez c'est la concurrence donc pouvoir l'utiliser non, on peut seulement eventuellement essayer de copier certaines idees les meilleures bien sur (et il eclate de rire)" :lol:
 
:hello:

n°217610
--greg--
Posté le 20-09-2002 à 11:31:06  profilanswer
 

bon ok pour la dure journée tu as gagné :D
 
faut savoir que le :o n'est pas aggressif hein ;)
 
et excellent le mec de .NET :D
 
 :hello:


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°217617
benou
Posté le 20-09-2002 à 11:53:14  profilanswer
 

--greg-- a écrit a écrit :

[quote]
quand au reste,  :sarcastic: <-- ça veut pas dire que je trouve que tu racontes n'importe quoi, juste que j'ai la flemme d'argumenter



ben moi je trouve qu'il a raison phenixl ...  :kaola:

n°217625
--greg--
Posté le 20-09-2002 à 12:23:57  profilanswer
 

[:biscuiteur]


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°217646
ptibonom
Posté le 20-09-2002 à 13:07:26  profilanswer
 

dites, les gars, ça part en couilles là et c'est pas le but.

n°217670
benou
Posté le 20-09-2002 à 13:44:58  profilanswer
 

mais nan ca part pas en couille ! c'est un poto greg ! ;)
 
moi je suis pour l'invocation dynamique, à moins que tu sois à quelques millisecondes près ...


Message édité par benou le 20-09-2002 à 13:45:08
n°217671
lorill
Posté le 20-09-2002 à 13:47:13  profilanswer
 

benou a écrit a écrit :

 
moi je suis pour l'invocation dynamique, à moins que tu sois à quelques millisecondes près ...




 
ouééé \o/ je commencais a me sentir seul  :)

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [java] existe t'il l'équivalent du 'call' cobol ?

 

Sujets relatifs
[Java] Utiliser des images qui sont dans un jar ? (resolu)existe t il une version VB.net d ' évaluation ?
Comment programmer en JAVA sous WINDOWS ??[ RPC XDR RPCGEN ] Comment faire sous Win32 ? Equivalent de rpcgen ?
[Java-JSP] comment faire pour cacher les jsp ?[Java] Applet, reseau et repaint() : probleme
[Java] Lire un double dans un fichier ecrit par C++ ?programmation jeu multiplayer sur internet en java
Existe-il une commande Dos pour comparer 2 fichiers ?[java] JavaBeans : est-ce que c'est choquant ça ?
Plus de sujets relatifs à : [java] existe t'il l'équivalent du 'call' cobol ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR