Fondamenti di Informatica — ArrayList di oggetti collegati
Schema per tipologia di metodo (senza ripetizioni)
Invece di andare esercizio per esercizio, qui i metodi sono raggruppati per tipo di operazione (cerca, aggiungi, conta, elimina, filtra,
min/max). Per ogni tipo trovi il codice reale una volta sola, con l’elenco di tutti i metodi/esercizi che usano quel identico codice. Dove il
codice cambia davvero, trovi le varianti separate.
Esercizi coinvolti: Laurea (Docente–Studente), Dipartimento (Docente–Assegnista), AziendaSanitaria (Medico–Paziente), Libreria
(Artista–Brano), ArchivioDirigentiImpiegati (Dirigente–Impiegato), ArchivioFilm (Regista–Film), Negozio (Cliente–Acquisto).
1. RICERCA (cerca…/indice…)
1.1 Ricerca di A per un singolo campo String
private int cercaDocente(String unNomeDocente) {
for (int i = 0; i < docenti.size(); i++) {
String a = docenti.get(i).getNome();
if (a.equals(unNomeDocente)) {
return i;
}
}
return -1;
}
Identico (cambia solo nome campo/metodo) in: (AziendaSanitaria, confronta ), (Libreria),
cercaMedico getMedico() cercaArtista
(ArchivioFilm), (Negozio). (ArchivioDirigentiImpiegati) è identico ma dichiarato public
cercaRegista indiceCliente cercaDirigente
invece che .
private
1.2 Ricerca di A per due campi (Dipartimento)
private int indiceDocente(String unNome, String unCognome) {
for (int i = 0; i < docenti.size(); i++) {
if (docenti.get(i).getNome().equals(unNome)
&& docenti.get(i).getCognome().equals(unCognome)) {
return i;
}
}
return -1;
}
Unico caso con doppio confronto . Nessun altro esercizio lo replica.
&&
1.3 Ricerca di B per un codice numerico (int, con )
==
private int cercaMatricola(int unaMatricola) {
for (int i = 0; i < studenti.size(); i++) {
if (studenti.get(i).getMatricola() == unaMatricola) {
return i;
}
}
return -1;
}
Identico in: (Dipartimento), (AziendaSanitaria), (ArchivioDirigentiImpiegati),
indiceAssegnista cercaCodice cercaImpiegato
(Negozio). Cambia solo il nome del campo chiave (matricola/codice) e la lista scandita.
indiceAcquisto
1.4 Ricerca di B per un titolo (String, con )
.equals
private int cercaBrano(String unTitolo) {
for (int i = 0; i < brani.size(); i++) {
if (brani.get(i).getTitolo().equals(unTitolo)) {
return i;
}
}
return -1;
}
Identico in: (ArchivioFilm). Unica differenza col gruppo 1.3: chiave String → invece di .
cercaFilm .equals ==
2. AGGIUNTA (aggiungi…/agg…/inserisci…)
2.1 Aggiungi A (crea solo se non esiste)
public void aggiungiDocente(String unNomeDocente) {
if (cercaDocente(unNomeDocente) == -1) {
docenti.add(new Docente(unNomeDocente));
}
}
Identico in: (Dipartimento), (AziendaSanitaria), (Libreria),
inserisciDocente aggiungiMedico aggArtista aggiungiDirigente
(ArchivioDirigentiImpiegati), (ArchivioFilm), (Negozio).
aggRegista aggCliente
2.2 Aggiungi B con chiave numerica, senza campo extra
public void aggiungiStudente(int unaMatricola, String unNomeDocente) {
aggiungiDocente(unNomeDocente);
if (cercaMatricola(unaMatricola) == -1) {
int indiceDocente = cercaDocente(unNomeDocente);
studenti.add(new Studente(unaMatricola, docenti.get(indiceDocente)));
}
}
Identico (a meno dell’ordine dei controlli, ininfluente) in: (AziendaSanitaria),
aggiungiPaziente aggiungiImpiegato
(ArchivioDirigentiImpiegati).
2.3 Aggiungi B con chiave String (titolo), sen