2012 votes

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

Je suis un long temps d'Applescript utilisateur et le nouveau shell scripteur qui veut en savoir plus générales du langage de script comme Javascript ou Python pour des raisons de performances.

J'ai de la difficulté à obtenir ma tête autour de concepts tels que l'orientation de l'objet, les classes et instanciation.

Si quelqu'un pouvait m'indiquer un lapidaire explication des méthodes vs fonctions il pourrait m'aider à obtenir plus de la "bosse". Les explications que j'ai trouvé à l'aide de google sont juste à peine au dessus de ma tête.

Merci.

2102voto

Andrew Edgecombe Points 13183

Une fonction est un morceau de code qui est appelé par son nom. Il peut être transmis de données pour fonctionner sur (ie. les paramètres) et peut éventuellement renvoyer des données (la valeur de retour).

Toutes les données qui est transmis à une fonction est explicitement transmis.

Une méthode est un morceau de code qui est appelé par le nom qui est associé à un objet. Dans la plupart des égards, elle est identique à une fonction, sauf pour les deux principales différences.

  1. Il est implicitement adoptée à l'objet pour lequel il a été appelé
  2. Il est capable d'opérer sur des données contenues au sein de la classe (en se souvenant qu'un objet est une instance d'une classe - la classe est la définition, l'objet est une instance de données)

(c'est une explication simplifiée, en ignorant les questions de portée , etc.)

1071voto

Aaron Points 5589

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

Pour Java, il y a seulement des méthodes.
Pour le C, il y a seulement des fonctions.

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

290voto

Michael Burr Points 181287

"méthode" est orientée objet, le mot pour "fonction". C'est à peu près tout là est à lui (c'est à dire., pas de réelle différence).

Malheureusement, je pense que beaucoup de réponses ici sont de perpétuer ou de faire progresser l'idée qu'il y a un peu complexe, à la différence réelle.

Vraiment, il n'y a pas grand chose, juste des mots différents pour désigner la même chose.

[plus tard]


En fait, comme Brian Neal a souligné dans un commentaire à cette question, la norme C++ n'utilise jamais le terme de "méthode" lorsque se référant à des fonctions de membre du. Certaines personnes peuvent prendre cela comme un signe que le C++ n'est pas vraiment un langage orienté objet; cependant, je préfère le prendre comme une indication qu'un assez intelligents groupe de personnes ne pensais pas qu'il était particulièrement forte raison pour utiliser un terme différent.

120voto

Gustavo Rubio Points 2370

En général: les méthodes sont des fonctions qui appartiennent à une classe, les fonctions peuvent être sur n'importe quel autre champ d'application du code de sorte que vous pouvez indiquer que toutes les méthodes sont des fonctions, mais pas toutes les fonctions sont des méthodes:

Prendre exemple python:

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

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

knock_door()

L'exemple donné montre une classe appelée "Porte" qui a une méthode ou d'une action appelée "open", c'est une méthode parce qu'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 de ce qui définit une fonction, c'est une fonction, car il 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, est appelée la fonction "seul".

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 de la méthode est déclarée (de la Classe.méthode(objet)) ou alors il faut appeler la méthode à l'intérieur de l'objet (l'objet.Méthode()), au moins en python.

Penser à des méthodes comme les choses qu'une seule entité peut le faire, donc si vous avez un Chien de catégorie, il serait logique d'avoir une écorce de fonction à l'intérieur de la classe et qui serait une méthode, si vous avez aussi une classe de Personne, il peut être utile d'écrire une fonction "alimentation" pour qui n'appartient pas à une catégorie puisqu'à la fois les humains et les chiens peuvent se nourrir et que vous pourriez appeler une fonction, car il n'appartient à aucune classe en particulier.

37voto

OscarRyz Points 82553

Si vous avez envie de lire, ici, est "Mon introduction à l'OO méthodes"

L'idée derrière le paradigme Orienté Objet est de "menace", 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 id d'employé, une position, il appartient à un département, etc. etc.

L'objet également de savoir comment traiter avec ses attributs et d'effectuer certaines opérations sur celles-ci. Disons que si nous voulons savoir ce qu'un employé est en train de faire maintenant, nous voudrions demander à lui.

employe whatAreYouDoing.

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

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

D'autres méthodes sont possibles

employee whatIsYourName
employee whatIsYourDepartmentsName

etc.

Les fonctions dans l'autre main, sont des moyens d'un langage de programmation a pour calculer certaines données, par exemple, vous pourriez 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...

Depuis la première populaires langages de programmation ( fortran, c, pascal ) ne couvre pas le paradigme OO, elle ne fait appel à ces artefacts "fonctions".

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

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

Il n'est pas "naturel" pour dire qu'un objet a une "fonction" pour effectuer une action, parce que les fonctions sont plus liées à des objets mathématiques, tandis qu'un Employé a peu de mathématiques, mais vous pouvez avoir des méthodes qui font exactement la même chose que les fonctions, par exemple en Java, ce serait l'équivalent addValues fonction.

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

Semble familier? C'est parce que Java a ses racines sur le C++ et C++ sur C.

À la fin, c'est juste un concept, dans la mise en œuvre, ils peuvent regarder la même chose, mais dans le OO documents qui sont de la méthode appelée.

Heres un exemple de l'ex-Employé de l'objet 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 ont l'idée de "langue naturelle" matphor qui , à un moment OO avait. Par exemple Smalltalk. J'espère que cela peut être raisonnable, plus facile pour vous de comprendre les méthodes des objets après la lecture de ce.

REMARQUE: Le code n'est pas compilé, juste pour servir d'exemple. N'hésitez pas à modifier le post et ajouter Python exemple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X