Lezione 1 · Canale 1 · giovedì 24 settembre 2026
Progettazione software e introduzione a Java
Progettazione del Software
Il software di cui si parla
Il corso ha due parti: la programmazione a oggetti, con Java, e la progettazione del software. Sono legate: una delle applicazioni tipiche della programmazione a oggetti è migliorare la qualità di un programma dal punto di vista della progettazione. Java si usa perché è il linguaggio più diffuso, per numero di programmi e di installazioni.
Un esempio: un Comune vuole gestire le contravvenzioni. Ogni vigile ha un palmare con cui comunica al sistema il veicolo, il luogo e la natura dell'infrazione, e il sistema notifica la contravvenzione al cittadino.
È un software gestionale: tratta i dati di un ente (vigili, automobilisti) e i flussi di informazioni delle sue attività. Restano fuori:
- i videogiochi;
- le grandi applicazioni di rete, come Google e Amazon;
- i sistemi embedded, come Arduino.
Una centralina d'automobile comanda motore e luci e non interagisce con l'utente, che passa per il computer di bordo: per un sistema così l'usabilità non ha senso, manca l'utente finale.
Chi partecipa
- committente: l'ente o l'azienda che richiede il software, a un singolo programmatore o, più spesso, a un'azienda di produzione;
- esperti del dominio: gli impiegati del committente che sanno cosa va informatizzato, con quali funzionalità e quali dati;
- programmatori, con analista e progettista: nell'azienda che realizza il software, analizzano i requisiti e la loro fattibilità;
- utente finale: chi usa il programma;
- manutentore: chi corregge il software, lo aggiorna o lo adatta a nuove richieste.
La manutenzione pesa solo sui sistemi che durano: un programma che converte dati nel passaggio da una piattaforma a un'altra serve per poco tempo e ne richiede quasi nessuna.
Perché questo ambito è così diffuso
Il software gestionale è, in numero, quello che impiega più programmatori e progettisti. Ogni ente medio o grande ha caratteristiche proprie, quindi il suo software va fatto o adattato apposta. Le organizzazioni piccole usano di solito software preconfezionato, per esempio per il personale o la contabilità.
Il lavoro consiste più spesso nell'aggiungere funzioni a un software esistente o nel mantenerlo: partire da zero è rarissimo, perché di solito c'è già qualcosa di informatizzato. Un programma come Word è un'altra cosa: un prodotto unico per tutti gli utenti, non commissionato da un singolo ente.
Ciclo di vita
Le fasi sono:
- raccolta dei requisiti;
- analisi dei requisiti;
- progetto generale;
- testing, più importante di quanto di solito si pensi;
- manutenzione: si correggono gli errori e si adatta il software alle modifiche richieste.
Non è una sequenza rigida, ma un ciclo: arrivano nuovi requisiti, si rifà l'analisi, si sviluppa, si valuta. E dentro il ciclo si torna indietro: durante il progetto può emergere che l'analisi è incompleta o che un requisito era ambiguo, e allora si riprende l'analisi.
Il sistema informatico di un'università ne è un esempio. Le prime versioni offrivano le sole funzionalità di base, senza piani di studio; piani di studio e altre regole sono arrivati dopo. Anche la verifica è continua: nella prima versione, su uno schermo piccolo, il comando «Exit» restava fuori vista e senza barre di scorrimento non si raggiungeva. La prima prova pratica lo ha mostrato e il problema è stato corretto. Altri errori compaiono anche dopo anni.
Dimensione e durata
Questo sistema deve servire studenti, insegnanti e segreterie didattiche. È di media grandezza, ma una sola persona non lo realizzerebbe in un tempo ragionevole: servono più programmatori, anche in team diversi che scrivono parti dello stesso programma. Le parti devono interagire, quindi la comunicazione fra chi le scrive è essenziale.
Il sistema dura da molti anni e si corregge e si estende di continuo. I programmatori però cambiano lavoro o progetto: una modifica richiesta dopo anni la fa spesso una persona diversa da chi ha scritto il codice, e anche l'autore, dopo qualche mese, ha bisogno di tempo per ritrovare il filo. Per questo il software deve essere:
- semplice da leggere;
- documentato, così che si trovi subito il punto che realizza una funzione;
- standardizzato: si preferiscono soluzioni comuni e già funzionanti a soluzioni nuove senza necessità.
Chi corregge, modifica o collega una parte deve sapere cosa aspettarsi, senza ricostruire ogni volta cosa è stato fatto: codice difficile da seguire e non documentato costa ore solo per capire come funziona.
Le qualità dipendono dal contesto
Correttezza, affidabilità, robustezza, efficienza, usabilità e modularità del codice non pesano ugualmente ovunque:
| Contesto | Qualità che pesa di più | Perché |
|---|---|---|
| Gestionale, per esempio una banca | correttezza, affidabilità | un errore può trasformare un saldo di 50.000 euro in 50 milioni |
| Videogiochi | efficienza | audio e video devono scorrere senza interruzioni |
| Servizio web, per esempio un sito di e-commerce | efficienza | chi aspetta troppo cambia sito |
| Servizio con alternative, per esempio un motore di ricerca | usabilità | la semplicità dell'interfaccia può decidere la diffusione |
Nei gestionali efficienza e usabilità contano spesso meno: un impiegato che deve usare il programma aspetta qualche secondo e impara le operazioni anche con un'interfaccia poco intuitiva.
Il caso opposto è un servizio che l'utente può lasciare per un altro. I primi motori di ricerca mostravano molti elementi accanto al campo di ricerca; Google ha una pagina con il solo campo, senza distrazioni. TikTok si è affermato nello scambio di video, che altre piattaforme offrono pure, per la sua usabilità.
Programmazione a oggetti e Java
La programmazione a oggetti è utile soprattutto quando i programmi sono grandi, come quelli della progettazione del software. Ne sono aspetti l'ereditarietà e la modularizzazione tramite classi. Il vantaggio si vede solo quando questi meccanismi sono all'opera, man mano che si presentano le caratteristiche di Java.
Esempio: persone e automobili
Si hanno i dati di persone e automobili, collegati fra loro: per ogni persona l'insieme delle automobili che possiede, e in ogni automobile un riferimento al proprietario, che si assume unico.
Realizzare questi riferimenti ha soluzioni standard. In Java il codice risulta lungo, ma lo schema è sempre lo stesso anche se cambiano i dati collegati. Il problema è la struttura e i collegamenti dei dati, come in un gestionale: non c'è un algoritmo da inventare per un problema numerico.
Formulario
Ciclo di vita
- raccolta dei requisiti
- analisi
- progetto generale
- testing
- manutenzione
Si torna indietro quando serve.
Attori
- committente
- esperti del dominio
- analista, progettista, programmatore
- utente finale
- manutentore
Qualità per contesto
- gestionale: correttezza, affidabilità
- videogiochi: efficienza
- servizio web: efficienza
- servizio con alternative: usabilità
Software durevole
- più programmatori, vita lunga
- leggibile
- documentato
- soluzioni standard