Esame laboratorio di programmazione - Compito A

Parte I

Vanno realizzate delle classi per rappresentare dati relativi a una struttura carceraria. In particolare, vanno realizzate le classi che permettono la memorizzazione delle stanze (celle, cucine, magazzini) Si realizzino le seguenti classi:

Locale
un generico locale all'interno della struttura; può essere una stanza oppure un passaggio (vedi sotto)
Passaggio
un qualsasi locale di passaggio (es. un corridoio); ogni passaggio ha un singolo altro passaggio da cui si accede a questo (null se si tratta dell'ingresso del carcere) e un insieme di locali a cui questo passaggio permette di accedere
Stanza
un locale non di passaggio, quindi una cella, un magazzino, oppure una cucina; tutte le stanze hanno un'area
Cella, Cucina, Magazzino
ogni oggetto di queste classi ha (oltre l'area), anche rispettivamente: numero massimo di occupanti (cella), numero di scaffali (magazzino), numero di uscite di emergenza (cucina)

Queste classi vanno messe in un package carcere. Tutte le classi devono essere incapsulate e i loro oggetti non modificabili. Non sono ammessi valori nulli, tranne dove è stato esplicitamente specificato che sono ammessi. Vanno realizzati i seguenti metodi in tutte le classi:

Parte II

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

int superfice(Passaggio p)
dato un passaggio, calcolare la superfice totale delle celle a cui si accede da quel passaggio, direttamente o attraverso altri passaggi
Cella libera(Map occupate, Passaggio p)
trovare una cella con almeno un posto libero; la mappa indica il numero di carcerati attualmente in una cella; il passaggio è l'ingresso del carcere e permette quindi di accedere a tutti gli oggetti Cella; ritornare null se non ci sono celle libere