Implementare la classe Autobus, la classe Autorimessa incluso il collegamento a responsabilità doppie che le lega, e la classe Autista con il collegamento a responsabilità singola dell'autista che le lega.
Si implementi l'attività Trasporto che assegna l'officina di riparazione a un autobus guasto. I suoi parametri sono un autista, un autobus e un insieme di autorimesse. La prima fase Cerca è trovare una autorimessa a cui l'autista sia autorizzato che sia anche una officina e che abbia almeno un posto libero (il numero di autobus attualmente contenuto sia minore del numero di posti). Se questa ricerca fallisce, viene stampato un messaggio di errore e si termina. In caso contrario, partono due attività parallele. La prima invia un messaggio di destinazione all'autista con l'officina scelta e termina. La seconda ha una prima fase Posizione in cui trova l'associazione fra autobus e officina e una seconda di Stampa, in cui lo stampa. Questa sequenza va ripetuta fino a che l'officina non è stata raggiunta. Quando entrambe le attività terminano, viene stampato un messaggio di conclusione.
Si implementi il seguente comportamento dell'oggetto Autista. Lo stato iniziale è NORMALE. Quando riceve un messaggio Guasto con parametro un autobus, invia un messaggio Rottura senza parametri all'autobus e va in stato ROTTURA. In questo stato, può ricevere due possibili messaggi. Il primo è un messaggio Trasferimento che lo riporta in stato NORMALE. Il secondo è un messaggio Assegnamento con parametro una officina, che lo porta in stato ATTESA dopo avergli fatto inviare un messaggio Trasporto all'autobus ricevuto come parametro nel precedente messaggio Rottura. Nello stato di ATTESA, un messaggio di Entrata dallo stesso autobus lo riporta in stato NORMALE.