Scuola
è la classe principale, che costituisce il
cuore dell'architettura: infatti il punto di partenza per ogni esempio e test
case presentato è un oggetto di tipo Scuola
che funge da
contenitore per tutti gli altri oggetti istanziati dall'utente.
Questa classe modella la scuola vera e propria, intesa come collezione
di sezioni (A, B, C..), a loro volta le sezioni sono costituite da
classi (I, II, III..). Ciascuna Classe
contiene istanze di oggetti
diversi, in particolare gli alunni iscritti, i professori che vi
insegnano e un registro che permette di ottenere l'elenco delle presenze
in ordine alfabetico.
Ognuna di queste classi ha dei metodi per aggiungere/rimuovere elementi
alle collezioni, in questo modo risulta possibile creare o eliminare
nuove sezioni e nuove classi dalla scuola e gestire gli alunni di
ciascuna classe.
Scuola scuola = new Scuola("Liceo Scientifico Belfiore");
Sezione pni = new Sezione("A","Piano nazionale informatico");
Sezione bilinguismo = new Sezione("B","Sperimentazione inglese-spagnolo");
scuola.aggiungiSezione(pni);
scuola.aggiungiSezione(bilinguismo);
Classe primaA = new Classe(1);
Classe secondaA = new Classe(2);
pni.aggiungiClasse(primaA);
pni.aggiungiClasse(secondaA);
Persona
è super
classe di Studente
e di Professore
.
All'esterno del package scuola
non è possibile istanziare direttamente oggetti di tipo Studente
e
Professore
, ma per farlo bisogna passare attraverso l'oggetto Segreteria
che svolte il ruolo di factory e
permette di assegnare matricole univoche agli studenti e ai professori.
GregorianCalendar calendar = new GregorianCalendar(1982,2,22);
Persona luigi = new Persona("Luigi", "Malagò", calendar.getTime(),"LGMLG32E65ZXE");
Persona mario = new Persona("Paolo", "Verdi", calendar.getTime(),"PLVRD54E78E0C");
Studente studLuigi = segreteria.iscriviStudente(luigi);
Studente studMario = segreteria.iscriviStudente(mario);
Segreteria
è una sorta di contenitore per le funzionalità
più specifiche relative alla gestione dei professori e degli studenti. Per
poter inserire una persona in una classe, o associare una persona come
professore di una data materia è necessario prima passare per la
Segreteria
: bisogna registrare lo studente o il professore e
creare a partire da un oggetto Persona
rispettivamente oggetti di
tipo Studente
o Professore
.
GestioneStudenti
e GestioneProfessori
sono le classi che in dettaglio
si occupano di gestire l'elenco dei professori e degli alunni iscritti alla scuola, questi oggetti
sono contenuti all'interno della Segreteria
che li maschera all'utente finale.
Persona andrea = new Persona("Andrea","Rossi", calendar.getTime(),"RSSPL51WLD0EW");
Professore profAndrea = segreteria.assumiProfessore(andrea);
Materia italiano = new Materia("italiano","letteratura italiana");
profAndrea.aggiungiMateria(italiano);
profAndrea.aggiungiClasse(primaA);
ConsiglioDiClasse
si occupa della promozione/bocciatura a fine anno dei vari alunni.
Rispetto alla classe Segreteria
si colloca ad un livello di astrazione più alto, in quanto implementa
funzioni di granularità maggiore, combinando le funzionalità di base della Segreteria
e di ciascuna Classe
.
// questi esempi che riguardano il ConsiglioDiClasse mostrano le operazioni di
// bocciatura e di promozione a fine anno che coinvolgono eliminazione e
// inserimento di alunni in nuove classi
ConsiglioDiClasse consiglio1A = primaA.getConsiglioDiClasse();
consiglio1A.bocciaStudente(studMario);
consiglio1A.promuoviStudente(studLuigi,secondaA);
ConsiglioDiClasse consiglio1B = primaB.getConsiglioDiClasse();
consiglio1B.bocciaStudente(studAnna,primaA);
ConsiglioDiClasse consiglio5B = quintaB.getConsiglioDiClasse();
consiglio5B.diplomaStudente(studPaolo);
// questi esempi a differenza di quello che avviene col ConsiglioDiClasse
// mostrano aggiunta e rimozioni di studenti non a causa di promozioni o bocciature
// ma a causa di ritiri o arrivo di nuovi studenti durante l'anno
primaA.aggiungiStudente(studLuigi);
primaA.rimuoviStudente(studLuigi.getMatricola());
Materia
costituiscono le materie che vengono insegnate da ciascun professore.
Per ogni materia è possibile ricavare i professori che la insegnano, così come per ogni professore è
possibile ricavare le materie che questo insegna.
Figura 2: TestCase
System.out.println("---Appello del giorno---");
ArrayList elenco = primaA.appello();
for (int i=0;i<elenco.size();i++) {
System.out.println((i+1) + ". " + ((Studente)elenco.get(i)).toString());
}
---Appello del giorno--- 1. Bianchi Anna 2. Malagò Luigi 3. Moroni Paolo 4. Verdi Paolo