Richtlinie: Subskriptionsassoziation
Subskriptionsassoziation bedeutet, dass ein Objekt informiert werden muss, wenn ein bestimmtes Ereignis in einem zugeordneten Entitätsobjekt stattfindet. Diese Richtlinie veranschaulicht, wie Sie diese Beziehung verwenden.
Beziehungen
Zugehörige Elemente
Hauptbeschreibung

Erläuterung

Manchmal ist ein Objekt von einem bestimmten Ereignis abhängig, das in einem anderen Objekt auftritt. Wenn das Ereignis in einem Schnittstellen- oder Steuerungsobjekt stattfindet, informiert dieses Objekt das andere Objekt einfach über das Ereignis. Falls das Ereignis jedoch in einem Entitätsobjekt stattfindet, ist die Situation ein wenig anders. Ein Entitätsobjekt kann andere Objekte nicht über Ereignisse informieren, wenn es nicht explizit dazu aufgefordert wird.

Beispiel

Angenommen, ein System wurde mit der Möglichkeit modelliert, dass Geld durch Überweisungen von einem Bankkonto abgehoben werden kann. Wenn eine versuchte Auszahlung einen negativen Kontostand verursacht, muss sofort eine Benachrichtigung geschrieben und an den Kunden gesendet werden. Das Konto, das als Entitätsobjekt modelliert wird, darf sich darum, ob der Kunde benachrichtigt wird oder nicht, nicht kümmern. Die Kundenbenachrichtigung sollte stattdessen durch ein Grenzobjekt erfolgen.

In dem beschriebenen Beispiel muss das Grenzobjekt dem Entitätsobjekt wiederholt die Frage stellen "Ist das Ereignis, auf das ich warte, eingetreten?". Um die Situation zu verdeutlichen und die Implementierungsdetails bis zur Designphase hinauszuzögern, wird hierfür eine spezielle Assoziation verwendet, die so genannte Subskriptionsassoziation.

Die Subskriptionsassoziation, die ein Objekt beliebigen Typs einem Entitätsobjekt zuordnet, drückt aus, dass das zuordnende Objekt informiert wird, wenn ein bestimmtes Ereignis im Entitätsobjekt stattfindet. Es wird empfohlen, die Assoziation nur für die Zuordnung von Entitätsobjekten zu verwenden, da diese Assoziation nur wegen des passiven Charakters von Entitätsobjekten benötigt wird. Schnittstellen und Steuerungsobjekte hingegen können beide Kommunikationen einleiten. Deshalb müssen sie nicht "subskribiert" werden, sondern können ihre Zuständigkeiten auf andere Arten erfüllen.

Im Folgenden beschriebenes UML-Diagramm

Die Subskriptionsassoziation ordnet ein Objekt beliebigen Typs einem Entitätsobjekt zu. Das zuordnende Objekt wird informiert, wenn ein bestimmtes Ereignis im zugeordneten Entitätsobjekt eintritt.

Die Richtung der Assoziation zeigt an, dass nur das subskribierende Objekt von der Verbindung zwischen den beiden Objekten weiß. Die Subskription wird nur im subskribierenden Objekt beschrieben. Das zugeordnete Entitätsobjekt wird wie gewöhnlich definiert, ohne die anderen Objekte zu berücksichtigen, die möglicherweise an seinen Aufgaben interessiert sind. Dies impliziert auch, dass ein subskribierendes Objekt dem Modell hinzugefügt oder aus diesem entfernt werden kann, ohne das subskribierte Objekte ändern zu müssen.

Der Subskriptionsassoziation wird eine Multiplizität zugeordnet, die anzeigt, wie viele Instanzen des Zielobjekts das zuordnende Objekt gleichzeitig zuordnen kann. Anschließend werden eine oder mehrere Bedingungen in der Assoziation beschrieben, die definieren, was passieren muss, damit das zuordnende Objekt informiert wird. Das Ereignis kann eine Änderung eines Werts einer Assoziation oder eines Attributs oder die (teilweise) Auswertung einer Operation sein. Wenn das Ereignis stattfindet, wird das subskribierende Objekt darüber informiert, dass sich etwas ereignet hat. Es werden keine Informationen zu Ergebnissen des Ereignisses übertragen, sondern nur die Tatsache, dass das Ereignis eingetreten ist. Wenn das zuordnende Objekt am Zustand des Entitätsobjekts nach dem Ereignis interessiert ist, muss es auf die herkömmliche Weise mit dem Entitätsobjekt interagieren. Das bedeutet, dass das Objekt zusätzliche eine Verbindung zu dem Entitätsobjekt benötigt.

Beispiel

Im Lagerverwaltungssystem müssen stichprobenartige Überprüfungen von Paletten durchgeführt werden, um ihre Lebenserwartung zu beurteilen. Deshalb wird die Palette nach jeder hundertsten Bewegung von einem Stellplatz im Lager an einen anderen an einer speziellen Teststation geprüft. Dieser Vorgang wird durch eine Subskriptionsassoziation von der Steuerungsklasse "Palettenstichprobe" zur Entitätsklasse "Palette" modelliert. Jede Instanz von "Palette" zählt in einem Zählerattribut mit, wie oft sie bewegt wird. Wenn die Instanz hundert Mal bewegt wurde, wird die Steuerungsklasse "Palettenstichprobe" aufgrund der Bedingung der Subskriptionsassoziation informiert. Daraufhin erstellt "Palettenstichprobe" eine Sonderaufgabe, die die Palette an die Teststation transportiert. Die Steuerungsklasse "Palettenstichprobe" benötigt keine Verbindung zu "Palette", muss aber eine Verbindung zur Aufgabe haben, um diese einleiten zu können.

Im Begleittext beschriebenes Diagramm

Nachdem eine Palette das hundertste Mal bewegt wurde, erstellt "Palettenstichprobe" eine neue Aufgabe

Die Bedingungen der Subskriptionsassoziation müssen mit abstrakten Merkmalen und nicht mit speziellen Attributen oder Operationen ausgedrückt werden. Auf diese Weise bleibt das zuordnende Objekt vom Inhalt des zugeordneten Entitätsobjekts unabhängig, das sich durchaus ändern kann.

Die Subskriptionsassoziation ordnet nicht immer zwei Objektinstanzen zu. Subskriptionsassoziationen sind auch zwischen einer Klasse und einer Instanz möglich. Dies ist eine Metarelation, die in den folgenden Unterabschnitten beschrieben wird. Es gibt auch Fälle, in denen die Klasse eines Objekts durch eine Subskriptionsassoziation zugeordnet wird, z. B., wenn ein bestimmtes Ereignis die Instanzierung einer Klasse ist.

Verwendung

Subskriptionsassoziationen ausgehend von Grenzklassen

Manchmal muss ein Grenzobjekt informiert werden, wenn ein Ereignis in einem Entitätsobjekt stattfindet. Hier kommt eine Subskriptionsassoziation in Frage.

Beispiel

Stellen Sie das Beispiel mit dem Abheben von Geld von einem Bankkonto durch Überweisungen vor. Hier ist es das Steuerungsobjekt "Überweisungs-Handler", das Operationen im Entitätsobjekt "Konto" durchführt. Wenn der Kontostand nach der Überweisung negativ ist, wird eine Benachrichtigung an den Kunden gesendet, die vom Grenzobjekt "Benachrichtigungsautor" vorbereitet wird. Dieses Objekt hat deshalb eine Subskriptionsassoziation zu Konto. Die angegebene Bedingung ist die, dass der Kontostand unter null fällt. Sobald dieses Ereignis eintritt, wird der Benachrichtigungsautor informiert. Diese Subskriptionsassoziation ist insofern eine Instanzassoziation, als eine Instanz von Benachrichtigungsautor ständig auf der Suche nach Überziehungen in Instanzen von Konto ist.

Wenn der Kunde keine weiteren Informationen erhalten soll als die, dass sein Kontostand niedrig ist, reicht dies aus. Wenn dem Kunden jedoch auch mitgeteilt werden soll, wie niedrig, muss der Benachrichtigungsautor eine Operation in Konto durchführen, um den exakten Betrag in Erfahrung zu bringen. Hierfür muss der Benachrichtigungsautor eine Verbindung zu Konto haben.

Im Begleittext beschriebenes Diagramm

Die Grenzklasse Benachrichtigungsautor subskribiert das Ereignis, dass der Kontostand unter einen bestimmten Wert im Entitätsobjekt Konto fällt. Wenn die Grenzklasse Benachrichtigungsautor auch den exakten Fehlbetrag wissen muss, muss sie eine Verbindung zu Konto haben.

Ein Beispiel für eine Metaassoziation von einer Grenzklasse ist, wenn ein Ereignis in einem Entitätsobjekt bewirkt, dass dem Benutzer ein neues Fenster angezeigt wird. Anschließend subskribiert die Klasse Instanzen des Entitätsobjekts.

Subskriptionsassoziationen ausgehend von Entitätsklassen

Beispiel

In einem System für die Verwaltung eines Netzes gibt es Stationen, die als Knoten im Netz funktionieren, und es gibt Leitungen, die diese Knoten miteinander verbinden. Jede Station ist mit anderen Stationen über Leitungen verbunden. Die Kapazität einer Station wird dadurch bestimmt, wie viele ihrer Leitungen funktionieren. Wenn über 80 % der Leitungen funktionieren, hat die Station eine hohe Kapazität, wenn weniger als 20 % funktionieren eine niedrige. Alle Werte dazwischen stehen für eine mittlere Kapazität. Im Modell dieses Systems gibt es zwei Entitätsobjekte, Station und Leitung, und Station hat eine Subskriptionsassoziation zu Leitung. Die Bedingung der Assoziation legt fest, dass Station informiert werden muss, wenn sich Status von Leitung (aktiviert oder inaktiviert) ändert.

Außerdem wird ein Steuerungsobjekt, das Station subskribiert, informiert, wenn die Kapazität von Station abfällt. Dies wird im Folgenden beschrieben, wo das Beispiel fortgesetzt wird.

Im Begleittext beschriebenes Diagramm

Eine Instanz von Station wird informiert, sobald sich der Status einer der zugehörigen Instanzen von Leitung ändert.

Eine Subskriptionsassoziation zwischen Entitätsklassen gleicht im Wesentlichen einer Instanzassoziation, da normalerweise bereits vorhandene Instanzen involviert sind. Es kann jedoch Fälle geben, in denen eine Instanz des subskribierenden Entitätsobjekts erstellt wird, wenn das angegebene Ereignis im zugeordneten Entitätsobjekt stattfindet. In solchen Fällen verläuft die Assoziation von einer Klasse zu einer Instanz, d. h. es handelt sich um eine Metaassoziation. Man kann sich auch vorstellen, dass eine Instanz eines bestimmten Entitätsobjekts wissen möchte, wenn eine neue Instanz eines anderen Entitätsobjekts erstellt wird.

Subskriptionsassoziationen ausgehend von Steuerungsklassen

Beispiel

Im vorherigen Beispiel hat das Entitätsobjekt Station eine Subskriptionsassoziation zum Entitätsobjekt Leitung. Deshalb wird Station informiert, sobald sich der Status einer Instanz Leitung ändert. Eine solche Statusänderung ändert die Kapazität von Station. Wenn die Kapazität zu niedrig wird, d. h. weniger als 20 % der Leitungen funktionieren, muss das System geeignete neue Wege durch das Netz suchen, so dass diese Station vermieden wird. Dies ist natürlich keine Aufgabe für Station. Diese Aufgabe muss vom Steuerungsobjekt Stationsüberwachung ausgeführt werden, die zu jeder Instanz von Station eine Subskriptionsassoziation hat.

Im Begleittext beschriebenes Diagramm

Das Steuerungsobjekt Stationsüberwachung subskribiert das Entitätsobjekt Station, das wiederum das Entitätsobjekt Leitung subskribiert.

In den meisten Fällen verläuft eine Subskriptionsassoziation eines Steuerobjekts von einer Klasse zu einer Instanz oder umgekehrt, d. h. es handelt sich um eine Metaassoziation. Gewöhnlich wird die Instanz des Steuerungsobjekts, das das Ereignis im Entitätsobjekt bearbeitet, erst dann erstellt, wenn das Ereignis wirklich stattfindet. Man kann sich aber auch vorstellen, dass eine Instanz eines Steuerungsobjekts wissen möchte, wenn eine neue Instanz eines bestimmten Entitätsobjekts erstellt wird. Deshalb kann die Subskriptionsassoziation manchmal auch eine Instanzassoziation sein.

Beispiel

Im vorherigen Beispiel hat die Subskriptionsassoziation von Stationsüberwachung zu Station die Merkmale einer Metaassoziation, d. h. es ist die Klasse Stationsüberwachung, die informiert wird, wenn sich die Kapazität der Station verringert. Wenn die Klasse Stationsüberwachung diese Nachricht empfängt, erstellt sie eine Instanz, die das Ereignis bearbeitet.