Estratto del documento

Pro: flessibile

o Contro: si deve eseguire il codice prima di scoprire gli errori e resta il dubbio

o che ci siano errori non scoperti perchè non sono stati effettivamente eseguiti.

Strong – Type System:

- Strong : rende difficile che errori di tipo di verifichino. Effettua un controllo rigoroso,

garantendo maggiore sicurezza ed affidabilità. Può essere statico o dinamico.

- Weak : non viene effettuato il controllo ditipo, il comportamento è ambiguo e non

segnala errori se vengono eseguite operazioni errate. Il comportamento risulta più

flessibile e tollerante agli errori ma una scarsa garanzia sui tipi.

Enumerazione : definizione di un nuovo tipo di dato con una serie di elementi predefiniti e

limitati. Questo permette di eseguire un type checking (limita I valori accettabili) e rende il

programma più leggibile.

Dope Vector : contiene informazioni sui vettori che sono allocati non statisticamente. Info come

primo elemento del vettore, lunghezza e altro. È memorizzato nella pate fissa dell’RdA.

Inferenza di tipo : meccanismo che permette di derivarte ilò tipo di un’espressione complessa,

a partire dal tipo dei suoi elementi elementari.

Equivalenza Tra tipi : Determina se due variabili hanno lo stesso tipo. Allora ogni variabile di

tipo T è anche una variabile di tipo S e viceversa e i due tipi sono perfettamente intercambiabili.

- Per nome : la più rigida. Gli deve essere stato assegnato lo stesso identificatore di tipo

- Per nome LASCA : meno rigida

- Strutturale : Se un tipo T definito come type T = espressione allora T è equivalente ad

espressione.

Conversione di tipo:

- Coercizione : implicita, eseguita automaticamente dal compilatore

- Casting : esplicita, rendono il comportamento del programma più chiaro. È da preferirsi

alla coercizione.

Polimorfismo: Una espressione può avere tipi diversi a seconda del contesto. Dunque si rende

una certa espressione indipendente dal tipo:

- Ad hoc, overloading : stesso simbolo può avere significati diversi e quello corretto viene

dedotto dal contesto.

Overloading dei metodi (java) : Si hanno più definizioni dello stesso metodi con

o significato diverso. La scelta viene fatta in base al numero e tipo degli

artgomenti.

- Universale (parametrico) : lo stesso codice può funzionare su tipi diversi. Favorisce il

riuso del codice, rendendolo indipendente dal tipo. In Java questo è possibile tramite

l’utilizzo dei generics <T>.

- Usando il modello a riferimento posso creare codice generico.

- La funzione map in scheme è un altro esempio di polimorfismo.

- Polimorfismo di sottotipo. T sottotipo di S, in ogni contesto, che accetta un oggetto di

tipo S, posso inserire un oggetto di tipo T.

PRO: Favorisce il riuso del codice e lo rende generale. Sicuro, type checking efficiente

Ereditarietà singola : una classe può ereditare soltanto da una classe base

Ereditarietà multipla : la classe può avere più superclassi dirette

Contro : problema del diamante : se due classi B, C ereditano da una classe A e D eredita

da B e C, se D chiama un metodo di A, da quale classe viene ereditato ?

Incapsulamento: Implementazione dell’information Hiding. Una classe non espone la struttura

interna ma unicamente l’interfaccia che permette di accedere in modo controllato agli attributi

interni (getter/setter).

Pro :

- favorisce la manutenzione interna del codice. Infatti la struttura interna del codice può

cambiare, a patto che la sua interfaccia resti invariata.

- Protegge i dati sensibili, favorisce la manutenibilità e la riusabilità (agevolando lo

sviluppo di software complessi)

- Fondamentale l’utilizzo delle clausole Private, Public.

Canali : nella programmazione concorrente, sono dei controllori di dispositivi che consentono

l’esecuzione concorrente di operazioni di I/O.

Che tipo di dati vengono memorizzati nell’Heap? Dati che necessitano di essere allocati e

deallocati dinamicamente (free, malloc), come oggetti di classi oppure oggetti di dimenisione

variabile. In tal caso la struttura a pila non sarebbe idonea ad ospitare tali tipologie di valori.

Perchè nella gestione dello heap esiste un problema di frammentazione? Perchè deallocando i

blocchi di memoria si creano dei vuoti. Inoltre, quando vengono assegnati, la dimensione dei

blocchi è standard e non calza perfettamente con quella richiesta, lasciando dei frammenti

inutilizzati. Alcuni sistemi come Buddy System cercano di risolvere questo problema. In

generale si ha una riduzione dell’efficienza della memoria.

Nello scoping statico, come si determina il binding valido? Viene basato sulla struttura del

codice sorgente, il che rende il comportamento del programma più prevedibile. Per accedere a

variabili non locali sarà sufficiente seguire il link statico che mi porterà all’ambiente della

procedura padre (chiamante).

Cosa si intende per scoping statico ? è un metodo di risoluzione per accedere a variabili non

locali che viene determinato dalla struttura del sorgente.

Quali sono i vantaggi dello scoping statico rispetto a quello dinamico? È prevedibile e

comprensibile. La visibilità delle variabili è determinata dalla struttura del codice e non dipende

dal contesto di utilizzo (dinamico). Più facile scoprire errori.

Cosa distingue un linguaggio funzionale puro da uno che non lo è? Non ha uno stato e non

prevede degli effetti collaterali (Haskel). Inotre I dati sono immutabili, il che significa che una

volta creati, questi non possono essere modificati.

Che cos’è una race condition ? Si verificano quqndo più processi tentano di accedere

contemporaneamente ad una risorsa condivisa.

Descrivere brevemente la notazione polacca diretta : + a b = a + b

Come viene definita la notazione polacca inversa? a b + = a + b

Nella programmazione concorrente, cosa sono le porte ? sono meccanismi di comunicazione

che consentono ai processi di scambiarsi informazioni in modo sicuro e coordinato. Infatti le

porte facilitano la sincronizzazione.

Cosa si intende per memorizzazione per colonne di una matrice? È uno dei due modi di

memorizzare nella memoria principale una matrice. In questo caso la colonna viene

memorizzata consecutivamente in memoria. Presenta vantaggi in operazioni in cui si necessita

di accedere ai valori per colonne.

Cosa si intende per memorizzazione per righe di una matrice? È uno dei due modi per

memorizzare in memoria una matrice. Le righe vengono memorizzate consecutivamente in

memoria. Viene considerato più efficente (e più diffuso).

Elencare alcuni meccanismi di sincronizzazione nella programmazione concorrente : Barriere,

Semafori, Mutua Esclusione, Monitor.

Quali sono I vantaggi della valutazione Eagar rispetto alla Lazy? Debugging semplice (le

espressioni vengono valutate immediatamente, dunque non ci sono dubbi). Utilizzo della

memoria prevedibile. Prestazioni prevedibili. In generale, il comportamento è più prevedibile.

Quali sono i vantaggi della valutazione Lazy rispetto alla Eagar? La valutazione lazy evita

valutazioni e calcoli inutili, esegue solo le espressioni necessarie. Dunque ha maggiore

efficienza computazionale. Poi presenta una migliore gestione della memoria e miglioramento

delle performance in alcuni casi.

Che tipo di Linguaggi vengono riconosciuti dagli analizzatori lessicali? Riconosce un qualsiasi

linguaggio che segue una grammatica formale, quali linguaggi di programmazione e linguaggi

di espressioni regolari.

Perché un comando "case" può essere più efficiente rispetto ad una serie di comandi if then

else ? Perchè la struttura è ottimizzata per garantire un accesso diretto al blocco di codice

opportuno, senza dover valutare ogni singola espressione dell’if-else. Valutazione in tempo

costante.

Il codice inotre tende ad essere più leggibile, scalabile e manutenibile.

Cosa si intende per mutua esclusione? È una condizione che garantisce che non si possano

verificare race conditions, ovvero se un processo sta accedendo ad una risorsa, nessun’altro

processo potrà accedervi contemporanemamente.

Descrivere in quali situazioni si verifica un deadlock. Situazione in cui due o più processi

rimangono bloccati in attesa l’uno dell’altro, bloccandone l’esecuzione reciproca. Si verifica

quando un processo detiene una risorsa e attende una risorsa che detiene un’altro processo.

Che cos’è una macchina virtuale? è un software che emula un computer, fornendo

un’astrazione dell’HW e SW. All’interno dell’ambiente virtuale è possibile eseguire più sistemi

operativi contemporanemante, dando l’illusione ad ognuso di loro di essere gli unici in

esecuzione nel sistema.

Cosa si intende per Slicing di un array ? Selezione di parti continue di un array in modo

efficiente e flessibile.

Che cos’è un blocco protetto? Porzione di codice all’interno della quale può essere invocatoa

un’eccezione. Generalmente è identificata dalle clausole Try-Catch.

Elencare le differenze tra la programmazione funzionale e quella imperativa.

- Una prevede effetti collaterali, l’altra no

- Una utilizza cicli, l’altra ricorsione

- Una esegue comandi, l’altra valuta espressioni.

Che cos’è un linguaggio regolare ? è un insieme di stringhe definite su un alfabeto; deve poter

essere definito tramite espressione regolare e riconosciuto da un automa a stati finiti. Vengono

utilizzati nel Pattern Matching, validazione di input e nel parsing dei linguaggi di

programmazione.

Nella gestione dello scoping dinamico, cosa si intende per CRT (tabella centrale

dell’ambiente)? Tabella a cui associo ad ogni variabile una pila, contenente tutte le

dichiarazionie attive in quel momento (variabili).

Quali sono le principali caratteristiche della programmazione orientata agli oggetti ?

L’incapsulamento, il polimorfismo e la possibilità di definire nuovi tipi di dato mediante le

classi.

Che tipo di linguaggi vengono riconosciuti dagli analizzatori sintattici ? Linguaggi regolari

(riconosciuti da analizzatori lessicali) e Linguaggi liberi dal contesto.

Che cos’è la chiusura di Kleene? È un’operazione sui linguaggi, che permette la

concatenazione di 0 o più istanze della stringa selezionata. Si esprime con il simbolo *

Come si distingue una comunicazione sincrona da una asincrona? Nella c. sincrona, il mittente

attende un feedback di ricezione del messaggio dal destinatario prima di proseguire con la

computazione (bloccante). Nella c. asincrona il mittende prosegue la computazione

indipendentemente.

Cosa si intende per PRAGMATICA di un linguaggio di programmazione ? chiarisce a cosa

serve un certo costrutto co

Anteprima
Vedrai una selezione di 4 pagine su 12
Appunti Linguaggi di programmazione Pag. 1 Appunti Linguaggi di programmazione Pag. 2
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Appunti Linguaggi di programmazione Pag. 6
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Appunti Linguaggi di programmazione Pag. 11
1 su 12
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher davidenglaro di informazioni apprese con la frequenza delle lezioni di Linguaggi di programmazione e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Udine o del prof Di Gianantonio Pietro.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community