Un Singleton è utile per esprimere nel modello informazioni configurabili a visibilità globale mediante un oggetto la cui creazione è gestita automaticamente dal sistema. Nel diagramma, questa tipologia di classe è distinguibile per lo stereotipo «singleton»
.
Il Singleton supporta attributi nativi di tutti i tipi (a eccezione di serial
) e derivati. È inoltre possibile abilitare tutti gli attributi di piattaforma.
Al Singleton corrisponde sempre una sola istanza/record, pertanto non è possibile dichiarare vincoli di unicità o indici sugli attributi di questa classe.
Non è inoltre possibile impostare attributi come required, poiché al primo avvio della Cloudlet nessuno di essi è valorizzato.
Creare un Singleton #
Fai click destro su un punto libero nell’area di lavoro (Canvas) per aprire il Database menu
; dal menu a tendina scegli New singleton class
. In alternativa, clicca sul pulsante della palette(Create a new singleton
).
Referenziare un Singleton #
Un Singleton è accessibile da tutte le altre classi del modello, le quali possono referenziare i suoi attributi nelle espressioni, senza doversi associare alla classe stessa. Non è pertanto consentito esprimere relazioni da altre classi verso il Singleton (non è infatti necessario, data la sua unicità e visibilità globale); è invece consentito esprimere relazioni dal Singleton verso le altre classi del modello, inclusi gli Enum, purché la cardinalità minima del ruolo target sia zero; per questo motivo nei Role menu
sono disabilitate le opzioni Exactly one (1
) e One or more (1N
). Sono consentite sia associazioni sia composizioni, pertanto è possibile dichiarare anche attributi derivati di tipo query sui ruoli del Singleton. Anche gli oggetti associati e gli oggetti part saranno resi disponibili globalmente, come ruoli dell’istanza Singleton.
Nelle espressioni è possibile referenziare gli attributi o i ruoli del Singleton con la seguente sintassi: <SingletonClassName>[].<AttributeName>
. Nell’Expression editor, i Singleton sono elencati in una lista accessibile dal pulsante (Singleton constants
), da cui è possibile selezionarne attributi e ruoli.
Singleton nell’applicazione generata #
Una volta avviata la Cloudlet, il sistema controlla che l’istanza del Singleton esista, e se non è così, la crea. Inizialmente, gli attributi avranno tutti valore nullo, ed è necessario che l’utente li valorizzi opportunamente.
Poiché l’esistenza dell’istanza della classe Singleton è sempre garantita, gli unici servizi CRUD generati sono quelli relativi alla sua modifica, mentre non vengono generati servizi per crearla o eliminarla.
Esempio #
Abbiamo modellato un’applicazione che raccoglie le richieste di appuntamento presso un ufficio. La classe Singleton Front_office è utilizzata per consentire agli utenti di definire gli orari di apertura e di chiusura dello sportello al primo avvio della Cloudlet; ciò avviene valorizzando gli attributi opening_time
e closing_time
.
Gli attributi date
e time
della classe Appointment_request riportano le informazioni relative al giorno e all’orario dell’appuntamento richiesto.
Per evitare che sia possibile creare appuntamenti con orari non validi, ovvero orari nei quali lo sportello è chiuso, abbiamo infine creato due Class warning a livello applicativo; la domanda viene creata solo se il valore di time
rispetta le seguenti condizioni:
- è maggiore o uguale a
opening_time
(time >= Front_office[].opening_time
) - è minore di
closing_time
. (time < Front_office[].closing_time
)