Linea guida: Associazione di sottoscrizione
Associazione di sottoscrizione specifica che è necessario informare un oggetto ogni qualvolta un determinato evento ha luogo nell'oggetto di entità associato. Questa linea guida descrive come utilizzare questa relazione.
Relazioni
Descrizione principale

Spiegazione

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.

Diagramma UML descritto successivamente.

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.

Diagramma descritto nel testo di accompagnamento.

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.

Utilizzo

Associazioni di sottoscrizioni da classi di boundary

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.

Diagramma descritto nel testo di accompagnamento.

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

Associazioni di sottoscrizioni da classi 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.

Diagramma descritto nel testo di accompagnamento.

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.

Associazioni di sottoscrizioni da classi di controllo

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.

Diagramma descritto nel testo di accompagnamento.

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.