Question Quelle est la différence entre une méthode et une fonction?


Quelqu'un peut-il fournir une explication simple de méthodes contre. les fonctions dans le contexte de la POO?


1447
2017-09-30 23:45


origine


Réponses:


UNE fonction est un morceau de code qui s'appelle par son nom. Il peut être transmis des données pour fonctionner (c'est-à-dire les paramètres) et peut éventuellement retourner des données (la valeur de retour). Toutes les données transmises à une fonction sont explicitement transmises.

UNE méthode est un morceau de code appelé par un nom associé à un objet. Dans la plupart des cas, il est identique à une fonction, à l'exception de deux différences clés:

  1. Une méthode est implicitement passée à l'objet sur lequel elle a été appelée.
  2. Une méthode peut fonctionner sur des données contenues dans la classe (en se rappelant qu'un objet est une instance d'une classe - la classe est la définition, l'objet est une instance de cette donnée).

(Ceci est une explication simplifiée, en ignorant les problèmes de portée etc.)


1502
2017-10-01 00:00



Une méthode est sur un objet.
Une fonction est indépendante d'un objet.

Pour Java, il n'y a que des méthodes.
Pour C, il n'y a que des fonctions.

Pour C ++, cela dépend si vous êtes ou non dans une classe.


871
2017-09-30 23:51



'méthode' est le mot orienté objet pour 'fonction'. C'est à peu près tout ce qu'il y a à faire (c'est-à-dire, pas de réelle différence).

Malheureusement, je pense que beaucoup de réponses ici perpétuent ou font avancer l'idée qu'il y a 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 Brian Neal souligné dans un commentaire à cette question, le standard C ++ n'utilise jamais le terme 'method' lorsqu'il fait référence à des fonctions membres. Certaines personnes peuvent considérer cela comme une indication que C ++ n'est pas vraiment un langage orienté objet; cependant, je préfère considérer cela comme une indication qu'un groupe de personnes assez intelligent ne pensait pas qu'il y avait une raison particulièrement forte d'utiliser un terme différent.


165
2017-09-30 23:48



En général: les méthodes sont des fonctions qui appartiennent à une classe, les fonctions peuvent être sur n'importe quelle autre portée du code afin que vous puissiez indiquer que toutes les méthodes sont des fonctions, mais toutes les fonctions ne sont pas des méthodes:

Prenez l'exemple python suivant:

class Door:
  def open(self):
    print 'hello stranger'

def knock_door:
  a_door = Door()
  Door.open(a_door)

knock_door()

L'exemple donné vous montre une classe appelée "Door" qui a une méthode ou une action appelée "open", elle s'appelle une méthode parce qu'elle a été déclarée dans une classe. Il y a une autre partie de code avec "def" juste en dessous qui définit une fonction, c'est une fonction car elle n'est pas déclarée dans une classe, cette fonction appelle la méthode que nous avons définie dans notre classe comme vous pouvez le voir 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 déclarée (Class.method (object)) ou vous devez invoquer la méthode à l'intérieur de l'objet (object.Method ()), au moins en python.

Pensez aux méthodes comme des choses qu'une seule entité peut faire, donc si vous avez une classe Chien, il serait logique d'avoir une fonction d'écorce seulement dans cette classe et ce serait une méthode, si vous avez aussi une classe Personne, cela pourrait avoir du sens écrire une fonction "feed" pour qui n'appartient à aucune classe puisque les humains et les chiens peuvent être nourris et vous pourriez appeler cela une fonction puisqu'elle n'appartient à aucune classe en particulier.


81
2017-10-01 00:33



Une définition très générale de la principale différence entre Fonction et un Méthode:

Les fonctions sont définies en dehors des classes, tandis que les méthodes sont définies à l'intérieur et en partie des classes.


35
2017-10-28 23:08



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é, un poste, il appartient à un département, 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 que fait un employé en ce moment, nous le lui demanderons.

employe whatAreYouDoing.

Que "whatAreYouDoing" est un "message" envoyé à l'objet. L'objet sait comment répondre à ces questions, il est dit qu'il a une "méthode" pour résoudre la question.

Ainsi, la façon dont les objets doivent exposer son comportement sont appelées méthodes. Les méthodes sont donc l'objet artefact à "faire" quelque chose.

D'autres méthodes possibles sont

employee whatIsYourName
employee whatIsYourDepartmentsName

etc.

D'un autre côté, les fonctions sont les moyens utilisés par un langage de programmation pour calculer certaines données, par exemple vous pouvez avoir la fonction addValues ​​(8, 8) qui renvoie 16

// pseudo-code
function addValues( int x, int y )  return x + y 
// call it 
result = addValues( 8,8 )
print result // output is 16...

Puisque les premiers langages de programmation populaires (tels que fortran, c, pascal) ne couvraient pas le paradigme OO, ils appelaient seulement ces "fonctions" d'artefacts.

par exemple, la fonction précédente en C serait:

int addValues( int x, int y ) 
{
   return x + y;
}

Il n'est pas "naturel" de dire qu'un objet a une "fonction" pour effectuer une action, parce que les fonctions sont plus liées aux choses mathématiques alors qu'un employé a peu de mathématique, 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.

public static int addValues( int x, int y ) {
    return x + y;
}

Ça vous semble familier? C'est parce que Java a ses racines sur C ++ et C ++ sur C.

À la fin est juste un concept, dans la mise en œuvre, ils pourraient se ressembler, mais dans la documentation OO, ils sont appelés méthode.

Voici un exemple de l'ancien objet Employee en Java.

public class Employee {

    Department department;
    String name;

    public String whatsYourName(){
        return this.name;
    }
    public String whatsYourDeparmentsName(){
         return this.department.name();
    }
    public String whatAreYouDoing(){
        return "nothing";
    } 
    // Ignore the following, only set here for completness
    public Employee( String name ) {
        this.name = name;
    }

}

// Usage sample.
Employee employee = new Employee( "John" ); // Creates an employee called John

// If I want to display what is this employee doing I could use its methods.
// to know it.
String name = employee.whatIsYourName():
String doingWhat = employee.whatAreYouDoint();

// Print the info to the console.

 System.out.printf("Employee %s is doing: %s", name, doingWhat );

Output:
Employee John is doing nothing.

La différence est alors sur le "domaine" où il est appliqué.

AppleScript a l'idée de matphor "langage naturel", qu'à un certain moment OO avait. Par exemple Smalltalk. J'espère qu'il sera peut-être plus facile pour vous de comprendre les méthodes dans les 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 ajoutez l'exemple Python.


26
2017-10-08 00:07



Façon simple de se souvenir:

  • Fonction → Free (Free signifie ne pas appartenir à un objet ou à une classe)
  • Method → MMembre (Un membre d'un objet ou d'une classe)

20
2017-09-30 23:56



Dans le monde OO, les deux sont couramment utilisés pour signifier la même chose.

A partir d'une perspective Math et CS pure, une fonction retournera toujours le même résultat lorsqu'elle est appelée avec les mêmes arguments (f (x, y) = (x + y)). D'autre part, une méthode est généralement associée à une instance d'une classe. Encore une fois cependant, la plupart des langues OO modernes n'utilisent plus le terme «fonction» pour la plupart. De nombreuses méthodes statiques peuvent ressembler à des fonctions, car elles n'ont généralement pas d'état (pas toujours vrai).


16
2017-09-30 23:55



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 aussi renvoyer un résultat.

Une méthode est une fonction appartenant à 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 à travers l'objet / classe; par exemple, en Java si vous voulez appeler une méthode "open ()" appartenant à un objet "door", vous devez écrire "door.open ()".

Habituellement, les méthodes acquièrent également des attributs supplémentaires décrivant leur comportement au sein de l'objet / classe, par exemple: 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.


14
2017-10-01 00:54