Quelqu'un peut-il fournir une explication simple des méthodes par rapport aux fonctions dans le contexte de la POO?
1743
Quelqu'un peut-il fournir une explication simple des méthodes par rapport aux fonctions dans le contexte de la POO?
if(class(object)) { ... } else {stop()}
serait conceptuellement équivalente à la méthode?Réponses:
Une fonction est un morceau de code appelé par son nom. Il peut être transmis des données pour fonctionner (c'est-à-dire les paramètres) et peut éventuellement renvoyer des données (la valeur de retour). Toutes les données transmises à une fonction sont transmises explicitement.
Une méthode est un morceau de code appelé par un nom associé à un objet. À bien des égards, elle est identique à une fonction, à l'exception de deux différences clés:
(il s'agit d'une explication simplifiée, en ignorant les problèmes de portée, etc.)
la source
Une méthode est sur un objet.
Une fonction est indépendante d'un objet.
Pour Java et C #, il n'y a que des méthodes.
Pour C, il n'y a que des fonctions.
Pour C ++ et Python, cela dépendrait si vous êtes ou non dans une classe.
la source
«méthode» est le mot orienté objet pour «fonction» . C'est à peu près tout ce qu'il y a à faire (c'est-à-dire aucune différence réelle).
Malheureusement, je pense que beaucoup de réponses ici perpétuent ou avancent l'idée qu'il existe une différence complexe et significative.
Vraiment - il n'y a pas grand-chose, juste des mots différents pour la même chose.
[ajout tardif]
En fait, comme l'a souligné Brian Neal dans un commentaire à cette question , la norme C ++ n'utilise jamais le terme «méthode» pour faire référence aux fonctions membres. Certaines personnes peuvent considérer cela comme une indication que le C ++ n'est pas vraiment un langage orienté objet; cependant, je préfère le prendre comme une indication qu'un groupe assez intelligent de personnes ne pensait pas qu'il y avait une raison particulièrement forte d'utiliser un terme différent.
la source
self
argument est explicite. Et de nombreux langages ont des méthodes statiques, qui ne sont pas transmises à une instance.this
ouself
, mais ces constructions sont alors généralement appelées fonctions, plutôt que méthodes.En général: les méthodes sont des fonctions qui appartiennent à une classe, les fonctions peuvent se trouver sur n'importe quelle autre étendue du code, vous pouvez donc déclarer que toutes les méthodes sont des fonctions, mais pas toutes les fonctions sont des méthodes:
Prenons l'exemple python suivant:
L'exemple donné vous montre une classe appelée "Door" qui a une méthode ou une action appelée "open", elle est appelée une méthode car elle a été déclarée à l'intérieur d'une classe. Il y a une autre portion de code avec "def" juste en dessous qui définit une fonction, c'est une fonction parce qu'elle n'est pas déclarée à l'intérieur d'une classe, cette fonction appelle la méthode que nous avons définie à l'intérieur de notre classe comme vous pouvez le voir et enfin la fonction est en cours appelé par lui-même.
Comme vous pouvez le voir, vous pouvez appeler une fonction n'importe où, mais si vous voulez appeler une méthode, vous devez passer un nouvel objet du même type que la classe la méthode est déclarée (Class.method (object)) ou vous devez appeler la méthode à l'intérieur de l'objet (object.Method ()), au moins en python.
Considérez les méthodes comme des choses qu'une seule entité peut faire, donc si vous avez une classe Dog, il serait logique d'avoir une fonction d'aboiement uniquement à l'intérieur de cette classe et ce serait une méthode, si vous avez également une classe Person, il pourrait être logique de écrire une fonction "feed" car qui n'appartient à aucune classe car les humains et les chiens peuvent être nourris et vous pouvez appeler cette fonction car elle n'appartient à aucune classe en particulier.
la source
Un moyen simple de se souvenir:
la source
Une définition très générale de la principale différence entre une fonction et une méthode :
la source
Si vous avez envie de lire ici, c'est "Mon introduction aux méthodes OO"
L'idée derrière le paradigme orienté objet est de "menacer" le logiciel est composé de .. bien "objets". Les objets dans le monde réel ont des propriétés, par exemple si vous avez un employé, l'employé a un nom, un identifiant d'employé, une position, il appartient à un département, etc. etc.
L'objet sait également comment gérer ses attributs et effectuer certaines opérations sur ceux-ci. Disons que si nous voulons savoir ce qu'un employé fait en ce moment, nous lui demanderons.
Ce "whatAreYouDoing" est un "message" envoyé à l'objet. L'objet sait comment répondre à ces questions, on dit qu'il a une "méthode" pour résoudre la question.
Ainsi, la façon dont les objets doivent exposer son comportement est appelée méthode. Les méthodes sont donc l'objet artefact à «faire» quelque chose.
D'autres méthodes possibles sont
etc.
Les fonctions, d'autre part, sont des façons dont un langage de programmation doit calculer certaines données, par exemple, vous pourriez avoir la fonction addValues (8, 8) qui renvoie 16
Étant donné que les premiers langages de programmation populaires (tels que fortran, c, pascal) ne couvraient pas le paradigme OO, ils n'appellent que ces "fonctions" de ces artefacts.
par exemple, la fonction précédente en C serait:
Il n'est pas "naturel" de dire qu'un objet a une "fonction" pour effectuer une action, car les fonctions sont plus liées à des choses mathématiques alors qu'un employé a peu de mathématiques dessus, mais vous pouvez avoir des méthodes qui font exactement la même chose que des fonctions, par exemple, en Java, ce serait la fonction addValues équivalente.
Ça vous semble familier? C'est parce que Java a ses racines en C ++ et C ++ en C.
À la fin, ce n'est qu'un concept, dans la mise en œuvre, ils peuvent ressembler, mais dans la documentation OO, ils sont appelés méthode.
Voici un exemple de l’ancien objet Employee en Java.
La différence est donc sur le "domaine" où il est appliqué.
AppleScript a l'idée du matphor "langage naturel", que OO avait à un moment donné. Par exemple Smalltalk. J'espère qu'il vous sera peut-être plus facile de comprendre les méthodes des objets après avoir lu ceci.
REMARQUE: le code ne doit pas être compilé, juste pour servir d'exemple. N'hésitez pas à modifier la publication et à ajouter l'exemple Python.
la source
Dans le monde OO, les deux sont couramment utilisés pour signifier la même chose.
Du point de vue pur Math et CS, une fonction retournera toujours le même résultat lorsqu'elle est appelée avec les mêmes arguments (f (x, y) = (x + y)). Une méthode, d'autre part, est généralement associée à une instance d'une classe. Encore une fois cependant, la plupart des langages OO modernes n'utilisent plus le terme "fonction" pour la plupart. De nombreuses méthodes statiques peuvent être tout à fait comme des fonctions, car elles n'ont généralement pas d'état (pas toujours vrai).
la source
Disons qu'une fonction est un bloc de code (généralement avec sa propre portée, et parfois avec sa propre fermeture) qui peut recevoir des arguments et peut également retourner un résultat.
Une méthode est une fonction qui appartient à un objet (dans certains systèmes orientés objet, il est plus correct de dire qu'elle appartient à une classe). Être "possédé" par un objet / classe signifie que vous vous référez à la méthode via l'objet / classe; par exemple, en Java, si vous souhaitez appeler une méthode "open ()" appartenant à un objet "door", vous devez écrire "door.open ()".
Habituellement, les méthodes gagnent également des attributs supplémentaires décrivant leur comportement au sein de l'objet / classe, par exemple: la visibilité (liée au concept d'encapsulation orienté objet) qui définit à partir de quels objets (ou classes) la méthode peut être invoquée.
Dans de nombreux langages orientés objet, toutes les "fonctions" appartiennent à un objet (ou une classe) et donc dans ces langages il n'y a pas de fonctions qui ne soient pas des méthodes.
la source
Les méthodes sont des fonctions de classes. Dans le jargon normal, les gens échangent méthode et fonction partout. Fondamentalement, vous pouvez les considérer comme la même chose (vous ne savez pas si les fonctions globales sont appelées méthodes).
http://en.wikipedia.org/wiki/Method_(computer_science)
la source
Une fonction est un concept mathématique. Par exemple:
dit que la fonction f () retournera le sin du premier paramètre ajouté au cosinus du second paramètre. C'est juste des maths. En l'occurrence, sin () et cos () sont également des fonctions. Une fonction a une autre propriété: tous les appels à une fonction avec les mêmes paramètres doivent renvoyer le même résultat.
Une méthode, en revanche, est une fonction liée à un objet dans un langage orienté objet. Il a un paramètre implicite: l'objet sur lequel on agit (et son état).
Donc, si vous avez un objet Z avec une méthode g (x), vous pouvez voir ce qui suit:
Dans ce cas, le paramètre x est transmis, comme dans l'exemple de fonction précédent. Cependant, le paramètre de cos () est une valeur qui vit à l'intérieur de l'objet Z. Z et les données qui y vivent (Zy) sont des paramètres implicites de la méthode g () de Z.
la source
Une fonction ou une méthode est un morceau de code appelable nommé qui effectue certaines opérations et renvoie éventuellement une valeur.
En langage C , le terme fonction est utilisé. Java et C # gens diraient que c'est une méthode (et une fonction dans ce cas est définie dans une classe / un objet).
Un C ++ programmeur peut l'appeler une fonction ou parfois une méthode (selon qu'ils écrivent du code c ++ de style procédural ou font de la manière orientée objet de C ++, un programmeur C / C ++ uniquement l'appellera probablement une fonction car le terme 'méthode' est moins souvent utilisé dans la littérature C / C ++).
Vous utilisez une fonction en appelant simplement son nom comme,
Vous appelleriez une méthode en référençant d'abord son objet comme,
la source
Historiquement, il peut y avoir eu une différence subtile avec une "méthode" étant quelque chose qui ne renvoie pas de valeur, et une "fonction" qui le fait. Chaque langue a son propre lexique de termes avec une signification spéciale.
En "C" , le mot "fonction" signifie une routine de programme .
En Java , le terme "fonction" n'a pas de signification particulière. Alors que "méthode" signifie l'une des routines qui forme l'implémentation d'une classe.
En C #, cela se traduirait par:
Mais vraiment, je réitère qu'il n'y a vraiment aucune différence dans les 2 concepts. Si vous utilisez le terme "fonction" dans des discussions informelles sur Java, les gens supposeront que vous vouliez dire "méthode" et continueront. Ne l'utilisez pas dans des documents ou des présentations appropriés sur Java, ou vous aurez l'air idiot.
la source
method
... ou je l'appelleraisprocedure
etfunction
.La fonction est un ensemble de logiques qui peuvent être utilisées pour manipuler des données.
Tandis que, Method est une fonction utilisée pour manipuler les données de l'objet auquel il appartient. Donc techniquement, si vous avez une fonction qui n'est pas complètement liée à votre classe mais qui a été déclarée dans la classe, ce n'est pas une méthode; Cela s'appelle un mauvais design.
la source
Les méthodes d'une classe agissent sur l'instance de la classe, appelée objet.
la source
Dans les langages OO comme Object Pascal ou C ++, une "méthode" est une fonction associée à un objet. Ainsi, par exemple, un objet "Chien" pourrait avoir une fonction "aboyer" et cela serait considéré comme une "Méthode". En revanche, la fonction "StrLen" est autonome (elle fournit la longueur d'une chaîne fournie en argument). Il est donc juste une « fonction ». Javascript est également orienté objet techniquement mais fait face à de nombreuses limitations par rapport à un langage complet comme C ++, C # ou Pascal. Néanmoins, la distinction devrait être maintenue.
Quelques faits supplémentaires: C # est entièrement orienté objet, vous ne pouvez donc pas créer de "fonctions" autonomes. En C #, chaque fonction est liée à un objet et est donc, techniquement, une "méthode". Le kicker est que peu de gens en C # les appellent "méthodes" - ils utilisent simplement le terme "fonctions" car il n'y a pas vraiment de distinction à faire.
Enfin - pour que les gourous de Pascal ne me sautent pas dessus ici - Pascal fait également la différence entre les "fonctions" (qui renvoient une valeur) et les "procédures" qui ne le font pas. C # ne fait pas cette distinction explicitement bien que vous puissiez, bien sûr, choisir de renvoyer une valeur ou non.
la source
Puisque vous avez mentionné Python, ce qui suit peut être une illustration utile de la relation entre les méthodes et les objets dans la plupart des langages orientés objet modernes. En bref, ce qu'ils appellent une "méthode" n'est qu'une fonction qui reçoit un argument supplémentaire (comme d'autres réponses l'ont souligné), mais Python le rend plus explicite que la plupart des langages.
Maintenant, comparez la fonction
greet_with_greeter
et la méthodegreet
: la seule différence est le nom du premier paramètre (dans la fonction je l'ai appelé "greeter", dans la méthode je l'ai appelé "self"). Je peux donc utiliser lagreet
méthode exactement de la même manière que j'utilise lagreet_with_greeter
fonction (en utilisant la syntaxe "dot" pour y accéder, car je l'ai définie dans une classe):J'ai donc effectivement transformé une méthode en fonction. Puis-je transformer une fonction en méthode? Eh bien, comme Python vous permet de jouer avec les classes une fois qu'elles sont définies, essayons:
Oui, la fonction
greet_with_greeter
est désormais également connue sous le nom de méthodegreet2
. Cela montre la seule vraie différence entre une méthode et une fonction: lorsque vous appelez une méthode "sur" un objet en appelantobject.method(args)
, le langage le transforme comme par magiemethod(object, args)
.(Les puristes OO pourraient soutenir qu'une méthode est quelque chose de différent d'une fonction, et si vous entrez dans Python ou Ruby avancé - ou Smalltalk! - vous commencerez à voir leur point. De plus, certains langages donnent aux méthodes un accès spécial aux bits d'un objet. Mais la principale différence conceptuelle reste le paramètre supplémentaire caché.)
la source
pour moi: la fonction d'une méthode et d'une fonction est la même si j'accepte que:
Tout comme n'importe quel morceau de code, vous pouvez avoir des objets que vous mettez et vous pouvez avoir un objet qui en résulte. Ce faisant, ils pourraient changer l'état d'un objet, mais cela ne changerait pas leur fonctionnement de base pour moi.
Il peut y avoir une différence de définition dans les fonctions d'appel d'objets ou d'autres codes. Mais n'est-ce pas quelque chose pour une différenciation verbale et c'est pourquoi les gens les échangent? L'exemple de calcul mentionne avec soin. parce que j'engage des employés pour faire mes calculs:
En procédant ainsi, je peux compter sur un employeur qui est responsable des calculs. S'il veut plus d'argent, je le libère et je laisse la fonction de collecteur de carbure d'éliminer les employés inutilisés faire le reste et obtenir un nouvel employé.
Même arguer qu'une méthode est une fonction d'objets et qu'une fonction est un calcul non connecté ne m'aidera pas. Le descripteur de fonction lui-même et, idéalement, la documentation de la fonction me diront ce dont elle a besoin et ce qu'elle peut renvoyer. Le reste, comme la manipulation de l'état d'un objet, n'est pas vraiment transparent pour moi. Je m'attends à ce que les fonctions et les méthodes fournissent et manipulent ce qu'elles prétendent sans avoir besoin de savoir en détail comment elles le font. Même une fonction de calcul pure peut changer l'état de la console ou l'ajouter à un fichier journal.
la source
Ne compliquons pas trop ce qui devrait être une réponse très simple. Les méthodes et les fonctions sont la même chose. Vous appelez une fonction une fonction lorsqu'elle est en dehors d'une classe, et vous appelez une fonction une méthode lorsqu'elle est écrite à l'intérieur d'une classe.
la source
D'après ma compréhension, une méthode est une opération qui peut être effectuée sur une classe. C'est un terme général utilisé en programmation.
Dans de nombreux langages, les méthodes sont représentées par des fonctions et des sous-programmes. La principale distinction que la plupart des langues utilisent pour ces derniers est que les fonctions peuvent renvoyer une valeur à l'appelant et pas un sous-programme. Cependant, de nombreux langages modernes n'ont que des fonctions, mais celles-ci peuvent éventuellement ne renvoyer aucune valeur.
Par exemple, disons que vous voulez décrire un chat et que vous souhaitez qu'il puisse bâiller. Vous créeriez une classe Cat, avec une méthode Yawn, qui serait très probablement une fonction sans aucune valeur de retour.
la source
Pour une approximation de premier ordre, une méthode (en style C ++ OO) est un autre mot pour une fonction membre, c'est-à-dire une fonction qui fait partie d'une classe.
Dans des langages comme C / C ++, vous pouvez avoir des fonctions qui ne sont pas membres d'une classe; vous n'appelez pas une fonction non associée à une classe une méthode.
la source
La fonction est le concept appartenant principalement à la programmation orientée procédure où une fonction est une entité qui peut traiter des données et vous renvoie de la valeur
La méthode est le concept de la programmation orientée objet où une méthode est membre d'une classe qui effectue principalement le traitement sur les membres de la classe.
la source
Les gens à mon humble avis voulaient juste inventer un nouveau mot pour faciliter la communication entre les programmeurs quand ils voulaient se référer aux fonctions à l'intérieur des objets.
Si vous dites des méthodes, vous voulez dire des fonctions à l'intérieur de la classe. Si vous dites des fonctions, vous entendez simplement des fonctions en dehors de la classe.
La vérité est que les deux mots sont utilisés pour décrire des fonctions. Même si vous l'avez mal utilisé, rien de mal ne se produit. Les deux mots décrivent bien ce que vous voulez réaliser dans votre code.
La fonction est un code qui doit jouer un rôle ( une fonction ) de faire quelque chose. La méthode est une méthode pour résoudre le problème.
Ça fait la même chose. C'est la même chose. Si vous voulez être super précis et suivre la convention, vous pouvez appeler des méthodes comme fonctions à l'intérieur des objets.
la source
Je ne suis pas un expert, mais voici ce que je sais:
La fonction est un terme en langage C, elle fait référence à un morceau de code et le nom de la fonction sera l'identifiant pour utiliser cette fonction.
La méthode est le terme OO, généralement il a un pointeur this dans le paramètre de fonction. Vous ne pouvez pas appeler ce morceau de code comme C, vous devez utiliser un objet pour l'invoquer.
Les méthodes d'invocation sont également différentes. Ici, invoquez un sens pour trouver l'adresse de ce morceau de code. C / C ++, le temps de liaison utilisera le symbole de fonction pour localiser.
Objecive-C est différent. Appelez une fonction C pour utiliser la structure de données pour trouver l'adresse. Cela signifie que tout est connu au moment de l'exécution.
la source
Je sais que beaucoup d'autres ont déjà répondu, mais j'ai trouvé que la suite est une réponse simple mais efficace sur une seule ligne. Bien que cela ne semble pas beaucoup mieux que les autres réponses ici, mais si vous le lisez attentivement, il a tout ce que vous devez savoir sur la méthode vs la fonction.
Une méthode est une fonction qui a un récepteur défini, en termes de POO, une méthode est une fonction sur une instance d'un objet.
la source
Différence entre les méthodes et les fonctions
De la lecture de ce document sur Microsoft
Les méthodes sont donc le sous-ensemble des fonctions. Chaque méthode est une fonction mais pas chaque fonction est une méthode, par exemple, un
constructor
ne peut pas être dit comme une méthode mais c'est une fonction.la source
Fonction - Une fonction dans un morceau de code indépendant qui inclut une certaine logique et doit être appelée indépendamment et est définie en dehors de la classe.
Méthode - Une méthode est un morceau de code indépendant qui est appelé en référence à un objet et qui doit être défini dans la classe.
la source
Voici quelques explications sur la méthode et la fonction à l'aide d'exemples JavaScript:
test(20, 50);
est la fonction définie et utilisée pour exécuter certaines étapes ou retourner quelque chose qui peut être stocké / utilisé quelque part.var test = something.test();
ici test () peut être une méthode d'un objet ou un prototype défini pour des objets intégrés, voici plus d'explications:Propriété / méthode intégrée pour les chaînes en javascript:
Exemple personnalisé:
Vous pouvez également définir des propriétés pour String, Array, etc. par exemple
Quelques références: Javascript Object Method , Functions , More info on prototype
la source
TL; DR
Une fonction est un morceau de code à exécuter.
Une méthode est une fonction à l'intérieur d'un objet.
Exemple de fonction:
Exemple d'une méthode:
C'est pourquoi nous disons qu'un mot-clé "this" à l'intérieur d'une fonction n'est pas très utile à moins que nous ne l'utilisions avec call, apply ou bind .. parce que call, apply, bind appellera cette fonction comme méthode à l'intérieur de l'objet ==> fondamentalement, il convertit la fonction en méthode
la source
Ils sont souvent interchangeables, mais une méthode fait généralement référence à un sous-programme à l'intérieur d'une classe, et une fonction fait généralement référence à un sous-programme à l'extérieur de la classe. par exemple, en Ruby:
En Java, où tout (sauf les instructions de package et d'importation) doit être à l'intérieur de la classe, les gens les appellent presque toujours «méthodes».
la source