



























Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Tutte prove vecchie di programmazione avanzata.
Tipologia: Prove d'esame
1 / 35
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




























In offerta
Rispondere alle domande nello spazio disponibile. Se questo non fosse sufficiente continuare nel retro della pagina.
Nome e Cognome:
Matricola:
Parola Chiave:
1 1. Consideriamo la seguente porzione di codice F#:
let x = 1 let y = 1. let z = x+y
Selezionare la risposta corretta: © Il codice e sintatticamente errato © Il codicee sintatticamente corretto ma produce un errore di tipo © Il codice e sintatticamente corretto e non produce alcun errore di tipo (a) Quale tipo verra assegnato alla variabile x?
(b) Quale tipo verr`a assegnato alla variabile y?
(c) Quale tipo verr`a assegnato alla variabile z?
Programmazione Avanzata 12 Giugno 2018 (Pag. 2/8)
2 2. Consideriamo la dichiarazione delle seguenti classi Java:
c l a s s ClasseA {
p u b l i c v o i d m1( ) { System. out. p r i n t l n ( ” ClasseA−>m1 ( ) ” ) ; m2 ( ) ; }
p u b l i c v o i d m2( ) { System. out. p r i n t l n ( ” ClasseA−>m2 ( ) ” ) ; }
}
c l a s s ClasseB e x t e n d s ClasseA {
p u b l i c v o i d m2( ) { System. out. p r i n t l n ( ” ClasseB−>m2 ( ) ” ) ; }
}
Consideriamo, inoltre, la seguente porzione di codice: ClasseA c = new ClasseB ( ) ; c. m1 ( ) ;
Quale `e il risultato della sua esecuzione? © Viene stampato a video: ClasseA−>m1( ) ClasseB−>m2( )
© Viene stampato a video: ClasseA−>m1( ) ClasseA−>m1( )
© Il codice non viene eseguito a seguito di un errore di tipo. Motivare la risposta:
Programmazione Avanzata 12 Giugno 2018 (Pag. 7/8)
3 5. Consideriamo la seguente porzione di codice:
p r i v a t e s t a t i c b o o l e a n done = f a l s e ;
...
Runnable h e l l o s = ( ) −> { f o r ( i n t i =0 ; i < 1000 ; i++ ) { System. out. p r i n t l n ( ” H e l l o ”+ i ) ; } done = t r u e ; } ; Runnable goodbyes = ( ) −> { i n t i =0; w h i l e (! done ) { i ++; } System. out. p r i n t l n ( ” Goodbye ”+ i ) ; } ;
E x e c u t o r S e r v i c e e x e c u t o r = E x e c u t o r s. newCachedThreadPool ( ) ; e x e c u t o r. e x e c u t e ( h e l l o s ) ; e x e c u t o r. e x e c u t e ( goodbyes ) ;
Quale comportamento osserveremo eseguendola su una architettura multicore?
Come possiamo modificare il codice per garantire il corretto funzionamento?
Rispondere alle domande nello spazio disponibile. Se questo non fosse sufficiente continuare nel retro della pagina.
Nome e Cognome:
Matricola:
Parola Chiave:
1 1. Consideriamo la seguente porzione di codice F#:
let f x y z = if (x=y) then
else z
Quale tipo verra assegnato dal compilatore alla funzione f? © Nessun tipo perch´e il programmae sintatticamente errato. © Nessun tipo perch´e c`e un errore di tipo. © Viene associato il tipo: val f: x:float -> y:float -> z:float -Z float © Viene associato il tipo: val f : x:’a -> y:’a -> z:float -> float when ’a : equality
Motivare la risposta:
Rispondere alle domande nello spazio disponibile. Se questo non fosse sufficiente continuare nel retro della pagina.
Nome e Cognome:
Matricola:
Parola Chiave:
2 1. Consideriamo la seguente porzione di codice F#:
type DataStructure = EMPTY | Data of int*DataStructure
let rec myFunction f d = match d with EMPTY -> 0 | Data(v,next) -> f v (myFunction f next)
Quale tipo verr`a assegnato dal compilatore alla funzione myFunction? (Motivare la risposta)
Consideriamo ora la seguente espressione:
myFunction (fun x y -> x+y) (Data(1,Data(2,Data(3,Data(4,EMPTY)))))
Quale sar`a il risultato della sua valutazione? (Motivare la risposta)
Programmazione Avanzata 10 Luglio 2018 (Pag. 3/8)
2 2. Consideriamo la dichiarazione delle seguenti classi Java:
c l a s s ClasseA {
p r i v a t e f i n a l a F i e l d ;
p u b l i c ClasseA ( i n t aValue ) { t h i s. a F i e l d = aValue ; }
p u b l i c i n t g e t F i e l d ( ) { r e t u r n a F i e l d ; }
}
c l a s s ClasseB e x t e n d s ClasseA {
p u b l i c i n t g e t F i e l d ( ) { r e t u r n 1+s u p e r. g e t F i e l d ( ) ; }
}
La compilazione di questo codice generer`a degli errori per la mancanza di un costruttore nella classe ClasseB. Descrivere il tipo di errore e la modifica da apportare alla classe ClasseB per rimuoverlo.
2 3. Descrivere il ruolo dei metodi equals, toString e hashcode definiti nella classe Object ed il loro contratto d’uso.
3 4. In Java i generics consentono di parametrizzare una classe rispetto ad un dato tipo T. (a) Che differenza c’`e tra un parametro di tipo List
(b) Quale garanzie abbiamo su una variabile dichiarata List<? extends ClassA>? (Dove ClassA `e una classe definita nell nostra applicazione)
(c) Come possiamo usare, invece, un oggetto del tipo Function<? super ClassA,Integer>?
2 5. Descrivere il funzionamento della classi Callable
Programmazione Avanzata 24 Luglio 2018 (Pag. 4/8)
1 3. Consideriamo la dichiarazione delle seguenti classi Java:
c l a s s ClasseA {
p r i v a t e v o i d m1( i n t x ) { System. out. p r i n t l n ( ” ClasseA−>m1( i n t ) ” ) ; }
p u b l i c v o i d m1( f l o a t x ) { System. out. p r i n t l n ( ” ClasseA−>m1( f l o a t ) ” ) ; }
}
c l a s s ClasseB e x t e n d s ClasseA {
p u b l i c v o i d m1( i n t x ) { System. out. p r i n t l n ( ” ClasseB−>m1( i n t ) ” ) ; }
p u b l i c v o i d m1( double x ) { System. out. p r i n t l n ( ” ClasseB−>m1( double ) ” ) ; }
}
Quali dei metodi sono sovraccaricati e quali sono sovrascritti nelle classi ClasseA e ClasseB:
1 4. Definire il concetto di signature di un metodo:
1 5. Consideriamo la seguente class Java: c l a s s ClasseA {
p u b l i c v o i d m1( L i s t l i s t ) { System. out. p r i n t l n ( ”A l i s t o f I n t e g e r s! ” ) ; }
p u b l i c v o i d m1( L i s t
Identificare eventuali problemi riscontrati a tempo di compilazione:
Rispondere alle domande nello spazio disponibile. Se questo non fosse sufficiente continuare nel retro della pagina.
Nome e Cognome:
Matricola:
Parola Chiave:
2 1. Consideriamo la seguente porzione di codice F#:
let x = 1. let y = 2 let z = x+y
Selezionare la risposta corretta: © Il codice e sintatticamente errato © Il codicee sintatticamente corretto ma produce un errore di tipo © Il codice e sintatticamente corretto e non produce alcun errore di tipo (a) Quale tipo verra assegnato alla variabile x?
(b) Quale tipo verr`a assegnato alla variabile y?
(c) Quale tipo verr`a assegnato alla variabile z?
Rispondere alle domande nello spazio disponibile. Se questo non fosse sufficiente continuare nel retro della pagina.
Nome e Cognome:
Matricola:
Parola Chiave:
1 1. Quale tipo verr`a assegnato alla seguente espressione F#:
let myFunction f g a = if (f a) then 0 else (g a)
© val myFunction : f:bool -> g:int -> a:’a -> int © val myFunction : f:(’a -> bool) -> g:(’a -> int) -> a:’a -> int © Nessun tipo perch´e viene generato un errore. Motivare la risposta:
Programmazione Avanzata 27 Settembre 2018 (Pag. 2/10)
2 2. Consideriamo la seguenti definizioni in Java:
p u b l i c i n t e r f a c e I n t e r f a c e 1 {
d e f a u l t v o i d m1( ) { System. out. p r i n t l n ( ” I am a method o f I n t e r f a c e 1! ” ) ; } }
p u b l i c i n t e r f a c e I n t e r f a c e 2 { d e f a u l t v o i d m1( ) { System. out. p r i n t l n ( ” I am a method o f I n t e r f a c e 2! ” ) ; } } p u b l i c ClassA implements I n t e r f a c e 1 , I n t e r f a c e 2 {
}
Descrivere il ruolo del modificatore default nella definizione di Interface1 e Interface2. Identificare, inoltre, eventuali problemi riscontrati a tempo di compilazione e come questi possono essere risolti : 1 3. Descrivere le interfacce funzionali e come queste possano essere usate con le lambda expression fornendo un semplice esempio d’uso.
2 4. Descrivere le differenze tra i costrutti notify e notifyAll evidenziando quando e piu conveniente usare uno o l’altro. 3 5. Consideriamo le seguenti dichiarazioni parametriche: L i s t
L i s t <? e x t e n d s Number> l i s t T h r e e
L i s t <? s u p e r I n t e g e r > l i s t F o u r
Quale tipologia di oggetto pu`o essere salvato/recuperato in ognuna di queste liste? Considerando le dichiarazioni alla pagina precedente. Descrivere, per ognuno dei seguenti casi, la correttezza di tipo dei seguenti comandi:
(a) l i s t O n e. add ( 1 0 ) ;
(b) l i s t T w o. add ( 1 0 ) ; (c) Object o = l i s t T w o. g e t ( 0 ) ; (d) l i s t T h r e e. add ( 0 ) ; (e) Number n = l i s t T h r e e. g e t ( 0 ) ; (f) l i s t F o u r. add ( 1 0 ) ; (g) Number n = l i s t F o u r. g e t ( 0 ) ;
1 1. Quale tipo verr`a assegnato alla seguente espressione F#:
let myFunction f a = if (a==0) then 0 else (f (a+1) (a-1))
© val myFunction : f:int -> -> a:int -> int © val myFunction : f:(int -> int -> int) -> a:int -> int © Nessun tipo perch´e viene generato un errore. Motivare la risposta:
Consideriamo la dichiarazione delle seguenti classi Java: c l a s s ClasseA {
p u b l i c v o i d m1( i n t x ) { System. out. p r i n t l n (” ClasseA−>m1( i n t ) ” ) ; }
p u b l i c v o i d m1( f l o a t x ) { System. out. p r i n t l n (” ClasseA−>m1( f l o a t ) ” ) ; } } c l a s s ClasseB e x t e n d s ClasseA {
p u b l i c v o i d m1( i n t x ) { System. out. p r i n t l n (” ClasseB−>m1( i n t ) ” ) ; }
p u b l i c v o i d m1( double x ) { System. out. p r i n t l n (” ClasseB−>m1( doub le ) ” ) ; } }
Quali dei metodi sono sovraccaricati e quali sono sovrascritti nelle classi ClasseA e ClasseB? 2 2. Definire il concetto di signature di un metodo ed il ruolo giocato nel overloading e nel overriding:
1 3. Descrivere le interfacce funzionali e come queste possano essere usate con le lambda expression fornendo un semplice esempio d’uso.
2 4. I costrutti notify e notifyAll consentono di risvegliare thread in attesa. Descrivere mediante un semplice esempio di codice quando i due costrutti possono essere considerati equivalenti e quando, invece, portano a risultati diversi.
Programmazione Avanzata 5 Febbraio 2019 (Pag. 6/9)
2 5. Consideriamo le seguenti dichiarazioni parametriche:
L i s t
L i s t <?> l i s t T w o
L i s t <? e x t e n d s Number> l i s t T h r e e
L i s t <? s u p e r I n t e g e r > l i s t F o u r
Quale tipologia di oggetto pu`o essere salvato/recuperato in ognuna di queste liste?
Considerando le dichiarazioni alla pagina precedente. Descrivere, per ognuno dei seguenti casi, la correttezza di tipo dei seguenti comandi:
(a) l i s t O n e. add ( 1 0 ) ; (b) l i s t T w o. add ( 1 0 ) ; (c) Object o = l i s t T w o. g e t ( 0 ) ;
(d) l i s t T h r e e. add ( 0 ) ;
(e) Number n = l i s t T h r e e. g e t ( 0 ) ; (f) l i s t F o u r. add ( 1 0 ) ;
(g) Number n = l i s t F o u r. g e t ( 0 ) ; 2 6. Descrivere il ruolo del modificatore volatile e mostrare un semplice esempio di uso per il coordinamento delle attivit`a dei thread.
Programmazione Avanzata 26 Febbraio 2019 (Pag. 4/8)
2 3. Date le definizioni di ClasseA e ClasseB dell’esercizio precedente. Consideriamo ora le seguenti definizioni: c l a s s ClasseC { p u b l i c v o i d m( ClasseA a ) { System. out. p r i n t l n ( ” ClasseC−>m( ) ” ) ; } }
c l a s s ClasseD e x t e n d s ClasseC { p u b l i c v o i d m( ClasseB a ) { System. out. p r i n t l n ( ” ClasseD−>m( ) ” ) ; } }
Consideriamo inoltre la seguente porzione di codice: ClasseA c = new ClasseB ( ) ; ClasseC d = new ClasseD ( ) ; d .m( c ) ;
Quale `e il risultato della sua esecuzione? © Viene stampato a video: ClasseC−>m( )
© Viene stampato a video: ClasseD−>m( )
© Il codice non viene eseguito a seguito di un errore di tipo. Eseguendo, invece, la seguente porzione di codice: ClasseB c = new ClasseB ( ) ; ClasseD d = new ClasseD ( ) ; d .m( c ) ;
Quale risultato si otterr`a? © Viene stampato a video: ClasseC−>m( )
© Viene stampato a video: ClasseD−>m( )
© Il codice non viene eseguito a seguito di un errore di tipo. Motivare la risposta:
Descrivere il ruolo dei metodi equals, toString e hashcode definiti nella classe Object ed il loro contratto d’uso.
1 4. Descrivere il ruolo dei metodi equals, toString e hashcode definiti nella classe Object ed il loro contratto d’uso.
Programmazione Avanzata 26 Febbraio 2019 (Pag. 7/8)
2 5. In Java i generics consentono di parametrizzare una classe rispetto ad un dato tipo T.
(a) Che differenza c’`e tra un parametro di tipo List
(b) Quale garanzie abbiamo su una variabile dichiarata List<? extends ClassA>? (Dove ClassA `e una classe definita nell nostra applicazione)
(c) Come possiamo usare, invece, un oggetto del tipo Function<? super ClassA,Integer>?
2 6. Consideriamo la seguente classe Java che implementa le primitive test-and-set di una variabile condivisa: p u b l i c c l a s s S h a r e d V a r i a b l e
p r i v a t e T v a l u e ;
p u b l i c S h a r e d V a r i a b l e ( T i n i t ) { t h i s. v a l u e = i n i t ; }
p u b l i c s y n c h r o n i z e d v o i d testAndSet ( P r e d i c a t e <? s u p e r T> p , T v a l u e ) throws I n t e r r u p t e d E x c e p t i o n { w h i l e (! p. t e s t ( t h i s. v a l u e ) ) { t h i s. wait ( ) ; } t h i s. v a l u e = v a l u e ; t h i s. n o t i f y A l l ( ) ; //<−−− ( 1 ) }
}
Sarebbe possibile sostituire l’istruzione (1) this. notifyAll (); con this. notify ();? Potreb- bero insorgere problemi?