Was ist der Unterschied zwischen einer Operation und einer Methode?

4 Antworten

Das hängt davon ab, wie du den Begriff "Operation" definieren möchtest.

Gehst du von "Operation" im Sinn des Konstruktes "Abstrakter Datentyp" aus, dann sind beide Begriffe deckungsgleich. (Der abstrakte Datentyp wird dann durch die Klasse definiert, die deine Methode beinhaltet).

Abseits davon - so aus dem Programmiereralltag heraus - klingt "Operation" für mich recht allgemein.

Auch eine Programmzeile (z.B. Berechnung eines Ausdrucks und Zuweisung des Ergebnisses an eine Variable) kann dann eine Operation sein.

Sprich: Wenn man den Begriff "Operation" benutzt, sollte den Beteiligten (auf Grund von Konvention, Gewohnheit oder von vornherein) klar sein, in welchem Kontext man ihn verwendet.

Der Begriff "Methode" ist da m.E. unmittelbarer definiert als dediziert (namentlich) aufrufbares Stück Programmcode, der Bestandteil eines Objektes (Klasse) ist.

Wenn man beide Begriffe auf den Kontext UML / Programmplanung bezieht, stellt eine Operation stets nur die Abstraktion einer Funktionalität dar. Sie gibt nur an, was getan werden soll / was für ein Verhalten ein Typ vorweisen kann.

Ein Beispiel: Ein System Zoo mit mehreren Tieren soll modelliert werden. Dafür könntest du eine abstrakte Klasse Animal kreieren und dieser pauschal die Methoden eat und move zuordnen. Es ist klar, was diese Methoden tun und sie gelten (so nehme ich doch an) für alle Tiere. Doch über die konkrete Implementation wird keine Aussage getroffen. So wie eine Schlange kriechen kann, kann ein Karnickel stattdessen hoppeln, um sich fortzubewegen oder ein Fisch schwimmen.

Eine Methode wiederum wäre die tatsächliche Implementation einer Operation (um bei dem obigen Beispiel zu bleiben, also eine der konkreten Fortbewegungsarten: kriechen, hoppeln, schwimmen, ...). Sie beantwortet also die Frage, wie etwas getan wird / wie sich ein Verhalten eines Typs beschreiben lässt.

Hier nochmals am Beispiel eines Java-Programms, welches aus einem UML-Diagramm abgeleitet wurde:

abstract class Animal {
  abstract void eat();

  abstract void move();
}

class Snake extends Animal {
  @Override
  public void eat() {
    // choke down ...
  }

  @Override
  public void move() {
    // crawl ...
  }
}

class Rabbit extends Animal {
  @Override
  public void eat() {
    // nibble ...
  }

  @Override
  public void move() {
    // hobble ...
  }
}

Die Methodendeklarationen / -köpfe sind die im UML-Diagramm ursprünglich gesetzten Operationen. Sie geben so wie die Operationen nur den ungefähren Rahmen vor, wie sich die konkrete Implementation später verhalten soll (im Code in Form von: Definiertem Rückgabetyp, der Parameterliste und wie die Methode heißt).

Aus den Operationen wurden die Methoden abgeleitet, deren konkrete Implementation sich in Form der Methodendefinitionen wiederfindet. Jede Methode muss sich an die Rahmenbedingungen halten, die die Operation ihnen aufgebürdet hat.

Ein zweites kleines Beispiel (diesmal mit einem UML-Diagramm, aber keiner abstrakten Klasse):

---------------------------------
|              Car              |
|-------------------------------|
| + drive(): void               |
| + fillUp(liters: float): void |
| + honk(): Sound               |
---------------------------------

Für diese Klasse wurden drei Operationen aufgelistet. Sie geben wie schon erwähnt, nur Rahmenbedinungen vor. Zum Beispiel ist definiert, dass ein konkretes Car-Objekt später Zugriff auf eine honk-Methode haben wird, die ein Geräusch (Sound-Objekt) zurückgibt. Dass es zu der Operation eine konkrete Methode geben wird, muss im UML-Diagramm nicht erwähnt werden, daher findest du in UML-Diagrammen stets nur Operationen vor.

Implementation in Java:

class Car {
  public void drive() {
    // drive ...
  }

  public void fillUp(float liters) {
    // fill up ...
  }

  public Sound honk() {
    return new Sound("Honk! Honk!");
  }
}

Das ist was unterschiedliches, Operation sind zum Beispiel 2+2, Methoden sind Strukturgebilde die Operationen Ausführen.

Beispiel: Matheaufgabe: 4+4 ist die Operation, die Methode zB heißt jetzt "RechneAus" in der Methode vollführst du die Operation

Nutzer602 
Fragesteller
 02.07.2021, 19:45

Also als Beispiel

Methode: geheVorwärts

Operationen: 10 Schritte

ist das so richtig ?

0
regex9  03.07.2021, 03:59
@Nutzer602

Achtung: Ein Methode ist stets objekt- oder klassengebunden. Das, was in der Antwort oben beschrieben wird, ist allerdings eine Funktion (oder in bestimmten Programmiersprachen noch strikter: Eine Prozedur, wenn kein Wert zurückgegeben wird).

Nur Funktionen, die zu einem Objekt / einer Klasse gehören, werden als Methoden bezeichnet.

Um es einmal an einem Python-Programm zu verdeutlichen:

class SomeClass:
  def someMethod(self):
    # do something ...

def someFunction():
  # do something ...

someObject = SomeClass() # instantiate SomeClass
someObject.someMethod()  # call method

someFunction() # call function

Damit someMethod aufgerufen werden kann, muss erst eine Instanz von SomeClass angelegt werden.

Die Funktion hingegen kann einfach so direkt aufgerufen werden.

Wenn man unter diesem Kontext nun Funktion und Operation vergleichen möchte, könnte man sagen, dass Funktionen Operationen zusammenfassen. Operationen sind demzufolge jegliche Aktionen, die entweder lesend / schreibend auf Variablen wirken (Operatoren) oder die den Programmfluss leiten (Kontrollstrukturen).

Beispiel:

def get_quotient(dividend, divisor):
  if divisor == 0:
    return float('NaN')

  result = dividend / divisor
  return result

Alle Zeilen im Funktionskörper sind einzelne Operationen. Die Funktion steht folgend im Code stellvertretend für sie. Wenn sie irgendwo aufgerufen wird, werden die darin enthaltenen Operationen ausgeführt. Hier beispielsweise wird die Funktion get_quotient mit den Argumenten 3 und 2 aufgerufen und nach Ausführung das Ergebnis in eine Variable quotient geschrieben.

quotient = get_quotient(3, 2)

Diese Zuweisung stellt dann im Übrigen wieder eine Operation dar.

0

Operationen sind an Datentypen gekoppelt, Methoden an Klassen.