Vraag Wat is het verschil tussen een methode en een functie?


Kan iemand een eenvoudige uitleg geven van methoden vs. functies in OOP-context?


1447
2017-09-30 23:45


oorsprong


antwoorden:


EEN functie is een stuk code dat met de naam wordt genoemd. Het kan doorgegeven worden om te werken (dat wil zeggen de parameters) en kan optioneel gegevens retourneren (de retourwaarde). Alle gegevens die worden doorgegeven aan een functie worden expliciet doorgegeven.

EEN methode is een stuk code dat wordt aangeroepen door een naam die aan een object is gekoppeld. In de meeste opzichten is het identiek aan een functie behalve twee belangrijke verschillen:

  1. Een methode wordt impliciet doorgegeven aan het object waarop het is aangeroepen.
  2. Een methode kan werken op gegevens die zich in de klasse bevinden (onthoud dat een object een instantie van een klasse is - de klasse is de definitie, het object is een instantie van die gegevens).

(dit is een vereenvoudigde uitleg, waarbij problemen van strekking enz.)


1502
2017-10-01 00:00



Een methode is op een object.
Een functie is onafhankelijk van een object.

Voor Java zijn er alleen methoden.
Voor C zijn er alleen functies.

Voor C ++ is het afhankelijk van of je al dan niet in een klas zit.


871
2017-09-30 23:51



'methode' is het objectgeoriënteerde woord voor 'functie'. Dat is vrijwel alles wat er is (dat wil zeggen, geen echt verschil).

Helaas denk ik dat veel van de antwoorden hier het idee voortzetten of bevorderen dat er een complex, betekenisvol verschil is.

Echt - er is niet zo veel aan, alleen verschillende woorden voor hetzelfde.

[late toevoeging]


In feite, als Brian Neal gewezen in een commentaar op deze vraag, de C ++ -standaard gebruikt nooit de term 'methode' bij verwijzing naar lidfuncties. Sommige mensen nemen dat als een aanwijzing dat C ++ niet echt een object-georiënteerde taal is; Ik geef er echter de voorkeur aan om aan te nemen dat een vrij slimme groep mensen niet dacht dat er een bijzonder sterke reden was om een ​​andere term te gebruiken.


165
2017-09-30 23:48



In het algemeen: methoden zijn functies die tot een klasse behoren, functies kunnen op elk ander bereik van de code zijn, zodat u kunt aangeven dat alle methoden functies zijn, maar niet alle functies zijn methoden:

Neem het volgende python-voorbeeld:

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

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

knock_door()

Het gegeven voorbeeld toont u een klasse genaamd "Door" die een methode of actie heeft die "open" wordt genoemd, het wordt een methode genoemd omdat het binnen een klasse is gedeclareerd. Er is nog een ander deel van de code met "def" net onder die een functie definieert, het is een functie omdat het niet binnen een klasse wordt gedeclareerd, deze functie roept de methode aan die we binnen onze klasse hebben gedefinieerd en tenslotte is de functie door zichzelf geroepen.

Zoals je kunt zien, kun je overal een functie aanroepen, maar als je een methode wilt aanroepen, moet je een nieuw object van hetzelfde type doorgeven als de klasse die de methode heeft gedeclareerd (Class.method (object)) of je moet een beroep doen op de methode in het object (object.Method ()), tenminste in python.

Denk aan methoden als dingen die slechts één entiteit kan doen, dus als u een hondenklasse hebt, is het logisch om alleen binnen die klasse een blaffunctie te hebben en dat zou een methode zijn, als u ook een persoonsklasse hebt, kan het zinvol zijn om schrijf een functie "feed" want dat behoort niet tot een klasse omdat zowel mensen als honden kunnen worden gevoerd en je zou dat een functie kunnen noemen, omdat het niet tot een klasse in het bijzonder behoort.


81
2017-10-01 00:33



Een zeer algemene definitie van het belangrijkste verschil tussen een Functie en een Methode:

Functies worden buiten de klassen gedefinieerd, terwijl de methoden binnen en een deel van de klassen worden gedefinieerd.


35
2017-10-28 23:08



Als u hier wilt lezen, is dit "Mijn introductie tot OO-methoden"

Het idee achter Object Oriented paradigma is om te "bedreigen" dat de software is samengesteld uit .. nou "objecten". Objecten in de echte wereld hebben eigenschappen, bijvoorbeeld als u een werknemer hebt, de werknemer heeft een naam, een werknemer-id, een functie, hij behoort tot een afdeling enz. Enz.

Het object weet ook hoe om te gaan met zijn attributen en voert enkele bewerkingen uit. Laten we zeggen dat als we willen weten wat een medewerker op dit moment doet, we het hem zouden vragen.

employe whatAreYouDoing.

Dat "whatAreYouDoing" is een "bericht" verzonden naar het object. Het object weet hoe te antwoorden op die vragen, er wordt gezegd dat het een "methode" heeft om de vraag op te lossen.

Dus de manier waarop objecten hun gedrag moeten blootleggen, worden methoden genoemd. Methoden zijn dus het artefact-object om iets te "doen".

Andere mogelijke methoden zijn

employee whatIsYourName
employee whatIsYourDepartmentsName

enz.

Functies aan de andere kant zijn manieren waarop een programmeertaal sommige gegevens moet berekenen, bijvoorbeeld dat u de functie addValues ​​(8, 8) hebt die 16 teruggeeft

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

Omdat de eerste populaire programmeertalen (zoals fortran, c, pascal) het OO-paradigma niet bestreken, roepen ze alleen deze artefacten "functies" aan.

de vorige functie in C zou bijvoorbeeld zijn:

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

Het is niet "natuurlijk" om te zeggen dat een object een "functie" heeft om wat actie uit te voeren, omdat functies meer gerelateerd zijn aan wiskundige dingen terwijl een medewerker er weinig wiskundig op heeft, maar je kunt methoden hebben die precies hetzelfde doen als functies, bijvoorbeeld in Java zou dit de equivalente functie addValues ​​zijn.

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

Komt me bekend voor? Dat komt omdat Java zijn oorsprong heeft in C ++ en C ++ op C.

Uiteindelijk is het slechts een concept, in de uitvoering zien ze er misschien hetzelfde uit, maar in de OO-documentatie worden ze methode genoemd.

Hier is een voorbeeld van het eerdere Employee-object 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.

Het verschil is dan op het "domein" waar het wordt toegepast.

AppleScript heeft het idee van "natuurlijke taal" matorf, dat op een bepaald moment OO had. Bijvoorbeeld Smalltalk. Ik hoop dat het redelijkerwijs gemakkelijker voor je is om methoden in objecten te begrijpen nadat je dit hebt gelezen.

OPMERKING: De code moet niet worden gecompileerd, alleen als voorbeeld. Voel je vrij om de post aan te passen en het voorbeeld van Python toe te voegen.


26
2017-10-08 00:07



Eenvoudige manier om te onthouden:

  • Function → Free (Gratis betekent niet tot een object of klasse behoren)
  • Methiek → Member (een lid van een object of een klasse)

20
2017-09-30 23:56



In de OO-wereld worden beide gewoonlijk gebruikt om hetzelfde te betekenen.

Vanuit een puur Math- en CS-perspectief, zal een functie altijd hetzelfde resultaat retourneren wanneer deze wordt aangeroepen met dezelfde argumenten (f (x, y) = (x + y)). Een methode daarentegen is meestal gekoppeld aan een instantie van een klasse. Opnieuw gebruiken de meeste moderne OO-talen echter niet langer de term "functie". Veel statische methoden kunnen lijken op functies, omdat ze meestal geen status hebben (niet altijd waar).


16
2017-09-30 23:55



Laten we zeggen dat een functie een codeblok is (meestal met een eigen bereik en soms met een eigen afsluiting) die mogelijk enkele argumenten kan bevatten en ook een resultaat kan opleveren.

Een methode is een functie die eigendom is van een object (in sommige objectgeoriënteerde systemen is het juister om te zeggen dat het eigendom is van een klasse). Wordt "eigendom" van een object / klasse betekent dat u de methode door het object / klasse verwijst; Bijvoorbeeld, in Java als je een methode "open ()" wilt oproepen die eigendom is van een object "deur", moet je "deur.open ()" schrijven.

Gewoonlijk krijgen methoden ook een aantal extra kenmerken die hun gedrag binnen het object / klasse beschrijven, bijvoorbeeld: zichtbaarheid (gerelateerd aan het objectgeoriënteerde concept van inkapseling), die definieert van welke objecten (of klassen) de methode kan worden opgeroepen.

In veel objectgeoriënteerde talen behoren alle "functies" tot een object (of klasse) en dus zijn er in deze talen geen functies die geen methoden zijn.


14
2017-10-01 00:54



Een functie is een wiskundig concept. Bijvoorbeeld:

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

zegt dat functie f () de sin teruggeeft van de eerste parameter die is toegevoegd aan de cosinus van de tweede parameter. Het is gewoon wiskunde. Omdat het gebeurt zijn sin () en cos () ook functies. Een functie heeft een andere eigenschap: alle oproepen naar een functie met dezelfde parameters moeten hetzelfde resultaat opleveren.

Een methode daarentegen is een functie die gerelateerd is aan een object in een objectgerichte taal. Het heeft één impliciete parameter: het object waarop wordt gehandeld (en de staat ervan).

Dus als u een object Z hebt met een methode g (x), ziet u mogelijk het volgende:

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

In dit geval wordt de parameter x doorgegeven, dezelfde als in het functievoorbeeld eerder. De parameter naar cos () is echter een waarde die leeft in het object Z. Z en de gegevens die erin voorkomen (Z.y) zijn impliciete parameters voor de g () -methode van Z.


11
2018-02-06 05:03



Functie of een methode is een benoemde callable stuk code die sommige bewerkingen uitvoert en optioneel een waarde retourneert.

In C taal wordt de term functie gebruikt. Java & C # mensen zouden het een methode noemen (en een functie in dit geval is gedefinieerd binnen een klasse / object).

EEN C ++ programmeur zou het een functie of soms een methode kunnen noemen (afhankelijk van of ze procedurele stijl c ++ code schrijven of een objectgeoriënteerde manier van C ++ gebruiken, ook een C / C ++ alleen programmeur zou het waarschijnlijk een functie noemen omdat term 'methode' minder vaak voorkomt gebruikt in C / C ++ literatuur).

Je gebruikt een functie door gewoon de naam te noemen zoals,

result = mySum(num1, num2);


Je zou een methode noemen door eerst naar het object te verwijzen, zoals

result = MyCalc.mySum(num1,num2);

11
2017-09-30 23:52