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

  FORUM HardWare.fr
  Programmation
  Java

  Comment fait-on pour passer en parametre une fonction à une méthode ?

 


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

Comment fait-on pour passer en parametre une fonction à une méthode ?

n°548919
neo9205
Posté le 23-10-2003 à 20:48:58  profilanswer
 

:hello:  
 
J'aurais voulu savoir comment fait-on pour passer en parametre une fonction à une méthode ? (comment doit etre definie la méthode et comment doit etre fait l'appel ?)
 
En C, je sais qu'il faut un pointeur sur la fonction puis ensuite on passe ce meme pointeur en parametre à la fonction cible...Mais en Java, je vois pas trop comment ça peut se faire...  :(

mood
Publicité
Posté le 23-10-2003 à 20:48:58  profilanswer
 

n°548936
darklord
You're welcome
Posté le 23-10-2003 à 20:58:54  profilanswer
 

qu'est ce que tu veux faire au juste. Faut penser object hein :o


Message édité par darklord le 23-10-2003 à 20:59:35

---------------
Just because you feel good does not make you right
n°548938
benou
Posté le 23-10-2003 à 21:01:01  profilanswer
 

1) oublie le C :o
 
2) voilà comment on fait dans un langage objet :
 
quand tu passes une méthode M1 en paramêtre à une méthode M2(dans un lange comme le C), ce que tu fais en fait, c'est donner un moyen à la méthode M2 de faire l'action M1. Bref, ce qui t'intéresse c'est d'avoir la possibilitée, au sein de M2, d'avoir "quelque chose" qui remplira le contrat défini par la signature de la méthode M2.  
 
Bref, tu as besoin d'un objet (le quelque chose) qui possédera une méthode bien précise, c'est à dire qui implémente une interface.
 
ex :
tu as une méthode calc() qui fait une opération et qui envoie le résultat.
 

Code :
  1. // voici l'interface du sender  
  2. public interface Sender {
  3.    public void send(String message);
  4. }


 

Code :
  1. // ta classe qui fait le calcul
  2. public class Calcul {
  3.    public void calc(Sender sender) {
  4.       int resultat = 1 + 1; // faut bien faire un exemple ;)
  5.       sender.send("calcul = " + resultat);
  6.    }
  7. }


 
maintenant, tu peux envoyer n'importe quel objet qui implémenter l'interface Sender à la méthode calc. Par exemple une classe qui fait juste un log sur la sortie standard, ou dans un fichier ou qui envoie un mail, ou qui envoie le résultat par SMS, ou qui le stocke en base, etc ... tu vois le principe...
 
juste un exemple :  

Code :
  1. class OutSender implements Sender {
  2.    public void send(String message) {
  3.       System.out.println(message);
  4.    }
  5. }
  6. public class Main {
  7.    public static void main(String[] args) {
  8.       // on créé le calculateur
  9.       Calcul calculateur = new Calcul();
  10.       // on créé le sender
  11.       Sender sender = new OutSender();
  12.       // on appel la méthode
  13.       calculateur.calc(sender);
  14.    }
  15. }


---------------
ma vie, mon oeuvre - HomePlayer
n°548954
neo9205
Posté le 23-10-2003 à 21:08:39  profilanswer
 

benou a écrit :

1) oublie le C :o
 
2) voilà comment on fait dans un langage objet :
 
quand tu passes une méthode M1 en paramêtre à une méthode M2(dans un lange comme le C), ce que tu fais en fait, c'est donner un moyen à la méthode M2 de faire l'action M1. Bref, ce qui t'intéresse c'est d'avoir la possibilitée, au sein de M2, d'avoir "quelque chose" qui remplira le contrat défini par la signature de la méthode M2.  
 
Bref, tu as besoin d'un objet (le quelque chose) qui possédera une méthode bien précise, c'est à dire qui implémente une interface.
 
ex :
tu as une méthode calc() qui fait une opération et qui envoie le résultat.
 

Code :
  1. // voici l'interface du sender  
  2. public interface Sender {
  3.    public void send(String message);
  4. }


 

Code :
  1. // ta classe qui fait le calcul
  2. public class Calcul {
  3.    public void calc(Sender sender) {
  4.       int resultat = 1 + 1; // faut bien faire un exemple ;)
  5.       sender.send("calcul = " + resultat);
  6.    }
  7. }


 
maintenant, tu peux envoyer n'importe quel objet qui implémenter l'interface Sender à la méthode calc. Par exemple une classe qui fait juste un log sur la sortie standard, ou dans un fichier ou qui envoie un mail, ou qui envoie le résultat par SMS, ou qui le stocke en base, etc ... tu vois le principe...
 
juste un exemple :  

Code :
  1. class OutSender implements Sender {
  2.    public void send(String message) {
  3.       System.out.println(message);
  4.    }
  5. }
  6. public class Main {
  7.    public static void main(String[] args) {
  8.       // on créé le calculateur
  9.       Calcul calculateur = new Calcul();
  10.       // on créé le sender
  11.       Sender sender = new OutSender();
  12.       // on appel la méthode
  13.       calculateur.calc(sender);
  14.    }
  15. }




 
Je vois un peu pres le principe mais je pense qu'il y a plus simple non ? Comme j'ai pas encore vu les Interfaces à l'ecole, je prefere y aller doucement...N'y a t-il pas moyen de faire la meme chose sans interface ?
 :jap:

n°548959
darklord
You're welcome
Posté le 23-10-2003 à 21:13:28  profilanswer
 

c pas une question d'y aller doucement ou pas, c'est une question de faire les choses convenablement. Si tu veux faire des trucs de genre, retourne faire du C et puis c'est tout :o


---------------
Just because you feel good does not make you right
n°548964
nraynaud
lol
Posté le 23-10-2003 à 21:24:09  profilanswer
 

neo9205 a écrit :


 
Je vois un peu pres le principe mais je pense qu'il y a plus simple non ? Comme j'ai pas encore vu les Interfaces à l'ecole, je prefere y aller doucement...N'y a t-il pas moyen de faire la meme chose sans interface ?
 :jap:  

oui, tu prends uniquement la classe Calcul de benou et si tu veux changer le code, tu fais une sous-classe de Calcul avec ton propre code.
 
Par contre, tu n'as le droit d'utiliser cette méthode que jusqu'à ce que tu progresses en objet. Si tu reviens dans 1-2 mois avec ça, on te flingue.

n°548990
benou
Posté le 23-10-2003 à 21:47:11  profilanswer
 

neo9205 a écrit :


Je vois un peu pres le principe mais je pense qu'il y a plus simple non ? Comme j'ai pas encore vu les Interfaces à l'ecole, je prefere y aller doucement...N'y a t-il pas moyen de faire la meme chose sans interface ?
 :jap:  


ca sert à quoi de faire mal quand on sait faire bien ??  :sweat:  
 
si tu veux vraiment pas faire d'interface, tu modifie la méthode calc pour qu'elle prenne juste un paramêtre du type de l'objet qui possèdera la méthode que tu veux appeler dans la méthode calc, mais tu perds toute l'évolutivité du truc. c'est nul[:spamafote]
 
enfin gref, le principe c'est de passer un objet en paramêtre (à la place du pointeur de fonction du C)


---------------
ma vie, mon oeuvre - HomePlayer
n°549005
veryfree
Posté le 23-10-2003 à 21:55:48  profilanswer
 

les interfaces, c bon [:huit]
 
 
edit: merci benou


Message édité par veryfree le 23-10-2003 à 22:04:21
n°549011
benou
Posté le 23-10-2003 à 21:57:42  profilanswer
 

veryfree a écrit :

les interfaces, c bon [:smileyQuiTireLaLangue]


[:huit] [:benou_miam] http://perso.wanadoo.fr/vieuxbenou/benous/harry_miam.gif http://perso.wanadoo.fr/vieuxbenou/benous/super_benou_miam.gif


---------------
ma vie, mon oeuvre - HomePlayer
n°549814
the real m​oins moins
Posté le 24-10-2003 à 16:28:06  profilanswer
 

1/ personne à relever le fait qu'il mélangeait fonction et méthode?  (alors qu'on ne parle que de methode en java)
 
2/ si il faut on peut faire de la reflection :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le 24-10-2003 à 16:28:06  profilanswer
 

n°549815
the real m​oins moins
Posté le 24-10-2003 à 16:28:29  profilanswer
 

[:atigrou]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°549821
benou
Posté le 24-10-2003 à 16:33:48  profilanswer
 

the real moins moins a écrit :

1/ personne à relever le fait qu'il mélangeait fonction et méthode?  (alors qu'on ne parle que de methode en java)


fontion, méthode, on a tous compris de quoi il parlait ...
 
d'ailleur, en java, le terme le plus approprié serait fonction :o
 

the real moins moins a écrit :

2/ si il faut on peut faire de la reflection :o


il connais pas encore les iterfaces et elles lui  font peur alors va pas lui parler de reflection :o


---------------
ma vie, mon oeuvre - HomePlayer
n°549822
the real m​oins moins
Posté le 24-10-2003 à 16:35:51  profilanswer
 

1a/ certes ben quite à lui apprendre quelque chose...
1b/ ha bon :heink: HA BON :heink:
2/ certes. mais si c'est pour donner des cours, je vais me faire prof au lieu de passer mon temps ici moi...


Message édité par the real moins moins le 24-10-2003 à 16:36:13

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°549825
Taz
bisounours-codeur
Posté le 24-10-2003 à 16:38:02  profilanswer
 

Benou > tout ça n'a rien à voir avec le C. c'est le concept même d'objet fonction. le C propose de passer des pointeurs de fonctions, mais pas d'objet, le C++ propose un operator() poura voir la synthaxe d'un appel de fonction, pour Python, une fonction est déjà un objet et il y a aussi __call__, en Lisp/Scheme, c'est direct. Dans cette histoire, le seul à faire des acrobaties avec un langage objet pour arriver à exprimer ça, c'est toi. Faut dire ce qu'il est : si on aime le concept d'objet fonction (j'en fait tout le temps), et bien Java est mal aisé pour l'utiliser.
Alors pas la peine de vanner un mec sur ses connaissances en C, ce que tu lui fais en 5 lignes de Java, il te le fait en 1 lignes de C

n°549826
darklord
You're welcome
Posté le 24-10-2003 à 16:38:54  profilanswer
 

Taz a écrit :

Alors pas la peine de vanner un mec sur ses connaissances en C, ce que tu lui fais en 5 lignes de Java, il te le fait en 1 lignes de C


 
troll :o


---------------
Just because you feel good does not make you right
n°549827
the real m​oins moins
Posté le 24-10-2003 à 16:39:25  profilanswer
 

oh putain, not again :sweat:
 
(c'est pas la taille qui compte, mais la façon dont on s'en sert :o)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°549829
Taz
bisounours-codeur
Posté le 24-10-2003 à 16:40:22  profilanswer
 

typiquement le truc qu'on dit quand on en a une petite :o

n°549830
benou
Posté le 24-10-2003 à 16:42:55  profilanswer
 

tu peux pas t'empecher hein ?  :pfff:  
 
où est ce que j'ai vané le mec ??  
Il pose une question, je lui donne la réponse ... bien complete en plus la réponse... Y a que toi pour trouver un truc à redire ...


---------------
ma vie, mon oeuvre - HomePlayer
n°549831
El_gringo
Posté le 24-10-2003 à 16:43:30  profilanswer
 

Taz a écrit :


Alors pas la peine de vanner un mec sur ses connaissances en C, ce que tu lui fais en 5 lignes de Java, il te le fait en 1 lignes de C


 
T'as 15 ans de retard là. Economiser des lignes de code quand on programme, c'est fini!

n°549833
the real m​oins moins
Posté le 24-10-2003 à 16:43:50  profilanswer
 

Taz a écrit :

typiquement le truc qu'on dit quand on en a une petite :o

tu veux voir? [:naughty]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°549834
the real m​oins moins
Posté le 24-10-2003 à 16:44:32  profilanswer
 

El_gringo a écrit :


 
T'as 15 ans de retard là. Economiser des lignes de code quand on programme, c'est fini!

dans mes ST magazine y'avait des concours pour faire des softs en 10 lignes maxi... y'avait des mecs qui faisait des jeux complets comme ça en gfa basic :love:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°549836
Taz
bisounours-codeur
Posté le 24-10-2003 à 16:46:05  profilanswer
 

El_gringo a écrit :


 
T'as 15 ans de retard là. Economiser des lignes de code quand on programme, c'est fini!

un langage qui te permet d'exprimer naturellement un concept avancé, je ne vois pas où est le problème. ce que tu dis, c'est comme si tu parlais d'assembleur ...

n°549837
LetoII
Le dormeur doit se réveiller
Posté le 24-10-2003 à 16:47:00  profilanswer
 

Taz a écrit :

un langage qui te permet d'exprimer naturellement un concept avancé, je ne vois pas où est le problème. ce que tu dis, c'est comme si tu parlais d'assembleur ...


 
Harko c pour ton dommaine là :D


---------------
Le Tyran
n°549838
benou
Posté le 24-10-2003 à 16:47:23  profilanswer
 

et c'est parti pour un squatage hors sujet trollesque à souhait ...
 
[:neowen]


---------------
ma vie, mon oeuvre - HomePlayer
n°549841
Taz
bisounours-codeur
Posté le 24-10-2003 à 16:48:23  profilanswer
 

t'as qu'a pas faire ce genre de réflexions

n°549842
LetoII
Le dormeur doit se réveiller
Posté le 24-10-2003 à 16:48:26  profilanswer
 

benou a écrit :

et c'est parti pour un squatage hors sujet trollesque à souhait ...
 
[:neowen]


 
C vendredi :o


---------------
Le Tyran
n°549844
benou
Posté le 24-10-2003 à 16:49:02  profilanswer
 

Taz a écrit :

t'as qu'a pas faire ce genre de réflexions


laquelle ?


---------------
ma vie, mon oeuvre - HomePlayer
n°549847
El_gringo
Posté le 24-10-2003 à 16:51:55  profilanswer
 

Taz a écrit :

t'as qu'a pas faire ce genre de réflexions


 
Et ça à été Modo. Mon Dieu... :sarcastic:

n°549849
darklord
You're welcome
Posté le 24-10-2003 à 16:52:14  profilanswer
 

vos gueules :o


---------------
Just because you feel good does not make you right
n°549850
benou
Posté le 24-10-2003 à 16:53:06  profilanswer
 

El_gringo a écrit :


Et ça à été Modo. Mon Dieu... :sarcastic:  


nan mais attend, j'aimerai bien comprendre à propos de quoi il e na après moi sur ce coup là ...


---------------
ma vie, mon oeuvre - HomePlayer
n°549851
the real m​oins moins
Posté le 24-10-2003 à 16:54:14  profilanswer
 

El_gringo a écrit :


 
Et ça à été Modo. Mon Dieu... :sarcastic:  

en meme temps vu une des moitiés de modo qui reste... :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°549853
Taz
bisounours-codeur
Posté le 24-10-2003 à 16:54:25  profilanswer
 

ben j'ai déjà justifié ...
bon je sors de toutes façons

n°549854
benou
Posté le 24-10-2003 à 16:56:26  profilanswer
 

Taz a écrit :

ben j'ai déjà justifié ...
bon je sors de toutes façons


ouais, et éventuellement évite de revenir ...


---------------
ma vie, mon oeuvre - HomePlayer
n°549866
nraynaud
lol
Posté le 24-10-2003 à 17:16:56  profilanswer
 

Taz a écrit :

Faut dire ce qu'il est : si on aime le concept d'objet fonction (j'en fait tout le temps), et bien Java est mal aisé pour l'utiliser.

La différence c'est que java n'est prévu _que_ pour faire de l'objet, pas pour mélanger du fonctionnel avec.  
 
Il est d'ailleur assez mal venu de mélanger références sur des fonction, fermetures lexicales réelles, et opérateurs déguisés. Surtout que dans le tas c'est sûrement pas la solution qui est offerte par C/C++ qui s'en sort le mieux. De plus, quand on comence à foutre ça dans un langage qui possède (massivement) des effets de bord, c'est pas la peine de se retrouver à poil.
 
Mais bon c'est sur que quand on est un ha><or qui compte ses lignes de code, essayer d'y voir un peu plus loin que la grammaire, c'est un truc de faible.

n°549869
Taz
bisounours-codeur
Posté le 24-10-2003 à 17:20:24  profilanswer
 

putain, mais c'est quoi cette histoire de nombres de lignes ? vous êtes butés ou quoi ? vous êtes les premier à critiquer le C par ce que la gestion de char* est longue et fastidieuse comparé à des objets de types string, et vous êtes tous d'accord qu'un langage qui permet de manipuler de manière concise et élégante les chaines de caractères est bien meilleur sur ce point :o

n°549876
nraynaud
lol
Posté le 24-10-2003 à 17:28:09  profilanswer
 

Taz a écrit :

putain, mais c'est quoi cette histoire de nombres de lignes ? vous êtes butés ou quoi ? vous êtes les premier à critiquer le C par ce que la gestion de char* est longue et fastidieuse comparé à des objets de types string, et vous êtes tous d'accord qu'un langage qui permet de manipuler de manière concise et élégante les chaines de caractères est bien meilleur sur ce point :o

Y'a que ta remarque était très très conne. Et qu'il faudrait pas que les débutants répètent ce genre de conneries.
 
Mélanger pointeur sur fonction, la surcharge du mauvais opérateur, et fermeture lexicale et justifier le tout par le nombre de lignes de code ou "l'intuitivié" (c'est vrai qu'envoyer un message à un objet c'est vraiment un truc contrintuitif en objet) c'est bien la preuve de n'avoir rien capté à l'histoire.
 
En particulier, reprocher à un langage de ne pas avoir avoir une fonctionnalité qui n'appartient pas à sa catégorie alors qu'il l'a (et à quel prix !) et donner en exemple 2 trucs qui _semblent_ l'avoir pour le débutant mais qui ne l'ont pas, je trouve ça très fort. T'aurais mieux fait de citer les crochets de smalltalk plustôt que de citer le langage de tes nuits humides sur ce coup là.


Message édité par nraynaud le 24-10-2003 à 17:29:41
n°549896
the real m​oins moins
Posté le 24-10-2003 à 17:46:16  profilanswer
 

c'est quoi une "fermeture lexicale"?
(merci d'utiliser des termes simples pour l'explication et au besoin un exemple con et concret:D)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°549898
the real m​oins moins
Posté le 24-10-2003 à 17:46:33  profilanswer
 

nraynaud a écrit :

le langage de tes nuits humides  

[:rofl]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°549957
nraynaud
lol
Posté le 24-10-2003 à 18:35:54  profilanswer
 

the real moins moins a écrit :

c'est quoi une "fermeture lexicale"?
(merci d'utiliser des termes simples pour l'explication et au besoin un exemple con et concret:D)

c'est un objet qui embarque avec lui toutes les variables visible à l'endroit où il est déclaré et chaque variable, embarque elle-même les variables qui sont visibles de son point de vue. Comme en général la visibilité est lexicale, on appelle ça une fermeture lexicale.
 
Pour y voir le rapport avec la choucroute, prenons un petit exemple une belle méthode non statique en C++, si on prend un ,pointeur dessus, ce qui est parfaitement légal, on va avoir du mal à l'exécuter, because il lui manque tout, jusqu'au this, elle n'embarque rien. Elle est complètement inutile. C'est pourquoi en C++ on évite de prendre des pointeurs sur autre chose que des trucs statiques, les variables globales qu'elle petu référence, sont, elles, accessible de partout (notez, pas "visibles", mais "accessible", le mot-clef "static" fait la différence).
 
En java, on a ces fameuses "inner-class" qui sont beaucoup plus qu'elles n'y paraissent, leurs instances n'existent que dans le cadre d'une instance de la classe englobante. En réalité, la classe interne embarque une référence sur l'instance englobante, embarquant du coup, ses variables d'instance et celle de sa classe englobante. C'est logique, les variables de l'instance englobante sont accessibles dans les méthodes de l'instance interne. Les variables statiques, sont, comme en C++ accessibles de n'importe où.  
 
Plus loin : une méthode peut être définie dans une autre méthode auquel cas elle a accès à tout ce qui est visible au point de définition. Et ça se complique, car l'existance des variables locales de la méthode englobante au moment de l'accès depuis l'instance interne n'a rien de garantie. C'est pourquoi elle vont être embarquées (par copie) et qu'elles doivent être "final" (pour être sûr qu'il s'agit bien du même objet dans la méthode englobante et englobée, c'est une garantie que n'offrent pas naturellement les effets de bord sinon).
 
 
Les langages fonctionnels embarquent simplement le contexte en copiant toutes les variables visibles dans un tableau (ils sont téhoriquement sans opérateur d'affectation).

n°549961
the real m​oins moins
Posté le 24-10-2003 à 18:42:55  profilanswer
 

bon je crois que je vais devoir relire tout ça [:gratgrat]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  Comment fait-on pour passer en parametre une fonction à une méthode ?

 

Sujets relatifs
[PHP] Passer une commande système unix en php.[VB.net] Comment passer un Array String a une fonction sans variable
Fonction combinatoire (C(n,p))[PHP] Passer un texte avec un '&' comme paramètre
Pointeur vers une méthode ?Fonction texte
Retrouver le schema d'une fonction stockée Oracle via JDBCaligner a droite un image dans un tableau > fonction align marche pas
Plus de sujets relatifs à : Comment fait-on pour passer en parametre une fonction à une méthode ?


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