Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014



Documenti analoghi
Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Compitino del 17 gennaio 2007

public double getraggio() restituisce la lunghezza del raggio del cerchio che esegue il metodo.

Programmazione. Cognome... Nome... Matricola... Prova scritta del 20 febbraio 2012

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

Programmazione. Cognome... Nome... Matricola... Compitino del 26 gennaio 2009

Soluzione della prova scritta del 5 febbraio 2013

Le basi del linguaggio Java

Note ed esercizi aggiuntivi

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmazione II Compitino (Vers. B)

{4, 4, 2, 9, 13} {2, 2, 9, 13, 0} {0, 4, 2, 9, 13} {2, 9, 13, 0, 0}

Programmazione I - corso B a.a prof. Viviana Bono

Esonero del corso di Programmazione a Oggetti

Programmazione II Compitino (Vers. B)

//riferimento a una sequenza di oggetti della classe Importo

Note ed esercizi aggiuntivi

Programmazione II Compitino (Vers. A)

Programmazione. Cognome... Nome... Matricola... Compitino del 24 novembre 2008

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

Programmazione in Java (I modulo) Lezione 20: Ereditarietà

Esonero del corso di Programmazione a Oggetti

Array di array. E' possibile creare strutture a matrice (2D, 3D,..., ND), esempio: double [ ][ ] entrate = new double [NANNI][NMESI];

Le eccezioni in Java

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Programmazione. Cognome... Nome... Matricola... Compitino del 24 novembre 2011

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

Capitolo 9. Tipi enumerativi, tipi generici e interfacce. c 2005 Pearson Education Italia Capitolo 9-1 / 73

GESTIONE DEGLI ERRORI

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Dicembre Alcune Soluzioni

GESTIONE DEGLI ERRORI

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

Programmazione I - Preparazione A.A. 2010/2011

Programmazione Orientata agli Oggetti in Linguaggio Java

Sommario. I Uso degli oggetti 39

Programmazione Preparazione al II Compitino

Università Ca Foscari DAIS. Programmazione ad Oggetti. Esame del modulo 1

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

Programmazione II Compitino (Vers. A)

Capitolo 7 Un primo sguardo agli oggetti Schema e valori Elementi di classe e d istanza

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

COGNOME NOME MATRICOLA DATA

Preparazione allo scritto di Programmazione Comunicazione Digitale / Informatica - A.A. 2012/2013

Le gerarchie di tipi: implementazioni multiple e principio di sostituzione

TIPI PRIMITIVI E CLASSI WRAPPER

Gerarchia delle classi Classi astratte Interfacce (Eccezioni) Laboratorio di Programmazione - Esercitazio 1

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double

Esempi in Java di program.ne O-O

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo

18 - Classi parzialmente definite: Classi Astratte e Interfacce

17 - Classi parzialmente definite: Classi Astratte e Interfacce

Le eccezioni in Java

Programmazione 1 A.A. 2015/2016

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione

Prova d Esame Compito A

Programmazione Orientata agli Oggetti in Linguaggio Java

Oggetti. La programmazione orientata agli oggetti, OOP (Object-Oriented Programming), prende il nome dall elemento su cui si basa, l oggetto.

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

COGNOME NOME MATRICOLA DATA

COGNOME NOME MATRICOLA DATA

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Introduzione a Java e all'ambiente di sviluppo

Parte I Java. Metodologie di Programmaziona Secondo Appello, 14/2/2006 1

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Programmazione con Java

IL LINGUAGGIO JAVA. Introduzione alla sintassi di Java La sintassi formalizza le regole sintattiche per scrivere frasi ben formate

Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Questionario di autovalutazione 4

L oggetto creato. Creazione di Oggetti. Rectangle: il concetto 10. Costruzione. Lo spazio di memoria del linguaggio Java. Rectangle: l oggetto

Capitolo 6. Uso della gerarchia. c 2005 Pearson Education Italia Capitolo 6-1 / 125

Oggetti. Definizioni di Classi II

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java

Laboratorio di Programmazione 1 [Java]

Array. Definizione e utilizzo di vettori

Programmazione a Oggetti Lezione 11. Eccezioni e Packages

Eccezioni ed asserzioni

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

Gestione dei compiti

Uguaglianza e copia di oggetti

Marco Faella Introduzione al corso

Soluzione del primo compitino

Programmazione a Oggetti Lezione 8. Definizioni di Classi II

Programmazione ad Oggetti. Java Parte II

Informatica Ereditarietà Java. Ereditarietà

Ingegneria del Software

Prova d Esame Compito A

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

Oggetti e dati primitivi 1

Programmazione Preparazione al II Compitino

Note ed esercizi aggiuntivi

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e Polimorfismo

Programma... Autoboxing / unboxing Array Classe Rettangolo / classe Quadrato / Gerarchia e ereditarietà. Laboratorio di Programmazione - Esercitazio 1

Array. Walter Didimo

Istruzioni. Il codice Java delle domande non mostra gli import, che si assumono essere correttamente presenti.

Transcript:

Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi proposti si utilizzano le seguenti classi: Classe astratta Number: ogni oggetto della classe rappresenta un numero. La classe possiede un costruttore privo di argomenti. Nelle librerie standard alcune classi involucro (ad esempio Integer, Long, Float e Double) sono definite estendendo Number. Tra i metodi della classe Number vi è: - public abstract int intvalue() Classe ElencoNumeri: ogni oggetto della classe rappresenta un elenco di oggetti Number. Tra i metodi forniti dalla classe vi sono: - public Integer interomax() public Integer interomin() Restituiscono il riferimento a un oggetto di tipo Integer che rappresenta, rispettivamente, il più grande e il più piccolo valore di tipo Integer presente nell elenco. Se l elenco non contiene alcun oggetto di tipo Integer entrambi i metodi restituiscono il riferimento null. - public double mediainteriminmax() Restituisce un valore di tipo double uguale alla media tra il più grande e il più piccolo valore di tipo Integer presenti nell elenco. Ad esempio, se il valore più grande è 10 e il più piccolo è 3, il metodo restituisce 6.5. 1. Scrivete l implementazione del metodo mediainteriminmax, senza conoscere l implementazione di ElencoNumeri, ma utilizzando gli altri metodi forniti dalla classe. In questa versione supponete che l elenco contenga sempre almeno un oggetto di tipo Integer. 2. Riscrivete quanto richiesto per l esercizio precedente in modo che nel caso l elenco non contenga alcun oggetto di tipo Integer il metodo mediainteriminmax sollevi una eccezione di tipo ArithmeticException (la classe ArithmeticException fornisce un costruttore che riceve come argomento una stringa).

3. La classe ElencoNumeri è implementata mediante un unico campo private Number[] numeri che si riferisce ad un array contenente i numeri presenti nell elenco. Scrivete l implementazione del metodo interomin. Ricordate che grazie al meccanismo di unboxing è possibile applicare gli operatori di confronto come < e > a riferimenti di tipo Integer (non Number!) per confrontare i valori degli oggetti associati. In alternativa, il confronto può essere effettuato utilizzando il metodo compareto (il metodo è fornito da Integer, non da Number!). Negli esercizi seguenti supponete di disporre anche di una classe concreta di nome Alfa, sottoclasse di Number, che possiede un unico costruttore. Il costruttore riceve un argomento di tipo String. Tra i metodi di Alfa vi è public int intvalue() che restituisce la lunghezza della stringa specificata al momento della creazione dell oggetto. Ad esempio, il metodo intvalue() di un oggetto costruito invocando new Alfa("pippo") restituisce 5. 4. Considerate le seguenti classi: public class Beta extends Alfa { private int y; private static int w = 3, z = 4; public Beta(String s, int t) { super(s); y = z; z = t; w = w + t; public int intvalue() { return super.intvalue() + y; class Prova { public static void main(string[] args) { System.out.println(Beta.getStatico()); //1 Alfa a = new Alfa("cane"); System.out.println(a.intValue()); //2 a = new Beta("formica", 8); System.out.println(a.intValue()); //3 System.out.println(Beta.getStatico()); //4 Scrivete in ogni riquadro l output prodotto dall istruzione di stampa seguita dal commento indicato: //1 //2 //3 //4 public static int getstatico() { return w + z;

5. Oltre alle classi degli esercizi precedenti, considerate una classe astratta Gamma che estende Number e una classe concreta Delta che estende Alfa e implementa un interfaccia In. a. Nel riquadro che precede ciascuna affermazione, scrivete V se l affermazione è vera, F se è falsa: Delta deve fornire l implementazione del metodo intvalue Gamma è il nome di un tipo riferimento Object è un supertipo di Beta Ogni istanza della classe Delta contiene il campo w Gamma deve fornire l implementazione del metodo intvalue Se il codice sorgente della classe Delta non contiene un costruttore allora il compilatore segnala un errore Delta deve fornire l implementazione dei metodi di In Ogni istanza di Beta contiene esattamente 3 campi (oltre a quelli ereditati dalla superclasse) Gamma deve fornire l implementazione dei metodi di In Ogni oggetto della classe Beta contiene esattamente un campo (oltre quelli ereditati dalla superclasse) b. Considerate le seguenti dichiarazioni di variabile: Number n, Alfa a, Beta b, Gamma g, Delta d, In i Nel riquadro accanto a ciascun assegnamento scrivete SI se l assegnamento è compilato correttamente, NO se non è compilato correttamente d = (In) g b = n a = (Beta) n n = b g = (Beta) a n = (Beta) a i = d n = d g = d i = (Gamma) n c. Nel riquadro che precede ciascuna affermazione, scrivete V se l affermazione è vera, F se è falsa: Durante l esecuzione, nello stack si può avere frammentazione In Java gli array sono oggetti Sostituendo super con this nel codice del metodo intvalue della classe Beta si avrà un errore in compilazione Sostituendo super con this nel codice del metodo intvalue della classe Beta si avrà un errore in esecuzione Se il codice sorgente di una classe non contiene un costruttore privo di argomenti allora il compilatore lo aggiunge automaticamente Il linguaggio Java viene anche chiamato bytecode Il programmatore in Java può definire nuovi tipi riferimento Se una classe contiene più costruttori, almeno uno di questi deve richiamare un costruttore della superclasse La lazy evaluation permette di eseguire in maniera più efficiente le operazioni aritmetiche tra numeri Gli oggetti sono memorizzati nello heap I campi statici appartengono alle classi Le classi astratte sono prive di costruttori Il tipo Object di Java è primitivo Se la variabile a del metodo main di Prova viene dichiarata di tipo Number, il compilatore segnala un errore In Java una classe può essere definita estendendo direttamente più classi Se la variabile a del metodo main di Prova viene dichiarata di tipo Beta, il compilatore segnala un errore Le eccezioni di tipo ArithmeticException sono controllate L overriding viene risolto dal compilatore In una stessa classe è possibile definire più metodi con la stesso nome, ma segnatura differente In Java una variabile di tipo Object può memorizzare un riferimento a un oggetto qualsiasi

6. Considerate la dichiarazione di variabile String[] nomi e il seguente frammento di codice: int x = 2; try { do x = nomi[x - 1].length() / x; while (true); catch (ArithmeticException e) { x = x + 15; catch (ArrayIndexOutOfBoundsException e) { x = x + 29; catch (NullPointerException e) { x = x + 17; Ricordate che: ArithmeticException viene sollevata in caso di anomalie nel calcolo di operazioni aritmetiche, ArrayIndexOutOfBoundsException viene sollevata quando si tenti di accedere a una posizione inesistente in un array, NullPointerException viene sollevata quando si tenti di accedere a un oggetto tramite un riferimento null, "" indica la stringa vuota. Per ognuno dei seguenti casi: se l esecuzione termina scrivete nel riquadro corrispondente il valore della variabile x dopo l esecuzione, se l esecuzione non termina scrivete nel riquadro il simbolo o la parola infinito. (a) L array riferito da nomi contiene (nell ordine indicato) riferimenti a oggetti che rappresentano le stringhe "", "cane", "ape", "formica". (b) L array riferito da nomi contiene (nell ordine indicato) riferimenti a oggetti che rappresentano le stringhe "", "formica", "cane". (c) nomi contiene null. (d) L array riferito da nomi contiene (nell ordine indicato) riferimenti a oggetti che rappresentano le stringhe "formica", "ape", "". 7. Considerate il seguente metodo ricorsivo. Scrivete il risultato restituito dalle chiamate indicate nei due riquadri:... int f(int x) { if (x % 2 == 1 f(x / 2) < 3) return x; else return x - 1; f(2) f(8)

Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi proposti si utilizzano le seguenti classi: Classe astratta Number: ogni oggetto della classe rappresenta un numero. La classe possiede un costruttore privo di argomenti. Nelle librerie standard alcune classi involucro (ad esempio Integer, Long, Float e Double) sono definite estendendo Number. Tra i metodi della classe Number vi è: - public abstract int intvalue() Classe ElencoNumeri: ogni oggetto della classe rappresenta un elenco di oggetti Number. Tra i metodi forniti dalla classe vi sono: - public Integer interomax() public Integer interomin() Restituiscono il riferimento a un oggetto di tipo Integer che rappresenta, rispettivamente, il più grande e il più piccolo valore di tipo Integer presente nell elenco. Se l elenco non contiene alcun oggetto di tipo Integer entrambi i metodi restituiscono il riferimento null. - public double mediainteriminmax() Restituisce un valore di tipo double uguale alla media tra il più grande e il più piccolo valore di tipo Integer presenti nell elenco. Ad esempio, se il valore più grande è 10 e il più piccolo è 3, il metodo restituisce 6.5. 1. Scrivete l implementazione del metodo mediainteriminmax, senza conoscere l implementazione di ElencoNumeri, ma utilizzando gli altri metodi forniti dalla classe. In questa versione supponete che l elenco contenga sempre almeno un oggetto di tipo Integer. 2. Riscrivete quanto richiesto per l esercizio precedente in modo che nel caso l elenco non contenga alcun oggetto di tipo Integer il metodo mediainteriminmax sollevi una eccezione di tipo ArithmeticException (la classe ArithmeticException fornisce un costruttore che riceve come argomento una stringa).

3. La classe ElencoNumeri è implementata mediante un unico campo private Number[] numeri che si riferisce ad un array contenente i numeri presenti nell elenco. Scrivete l implementazione del metodo interomin. Ricordate che grazie al meccanismo di unboxing è possibile applicare gli operatori di confronto come < e > a riferimenti di tipo Integer (non Number!) per confrontare i valori degli oggetti associati. In alternativa, il confronto può essere effettuato utilizzando il metodo compareto (il metodo è fornito da Integer, non da Number!). Negli esercizi seguenti supponete di disporre anche di una classe concreta di nome Alfa, sottoclasse di Number, che possiede un unico costruttore. Il costruttore riceve un argomento di tipo String. Tra i metodi di Alfa vi è public int intvalue() che restituisce la lunghezza della stringa specificata al momento della creazione dell oggetto. Ad esempio, il metodo intvalue() di un oggetto costruito invocando new Alfa("pippo") restituisce 5. 4. Considerate le seguenti classi: public class Beta extends Alfa { private int y; private static int w = 3, z = 2; public Beta(String s, int t) { super(s); y = z; z = t; w = w + t; public int intvalue() { return super.intvalue() + y; class Prova { public static void main(string[] args) { System.out.println(Beta.getStatico()); //1 Alfa a = new Alfa("formica"); System.out.println(a.intValue()); //2 a = new Beta("cane", 6); System.out.println(a.intValue()); //3 System.out.println(Beta.getStatico()); //4 Scrivete in ogni riquadro l output prodotto dall istruzione di stampa seguita dal commento indicato: //1 //2 //3 //4 public static int getstatico() { return w + z;

5. Oltre alle classi degli esercizi precedenti, considerate una classe astratta Gamma che estende Number e una classe concreta Delta che estende Alfa e implementa un interfaccia In. a. Nel riquadro che precede ciascuna affermazione, scrivete V se l affermazione è vera, F se è falsa: Gamma deve fornire l implementazione dei metodi di In Gamma è il nome di un tipo riferimento Delta deve fornire l implementazione del metodo intvalue Gamma deve fornire l implementazione del metodo intvalue Object è un supertipo di Beta Ogni istanza della classe Delta contiene il campo w Se il codice sorgente della classe Delta non contiene un costruttore allora il compilatore segnala un errore Ogni oggetto della classe Beta contiene esattamente un campo (oltre quelli ereditati dalla superclasse) Delta deve fornire l implementazione dei metodi di In Ogni istanza di Beta contiene esattamente 3 campi (oltre a quelli ereditati dalla superclasse) b. Considerate le seguenti dichiarazioni di variabile: Number n, Alfa a, Beta b, Gamma g, Delta d, In i Nel riquadro accanto a ciascun assegnamento scrivete SI se l assegnamento è compilato correttamente, NO se non è compilato correttamente d = (In) g n = d a = (Beta) n g = d i = (Gamma) n g = (Beta) a b = n i = d n = b n = (Beta) a c. Nel riquadro che precede ciascuna affermazione, scrivete V se l affermazione è vera, F se è falsa: In Java una classe può essere definita estendendo direttamente più classi L overriding viene risolto dal compilatore In Java gli array sono oggetti Il programmatore in Java può definire nuovi tipi riferimento Se la variabile a del metodo main di Prova viene dichiarata di tipo Number, il compilatore segnala un errore Sostituendo super con this nel codice del metodo intvalue della classe Beta si avrà un errore in esecuzione Se il codice sorgente di una classe non contiene un costruttore privo di argomenti allora il compilatore lo aggiunge automaticamente Il linguaggio Java viene anche chiamato bytecode Gli oggetti sono memorizzati nello heap Sostituendo super con this nel codice del metodo intvalue della classe Beta si avrà un errore in compilazione I campi statici appartengono alle classi Se una classe contiene più costruttori, almeno uno di questi deve richiamare un costruttore della superclasse In una stessa classe è possibile definire più metodi con la stesso nome, ma segnatura differente In Java una variabile di tipo Object può memorizzare un riferimento a un oggetto qualsiasi Durante l esecuzione, nello stack si può avere frammentazione La lazy evaluation permette di eseguire in maniera più efficiente le operazioni aritmetiche tra numeri Le classi astratte sono prive di costruttori Il tipo Object di Java è primitivo Se la variabile a del metodo main di Prova viene dichiarata di tipo Beta, il compilatore segnala un errore Le eccezioni di tipo ArithmeticException sono controllate

6. Considerate la dichiarazione di variabile String[] nomi e il seguente frammento di codice: int x = 2; try { do x = nomi[x - 1].length() / x; while (true); catch (ArithmeticException e) { x = x + 19; catch (ArrayIndexOutOfBoundsException e) { x = x + 23; catch (NullPointerException e) { x = x + 12; Ricordate che: ArithmeticException viene sollevata in caso di anomalie nel calcolo di operazioni aritmetiche, ArrayIndexOutOfBoundsException viene sollevata quando si tenti di accedere a una posizione inesistente in un array, NullPointerException viene sollevata quando si tenti di accedere a un oggetto tramite un riferimento null, "" indica la stringa vuota. Per ognuno dei seguenti casi: se l esecuzione termina scrivete nel riquadro corrispondente il valore della variabile x dopo l esecuzione, se l esecuzione non termina scrivete nel riquadro il simbolo o la parola infinito. (a) L array riferito da nomi contiene (nell ordine indicato) riferimenti a oggetti che rappresentano le stringhe "formica", "ape", "". (b) nomi contiene null. (c) L array riferito da nomi contiene (nell ordine indicato) riferimenti a oggetti che rappresentano le stringhe "", "formica", "cane". (d) L array riferito da nomi contiene (nell ordine indicato) riferimenti a oggetti che rappresentano le stringhe "", "cane", "ape", "formica". 7. Considerate il seguente metodo ricorsivo. Scrivete il risultato restituito dalle chiamate indicate nei due riquadri:... int f(int x) { if (x % 2 == 1 f(x / 2) < 3) return x; else return x + 1; f(2) f(8)

Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi proposti si utilizzano le seguenti classi: Classe astratta Number: ogni oggetto della classe rappresenta un numero. La classe possiede un costruttore privo di argomenti. Nelle librerie standard alcune classi involucro (ad esempio Integer, Long, Float e Double) sono definite estendendo Number. Tra i metodi della classe Number vi è: - public abstract int intvalue() Classe ElencoNumeri: ogni oggetto della classe rappresenta un elenco di oggetti Number. Tra i metodi forniti dalla classe vi sono: - public Integer interomax() public Integer interomin() Restituiscono il riferimento a un oggetto di tipo Integer che rappresenta, rispettivamente, il più grande e il più piccolo valore di tipo Integer presente nell elenco. Se l elenco non contiene alcun oggetto di tipo Integer entrambi i metodi restituiscono il riferimento null. - public double mediainteriminmax() Restituisce un valore di tipo double uguale alla media tra il più grande e il più piccolo valore di tipo Integer presenti nell elenco. Ad esempio, se il valore più grande è 10 e il più piccolo è 3, il metodo restituisce 6.5. 1. Scrivete l implementazione del metodo mediainteriminmax, senza conoscere l implementazione di ElencoNumeri, ma utilizzando gli altri metodi forniti dalla classe. In questa versione supponete che l elenco contenga sempre almeno un oggetto di tipo Integer. 2. Riscrivete quanto richiesto per l esercizio precedente in modo che nel caso l elenco non contenga alcun oggetto di tipo Integer il metodo mediainteriminmax sollevi una eccezione di tipo ArithmeticException (la classe ArithmeticException fornisce un costruttore che riceve come argomento una stringa).

3. La classe ElencoNumeri è implementata mediante un unico campo private Number[] numeri che si riferisce ad un array contenente i numeri presenti nell elenco. Scrivete l implementazione del metodo interomin. Ricordate che grazie al meccanismo di unboxing è possibile applicare gli operatori di confronto come < e > a riferimenti di tipo Integer (non Number!) per confrontare i valori degli oggetti associati. In alternativa, il confronto può essere effettuato utilizzando il metodo compareto (il metodo è fornito da Integer, non da Number!). Negli esercizi seguenti supponete di disporre anche di una classe concreta di nome Alfa, sottoclasse di Number, che possiede un unico costruttore. Il costruttore riceve un argomento di tipo String. Tra i metodi di Alfa vi è public int intvalue() che restituisce la lunghezza della stringa specificata al momento della creazione dell oggetto. Ad esempio, il metodo intvalue() di un oggetto costruito invocando new Alfa("pippo") restituisce 5. 4. Considerate le seguenti classi: public class Beta extends Alfa { private int y; private static int w = 2, z = 6; public Beta(String s, int t) { super(s); y = z; z = t; w = w + t; public int intvalue() { return super.intvalue() + y; class Prova { public static void main(string[] args) { System.out.println(Beta.getStatico()); //1 Alfa a = new Alfa("balena"); System.out.println(a.intValue()); //2 a = new Beta("elefante", 7); System.out.println(a.intValue()); //3 System.out.println(Beta.getStatico()); //4 Scrivete in ogni riquadro l output prodotto dall istruzione di stampa seguita dal commento indicato: //1 //2 //3 //4 public static int getstatico() { return w + z;

5. Oltre alle classi degli esercizi precedenti, considerate una classe astratta Gamma che estende Number e una classe concreta Delta che estende Alfa e implementa un interfaccia In. a. Nel riquadro che precede ciascuna affermazione, scrivete V se l affermazione è vera, F se è falsa: Se il codice sorgente della classe Delta non contiene un costruttore allora il compilatore segnala un errore Ogni oggetto della classe Beta contiene esattamente un campo (oltre quelli ereditati dalla superclasse) Delta deve fornire l implementazione dei metodi di In Ogni istanza di Beta contiene esattamente 3 campi (oltre a quelli ereditati dalla superclasse) Gamma deve fornire l implementazione dei metodi di In Gamma è il nome di un tipo riferimento Delta deve fornire l implementazione del metodo intvalue Gamma deve fornire l implementazione del metodo intvalue Object è un supertipo di Beta Ogni istanza della classe Delta contiene il campo w b. Considerate le seguenti dichiarazioni di variabile: Number n, Alfa a, Beta b, Gamma g, Delta d, In i Nel riquadro accanto a ciascun assegnamento scrivete SI se l assegnamento è compilato correttamente, NO se non è compilato correttamente b = n i = d a = (Beta) n g = d i = (Gamma) n g = (Beta) a n = b n = (Beta) a d = (In) g n = d c. Nel riquadro che precede ciascuna affermazione, scrivete V se l affermazione è vera, F se è falsa: Se una classe contiene più costruttori, almeno uno di questi deve richiamare un costruttore della superclasse In una stessa classe è possibile definire più metodi con la stesso nome, ma segnatura differente In Java una variabile di tipo Object può memorizzare un riferimento a un oggetto qualsiasi Durante l esecuzione, nello stack si può avere frammentazione La lazy evaluation permette di eseguire in maniera più efficiente le operazioni aritmetiche tra numeri In Java una classe può essere definita estendendo direttamente più classi Se la variabile a del metodo main di Prova viene dichiarata di tipo Number, il compilatore segnala un errore Sostituendo super con this nel codice del metodo intvalue della classe Beta si avrà un errore in esecuzione Se il codice sorgente di una classe non contiene un costruttore privo di argomenti allora il compilatore lo aggiunge automaticamente Il linguaggio Java viene anche chiamato bytecode Gli oggetti sono memorizzati nello heap Sostituendo super con this nel codice del metodo intvalue della classe Beta si avrà un errore in compilazione I campi statici appartengono alle classi Le classi astratte sono prive di costruttori Il tipo Object di Java è primitivo Se la variabile a del metodo main di Prova viene dichiarata di tipo Beta, il compilatore segnala un errore Le eccezioni di tipo ArithmeticException sono controllate L overriding viene risolto dal compilatore In Java gli array sono oggetti Il programmatore in Java può definire nuovi tipi riferimento

6. Considerate la dichiarazione di variabile String[] nomi e il seguente frammento di codice: int x = 2; try { do x = nomi[x - 1].length() / x; while (true); catch (ArithmeticException e) { x = x + 27; catch (ArrayIndexOutOfBoundsException e) { x = x + 16; catch (NullPointerException e) { x = x + 13; Ricordate che: ArithmeticException viene sollevata in caso di anomalie nel calcolo di operazioni aritmetiche, ArrayIndexOutOfBoundsException viene sollevata quando si tenti di accedere a una posizione inesistente in un array, NullPointerException viene sollevata quando si tenti di accedere a un oggetto tramite un riferimento null, "" indica la stringa vuota. Per ognuno dei seguenti casi: se l esecuzione termina scrivete nel riquadro corrispondente il valore della variabile x dopo l esecuzione, se l esecuzione non termina scrivete nel riquadro il simbolo o la parola infinito. (a) L array riferito da nomi contiene (nell ordine indicato) riferimenti a oggetti che rappresentano le stringhe "formica", "ape", "". (b) nomi contiene null. (c) L array riferito da nomi contiene (nell ordine indicato) riferimenti a oggetti che rappresentano le stringhe "", "formica", "cane". (d) L array riferito da nomi contiene (nell ordine indicato) riferimenti a oggetti che rappresentano le stringhe "", "cane", "ape", "formica". 7. Considerate il seguente metodo ricorsivo. Scrivete il risultato restituito dalle chiamate indicate nei due riquadri:... int f(int x) { if (x % 2 == 1 f(x / 2) < 3) return x; else return x - 2; f(2) f(8)

Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi proposti si utilizzano le seguenti classi: Classe astratta Number: ogni oggetto della classe rappresenta un numero. La classe possiede un costruttore privo di argomenti. Nelle librerie standard alcune classi involucro (ad esempio Integer, Long, Float e Double) sono definite estendendo Number. Tra i metodi della classe Number vi è: - public abstract int intvalue() Classe ElencoNumeri: ogni oggetto della classe rappresenta un elenco di oggetti Number. Tra i metodi forniti dalla classe vi sono: - public Integer interomax() public Integer interomin() Restituiscono il riferimento a un oggetto di tipo Integer che rappresenta, rispettivamente, il più grande e il più piccolo valore di tipo Integer presente nell elenco. Se l elenco non contiene alcun oggetto di tipo Integer entrambi i metodi restituiscono il riferimento null. - public double mediainteriminmax() Restituisce un valore di tipo double uguale alla media tra il più grande e il più piccolo valore di tipo Integer presenti nell elenco. Ad esempio, se il valore più grande è 10 e il più piccolo è 3, il metodo restituisce 6.5. 1. Scrivete l implementazione del metodo mediainteriminmax, senza conoscere l implementazione di ElencoNumeri, ma utilizzando gli altri metodi forniti dalla classe. In questa versione supponete che l elenco contenga sempre almeno un oggetto di tipo Integer. 2. Riscrivete quanto richiesto per l esercizio precedente in modo che nel caso l elenco non contenga alcun oggetto di tipo Integer il metodo mediainteriminmax sollevi una eccezione di tipo ArithmeticException (la classe ArithmeticException fornisce un costruttore che riceve come argomento una stringa).

3. La classe ElencoNumeri è implementata mediante un unico campo private Number[] numeri che si riferisce ad un array contenente i numeri presenti nell elenco. Scrivete l implementazione del metodo interomin. Ricordate che grazie al meccanismo di unboxing è possibile applicare gli operatori di confronto come < e > a riferimenti di tipo Integer (non Number!) per confrontare i valori degli oggetti associati. In alternativa, il confronto può essere effettuato utilizzando il metodo compareto (il metodo è fornito da Integer, non da Number!). Negli esercizi seguenti supponete di disporre anche di una classe concreta di nome Alfa, sottoclasse di Number, che possiede un unico costruttore. Il costruttore riceve un argomento di tipo String. Tra i metodi di Alfa vi è public int intvalue() che restituisce la lunghezza della stringa specificata al momento della creazione dell oggetto. Ad esempio, il metodo intvalue() di un oggetto costruito invocando new Alfa("pippo") restituisce 5. 4. Considerate le seguenti classi: public class Beta extends Alfa { private int y; private static int w = 2, z = 7; public Beta(String s, int t) { super(s); y = z; z = t; w = w + t; public int intvalue() { return super.intvalue() + y; class Prova { public static void main(string[] args) { System.out.println(Beta.getStatico()); //1 Alfa a = new Alfa("elefante"); System.out.println(a.intValue()); //2 a = new Beta("balena", 4); System.out.println(a.intValue()); //3 System.out.println(Beta.getStatico()); //4 Scrivete in ogni riquadro l output prodotto dall istruzione di stampa seguita dal commento indicato: //1 //2 //3 //4 public static int getstatico() { return w + z;

5. Oltre alle classi degli esercizi precedenti, considerate una classe astratta Gamma che estende Number e una classe concreta Delta che estende Alfa e implementa un interfaccia In. a. Nel riquadro che precede ciascuna affermazione, scrivete V se l affermazione è vera, F se è falsa: Se il codice sorgente della classe Delta non contiene un costruttore allora il compilatore segnala un errore Object è un supertipo di Beta Ogni istanza della classe Delta contiene il campo w Gamma deve fornire l implementazione del metodo intvalue Ogni istanza di Beta contiene esattamente 3 campi (oltre a quelli ereditati dalla superclasse) Gamma è il nome di un tipo riferimento Delta deve fornire l implementazione del metodo intvalue Ogni oggetto della classe Beta contiene esattamente un campo (oltre quelli ereditati dalla superclasse) Delta deve fornire l implementazione dei metodi di In Gamma deve fornire l implementazione dei metodi di In b. Considerate le seguenti dichiarazioni di variabile: Number n, Alfa a, Beta b, Gamma g, Delta d, In i Nel riquadro accanto a ciascun assegnamento scrivete SI se l assegnamento è compilato correttamente, NO se non è compilato correttamente n = (Beta) a g = (Beta) a b = n i = d i = (Gamma) n n = b a = (Beta) n g = d d = (In) g n = d c. Nel riquadro che precede ciascuna affermazione, scrivete V se l affermazione è vera, F se è falsa: Il linguaggio Java viene anche chiamato bytecode Le classi astratte sono prive di costruttori Durante l esecuzione, nello stack si può avere frammentazione La lazy evaluation permette di eseguire in maniera più efficiente le operazioni aritmetiche tra numeri In Java una classe può essere definita estendendo direttamente più classi In Java gli array sono oggetti Il programmatore in Java può definire nuovi tipi riferimento Sostituendo super con this nel codice del metodo intvalue della classe Beta si avrà un errore in compilazione Se la variabile a del metodo main di Prova viene dichiarata di tipo Number, il compilatore segnala un errore Se una classe contiene più costruttori, almeno uno di questi deve richiamare un costruttore della superclasse Se la variabile a del metodo main di Prova viene dichiarata di tipo Beta, il compilatore segnala un errore Le eccezioni di tipo ArithmeticException sono controllate L overriding viene risolto dal compilatore In una stessa classe è possibile definire più metodi con la stesso nome, ma segnatura differente In Java una variabile di tipo Object può memorizzare un riferimento a un oggetto qualsiasi Sostituendo super con this nel codice del metodo intvalue della classe Beta si avrà un errore in esecuzione Il tipo Object di Java è primitivo Se il codice sorgente di una classe non contiene un costruttore privo di argomenti allora il compilatore lo aggiunge automaticamente Gli oggetti sono memorizzati nello heap I campi statici appartengono alle classi

6. Considerate la dichiarazione di variabile String[] nomi e il seguente frammento di codice: int x = 2; try { do x = nomi[x - 1].length() / x; while (true); catch (ArithmeticException e) { x = x + 31; catch (ArrayIndexOutOfBoundsException e) { x = x + 22; catch (NullPointerException e) { x = x + 16; Ricordate che: ArithmeticException viene sollevata in caso di anomalie nel calcolo di operazioni aritmetiche, ArrayIndexOutOfBoundsException viene sollevata quando si tenti di accedere a una posizione inesistente in un array, NullPointerException viene sollevata quando si tenti di accedere a un oggetto tramite un riferimento null, "" indica la stringa vuota. Per ognuno dei seguenti casi: se l esecuzione termina scrivete nel riquadro corrispondente il valore della variabile x dopo l esecuzione, se l esecuzione non termina scrivete nel riquadro il simbolo o la parola infinito. (a) nomi contiene null. (b) L array riferito da nomi contiene (nell ordine indicato) riferimenti a oggetti che rappresentano le stringhe "", "formica", "cane". (c) L array riferito da nomi contiene (nell ordine indicato) riferimenti a oggetti che rappresentano le stringhe "formica", "ape", "". (d) L array riferito da nomi contiene (nell ordine indicato) riferimenti a oggetti che rappresentano le stringhe "", "cane", "ape", "formica". 7. Considerate il seguente metodo ricorsivo. Scrivete il risultato restituito dalle chiamate indicate nei due riquadri:... int f(int x) { if (x % 2 == 1 f(x / 2) < 3) return x; else return x + 2; f(2) f(8)