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.
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.
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.
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.
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.
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.
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.
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.
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.
|