Esame laboratorio di programmazione - Compito D

Parte I

Si deve realizzare un sistema per la gestione di festival. A livello di progettazione è stato deciso di rappresentare ogni punto del programma come un evento, che però può essere anche una sequenza di altri eventi.

Vanno rappresentate le seguenti classi

Evento
Può essere un evento semplice oppure composto
EventoSemplice
è dato da un nome e una durata; può essere solo di uno dei due tipi descritti qui sotto
Concerto
È un tipo di evento semplice; oltre al nome e alla durata, viene specificato il numero di pezzi che vengono eseguiti
Proiezione
È il solo altro evento semplice da considerare; oltre ai dati degli eventi generali, viene memorizzato un campo booleano che indica se il regista sarà presente alla proiezione
EventoComposto
è una sequenza di altri eventi

Queste classi vanno messe in un package eventi. Tutte le classi devono essere incapsulate e i loro oggetti non modificabili. Specificare dove si ammettono valori nulli (se si ammettono). Vanno realizzati i seguenti metodi in tutte le classi:

Parte II

In una classe al di fuori del package inserire i seguenti metodi:

static boolean verificaEventi(Evento p)
verificare che gli eventi che fanno parte di eventi che fanno parte di altri eventi non contengono a loro volta degli eventi composti
static int quantiRegisti(Evento p, Map<Proiezione, Boolean> a)
calcolare quante proiezioni sono previste avere il regista; usare il dato della mappa se presente, altrimenti quello memorizzato nell'oggetto Proiezione