#1 Esistono linguaggi non tipati, se sì le sembra un’idea ragionevole, se no perchè? #2 che vantaggi ci sono per essere non tipato? #3 dal punto di vista dell’efficienza cambia qualcosa? #4 Il tipo void cos’è? #5 Differenza tra manifest e infert typing #6 Pro e contro di infert e manifest typing #7 La relazione che c’è tra sottotipaggio ed ereditarietà nell’orientamento ad oggetti #8 cosa ci permette di sapere il fatto che uno è sottotipo di un altro? #9 si vede che c’è una differenza pratica tra sottotipi e ‘sottoclassi’? Se non definisce una classe, cosa definisce? > un’interfaccia #10 Che differenza c’è tra array unidimensionali e multidimensionali? #11 il fatto di avere una row manage o una column manage cosa ci implica? #12 qual’è il pro di avere uno rispetto all’altro e perchè? #13 è vero dire che questi array non sono staticamente definiti? In che modo sono memorizzati? array dinamici #14 Il reference types #15 Il tipo più generico in java > objects #16 tutto quello che viene dopo è più specifico. Dunque quale può essere un’implementazione di reference types? #17 che differenza c’è tra maybe e option? #18 Quali sono i vantaggi e svantaggi del fatto che alcuni linguaggi permettono di avere interoperabilità tra gli array e i puntatori? [2] 1 #19 svantaggi e vantaggi dell’interoperabilità tra gli array e i puntatori, e fare un esempio #20 cosa significa che un puntatore diventa dangling? #21 se non avessimo l’interoperabilità e avessimo solo gli array, potremmo fare un controllo statico? Oppure si possono fare solo controlli dinamici? #22 si può dire in maniera statica il risultato di un’operazione? #23 Cos’è il garbage e il garbage collection? Quali sono i metodi di implementazione? [4] #24 cosa possiamo utilizzare per la detection e la collection? #25 è possibile avere dangling pointers con la garbage collection? #26 cosa vuol dire avere la garbage collection? Che ruolo ha con i dangling reference/dangling pointers? una vera alternativa? Quali sono i pro e i contro con gli altri? > reference count che limitazioni ha? #27 Quali sono le tecniche di protezione della memoria? qual è uno dei grandi problemi di queste tecniche? #28 Differenza tra tipaggio nominale e strutturale. [2] perchè scelgo uno o l’altro? sull’efficienza cosa si intende? riesce a fare un esempio? quali sono i pro e i contro? #29 Tipaggio statico e tipaggio dinamico, differenze ed esempi di linguaggi. #30 che tipo di linguaggio è JavaScript? #31 Cos’è un tipo prodotto e fare un esempio come struttura. #32 differenza tra record e array #33 cosa serve per essere un record? #34 se non avessimo la possibilità di dare dei campi cosa avremmo al posto dei record? > tuple #35 Polimorfismo, quali sono e le differenze. #36 come si chiama la differenza tra il nome del tipo di polimorfismo e il polimorfismo vero e proprio? > parametro specificato quando istanziamo un tipo specificato #37 questa direzione viene sempre mantenuta o cambia per l’utilizzo di A e B nei vari contesti? > covarianza-controvarianza #38 Cosa vuol dire dal punto di vista concettuale e pratico (del design) il poter avere diverse visibilità? > pubblica-privata Cosa tengo privato? Perchè?i #39 Quando un linguaggio è strongly typed e quando è weakly typed e perchè? [2] in C alcune cose si “rompono” anche se lo definiamo strongly typed, cosa accade? #40 Java è strongly typed? perchè? solo a livello statico o ci possono essere più parti? vedi tipaggio statico e dinamico #41 Cos’è un tipo somma? Cos’è un tipo prodotto? [2] – un esempio quale potrebbe essere? #42 Cos’è il duck typing e connessione con la structural typing? [2] – è riferito a qualcosa di specifico? – con le strutture invece? – dal punto di vista di espressibilità qual è la loro differenza? – il tipaggio strutturale è più o meno specifico? – a livello di espressività del linguaggio cosa cambia? > static typing – pro e contro > espressività maggiore => rischi > > dinamico vs statico #43 Differenza tra la definizione intensionale ed estensionale nella definizione dei tipi #44 un esempio tipico di tipo estensionale > enumerators – che differenza hanno gli int dagli enum? #45 Differenza tra void e unit? > unit rappresenta un insieme singoletto, restituendo un valore unico; mentre void rappresenta un insieme vuoto non restituendo nulla. #46 ! Differenza tra sistemi basati su classi e sistemi basati su prototipi – dal punto di vista delle garanzie cosa possiamo dare nel caso di uno e nel caso dell’altro? #47 guardando a strongly typed e weakly typed, qual è la relazione? #48 quando un linguaggio è weakly typed? #49 un esempio di duck typing dove si riesce a spaccare le garanzie dei tipi del sistema come in C, con strongly typed. ∗ Java è strongly typed, però… ∗ qualcosa è da fare comunque in dinamico, si può fare comunque con strongly typed? > si può scollegare . . . #50 ! Cosa vuol dire scope statico e dinamico, a cosa ci riferiamo? – come avviene il binding? #51 ! Quali sono i principali valori fondanti dell’object orientation? – per avere un’implementazione quale polimorfismo è il più adatto? 3 #52 Differenza tra typed casting e type coertion [3] – un esempio – perchè non possiamo utilizzare questi costrutti all’interno del polimorfismo generale in Java? #53 Cosa sono le eccezioni? A cosa servono? – se mettiamo throw e mettiamo la gestione interna? – come possiamo definire le nostre eccezioni, come si integrano in Java? #54 Differenza tra polimorfismo ad hoc e dynamic dispatch, cosa sono? – cosa significa “overloading”? #55 dal punto di vista dell’implementazione, come differenziamo i due codici tra polimorfismo ad hoc e dynamic dispatch? con che metodo si possono implementare? #56 Differenza tra abstract data types e oggetti dal punto di vista implementativo? #57 posso farli convivere nello stesso codice? perchè? > no perchè gli abstract data types impongono l’implementazione scelta all’inizio, invece gli oggetti possono essere sovrascritti ereditati etc … #58 Differenza tra ereditarietà singola ed ereditarietà multipla – Alcuni metodi per risolvere le #59 Come i tipi possono aiutare la programmazione? #60 Cos’è il doc vector e qual è il suo utilizzo? – dove viene allocato il suo contenuto? • Se le funzioni nei linguaggi fossero come le funzioni matematiche, come potremmo ottimizzarne la loro esecuzione? – come si scriverebbe? – un esempio > var globale lo chiamo una volta la incremento, la ritorno etc … – che ottimizzazioni possiamo fare con le funzioni matematiche? > di memoria: una tabella, per salvare i valori e lo riporto. #61 Gestione degli errori nelle varie modalità (result types) e altre modalità #62 cosa abbiamo dal punto di vista pratico con il result type? #63 un’altra possibilità che possiamo chiedere al chiamante di darci per capire meglio cos’è? > il tipo result #64 Cosa sono i dangling pointers e le dangling reference? #65 quando abbiamo i wide pointers/referenc