Frage Was ist der Unterschied zwischen einer Methode und einer Funktion?


Kann mir jemand eine einfache Erklärung liefern? Methoden gegen Funktionen im OOP-Kontext?


1447
2017-09-30 23:45


Ursprung


Antworten:


EIN Funktion ist ein Stück Code, der namentlich genannt wird. Es können Daten übergeben werden, die bearbeitet werden (d. H. Die Parameter), und optional können Daten (der Rückgabewert) zurückgegeben werden. Alle Daten, die an eine Funktion übergeben werden, werden explizit übergeben.

EIN Methode ist ein Codeabschnitt, der mit einem Namen aufgerufen wird, der einem Objekt zugeordnet ist. In den meisten Punkten ist es bis auf zwei Hauptunterschiede identisch mit einer Funktion:

  1. Eine Methode wird implizit an das Objekt übergeben, an dem sie aufgerufen wurde.
  2. Eine Methode kann mit Daten arbeiten, die in der Klasse enthalten sind (denken Sie daran, dass ein Objekt eine Instanz einer Klasse ist - die Klasse ist die Definition, das Objekt ist eine Instanz dieser Daten).

(Dies ist eine vereinfachte Erklärung, ignoriert Probleme von Umfang etc.)


1502
2017-10-01 00:00



Eine Methode ist auf einem Objekt.
Eine Funktion ist unabhängig von einem Objekt.

Für Java gibt es nur Methoden.
Für C gibt es nur Funktionen.

Für C ++ hängt es davon ab, ob Sie in einer Klasse sind oder nicht.


871
2017-09-30 23:51



'Methode' ist das objektorientierte Wort für 'Funktion'. Das ist so ziemlich alles, was es gibt (dh, keinen wirklichen Unterschied).

Leider glaube ich, dass viele der Antworten die Idee, dass es einen komplexen, bedeutungsvollen Unterschied gibt, fortführen oder vorantreiben.

Wirklich - es gibt nicht viel, nur verschiedene Wörter für die gleiche Sache.

[späte Zugabe]


In der Tat, als Brian Neal wies darauf hin in einem Kommentar zu diese Frage, der C ++ - Standard verwendet nie den Begriff "Methode" bei der Bezugnahme auf Elementfunktionen. Manche Leute nehmen das als Hinweis, dass C ++ nicht wirklich eine objektorientierte Sprache ist; Ich ziehe es jedoch vor, dies als Hinweis darauf zu verstehen, dass eine ziemlich schlaue Gruppe von Leuten nicht glaubte, dass es einen besonders starken Grund gab, einen anderen Begriff zu verwenden.


165
2017-09-30 23:48



Im Allgemeinen: Methoden sind Funktionen, die zu einer Klasse gehören, Funktionen können sich auf jeden anderen Bereich des Codes beziehen, so dass Sie angeben können, dass alle Methoden Funktionen sind, aber nicht alle Funktionen Methoden sind:

Nehmen Sie das folgende Python-Beispiel:

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

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

knock_door()

Das Beispiel zeigt Ihnen eine Klasse namens "Door", die eine Methode oder Aktion namens "open" hat. Sie wird als Methode bezeichnet, weil sie innerhalb einer Klasse deklariert wurde. Es gibt einen anderen Teil des Codes mit "def", unterhalb dessen eine Funktion definiert ist, es ist eine Funktion, da sie nicht innerhalb einer Klasse deklariert wird. Diese Funktion ruft die Methode auf, die wir in unserer Klasse definiert haben, wie Sie sehen können selbst angerufen.

Wie Sie sehen können, können Sie eine Funktion überall aufrufen, aber wenn Sie eine Methode aufrufen wollen, müssen Sie entweder ein neues Objekt des gleichen Typs übergeben wie die Klasse, für die die Methode deklariert wurde (Class.method (object)) oder Sie müssen sie aufrufen die Methode innerhalb des Objekts (object.Method ()), zumindest in Python.

Denken Sie an Methoden als Dinge, die nur eine Entität tun kann. Wenn Sie also eine Dog-Klasse haben, wäre es sinnvoll nur innerhalb dieser Klasse eine Bellen-Funktion zu haben. Das wäre eine Methode, wenn Sie auch eine Person-Klasse haben schreibe eine Funktion "füttern", denn das gehört keiner Klasse an, da sowohl Menschen als auch Hunde gefüttert werden können und man könnte das eine Funktion nennen, da sie keiner bestimmten Klasse angehört.


81
2017-10-01 00:33



Eine sehr allgemeine Definition des Hauptunterschieds zwischen a Funktion und ein Methode:

Funktionen werden außerhalb von Klassen definiert, während Methoden innerhalb von Klassen und innerhalb von Klassen definiert werden.


35
2017-10-28 23:08



Wenn Sie hier lesen möchten, ist "Meine Einführung in OO-Methoden"

Die Idee hinter objektorientiertem Paradigma besteht darin, dass "die Bedrohung" der Software aus "Objekten" besteht. Objekte in der realen Welt haben Eigenschaften, zum Beispiel wenn Sie einen Mitarbeiter haben, der Mitarbeiter hat einen Namen, eine Mitarbeiter-ID, eine Position, er gehört zu einer Abteilung usw.

Das Objekt kann auch mit seinen Attributen umgehen und einige Operationen an ihnen ausführen. Sagen wir, wenn wir wissen wollen, was ein Mitarbeiter gerade tut, fragen wir ihn.

employe whatAreYouDoing.

Das "whatAreYouDoing" ist eine "Nachricht", die an das Objekt gesendet wird. Das Objekt weiß, wie man auf diese Fragen antwortet, es heißt, es habe eine "Methode", um die Frage zu lösen.

Die Art und Weise, wie Objekte ihr Verhalten offenlegen müssen, nennt man Methoden. Methoden also sind das Artefaktobjekt muss etwas "tun".

Andere mögliche Methoden sind

employee whatIsYourName
employee whatIsYourDepartmentsName

etc.

Funktionen auf der anderen Seite sind Möglichkeiten, wie eine Programmiersprache einige Daten berechnen muss, zum Beispiel die Funktion addValues ​​(8, 8), die 16 zurückgibt

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

Da die ersten populären Programmiersprachen (wie Fortran, C, Pascal) das OO-Paradigma nicht abdecken, nennen sie diese Artefakte nur "Funktionen".

Zum Beispiel wäre die vorherige Funktion in C:

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

Es ist nicht "natürlich" zu sagen, dass ein Objekt eine "Funktion" hat, um eine Aktion auszuführen, weil Funktionen mehr mit mathematischen Dingen verwandt sind, während ein Mitarbeiter wenig Mathematik dafür hat, aber Sie können Methoden haben, die genauso funktionieren wie Funktionen, zum Beispiel in Java wäre dies die äquivalente Funktion addValues.

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

Kommt mir bekannt vor? Das liegt daran, dass Java seine Wurzeln in C ++ und C ++ auf C hat.

Am Ende ist nur ein Konzept, in der Umsetzung könnten sie gleich aussehen, aber in der OO-Dokumentation werden diese Methoden genannt.

Hier ist ein Beispiel für das frühere Employee-Objekt in 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.

Der Unterschied liegt dann in der "Domäne", in der es angewendet wird.

AppleScript haben die Idee der "natürlichen Sprache" Matphor, die irgendwann OO hatte. Zum Beispiel Smalltalk. Ich hoffe, dass es für Sie einfacher ist, Methoden in Objekten nach dem Lesen zu verstehen.

HINWEIS: Der Code soll nicht kompiliert werden, nur um als Beispiel zu dienen. Fühlen Sie sich frei, den Beitrag zu ändern und Python-Beispiel hinzuzufügen.


26
2017-10-08 00:07



Einfache Art sich zu erinnern:

  • FSalbung → Free (Free bedeutet nicht zu einem Objekt oder einer Klasse gehören)
  • Method → Member (Ein Mitglied eines Objekts oder einer Klasse)

20
2017-09-30 23:56



In der OO-Welt werden die beiden üblicherweise verwendet, um dasselbe zu meinen.

Aus einer reinen Math- und CS-Perspektive liefert eine Funktion immer das gleiche Ergebnis, wenn sie mit denselben Argumenten aufgerufen wird (f (x, y) = (x + y)). Eine Methode dagegen ist normalerweise mit einer Instanz einer Klasse verknüpft. In den meisten modernen OO-Sprachen wird der Begriff "Funktion" jedoch nicht mehr verwendet. Viele statische Methoden können Funktionen ähneln, da sie normalerweise keinen Status haben (nicht immer zutreffend).


16
2017-09-30 23:55



Nehmen wir an, eine Funktion ist ein Codeblock (normalerweise mit einem eigenen Bereich und manchmal mit einem eigenen Abschluss), der möglicherweise einige Argumente erhält und möglicherweise auch ein Ergebnis zurückgibt.

Eine Methode ist eine Funktion, die einem Objekt gehört (in einigen objektorientierten Systemen ist es korrekter zu sagen, dass es einer Klasse gehört). Wenn Sie von einem Objekt / einer Klasse "im Besitz" sind, bedeutet dies, dass Sie über das Objekt / die Klasse auf die Methode verweisen. Wenn Sie z. B. in Java eine Methode "open ()" im Besitz eines Objekts "door" aufrufen möchten, müssen Sie "door.open ()" schreiben.

Üblicherweise erhalten Methoden auch einige zusätzliche Attribute, die ihr Verhalten innerhalb des Objekts / der Klasse beschreiben, zum Beispiel: Sichtbarkeit (bezogen auf das objektorientierte Konzept der Kapselung), die definiert, von welchen Objekten (oder Klassen) die Methode aufgerufen werden kann.

In vielen objektorientierten Sprachen gehören alle "Funktionen" zu einem Objekt (oder einer Klasse) und daher gibt es in diesen Sprachen keine Funktionen, die keine Methoden sind.


14
2017-10-01 00:54



Eine Funktion ist ein mathematisches Konzept. Beispielsweise:

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

sagt, dass die Funktion f () den Sinus des ersten Parameters, der dem Kosinus des zweiten Parameters hinzugefügt wurde, zurückgibt. Es ist nur Mathe. Wie es passiert, sind sin () und cos () auch Funktionen. Eine Funktion hat eine andere Eigenschaft: Alle Aufrufe einer Funktion mit denselben Parametern sollten das gleiche Ergebnis liefern.

Eine Methode hingegen ist eine Funktion, die sich auf ein Objekt in einer objektorientierten Sprache bezieht. Es hat einen impliziten Parameter: das Objekt, auf das (und sein Zustand) eingewirkt wird.

Wenn Sie also ein Objekt Z mit einer Methode g (x) haben, sehen Sie möglicherweise Folgendes:

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

In diesem Fall wird der Parameter x übergeben, genauso wie im Funktionsbeispiel zuvor. Der Parameter für cos () ist jedoch ein Wert, der im Objekt Z lebt. Z und die darin enthaltenen Daten (Z.y) sind implizite Parameter für die g () -Methode von Z.


11
2018-02-06 05:03