Ogni operazione deve essere preceduta dagli opportuni "commenti del javadoc" contenenti i tag
"@param" e "@return". Il "?" davanti al nome di un metodo indica che il tipo del valore ritornato deve essere
individuato opportunamente.
È data (cioè, non è richiesta la definizione) la classe "Proc" (=Processo). La classe "Proc" gestisce un processo
di un sistema di elaborazione. Ogni processo ha un intero identificativo e un tempo richiesto di elaborazione,
che sarà aggiornato dopo sua ogni elaborazione parziale (ad es., il processo 8 richiede il tempo 250). La classe
possiede:
- il costruttore completo;
- il metodo "? getId()", che ritorna l'identificativo;
- il metodo "? getTime()", che ritorna il tempo di elaborazione;
- il metodo "? setTime(int newTime)", che sostituisce il tempo attuale di elaborazione con il nuovo tempo
"newTime".
A. Definire la classe "CPDisp" (= Coda di Processi con Dispatcher), che ha due campi:
- un campo, di tipo "ArrayList<Proc>", che contiene un insieme di processi in coda;
- un campo "qT", di tipo int, che memorizza un quanto di tempo di elaborazione.
La classe deve possedere queste operazioni pubbliche:
- "CPDisp(int qT)". Crea una coda, inizialmente vuota, di processi gestita da un dispatcher avente un quanto
"qT".
- "? size()". Ritorna il numero di processi contenuti nella coda.
- "void insertLast (Proc nuovoProc)". Inserisce il processo "nuovoProc" in fondo alla coda.
- "Proc first()". Ritorna il processo in testa alla coda; se la coda è vuota, ritorna null.
- "Proc removeFirst()". Come il metodo precedente; inoltre, elimina il processo ritornato (se la coda non è
vuota).
- "void processFirst()". Simula l'assegnazione della Cpu al processo in testa alla coda. Quindi, se il processo
non conclude la sua elaborazione nel tempo "qT", questo metodo lo reinserisce nella coda con il tempo residuo
di elaborazione.


B. È data la classe "CPDisp" definita nel punto precedente.
Definire la classe "S3C" (= Sistema di elaborazione con 3 Code) riusando le classi "CPDisp" e "Proc"; la classe
"S3C" gestisce 3 code di processi; le code sono identificate dai valori 0, 1, 2.
La classe deve possedere queste operazioni pubbliche:
- "S3C(int qT)". Crea le tre code di ingresso inizialmente vuote.
- "void insertLast (Proc nuovoProc, int c)". Inserisce il processo "nuovoProc" in fondo alla coda "c".
- "void processFirst()". È analogo al metodo omonimo della classe "CPDIsp", dal quale si differenzia perché
elabora la coda (tra le 3 presenti) che contiene il numero massimo di processi.

C. Sono date le classi definite nei punti precedenti.
Definire la classe "S3CS" (= "S3CS" con Statistiche) che eredita dalla classe "S3C".
La classe "S3CS" deve possedere ogni metodo della classe "S3S" e queste operazioni pubbliche:
- "S3CS(int qT)". Crea le tre code di ingresso inizialmente vuote.
- "int getNProc()". Ritorna il numero totale dei processi che sono stati inseriti in tutti i sistemi di tipo "S3CS".
Es. Ci sono due sistemi di elaborazione. Il primo sistema contiene attualmente 9 processi, e ne ha eliminati
2; il secondo sistema contiene attualmente 1 processo, e ne ha eliminati 5. Quindi, il metodo "getNProc()"
deve ritornare il valore 17 (=9+2+1+5).

Ho due dubbi a riguardo :
innanzi tutto come si fa il costruttore del punto B ?
come si risolve il punto C ?