Kontrollfluss (UML)
Ein Kontrollfluss (engl. ControlFlow) ist ein Modellelement in der Unified Modeling Language (UML), einer Sprache für die Modellierung der Strukturen und des Verhaltens von Software- und anderen Systemen.
Ein Kontrollfluss ist eine spezielle Aktivitätskante in einer Aktivität. Er verbindet Aktionen und Kontrollknoten. Über einen Kontrollfluss können im Gegensatz zu einem Objektfluss nur Kontrolltoken fließen. Ein Kontrolltoken kann man sich dabei als eine Art Marke vorstellen, die eine Aktion einer anderen Aktion übergeben kann, um sie damit anzustoßen. Kontrolltoken transportieren keine weiteren Werte. Eine Aktion kann also mit Hilfe eines Kontrolltokens keine Ausgabewerte an eine Nachbaraktion, mit der sie über einen Kontrollfluss verbunden ist, übergeben.
Nicht jeder Kontrollfluss, der zwischen zwei Aktionen modelliert wurde, kann jederzeit Kontrolltoken übertragen. Ein Modellierer kann die „Leitfähigkeit“ eines Kontrollflusses auf zwei Arten steuern. Erstens kann er den Kontrollfluss mit einer so genannten Guard versehen, einem booleschen Ausdruck, der immer dann ausgewertet wird, wenn die produzierende Aktion dem Kontrollfluss ein Kontrolltoken anbietet. Das Kontrolltoken kann nur fließen, wenn dieser Ausdruck als wahr ausgewertet wird. Zweites kann der Kontrollfluss mit einem Gewicht (engl. weight) versehen werden. Das Gewicht ist eine positive Zahl. Sie gibt an, wie viele Kontrolltoken im Minimum durch die produzierende Aktion angeboten werden müssen, bevor alle bereitstehenden Token gemeinsam über den Kontrollfluss fließen. Das Gewicht ist also ein Modellierungsparameter, der eine Art „Paketgröße“ für Kontrollflüsse festlegt.
Notation
Ein Kontrollfluss wird als durchgezogene Linie mit offener Pfeilspitze dargestellt. Diese Notation entspricht der Notation für den Objektfluss. Ein Kontrollfluss lässt sich aber meistens leicht von einem Objektfluss unterscheiden, weil er nie mit einem Objektknoten, zum Beispiel einem Pin, an einem der beiden Enden verbunden ist.
Die Abbildung links zeigt einen Kontrollfluss, der zusätzlich mit einer Guard (in eckigen Klammern) und einem Gewicht (in geschweiften Klammern) parametriert ist. Die beiden Parameter spezifizieren, dass nur dann Token über den Kontrollfluss fließen können, wenn nicht Mittagspause ist und wenn mindestens zwei Anfragen fertig formuliert wurden.