Esame Laboratorio di Programmazione - Settembre 2006
Un piano è una sequenza di azioni. Per quello che
riguarda questo compito, una azione è caratterizzata
soltanto da un nome, dal tempo necessario per la sua
esecuzione, e dalle sue precondizioni.
Esistono due tipi di precondizioni. Le precondizioni
semplici sono caratterizzate solo da un nome (una stringa).
Le precondizioni complesse sono invece caratterizzate dal
loro nome e da un piano che le rende vere. In altre parole,
per ognuna di queste precondizioni complesse viene fornito
un piano che le rende soddisfatte.
Si realizzino le seguenti classi:
- Piano
- una sequenza di azioni
- Azione
- una azione è caratterizzata da un nome (una
stringa), una durata (un reale) e da un insieme di
precondizioni
- Precondizione
- una precondizione può essere semplice o composta
- PrecondizioneSemplice
- una precondizione semplice è data solo da un nome
(una stringa)
- PrecondizioneComposta
- una precondizione composta è data da un nome (una
stringa) e da un piano che rende vera la precondizione
Le classi devono essere incapsulate; specificare come
commenti nel codice dove sono ammesse o no componenti nulle.
Le classi devono avere:
- costruttore e metodi di lettura delle componenti; metodi
set se necessario
- metodi standard: toString, clone,
equals ed hashCode
Realizzare anche due metodi (in una classe a parte) che
svolgono le seguenti funzioni:
- dato un piano, calcolare le sua durata complessiva
(somma dei tempi delle sue azioni e dei tempi necessari per
rendere vere tutte le sue precondizioni)
- dato un piano e una lista che contiene tutte le
precondizioni semplici attualmente vere, verificare se il
piano è eseguibile, ossia se tutte le sue
precondizioni semplici sono vere