vai al contenuto principale

Classi Singleton

La classe Singleton ammette e garantisce l'esistenza di un solo oggetto all'interno dell'applicazione generata, i cui attributi devono essere valorizzati a runtime.

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

Una classe Singleton

Una classe 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).

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

Esempio di Singleton

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:

  1. è maggiore o uguale a opening_time (time >= Front_office[].opening_time)
  2. è minore di closing_time. (time < Front_office[].closing_time)

Esempio di Singleton