The forum of the Computer Science students of the University of Pisa

Domande Orale Gadducci

Domande 2017

Ciao a tutti!

Volevo sapere se qualcuno saprebbe dirmi quali sono le domande piu' frequenti che fa Gadducci all'orale per Programmazione 2?

bongi23
Dipende dal voto con cui arrivi e dagli errorei fatti, comunque sia ti faccio un elenco di quelle che ho sentito personalmente e di quelle che mi ha fatto:

- Principio di Sostituzione
- Regola dei metodi: cosa succede se dall && dell' implicazione togliamo post_sub
- Ha senso applicare il principio di sostituzione in OCaml? Motivare la risposta
- Retention con codice d' esempio
- Perchè non si può sempre scrivere l' IR?
- Perchè non va tanto bene utilizzare la RepOK per dimostrare la correttezza di un implementazione?
- Class loading e run-time stack
- Semantica operazionale: cosa è e perchè la usiamo
- Perchè è più semplice fare un interprete in OCaml che in Java ( e da qui torna sulla semantica)

Per ora non mi viene in mente altro, quando è particolarmente ispirato chiede qualcosa sulle MdT e sulla complessità degli algoritmi

Andrea Tosti
- Funzione di astrazione nel caso in cui vengano implementate piu' interfacce
- Logica 1° ordine e altro su LPP
- Post e Pre nella specifica
- Regola dei metodi in java
- Ambiente in OCaml tramite funzione
- Valori denotabili, esprimibili, memorizzabili
- Differenze tra imperativo e funzionale
- Meglio OCaml o C come flessibilità
- Esempio di una funzione non esprimibile né in C né in OCaml (Equazione di Pi.Greco)
- Bytecode, retrocompatibilità con JAVA 5 e precedenti
- Covarianza e Controvarianza
- Principio di sostituzione
- Cosa ci va nei record di attivazione
- Record di attivazione con le funzioni ricorsive
- Passaggio di parametri (nome, valore, riferimento). Che tipo di passaggio si ha in OCaml?
- (progetto) è meglio distinguere tra momento della dichiarazione e momento dell'applicazione, separatamente e non contemporaneamente (Affermazione di Gadducci)
- Compilazione vs Interpretazione, bytecode in java
- Compilazione vs interpretazione in C
- Domande sulle gerarchie in Java
- Come si potrebbe implementare l'ambiente su OCaml senza usare funzioni? Un esempio piu' complesso del semplice utilizzo di liste
- Varie domande su progetto ocaml/java, commenti su questo.
- Cos'è il Parsing (Parser)


GaspareFerraro
L'orale inizia con una breve analisi dei progetti, rilegge i suoi appunti e chiede dubbi sull'implementazione.
Eventualmente commenti sul compito.

Altre domande fatte oggi:

- Come espressività è più potente C oppure OCaml? (nessuno, sono entrambi T-equivalenti).
- Cosa posso fare con la logica di Hoare che non si può fare i ocaml o altri linguaggi?
- Ereditarietà multipla in java, come si fa?
- Come diventa la regola dei metodi nel caso di interfacce multiple (sia post che sub)?
- Esempio di valore esprimibile ma non denotabile in C ma non in Ocaml.
- Sottotipi con i generici. ( Pippo<A> e Pippo<B> con B<A / A<Pippo> e B<Pippo> con B<A )
- Regola dei metodi con i generici, cosa comporta?

Durata non più di 20-30minuti tra progetti/scritti e domande orali.

chiaracaglieri
Domande orale 20 febbraio 2017

- tipi denotabili/ esprimibili/ memorizzabili
- Relazione fra tipi memorizzabili/ denotabili e compilatore/interprete
- Memoria
- Varie domande su progetto / compiti

Fondamentalmente non fa domande che non siano collegate allo scritto o ai progetti. Partivo da 22 e mi ha messo 24. L'orale è durato circa 20/30 minuti di cui una buona parte di "discussione" del progetto.

Noki
Domande 21/02/2017

Domande derivate dal progetto:
- Come definire un arco di grafo tramite coppie ordinate / tramite notazione sull'insieme delle parti
- Implementando un grafo non orientato cosa cambia implementando l'arco in liste di adiacenza due volte (uno per nodo in cui è incidente) oppure una sola volta
- Rappresentare un grafo con liste di adiacenza / Altri set
- Cosa cambia nell'implementare una chiusura per Manytimes (vedi progetto ocaml) oppure ricondurla ad una pipe esplosa

Domande di teoria:
- Perchè la funzione di astrazione è fondamentale
- Regola dei metodi e perchè è necessaria la prima parte nella implicazione sulla postcondizione (la parte in and sulla precondizione)
- Nella regola dei metodi dove compare implicaamente la funzione di astrazione
- Nella programmazione difensiva dove troviamo la precodizione
- Nella programmazione difensiva a cosa si riduce la verifica della regola dei metodi

G_e_m_m_a
Mio orale 22/02/2017
Per prima cosa abbiamo guardato il progetto e mi he chiesto alcune scelte implementative, poi abbiamo guardato il compito e poi è iniziato il vero e proprio orale sui contenuti:
*domanda 1: parlami dei Java Generics. Gli ho risposto e sono finita sull'invarianza di Java per cose del tipo Grap<E> e Graph<subE> e della covarianza di super<E> sub<E>. Domanda inerente: come mai? Risposta data da lui: perchè nel bytecode di Java si perde l'informazione su quello che sta tra parentesi uncinate, quindi sarebbe un problema trovare i metodi
*domanda 2: dimmi la regola dei metodi del principio di sostituzione
*domanda 3: si può parlare di sottotipi e principi di sostituzione in Ocaml? Risposta data da lui: sì (ma io non mi ricordo come mai)
*domanda 4: che cosa non può rappresentare repOK? Risposta: le classi che modellano insiemi non numerabili (con quelli numerabili ci si salva con una sorta di induzione) ed i numeri irrazionali

Fabio Catinella
Orale del 27/02/17
Oltre alla classica discussione dei progetti, Gadducci mi ha chiesto:
- Retention
- Descrizione dei record di attivazione
- Funzione di astrazione e elemento tipico
- Passaggio per nome, valore, riferimento

Durata 20 minuti circa

Andrea Tosti
Mio orale 27 febbraio 2017, durato 40 minuti:

è partito col vedere i progetti, quindi alcune domande sulle scelte fatte e su come potevano essere migliorate.
Ha chiesto che tipo di relazione c'è tra il generico E e il tipo Node, la risposta è che Node è sottotipo di E, non l'ho specificato in nessuna parte del codice, ma comunque il compilatore lo sa.
Dopo aver discusso a fondo sui progetti, è passato a vedere entrambi gli scritti: su quello Java, avendo tralasciato tutta la seconda parte (FakeNews del secondo appello), mi viene chiesto di farla sul momento e quindi di dire se FakeNews fosse sottotipo (la risposta è no).
Mi viene chiesto cos'è la funzione di astrazione, la regola dei metodi (in modo formale, quindi PreSuper => PreSub, etc), di parlare dei Generics, i sottotipi con i generici (ad esempio per array primitivi o array definiti con Vector), il Typical element.

Domande 2018

Giacomo Mariani
Orale dei compitini del 12 gennaio 2018. Quasi tutte le domande sono venute fuori osservando i progetti. Mi ha chiesto:
- Type Erasure e Java Generics
- Come avrei implementato l'iteratore del primo progetto se ci fosse stata la remove
- Vulnerabilità del progetto agli errori di tipo (es. nella Select non è garantito che la funzione applicata al nodo restituisca un booleano)
- Parlare dei tipi parametrici di OCaml (io sono partito da un parallelismo coi Java Generics)
- Fare un esempio di una funzione che senza i tipi parametrici non avrebbe un tipo definito (La più semplice è let f x = x)
- Mi ha chiesto quali sono i costrutti OCaml che sono "semanticamente uguali ma sintatticamente diversi" (in pratica erano le funzioni che prendono una coppia vs. quelle "curryzzate")

michelezoncheddu
Orale del 18/01/18
- Regola dei metodi, e perché nella regola della post dev'essere vera anche la pre del super?
- Si potrebbe creare un compilatore che verifica pre e post?
- Inferire il tipo di due funzioni, perché ho sbagliato un'inferenza nel compito.
- Tipi generici in OCaml e gerarchie di tipi, tralasciando la parte ad oggetti del linguaggio (i generici sono un sottotipo di qualsiasi tipo, una specie di tipo bottom).
- Differenza tra funzioni totali con coppie, triple ecc. di parametri e currying (all'atto pratico non c'è nessuna differenza).

Non è stata fatta nessuna domanda sui progetti, dato che a suo dire erano chiari e corretti.
Partendo da una media di 27 con i compitini, il voto finale è 28.

Dal gruppo telegram
1) comportamente dei generici in Ocaml
2) varie inferenze ed esempi di funzioni parziali
3) retention, con codice di esempio
4) generici in java e retrocompatibilità del bytecode da java5
5) remove per l'iteratore
6) ereditarietà in Java e C++
7) differenza tra scoping statico e dinamico. Tra tipo statico e dinamico

Gadducci ha fatto domande su: regola dei metodi, perché nella regola della post dev'essere vera anche la pre del super, se si potrebbe creare un compilatore che verifica pre e post (ma non tutte le formule del prim'ordine sono verificabili), tipi generici in ocaml (sono un sottotipo di qualsiasi tipo, una specie di tipo bottom), una domanda sul compito, nessuna domanda sul progetto, non aveva nulla da correggere
Anche se un poco tardi:

Visione del progetto con domande relative a punti dell'implementazione.
-che significa fortemente tipato? Lo è ocaml? (si)
- resterebbe fortemente tipato senza generici? Esempio di funzione che dimostri che no.
- generici in java. Se ho A<B come si comporta in java A<C> < B<C>? Si mantiene A<B e
invece C<A> < C<B>? Si perde la relazione perchè nel bytecode si perde l'informazione dentro le parentesi angolate dei generici.