Fondamenti di Informatica – CdL in Ingegneria Gestionale
A.a. 2007/2008 – Prof. Michele Amoretti
Esempi di domande d’esame – 2
La prova d’esame è scritta, dura 2 ore e consiste di alcune domande a risposta aperta sugli
argomenti del corso.
Domanda
Illustrare il ciclo di vita di un programma Java.
Risposta
Un programma Java è composto da classi. Ci deve essere per forza una classe contenente un metodo
main(), che è il primo ad essere eseguito e che dovrebbe permettere di capire la logica del
programma. Ciascuna classe deve essere scritta in un file di testo separato, salvato con lo stesso
nome della classe ed estensione .java. Ad esempio, la classe Rettangolo deve essere scritta in un file
Rettangolo.java. E’ buona norma, comunque, usare l’inglese per il nome delle classi e delle variabili
(quindi è meglio Rectangle di Rettangolo).
I file .java che compongono il programma devono essere compilati con il compilatore javac.
Quest’ultimo genera, per ciascun file, un corrispondente file .class che contiene il bytecode, cioè la
classe tradotta in codice ottimizzato. Per eseguire il programma bisogna far interpretare il bytecode
dalla Java Virtual Machine, un programma che si chiama java. Esistono JVM per computer,
telefonini, palmari, ecc. Una volta tradotto in forma di bytecode, il programma Java è eseguibile su
qualsiasi dispositivo dotato di JVM (per questo si dice che i programmi scritti in linguaggio Java
sono portabili).
Nel caso semplice di un programma costituito da un’unica classe Pippo, il procedimento di
compilazione ed esecuzione è il seguente:
• Per compilare, si usa il comando:
javac Pippo.java
Viene così generato il bytecode Pippo.class.
• Per eseguire il bytecode, si usa il comando:
java Pippo
Utilizzando l’ambiente di sviluppo Eclipse, queste due operazioni vengono svolte automaticamente,
quando si seleziona l’opzione Run (esegui).
Domanda
Spiegare il seguente frammento di codice Java:
float lato = 5.0;
Quadrato q = new Quadrato(lato);
float area = q.calcolaArea();
System.out.println(“L’area del quadrato misura ” + area);
Risposta
La prima istruzione dichiara una variabile “lato” di tipo float (numero in virgola mobile contenuto
in 32 bit, cioè 4 byte), e la inizializza con il valore 5.0.
La seconda istruzione crea una nuova istanza della classe Quadrato, e dichiara una variabile “q” che
fa riferimento a quella istanza. Per semplicità si usa dire che “q” è un oggetto della classe Quadrato,
ma per correttezza bisognerebbe sempre dire che q è una variabile che fa riferimento a un oggetto
della classe Quadrato (in quanto potrebbero esserci più variabili distinte che fanno riferimento allo
stesso oggetto).
Nel codice in esame, l’oggetto istanza di Quadrato viene creato passando la variabile lato al
costruttore della classe; questo significa che il costruttore fa una copia del valore di tale variabile. Si
può supporre che tale copia venga memorizzata nell’istanza di Quadrato creata, in una apposita
variabile membro (dicasi anche campo di esemplare), per uso futuro. Si noti che se in futuro il
valore di lato venisse modificato al di fuori dell’oggetto q, quest’ultimo non ne risentirebbe, perchè
la sua copia interna rimarrebbe inalterata.
La terza istruzione dichiara una variabile area di tipo float e la inizializza con il valore restituito dal
metodo calcolaArea() della classe Quadrato, invocato sull’oggetto q.
La quarta ed ultima istruzione stampa sullo standard output (tipicamente la console, e quindi lo
schermo) la stringa data dalla concatenazione di “L’area del quadrato misura ” con la stringa
corrispondente al valore della variabile area.
Domanda
Disegnare il diagramma di flusso equivalente al seguente frammento di codice Java:
Scanner in = new Scanner(System.in);
System.out.println(“Inserisci il numero degli iscritti all’esame: ”);
int n = in.nextInt();
int voto;
for (int i = 1; i <= n; i++) {
System.out.println(“Inserisci il voto dell’iscritto numero ” + i);
voto = in.nextInt();
if (voto < 18)
System.out.println(“bocciato!”);
else
System.out.println(“promosso!”);
}
Risposta
Domanda
Elencare le fsi del ciclo di vita del software e spiegarne una a scelta.
Risposta
1. Prima dell’implementazione
(a) Studio di fattibilità
(b) Specifica del problema
(c) Progettazione del programma
(d) Selezione o sviluppo degli algoritmi, analisi
2. Implementazione
(a) Codifica
(b) Debugging
3. Dopo l’implementazione
(a) Test, verifica e benchmarking
(b) Documentazione
(c) Manutenzione
La fase di specifica del problema comporta lo sviluppo di una descrizione chiara, concisa e non
ambigua dell’esatto problema da risolvere e dei requisiti a cui il programma (più in generale, il
sistema) dovrà rispondere. Questa fase del ciclo di vita del software deve produrre un documento di
specifica dei requisiti che riporti su carta la descrizione esatta di come si comporta il sistema in tutte
le circostanze, non solo nella maggioranza nei casi, ma anche nelle condizioni meno usuali. Per
ogni caso, la specifica deve includere una descrizione dei dati attesi in ingresso, dei risultati che
dovranno essere calcolati, e del modo in cui tali risultati dovranno essere riportati in uscita.
Domanda
Cosa è UML? Spiegare a cosa servono i Class Diagram, e le loro caratteristiche.
Domanda
Cosa sono i design pattern? Da quali parti è definito un design pattern?