web-dev-qa-db-fra.com

Méthodes Java vs fonctions

Je viens de décider d'intégrer mes compétences en programmation MATLAB à un codage Java plus cohérent et rigoureux. J'espère donc que ce ne sera pas une question trop naïve.

J'aimerais savoir s'il existe une raison réelle pour laquelle Java appelle les fonctions methods et non pas functions, comme le font beaucoup d'autres langages de programme.

Est-ce à cause de la nature OOP intérieure de Java comparée aux langages procéduraux tels que C/C++? ou y a-t-il d'autres raisons importantes (ou subtiles)?

Merci d'avance.

11
fpe

À mon avis, ce chiffre http://www.jot.fm/issues/issue_2008_03/article4/images/figure2.gif

one, two and three dimensional method dispatch

from http://www.jot.fm/issues/issue_2008_03/article4/ aide à comprendre l’une des principales différences entre OO et la programmation procédurale. L’essentiel est que l’idée 

La programmation procédurale fournit une seule dimension à associer à unité de calcul avec un nom. Ici, les appels de procédure ou les noms sont directement mappés aux implémentations de procédures. Dans Figure un appelant m1 ne laisse d'autre choix que l'invocation de la seule implémentation de procédure m1

tandis que

La programmation orientée objet ajoute une autre dimension à la résolution de noms à celle de la programmation procédurale. En plus de la méthode ou nom de la procédure, envoi du message prend le destinataire du message dans considération lors de la recherche d'une méthode. Sur la figure 2b, nous en voyons deux implémentations de la méthode m1. Le choix de la méthode appropriée dépend non seulement du nom du message m1, mais également du destinataire de le message réel, ici Ry

la troisième section de la figure (c) fait référence à la programmation par sujet, dans laquelle le comportement d'un objet (la méthode appelée) ne dépend pas seulement du statut de l'objet, mais aussi des sujets qui l'invoquent (ou l'observent) . Toutefois, cela dépasse le cadre de votre question. 

3
Sindico

Eh bien, il y a une petite différence entre une méthode et une fonction.

Une fonction est simplement un code que vous pouvez appeler à tout moment par son nom. Vous pouvez également lui passer des arguments, également appelé paramètres. Vous pouvez également obtenir le résultat de n’importe quelle fonction, c’est-à-dire la valeur de retour de la fonction.

Mais une méthode est un code appelé par son nom mais associé à n’importe quel objet. Vous pouvez également transmettre des paramètres aux méthodes et obtenir des valeurs de retour pour les méthodes, mais le fait est qu'elles seront toujours associées à quelques objets.

ÉDITÉ

Java est orienté objet, vous ne pouvez pas avoir de code Java à exécuter sans classes dans la plupart des cas, cependant, en C++, vous pouvez faire exécuter votre code sans classes. Donc, en Java, il y aura des classes et du code sera écrit en classes, elles seront donc appelées méthodes plutôt que fonctions, car elles seront associées à des objets.

Mais en C++, vous pouvez avoir une fonction qui peut être appelée en transmettant explicitement des valeurs.

En termes simples, vous pouvez dire qu'une méthode est une fonction liée à un objet.

4
gprathour

Je ne peux pas m'empêcher de penser à beaucoup de drames inutiles dans celui-ci. "méthodes" est sûrement un nom, que Java utilise par hasard, pour des sous-programmes qui peuvent ou non nécessiter des paramètres, et peuvent ou non renvoyer une valeur?

Par exemple. Les "méthodes" valides pourraient être les suivantes, sans entrer dans la pureté OO, les définitions canoniques de "fonctions", etc. Les deux éléments ci-dessous peuvent ou non utiliser "l'état" actuel d'un objet (valeurs de variable d'instance) dans leur exécution également:

// kind of a function, returns a value
public int calculateStuff(int param1)

// more of a procedure, presumably just "does stuff", returns nothing
public void doStuff(int param1)
1
Brian

Ils sont les mêmes. C++ les appelle généralement des fonctions. Java se réfère généralement à eux comme des méthodes.

Les méthodes sont généralement associées à une classe.

Vous entendrez parfois "fonction de classe" aussi, qui est juste une méthode.

Peu importe, les gens sauront de quoi vous parlez si vous les appelez non plus. 

0
Captain Skyhawk