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?