[Function] Différence entre une méthode et une fonction



Answers

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.

Question

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




Une fonction est un concept mathématique. Par exemple:

f(x,y) = sin(x) + cos(y)

dit que la fonction f () retournera le sinus du premier paramètre ajouté au cosinus du deuxième paramètre. C'est juste des maths. En l'occurrence, sin () et cos () sont aussi 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, d'autre part, est une fonction qui est liée à un objet dans un langage orienté objet. Il a un paramètre implicite: l'objet sur lequel il agit (et son état).

Donc, si vous avez un objet Z avec une méthode g (x), vous pourriez voir ce qui suit:

Z.g(x) = sin(x) + cos(Z.y)

Dans ce cas, le paramètre x est transmis, comme dans l'exemple de fonction précédent. Cependant, le paramètre cos () est une valeur qui réside à l'intérieur de l'objet Z. Z et les données qui y résident (Zy) sont des paramètres implicites de la méthode g () de Z.




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 quand elle est en dehors d'une classe, et vous appelez une fonction une méthode quand elle est écrite dans une classe.




En C ++, parfois, la méthode est utilisée pour refléter la notion de fonction membre d'une classe. Cependant, récemment, j'ai trouvé une déclaration dans le livre «La quatrième édition du langage de programmation C ++», à la page 586 «Classes dérivées»

Une fonction virtuelle est parfois appelée une méthode.

C'est un peu déroutant, mais il a dit parfois , donc cela a du sens, le créateur C ++ a tendance à voir les méthodes car les fonctions peuvent être invoquées sur les objets et peuvent avoir un comportement polymorphe.




La fonction est un ensemble de logique qui peut être utilisé pour manipuler des données. While, 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; C'est ce qu'on appelle un mauvais design.




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.




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 retourne 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.




Je ne suis pas un expert, mais c'est ce que je sais:

  1. La fonction est un terme de langage C, il se réfère à un morceau de code et le nom de la fonction sera l'identifiant pour utiliser cette fonction.

  2. La méthode est le terme OO, typiquement il a un pointeur this dans le paramètre function. Vous ne pouvez pas invoquer ce morceau de code comme C, vous devez utiliser object pour l'invoquer.

  3. Les méthodes invoke sont également différentes. Ici, invoquez la signification pour trouver l'adresse de ce morceau de code. C / C ++, le temps de liaison utilisera le symbole de la fonction à localiser.

  4. Objecive-C est différent. Invoquer signifie 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 fonction est un ensemble de logique qui peut être utilisé pour manipuler des données.

While, 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; C'est ce qu'on appelle un mauvais design.




Les méthodes sont des fonctions de classes. Dans le jargon normal, les gens changent de méthode et de fonction partout. Fondamentalement, vous pouvez les considérer comme la même chose (pas sûr si les fonctions globales sont appelées méthodes).

http://en.wikipedia.org/wiki/Method_(computer_science)




A class is the collection of some data and function optionally with a constructor.

While you creating an instance (copy,replication) of that particular class the constructor initialize the class and return an object.

Now the class become object (without constructor) & Functions are known as method in the object context.

So basically

Class <==new==>Object

Function <==new==>Method

En Java on dit généralement que le nom du constructeur est le même que le nom de la classe mais en réalité ce constructeur est comme le bloc d'instance et le bloc statique mais avec un utilisateur qui définit le type de retour (ie Type de classe)

Alors que la classe peut avoir un bloc statique, un bloc d'instance, un constructeur, une fonction, l'objet n'a généralement que des données et une méthode.




De ma compréhension d'une méthode est toute 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 fonctions est que les fonctions peuvent renvoyer une valeur à l'appelant et non un sous-programme. Cependant, beaucoup de langues modernes ont seulement des fonctions, mais celles-ci peuvent éventuellement ne pas renvoyer de valeur.

Par exemple, disons que vous voulez décrire un chat et que vous aimeriez qu'il soit capable de bâiller. Vous devez créer une classe Cat, avec une méthode Yawn, qui serait très probablement une fonction sans valeur de retour.




Les gens à mon humble avis voulaient simplement inventer un nouveau mot pour faciliter la communication entre les programmeurs quand ils voulaient se référer à des 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 voulez dire simplement des fonctions en dehors de la classe.

La vérité est que les deux mots sont utilisés pour décrire les fonctions. Même si vous l'avez utilisé à tort, il ne se passe rien de mal. 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.

Il fait la même chose. C'est la même chose. Si vous voulez être très précis et suivre la convention, vous pouvez appeler des méthodes comme des fonctions à l'intérieur des objets.




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.




Dans les langages OO tels que Object Pascal ou C ++, une "méthode" est une fonction associée à un objet. Ainsi, par exemple, un objet "Dog" pourrait avoir une fonction "bark" et ceci serait considéré comme une "Méthode". En revanche, la fonction "StrLen" est seule (elle fournit la longueur d'une chaîne fournie en argument). Ce n'est donc qu'une "fonction". Javascript est techniquement orienté objet aussi, mais fait face à de nombreuses limitations par rapport à un langage complet comme C ++, C # ou Pascal. Néanmoins, la distinction devrait toujours tenir.

Quelques faits supplémentaires: C # est entièrement orienté objet, donc vous ne pouvez 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 des "méthodes" - ils utilisent simplement le terme "fonctions" car il n'y a pas de réelle distinction à faire.

Enfin - juste pour que les gourous Pascal ne sautent pas sur moi ici - Pascal fait aussi la différence entre les «fonctions» (qui retournent 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.






Links