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:

  1. raccolta dei requisiti;
  2. analisi dei requisiti;
  3. progetto generale;
  4. testing, più importante di quanto di solito si pensi;
  5. 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:

ContestoQualità che pesa di piùPerché
Gestionale, per esempio una bancacorrettezza, affidabilitàun errore può trasformare un saldo di 50.000 euro in 50 milioni
Videogiochiefficienzaaudio e video devono scorrere senza interruzioni
Servizio web, per esempio un sito di e-commerceefficienzachi aspetta troppo cambia sito
Servizio con alternative, per esempio un motore di ricercausabilità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

  1. raccolta dei requisiti
  2. analisi
  3. progetto generale
  4. testing
  5. 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