In alcuni casi, un oggetto dipende da uno specifico evento che si verifica in un altro oggetto. Se l'evento ha luogo
all'interno di un boundary o di un oggetto di controllo, questo oggetto informa l'altro relativamente a quanto si è
verificato. Ma, se l'evento ha luogo all'interno di un oggetto di entità, la situazione è, in qualche modo, diversa. E'
possibile che un oggetto di entità non sia in grado di informare altri oggetti se non gli viene richiesto in modo
specifico.
Esempio
Si presupponga che un sistema sia stato modellato con la possibilità di prelevare soldi da un conto in banca tramite
dei trasferimenti. Se un tentativo di prelievo provoca un saldo del conto negativo, è necessario scrivere
immediatamente una nota e inviarla al cliente. Il conto, modellato come un oggetto dell'entità, non dovrebbe essere
implicato nel fatto che il cliente riceva o meno una notifica. Il cliente dovrebbe, invece, ricevere la notifica da un
oggetto del boundary.
Nel suddetto esempio, l'oggetto boundary avrebbe dovuto porre ripetutamente la domanda "Si è verificato l'evento che
sto aspettando"? all'oggetto di entità. Per rendere la situazione più chiara e per rimandare i dettagli
sull'implementazione alla fase di progettazione, viene utilizzata un'associazione speciale che indica tale situazione,
l'associazione di sottoscrizione.
L'associazione di sottoscrizione, che associa un oggetto di qualsiasi tipo a un oggetto di entità, indica che l'oggetto
associante verrà informato quando si verifica un evento particolare nell'oggetto di entità. Si consiglia di utilizzare
l'associazione solo per associare oggetti di entità, poiché è la natura passiva degli oggetti di entità che causa la
necessità dell'associazione. Gli oggetti di controllo e dell'interfaccia, d'altra parte, sono entrambi consentiti per
iniziare la comunicazione. Quindi, non necessitano di una sottoscrizione, ma possono eseguire le proprie competenze in
altri modi.
L'associazione di sottoscrizione associa un oggetto di qualsiasi tipo con un oggetto di entità. L'oggetto associante
verrà informato quando un particolare evento ha luogo nell'oggetto di entità associato.
Tenere presente che la direzione dell'associazione mostra che solo l'oggetto che sottoscrive è a conoscenza della
relazione tra i due oggetti. La descrizione della sottoscrizione è completamente contenuta nell'oggetto che
sottoscrive. L'oggetto di entità associato, a sua volta, viene definito in modo classico senza considerare l'interesse
degli altri oggetti nelle sue attività. Ciò comporta che un oggetto che sottoscrive potrà essere aggiunto o rimosso dal
modello senza dover modificare l'oggetto a cui si sottoscrive.
All'associazione di sottoscrizione viene assegnata una molteplicità che indica quante istanze dell'oggetto di
destinazione possono essere associate contemporaneamente dall'oggetto associante. Quindi una o più condizioni vengono
descritte sull'associazione, per indicare quali azioni è necessario eseguire per informare l'oggetto associante.
L'evento potrebbe essere una modifica in un valore dell'attributo o dell'associazione o (una parte) la valutazione di
un'operazione. Quando l'evento ha luogo, l'oggetto che esegue la sottoscrizione verrà informato che si è verificata una
determinata situazione. Tenere presente che non viene trasmessa alcuna informazione sul risultato dell'evento, ma solo
il fatto che l'evento si sia verificato. Se l'oggetto associante è interessato allo stato risultante dell'oggetto di
entità dopo l'evento, dovrà interagire con l'oggetto di entità nel modo comune. Ciò significa che avrà bisogno anche di
un collegamento ad esso.
Esempio
Nel sistema di gestione magazzino, occorre eseguire dei controlli saltuari sui bancali, per calcolare la relativa
previsione di durata. Quindi, ogni cento spostamenti di un bancale da un posto del magazzino a un altro, il bancale
viene eseguito in una speciale stazione di verifica. Tale stazione è modellata da un'associazione di sottoscrizione dal
programma di controllo saltuario del bancale della classe di controllo al bancale della classe di entità. Ogni istanza
del bancale conta il numero di volte in cui esso viene spostato, utilizzando un attributo del contatore. Una volta
raggiunte le cento volte, il programma di controllo saltuario viene informato a causa della condizione
dell'associazione di sottoscrizione. Il suddetto programma crea quindi un'attività speciale, che trasporta il bancale
nella stazione di verifica. Tale programma non necessita di alcun collegamento al bancale, ma deve averne uno
all'attività per avviarla.
Una volta raggiunte i cento spostamenti di un bancale, il programma di controllo saltuario crea una nuova attività.
Le condizioni dell'associazione di sottoscrizione devono essere espresse in termini di caratteristiche astratte,
piuttosto che in termini di attributi specifici o operazioni. In questo modo l'oggetto associante resta indipendente
dai contenuti dell'oggetto di entità associato, che potrà essere modificato.
L'associazione di sottoscrizione non sempre associa due istanze dell'oggetto. E' valida anche da una classe a
un'istanza, una meta-relazione. Essa viene descritta nelle sottosezioni seguenti. Vi sono anche casi in cui la classe
di un oggetto è associata tramite un'associazione di sottoscrizione, ad esempio se lo specifico evento è la creazione
dell'istanza della classe.
Talvolta, è necessario informare un oggetto di boundary se un evento ha luogo in un oggetto di entità. In questo caso,
occorre un'associazione di sottoscrizione.
Esempio
Considerare un prelievo da un conto in banca tramite dei trasferimenti. In questo caso, è il gestore dei trasferimenti
dell'oggetto di controllo che esegue le operazioni sul conto dell'oggetto di entità. Se il saldo del conto diventa
negativo, il cliente riceverà una notifica preparata dal programma di scrittura notifiche dell'oggetto di boundary.
Tale oggetto presenta, quindi, un'associazione di sottoscrizione al conto. La condizione indicata è che il saldo
scenda al di sotto dello zero. Non appena si verifica questo evento, il programma di scrittura notifiche viene
informato. Questa particolare associazione di sottoscrizione è un'associazione di istanza, in quanto, come
istanza del programma di scrittura notifiche, è costantemente alla ricerca di scoperti nelle istanze del conto.
Se il cliente non deve ricevere ulteriori informazioni oltre a quella relativa al fatto che il proprio conto sia in
rosso, ciò è sufficiente. Ma, se occorre informarlo anche di quanto è in rosso, il programma di scrittura
notifiche deve eseguire un'operazione sul conto per rilevare la cifra esatta. A tale scopo, è necessario che tale
programma disponga di un collegamento al conto.
Il programma di scrittura notifiche della classe di boundary esegue una sottoscrizione all'evento del saldo che rientra
al di sotto di un determinato livello nel conto dell'oggetto di entità. Se il suddetto programma necessita di sapere la
somma esatta del deficit, deve avere un collegamento al conto.
Un esempio di meta associazione da una classe di boundary è il caso in cui un evento in un oggetto di entità causa la
visualizzazione di una nuova finestra da parte dell'utente. In quel caso una classe dell'oggetto interfaccia esegue una
sottoscrizione alle istanze dell'oggetto di entità.
Esempio
In un sistema di gestione rete, sono presenti stazioni che funzionano come nodi nella rete e linee che li connettono
l'una all'altra. Ogni stazione è connessa ad altre stazioni tramite diverse linee. La capacità di una stazione è
determinata dal numero di linee funzionanti ad essa correlate. Se oltre l'80% di tali linee è funzionante, la capacità
della stazione è elevata, se meno del 20 % è funzionante la capacità è scarsa e tutte le percentuali intermedie
comportano una capacità media. Nel modello di sistema di esempio, sono presenti due oggetti di entità, Stazione e
Linea: il primo ha un'associazione di sottoscrizione a Linea. La condizione dell'associazione è che occorre
informare tale stazione quando lo stato della linea, che può essere abilitata o disabilitata, viene modificato.
Inoltre, un oggetto di controllo che esegue una sottoscrizione alla Stazione verrà informato se la capacità della
stazione diventa scarsa. Ciò viene descritto di seguito, come continuazione dell'esempio.
Un'istanza della Stazione viene informata non appena lo stato di una delle relative istanze di Linea viene modificata.
Un'associazione di sottoscrizione tra classi di entità è quasi sempre un'associazione di istanza, perché gli
elementi coinvolti, generalmente, sono istanze già esistenti. Tuttavia, potrebbero esistere casi in cui un'istanza
dell'oggetto di entità che esegue la sottoscrizione viene creata quando l'evento specificato ha luogo nell'oggetto di
entità associato. In tali casi, l'associazione parte da una classe a un'istanza, ad esempio è una meta-associazione. E'
possibile anche immaginare che un'istanza di uno specifico oggetto di entità desideri sapere quando una nuova istanza
di un altro oggetto di entità viene creata.
Esempio
Nel suddetto esempio, l'oggetto di entità Stazione ha un'associazione di sottoscrizione all'oggetto di entità
Linea. Quindi, Stazione verrà informato ogni volta che lo stato di un'istanza Linea viene modificato. Tale modifica
dello stato modificherà la capacità della Stazione. Se la capacità diventa scarsa, ad esempio meno del 20% delle linee
è funzionante, il sistema deve individuare nuovi modi appropriati attraverso la rete in modo che questa stazione venga
evitata. Questa, ovviamente, non è un'attività della Stazione, ma deve essere eseguita dal Supervisore dell'oggetto di
controllo Stazione, che ha un'associazione di sottoscrizione a ogni istanza della Stazione.
Il Supervisore dell'oggetto di controllo Stazione esegue una sottoscrizione all'oggetto di entità Stazione, che a sua
volta esegue una sottoscrizione all'oggetto di entità Linea.
Molto più frequentemente, un'associazione di sottoscrizione da un oggetto di controllo verrà stabilita da una
classe a un'istanza o viceversa, ad esempio, da una meta-associazione. Generalmente, l'istanza dell'oggetto di
controllo che gestirà l'evento nell'oggetto di entità non viene creata finché l'evento non ha effettivamente luogo. Ma
è possibile anche immaginare, ad esempio, che un'istanza di un oggetto di controllo desideri sapere quando una nuova
istanza di un determinato oggetto di entità viene creata. Quindi, in alcuni casi sporadici, l'associazione di
sottoscrizione potrebbe essere un'associazione di istanza.
Esempio
Nel suddetto esempio, l'associazione di sottoscrizione dal Supervisore della stazione alla stazione ha le
caratteristiche di una meta-associazione, ad esempio è il Supervisore della classe Stazione che viene informato quando
la capacità della stazione diventa scarsa. Quando il suddetto Supervisore riceve questo messaggio, crea un'istanza che
gestisce l'evento.
|