# Operation (UML)

Eine Operation (englisch operation) ist ein Modellelement in der Unified Modeling Language (UML), einer Modellierungssprache für Software und andere Systeme.
Eine Operation ist ein Verhaltensmerkmal, mit der die Art und Weise modelliert wird, wie ein Verhalten aufgerufen wird. Sie spezifiziert den Einstiegspunkt in ein Verhalten in Form einer Signatur. Das Verhalten selbst kann unabhängig von der Operation und auf unterschiedliche Arten modelliert werden, zum Beispiel als Aktivität, als Interaktion oder als Zustandsautomat. Als Verhaltensmerkmal gehört sie entweder zu einer Klasse oder zu einer Schnittstelle.

## Spezifikation

Die Spezifikation einer Operation besteht grundsätzlich aus dem Namen der Operation sowie aus einer Liste von Parametern. Wie jedes Merkmal kann eine Operation zusätzlich auch Details zur Sichtbarkeit, zur Multiplizität und zum Typ der Operation spezifizieren. Die Sichtbarkeit einer Operation ist entweder public, private, protected oder package (siehe auch: Datenkapselung).
Die Multiplizität und der Typ der Operation wird indirekt spezifiziert. Falls die Operation über einen Parameter mit der Richtung return verfügt, dann entspricht die Multiplizität und der Typ der Operation der Multiplizität und dem Typ dieses Parameters. Auch die Tatsache, ob die Rückgabewerte der Operation geordnet bzw. eindeutig sind, wird aus diesem Parameter abgeleitet. Die UML2 gibt vor, dass höchstens ein Parameter mit der Richtung return existieren darf.
Analog zu Klassenattributen gibt es auch Klassenoperationen. Sie unterscheiden sich von den anderen Operationen dadurch, dass sie nicht den Aufruf von Verhalten auf einzelnen Instanzen der Klasse, sondern auf der Klasse selbst modellieren. Klassenoperationen werden wie Klassenattribute in der graphischen Darstellung unterstrichen, um sie von den normalen Operationen abzugrenzen.

## Operations-Signatur

Der generische Aufbau einer Operations-Signatur sieht wie folgt aus:
sichtbarkeit, rückgabetyp und eigenschaft/wert-Paare sind optional. Wenn diese Details in einer visuellen Darstellung nicht interessieren, können sie ausgeblendet werden.
parameterliste ist entweder leer oder besteht aus einer Liste von mit Komma (,) getrennten Parameterdeklarationen mit folgendem generischen Aufbau:
Auch hier sind richtung, parametertyp, multiplizität und eigenschaft/wert-Paare optional.
Die Richtung legt fest, ob es sich um einen Ein- oder Ausgabeparameter handelt. Folgende Werte sind erlaubt.
| Richtung | Beschreibung |
| in | Es handelt sich um einen Eingabeparameter, über den Daten an die aufgerufene Operation übergeben werden. |
| out | Es handelt sich um einen Ausgabeparameter, über den Daten an die aufrufende Operation zurückgegeben werden. |
| inout | Über den Parameter werden Daten in beiden Richtungen ausgetauscht. |
| return | Der Parameter nimmt den Rückgabewert der Operation auf. Pro Operation darf es nur einen Return-Parameter geben und auch nur dann, wenn der Rückgabewert nicht als Ergebnistyp in der Signatur der Operation angegeben wird. |

## Beispiele

In der folgenden Tabelle sind drei Beispiele für Operations-Signaturen aufgeführt.
| Signatur | Beschreibung |
| +buchen(betrag: Betrag) | Eine öffentliche Methode buchen mit einem Parameter betrag. Die Operation hat keinen Rückgabetyp. |
| -prüfeKontostand(in betrag: Betrag, in datum: Datum[0..1]):Boolean | Eine private Methode prüfeKontostand. Der zweite Parameter datum ist optional, weil er die Multiplizität 0..1 hat. |
| listeBuchungen(von, bis): Buchung[*]{ordered} | Eine Methode listeBuchungen mit zwei Parametern. Der Rückgabetyp ist Buchung und die Operation gibt eine beliebige Anzahl Buchungen in einer geordneten Liste zurück. |