Nomi e Ambiente. Nicola Fanizzi. Linguaggi di Programmazione [010194] 20 apr, Dipartimento di Informatica Università degli Studi di Bari

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Nomi e Ambiente. Nicola Fanizzi. Linguaggi di Programmazione [010194] 20 apr, 2016. Dipartimento di Informatica Università degli Studi di Bari"

Transcript

1 Nomi e Ambiente Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 20 apr, 2016

2 Sommario 1 Nomi Definizione Astrazione Elementare Progettazione dei nomi Binding 2 Ambiente Introduzione Blocco Operazioni 3 Scope Regole di scope Scope statico Scope dinamico 4 Esercizi Nomi e Ambiente 20 apr, / 58

3 Agenda 1 Nomi Definizione Astrazione Elementare Progettazione dei nomi Binding 2 Ambiente 3 Scope 4 Esercizi Nomi e Ambiente 20 apr, / 58

4 Nomi Nome: sequenza di caratteri usata per denotare una componente del programma oggetti (in senso generale) identificatori: token alfanumerici simboli di operatori (primitivi): +, -,... Esempi var area: real; float area; dichiarazioni di nomi di variabili (PASCAL, C) calcolaarea(b,h: real): real; float calcolaarea(float b, float h); dichiarazioni nomi di funzione (PASCAL, C) Nomi e Ambiente 20 apr, / 58

5 Nomi [... cont.] Osservazione nome oggetto denotato stesso oggetto con molti nomi stesso nome per più oggetti è possibile riutilizzare gli stessi nomi in parti diverse del programma per componenti diverse gli alias Nomi e Ambiente 20 apr, / 58

6 Astrazione Elementare Astrazione sui dati es. usare il nome di una variabile permette di astrarre dalla locazione di memoria, indirizzo, ecc. area := (b * h) / 2 ambiente: implementazione del meccanismo che determina l associazione nome locazione Astrazione sul controllo un nome associato ad un insieme di comandi regole per determinare visibilità e utilizzo del sottoprogramma (interfaccia) Nomi e Ambiente 20 apr, / 58

7 Oggetti denotabili Oggetto denotabile con un nome definito dall utente variabili, parametri formali, sottoprogrammi, tipi, etichette, moduli, costanti, eccezioni,... definito dal linguaggio tipi primitivi, operazioni primitive, costanti predefinite, parole riservate,... Nomi e Ambiente 20 apr, / 58

8 Progettazione dei nomi domande tipiche: Lunghezza massima? Sono permessi caratteri di connessione (es. "_")? Differenza maiuscole/minuscole (case-sensitivity)? Le parole speciali sono considerate parole riservate o parole-chiave?. Nomi e Ambiente 20 apr, / 58

9 Progettazione dei nomi [... cont.] Lunghezza dei nomi Se la lunghezza massima consentita è troppo corta, i nomi difficilmente possono essere significativi (ossia possono suggerire un significato) Esempi in vari linguaggi FORTRAN I: max 6 COBOL: max 30 FORTRAN 90 e ANSI C: max 31 ADA e JAVA: nessun limite, e tutti sono significativi C++: nessun limite dai progettisti, ma gli implementatori possono imporre un limite Nomi e Ambiente 20 apr, / 58

10 Progettazione dei nomi [... cont.] Connettori Esempi in vari linguaggi PASCAL, MODULA-2, e FORTRAN 77 non li permettono Altri lo fanno (quali?) Case sensitivity Svantaggio per la leggibilità: nomi che appaiono simili sono diversi Peggio ancora in C++ e JAVA poiché i nomi predefiniti mescolano maiuscole o minuscole (es. IndexOutOfBoundsException) In C, C++ e JAVA i nomi sono case-sensitive Non succede in altri linguaggi Nomi e Ambiente 20 apr, / 58

11 Progettazione dei nomi [... cont.] Parole speciali Aiuto alla leggibilità Usate per delimitare o separare l espressione delle istruzioni Una parola chiave è una parola che è speciale solo in certi contesti, es., in FORTRAN Real VarName Real è un tipo di dato seguito da un nome pertanto si tratta dell uso come parola chiave Real = 3.4 Real è una variabile in questo caso Una parola riservata è una parola speciale che non può essere usata per un nome definito dall utente Nomi e Ambiente 20 apr, / 58

12 Binding Un binding 1 è un associazione, come quella tra un attributo ed un entità o tra un operazione ed un simbolo (operatore) binding-time: momento in cui avviene il binding 1 IPA: / baindin/ Nomi e Ambiente 20 apr, / 58

13 Binding-time Language design time: progettazione del linguaggio collega i nomi primitivi (costanti ed operatori) Language implementation time*: implementazione associare un tipo floating point ad una rappresentazione Programming-time: scrittura del programma definisce le associazioni che saranno portate a termine nella fase successiva Compile-time: Compilazione del programma associare una variabile ad un tipo es. variabili globali in C o PASCAL Nomi e Ambiente 20 apr, / 58

14 Binding-time [... cont.] Linking-time: Collegamento del programma associare un nome ad una variabile esterna Loading-time*: Caricamento del programma associare una variabile ad una cella di memoria es. in FORTRAN 77 o ad una variabile static (in C) Run-time: Esecuzione del programma associare una variabile locale non statica ad una cella di memoria puntatori/riferimenti a variabili in memoria dinamica Nomi e Ambiente 20 apr, / 58

15 Binding statico / dinamico Un associazione è statica se si salda prima dell esecuzione (run time) e resta immutata per tutta l esecuzione del programma Un associazione è dinamica se è introdotta per la prima volta durante l esecuzione e può essere cambiata nel corso della stessa Nomi e Ambiente 20 apr, / 58

16 Agenda 1 Nomi 2 Ambiente Introduzione 3 Scope Blocco Operazioni 4 Esercizi Nomi e Ambiente 20 apr, / 58

17 Ambiente Ambiente (referencing environment) insieme delle associazioni nomi-oggetti denotabili in un dato punto del programma ed in un dato momento della sua esecuzione usualmente si escludono quelle definite dal linguaggio nella macchina astratta: per ogni nome e per ogni sezione del codice si determina l associazione corretta Nomi e Ambiente 20 apr, / 58

18 Dichiarazioni dichiarazione: costrutto che permette di introdurre una nuova associazione nell ambiente corrente esplicita ad es. 1 int x; 2 int f() { 3 return 0; 4 } 5 type T = int; implicita inferenza del tipo dall uso dell oggetto associato al nome talvolta dallo stesso nome Nomi e Ambiente 20 apr, / 58

19 Associazioni molteplici stesso nome oggetti diversi 1 { 2 int pippo; 3 pippo = 2; 4 { 5 char pippo; 6 pippo = a; 7 } 8 } il nome pippo denota due variabili diverse la molteplicità può dipendere anche dal momento in cui si giunge in una sezione di codice caso dei parametri o nomi locali nei sottoprogrammi ricorsivi Nomi e Ambiente 20 apr, / 58

20 Associazioni molteplici [... cont.] aliasing: nomi diversi (alias) per lo stesso oggetto Esempi passaggio parametri per riferimento: visibile sia la variabile passata sia il parametro che ne ha preso l indirizzo union (C), record con varianti (PASCAL) molteplici espressioni riferite ad un oggetto Esempio a una stessa var. dinamica. Cosa stampa (C)? 1 int * X, * Y; 2 X = (int * ) malloc(sizeof (int)); 3 4 * X = 1; Y = X; 5 6 * Y = 5; printf("%d", * X); Nomi e Ambiente 20 apr, / 58

21 Blocco Blocco: regione di codice identificata da segnalatori di inizio e fine che possa contenere dichiarazioni locali a tale regione begin... end ALGOL e derivati {... } C e derivati let... in... LISP blocco inline (o anonimo) può comparire dovunque possa comparire un comando semplice blocco di sottoprogramma l ambiente del corpo del sottoprogramma viene esteso con le dichiarazioni dei parametri Nomi e Ambiente 20 apr, / 58

22 Ambiti statici Un blocco serve a creare ambiti statici in unità di programma Esempi C e C++: 1 for (...) { 2 int index; } ADA: 1 declare LCL : FLOAT; 2 begin end Nomi e Ambiente 20 apr, / 58

23 Ambienti e Blocchi L ambiente cambia con l entrata e l uscita dai blocchi Un blocco è il costrutto di granularità minima cui è associabile un ambiente costante Ambiente di un blocco: ambiente corrente quando il blocco viene eseguito costituito soprattutto dai binding per i nomi dichiarati localmente nel blocco Nomi e Ambiente 20 apr, / 58

24 Annidamento e Sovrapposizione blocchi Spesso annidabili la definizione di un blocco inclusa in quella di un altro in C, i blocchi associati a sottoprogrammi non possono essere annidati in PASCAL e ADA è possibile avere blocchi di sottoprogrammi all interno di altri sottoprogrammi Mai sovrapponibili l ultimo blocco aperto deve essere il primo ad essere chiuso vale pressoché per tutti i linguaggi che prevedono i blocchi Nomi e Ambiente 20 apr, / 58

25 Blocchi e visibilità Una dichiarazione locale ad un blocco è visibile in un altro blocco se il binding creato dalla stessa è presente anche nell ambiente del secondo Regola di visibilità canonica: dichiarazione locale visibile anche in tutti i blocchi annidati eccezione: blocco annidato nel quale compaia una nuova dichiarazione per quel nome; la nuova associazione oscura la precedente (buco di visibilità, shadowing) Osservazioni non c è visibilità dall esterno verso l interno binding interni non attivi nell ambiente del blocco esterno blocchi allo stesso livello hanno visibilità separate Nomi e Ambiente 20 apr, / 58

26 Tipi d ambiente Ambiente associato ad un blocco è costituito da: locale binding per nomi introdotti da dichiarazioni nel blocco compresi i binding dei parametri formali come per le var. locali non-locale binding per nomi visibili nel blocco ma non dichiarati localmente si considerano i binding esterni globale binding creati all inizio dell esecuzione del programma nomi usabili in tutti i blocchi fa parte dell ambiente non-locale Nomi e Ambiente 20 apr, / 58

27 Tipi d ambiente [... cont.] Osservazioni regole di visibilità: determinano come i nomi dichiarati in blocchi esterni sono visibili nei blocchi interni importando codice da moduli esterni i relativi binding fanno parte dell ambiente globale Nomi e Ambiente 20 apr, / 58

28 Tipi d ambiente [... cont.] 1 A: { 2 int a = 1; 3 B: { 4 int b = 2; 5 int c = 2; 6 C: { 7 int c = 3; 8 int d; 9 d = a+b+c; 10 printf("%d",d); 11 } // C 12 D: { 13 int e; 14 e = a+b+c; 15 printf("%d",e); 16 } // D 17 } // B 18 } // A A: blocco dell ambiente globale contiene il binding per a B: ambiente locale contiene b e c locali ed eredita il binding per a dall ambiente globale C: ambiente locale annidato in quello di B contiene c (nuova) e d locali eredita il binding per b dall ambiente non-locale ed a dall ambiente di A D: ambiente locale annidato in quello di B contiene e locale eredita i binding per b e c dall ambiente di B ed a dall ambiente di A Nomi e Ambiente 20 apr, / 58

29 Operazioni sull ambiente entrata in un blocco 1 creazione delle associazioni per i nomi locali 2 disattivazione delle associazioni per nomi con binding non-locali preesistenti uscita da un blocco 1 distruzione delle associazioni per nomi locali 2 riattivazione delle associazioni per nomi oscurati Nomi e Ambiente 20 apr, / 58

30 Operazioni su nomi ed ambiente Più in generale: creazione binding nome-oggetto (naming) distruzione binding nome-oggetto (unnaming) riferimento ad oggetto mediante il nome (referencing) disattivazione binding nome-oggetto riattivazione binding nome-oggetto Osservazione per effetto delle regole di visibilità un ambiente contiene binding attivi e binding disattivati Nomi e Ambiente 20 apr, / 58

31 Operazioni su su oggetti denotabili creazione accesso modifica distruzione allocazione di memoria necessaria nome = binding = locazione = valore le regole rendono l associazione univoca nome = binding = locazione e modifica del valore nella locazione deallocazione delle risorse Nomi e Ambiente 20 apr, / 58

32 Operazioni su su oggetti denotabili [... cont.] Osservazioni creazione e binding spesso contemporanee es. dichiarazioni di variabili int x; ciò non vale sempre! lifetime(oggetto) < > lifetime(binding) > parametri formali e variabili < riferimento sospeso (dangling) Nomi e Ambiente 20 apr, / 58

33 Agenda 1 Nomi 2 Ambiente 3 Scope Regole di scope Scope statico Scope dinamico 4 Esercizi Nomi e Ambiente 20 apr, / 58

34 Scope Lo scope di un associazione è il segmento di istruzioni per il quale essa è visibile gli ambienti possono cambiare in base alle operazioni definite su di essi ambienti non locali più difficili da trattare Nomi e Ambiente 20 apr, / 58

35 Scope [... cont.] Esempio Quale valore viene stampato? 1 A:{ 2 int x = 0; 3 4 void procedura() { 5 x = 1; 6 } 7 8 B: { 9 int x; 10 procedura(); 11 } printf("%d",x); 14 } Nomi e Ambiente 20 apr, / 58

36 Regole di scope Determinano la validità dei binding nel passaggio da un ambiente all altro: una dichiarazione locale ad un blocco è visibile in esso ed in tutti i blocchi annidati annidamento si può intendere in senso statico flusso del testo sorgente del programma in senso dinamico flusso d esecuzione del programma differiscono solo rispetto ad ambienti non locali e non globali - negli altri casi coincidono Nomi e Ambiente 20 apr, / 58

37 Scope statico Basato sulla struttura sintattica del sorgente: ambiente in ogni punto stabilito dal compilatore i. dichiarazioni locali definiscono l ambiente locale non quelle in blocchi annidati ii. l uso di un nome in un blocco comporta: l utilizzo del binding dell ambiente locale, se esiste; altrimenti, si risale la gerarchia dei blocchi alla ricerca di un ambiente non locale contenente un binding valido ambito più esterno: parole predefinite del linguaggio iii. il nome di un blocco fa parte dell ambiente esterno immediatamente precedente al blocco vale anche per i nomi dei sottoprogrammi: i binding del nome sono nell ambiente esterno, sono quindi visibili anche in quello interno ciò rende possibili le chiamate ricorsive Nomi e Ambiente 20 apr, / 58

38 Scope statico [... cont.] Le variabili possono essere occultate da una sezione di programma avente una variabile più vicina con lo stesso nome In C++ e ADA è ammesso l accesso a queste variabili "nascoste" In C++: class_name::name In ADA: unit.name Nomi e Ambiente 20 apr, / 58

39 Scope statico [... cont.] Esempio Quali valori vengono stampati? 1 { 2 int x = 0; 3 void proc(int n) 4 { 5 x = n+1; 6 } 7 proc(3); 8 printf("%d",x); 9 { 10 int x = 0; 11 proc(3); 12 printf("%d",x); 13 } 14 printf("%d",x); 15 } Nomi e Ambiente 20 apr, / 58

40 Scope statico [... cont.] vantaggi: leggibilità e comprensibilità basta scorrere le dichiarazioni nel sorgente ottimizzazione e controllo di correttezza il compilatore può decidere (quasi) tutto modalità usata dalla maggior parte dei linguaggi ALGOL, PASCAL, C, C++, ADA, JAVA, SCHEME,... svantaggi: relativamente complicata gestione a run-time gerarchia degli ambienti locali e non gerarchia delle attivazione dei blocchi Nomi e Ambiente 20 apr, / 58

41 Problemi di scope (statico) Problemi: DOVE possono essere introdotte dichiarazioni QUAL è l esatta visibilità delle variabili locali PASCAL regole restrittive i. dichiarazioni ad inizio blocco e PRIMA dell uso ii. binding valevoli da inizio a fine blocco (possibili buchi) iii. dichiarazioni PRIMA dell uso C e ADA più flessibili valevoli dalla dichiarazione a fine blocco eccezioni (alla iii.) tipi ricorsivi sottoprogrammi forward PASCAL e nomi funzioni C JAVA disciplina mista dichiarazioni ovunque e valide fino a fine blocco dichiarazione membro vale per tutta la classe Nomi e Ambiente 20 apr, / 58

42 Scope dinamico Con lo scope statico l avvicendarsi degli ambienti non locali non segue il flusso di attivazione/disattivazione dei blocchi questo rende la gestione degli ambienti a run-time più complessa Per semplificare... Nomi e Ambiente 20 apr, / 58

43 Scope dinamico [... cont.] Regola basata sulla sequenza di chiamata delle unità di programma e non su come appaiono nel sorgente criterio temporale anziché spaziale modalità usata in alcuni dialetti di LISP, APL, SNOBOL, PERL,. Nomi e Ambiente 20 apr, / 58

44 Scope dinamico [... cont.] Esempio binding per la x nel blocco di prima()? 1 { 2 const x = 0; 3 4 void prima() { 5 printf("%d",x); 6 } 7 8 void seconda() { 9 const x = 1; 10 prima(); 11 } seconda(); 14 } Nomi e Ambiente 20 apr, / 58

45 Scope dinamico [... cont.] Regola di scope dinamico L associazione per un nome non locale X in un punto P del programma è la più recente tra quelle create per X ad essere attiva quando il flusso di controllo raggiunge P implementata con ricerca nella pila dei record di attivazione dei blocchi/sottoprogrammi che hanno fatto raggiungere P per l ambiente locale (e quello globale) non c è differenza con la regola dello scope statico Nomi e Ambiente 20 apr, / 58

46 Scope dinamico [... cont.] Esempio binding per la x nel blocco di prima()? 1 { 2 const x = 0; 3 4 void prima() { 5 printf("%d",x); 6 } 7 8 void seconda() { 9 const x = 1; 10 { const x = 2; } 11 prima(); 12 } seconda(); 15 } Nomi e Ambiente 20 apr, / 58

47 Scope dinamico [... cont.] vantaggi: flessibilità stesso sottoprogramma si comporta diversamente a seconda del momento in cui viene invocato può dipende dal valore di var. non locali anziché da parametri: Esempio stampa( ) usa il colore indicato dalla var. colore 1 { colore = FF000; 2 stampa(testo); 3 } svantaggi: minore leggibilità e comprensibilità difficile ricostruire le dichiarazioni dal sorgente gestione differita al run-time poco usata nei linguaggi general-purpose Nomi e Ambiente 20 apr, / 58

48 Visibilità e Durata Visibilità e Durata sono a volte strettamente correlate, ma sono concetti differenti si consideri il caso di una variabile static in una funzione C/C++ vive tra una chiamata e l altra visibile solo quando si chiama la funzione Nomi e Ambiente 20 apr, / 58

49 Costanti con nome variabile vincolata ad avere un dato valore assegnatole durante la sua memorizzazione usate per parametrizzare i programmi il legame con i valori può essere statico (costanti manifeste) o dinamico Esempi: FORTRAN 90: espressioni a valori costanti ADA, C++ e JAVA: espressioni di ogni tipo vantaggi leggibilità e modificabilità dei programmi Nomi e Ambiente 20 apr, / 58

50 Agenda 1 Nomi 2 Ambiente 3 Scope 4 Esercizi Nomi e Ambiente 20 apr, / 58

51 Esercizi Es. 1: Cosa stampa sotto scope statico? 1 int X = 0; 12 2 int Y; 3 4 void incr() { 5 X++; 6 } 7 8 void incr2() { 9 X++; 10 incr(); 11 } 13 read(y); 14 if Y > 0 { 15 int X; 16 incr2(); 17 } 18 else 19 incr2(); write(x); Nomi e Ambiente 20 apr, / 58

52 Esercizi [... cont.] Es. 2: Quali e quanti valori sono stampati (scope dinamico)? 1 int X = 1; 13 2 int Y; 14 read(y); 3 4 void fie() { 5 foo(); 6 X = 0; 7 } 8 9 void foo() { 10 int X; 11 X = 5; 12 } if Y > 0 { 17 int X = 4; 18 fie(); 19 } 20 else 21 fie(); write(x); Nomi e Ambiente 20 apr, / 58

53 Esercizi [... cont.] Es. 3: Nello schema seguente inserire nelle zone indicate con // 1 e // 2 codice utile a far sì che le due chiamate a foo(), da dichiarare in // 1, assegnino a x con scope statico, lo stesso valore con scope dinamico, valori diversi 1 { 2 int i; 3 // 1 4 for (i=0; i<=1; i++) { 5 int x; 6 // 2 7 x = foo(); 8 } 9 } Nomi e Ambiente 20 apr, / 58

54 Esercizi [... cont.] Es. 4: Sotto scope statico cosa stampa? (passaggio y per valore) 1 { 2 int x = 2; 3 int fie(int y) { 4 x = x + y; 5 } 6 7 { 8 int x = 5; 9 fie(x); 10 write(x); 11 } 12 write(x); 13 } Es. 5: E se lo scope è dinamico e il passaggio per riferimento? Nomi e Ambiente 20 apr, / 58

55 Esercizi [... cont.] Es. 6: Scope statico e passaggio per riferimento: cosa stampa? 1 { 2 int x = 2; 3 4 void fie(reference int y) { 5 x = x + y; 6 y = y + 1; 7 } 8 9 { 10 int x = 5; 11 int y = 5; 12 fie(x); 13 write(x); 14 } 15 write(x); 16 } Nomi e Ambiente 20 apr, / 58

56 Esercizi [... cont.] Es. 7: Scope statico: cosa stampa? 1 { 2 int x = 2; 3 4 void fie(value int y) { 5 x = x + y; 6 } 7 8 { 9 int x = 5; 10 fie(x++); / * Nota: post-incremento * / 11 write(x); 12 } write(x); 15 } Nomi e Ambiente 20 apr, / 58

57 Esercizi [... cont.] Es. 8: Scope dinamico: cosa stampa? 1 { 2 int x = 1; 3 int y = 1; 4 5 void fie(reference int z){ 6 z = x + y + z; 7 } 8 9 { 10 int y = 3; 11 { int x = 3 } 12 fie(y); 13 write(y); 14 } 15 write(y); 16 } Nomi e Ambiente 20 apr, / 58

58 Riferimenti Gabbrielli & Martini: Linguaggi di Programmazione, McGraw-Hill 2a edizione Nomi e Ambiente 20 apr, / 58

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione Corso di Laurea in ITPS I nomi e l ambiente Valeria Carofiglio (Questo materiale è una rivisitazione del materiale prodotto da Nicola Fanizzi) 1 Argomenti Introduzione Nomi

Dettagli

Programmazione II. Lezione 5. Daniele Sgandurra 2/11/2010.

Programmazione II. Lezione 5. Daniele Sgandurra 2/11/2010. Programmazione II Lezione 5 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 2/11/2010 1/35 Programmazione II Lezione 5 2/11/2010 Sommario 1 Fondamenti Problema della Fermata Macchina di Turing Indecidibilità

Dettagli

Programmazione II. Lezione 6. Daniele Sgandurra 5/11/2010.

Programmazione II. Lezione 6. Daniele Sgandurra 5/11/2010. Programmazione II Lezione 6 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 5/11/2010 1/54 Programmazione II Lezione 6 5/11/2010 Sommario 1 Nomi e Ambiente Ambiente 2 Esercizi 3 Esercitazione: Eclipse Eclipse

Dettagli

PROGRAMMAZIONE Nomi, binding, regole di visibilità (scope)

PROGRAMMAZIONE Nomi, binding, regole di visibilità (scope) PROGRAMMAZIONE 2 19. Nomi, binding, regole di visibilità (scope) PR2 2017-2018 1 Nomi Un nome in un linguaggio di programmazione è esattamente quello che immaginate o la maggior parte dei nomi sono definiti

Dettagli

Nomi e ambiente. Blocchi e regole di scoping. Blocchi e regole di scoping Nomi e ambiente 1 / 39

Nomi e ambiente. Blocchi e regole di scoping. Blocchi e regole di scoping Nomi e ambiente 1 / 39 Nomi e ambiente Blocchi e regole di scoping Blocchi e regole di scoping Nomi e ambiente 1 / 39 Nomi Meccanismi di astrazione fondamentale per gestire la complessità del software. Uso dei nomi: un meccanismo

Dettagli

Nomi. Nomi e ambiente. Nomi e oggetti denotabili. Sintassi

Nomi. Nomi e ambiente. Nomi e oggetti denotabili. Sintassi Nomi Nomi e ambiente Blocchi e regole di scoping Meccanismi di astrazione fondamentale per gestire la complessità del software. Uso dei nomi: un meccanismo di astrazione. Nome: sequenza di caratteri usata

Dettagli

Nomi. Nomi e ambiente. Nomi e oggetti denotabili. Esempio

Nomi. Nomi e ambiente. Nomi e oggetti denotabili. Esempio Nomi e ambiente Blocchi e regole di scoping Nomi Meccanismi di astrazione fondamentale per gestire la complessità del software. Uso dei nomi: un meccanismo di astrazione. Nome: sequenza di caratteri usata

Dettagli

Nomi, binding e regole di scope

Nomi, binding e regole di scope Nomi, binding e regole di scope 1 Nomi Un nome in un linguaggio di programmazione è esattamente quello che immaginate o la maggior parte dei nomi sono definiti dal programma (gli identificatori) o ma anche

Dettagli

Informatica 3. LEZIONE 2: Sintassi e semantica

Informatica 3. LEZIONE 2: Sintassi e semantica Informatica 3 LEZIONE 2: Sintassi e semantica Modulo 1: Introduzione ai concetti di sintassi e semantica Modulo 2: Il concetto di binding Modulo 3: Variabili Modulo 4: Routine Convenzioni dei nomi Informatica

Dettagli

Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione

Informatica 3. Informatica 3. LEZIONE 2: Sintassi e semantica. Lezione 2- Modulo 1. Le componenti di un linguaggio di programmazione Informatica 3 Informatica 3 LEZIONE 2: Sintassi e semantica Lezione 2- Modulo 1 Modulo 1: Introduzione ai concetti di sintassi e semantica Modulo 2: Il concetto di binding Modulo 3: Variabili Modulo 4:

Dettagli

Corso di Linguaggi di Programmazione. Organizzazione di un processo in memoria (1)

Corso di Linguaggi di Programmazione. Organizzazione di un processo in memoria (1) Corso di Linguaggi di Programmazione Lezione 14 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 04 Maggio 2009 Organizzazione di un

Dettagli

Nomi, binding e regole di scope

Nomi, binding e regole di scope Nomi, binding e regole di scope 1 Nomi Un nome in un linguaggio di programmazione è esa5amente quello che immaginate o la maggior parte dei nomi sono defini; dal programma (gli iden;ficatori) o ma anche

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 15 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Informatica Università degli Studi di Milano 30 Aprile 2013 Classificazione di un Type System Riassumendo:

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Strutture dati nel supporto a run time

Strutture dati nel supporto a run time Strutture dati nel supporto a run time 1 Entità presenti quando un programma va in esecuzione programmi d utente (compilati) routines del supporto interprete I/O, librerie, routines per la gestione delle

Dettagli

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010 Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010 Istruzioni: scrivere le risposte alle domande negli spazi presenti nel testo e riconsegnare

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,

Dettagli

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Introduzione ai sottoprogrammi Paolo Bison Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Introduzione al corso, Paolo Bison, FI08, 2008-12-09 p.1 Struttura programma

Dettagli

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova Introduzione ai sottoprogrammi Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova Introduzione al corso, Paolo Bison, FI06, 2007-02-06 p.1 Struttura programma formato da vari elementi

Dettagli

Programmazione II. Lezione 9. Daniele Sgandurra 16/11/2010.

Programmazione II. Lezione 9. Daniele Sgandurra 16/11/2010. Programmazione II Lezione 9 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 16/11/2010 1/31 Programmazione II Lezione 9 16/11/2010 Sommario 1 Gestione della Memoria 2/31 Programmazione II Lezione 9 16/11/2010

Dettagli

Gestione della Memoria

Gestione della Memoria Gestione della Memoria Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 27 apr, 2016 Sommario 1 Tecniche di gestione Progetto della gestione

Dettagli

Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010.

Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010. Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione II Lezione 7 9/11/2010 Sommario 1 Gestione della Memoria 2/24 Programmazione II Lezione 7 9/11/2010

Dettagli

Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi. Programmi. Ciclo di sviluppo di programmi. Obiettivo

Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi. Programmi. Ciclo di sviluppo di programmi. Obiettivo Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi Istruzioni variabili e tipi Sottoprogrammi Strutture di controllo Ricorsione 1 2 Obiettivo Ciclo di sviluppo di programmi Risoluzione

Dettagli

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Il linguaggio C I linguaggi di programmazione ad alto livello sono linguaggi formali ( sintassi e semantica formalmente definite) però sono compatti e comprensibili. Le tipologie di linguaggi sono: procedurali

Dettagli

Informatica 3. LEZIONE 4: Semantica operazionale. Modulo 1: Strutture a blocchi Modulo 2: Comportamenti dinamici

Informatica 3. LEZIONE 4: Semantica operazionale. Modulo 1: Strutture a blocchi Modulo 2: Comportamenti dinamici Informatica 3 LEZIONE 4: Semantica operazionale Modulo 1: Strutture a blocchi Modulo 2: Comportamenti dinamici Informatica 3 Lezione 4 - Modulo 1 Strutture a blocchi C4: Blocchi annidati int f( ); { int

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Macchine Astratte. Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari. Linguaggi di Programmazione feb, 2016

Macchine Astratte. Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari. Linguaggi di Programmazione feb, 2016 Macchine Astratte Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione 010194 29 feb, 2016 Sommario 1 Introduzione Macchina astratta Interprete Implementazione

Dettagli

Macchine astratte, linguaggi, interpretazione, compilazione

Macchine astratte, linguaggi, interpretazione, compilazione Macchine astratte, linguaggi, interpretazione, compilazione 1 Macchine astratte una collezione di strutture dati ed algoritmi in grado di memorizzare ed eseguire programmi componenti della macchina astratta

Dettagli

Macchine astratte, linguaggi, interpretazione, compilazione

Macchine astratte, linguaggi, interpretazione, compilazione Macchine astratte, linguaggi, interpretazione, compilazione 1 Macchine astratte una collezione di strutture dati ed algoritmi in grado di memorizzare ed eseguire programmi componenti della macchina astratta

Dettagli

Linguaggi di programmazione

Linguaggi di programmazione Linguaggi di programmazione Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Linguaggi, Traduttori e le Basi della Programmazione

Linguaggi, Traduttori e le Basi della Programmazione Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario Il Linguaggio I Linguaggi di Linguaggi

Dettagli

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 14 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Informatica Università degli Studi di Milano 23 Aprile 2013 Cosa servono i tipi durante l analisi

Dettagli

ASTRAZIONE. Sono indipendenti dalla macchina hardware sottostante ASTRAZIONE 1

ASTRAZIONE. Sono indipendenti dalla macchina hardware sottostante ASTRAZIONE 1 ASTRAZIONE Esistono linguaggi a vari livelli di astrazione Linguaggio Macchina: implica la conoscenza dei metodi utilizzati per la rappresentazione delle informazioni Linguaggio Macchina e Assembler: implica

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Dettagli

PROGRAMMAZIONE Nomi, binding

PROGRAMMAZIONE Nomi, binding PROGRAMMAZIONE 2 19. Nomi, binding PR2 2017-2018 1 Nomi Un nome in un linguaggio di programmazione è esa6amente quello che immaginate o la maggior parte dei nomi sono defini< dal programma (gli iden

Dettagli

Introduzione all OOP!

Introduzione all OOP! Introduzione all OOP! Introdurre l evoluzione dei linguaggi di programmazione e la loro classificazione Introdurre l OOP (astrazione, incapsulamento, ereditarietà) Dal C a Java un primo esempio 1 LINGUAGGI

Dettagli

Dati due punti sul piano calcolare la loro distanza

Dati due punti sul piano calcolare la loro distanza Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12

Dettagli

AA 2014-2015. 20. Nomi, binding

AA 2014-2015. 20. Nomi, binding AA 2014-2015 20. Nomi, binding 1 Nomi Un nome in un linguaggio di programmazione è esa;amente quello che immaginate o la maggior parte dei nomi sono definia dal programma (gli idenaficatori) o ma anche

Dettagli

ASTRAZIONE ASTRAZIONE

ASTRAZIONE ASTRAZIONE ASTRAZIONE Esistono linguaggi a vari livelli di astrazione Linguaggio Macchina: implica la conoscenza dei metodi utilizzati per la rappresentazione delle informazioni Linguaggio Macchina e Assembler: implica

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione!paradigmi linguistici, costrutti!semantica!implementazione, strutture a tempo di esecuzione 1 Linguaggi di programmazione e astrazione! i linguaggi di programmazione ad alto

Dettagli

Fondamenti di Informatica II 3. Funzioni in C++ (parte 1)

Fondamenti di Informatica II 3. Funzioni in C++ (parte 1) Introduzione alle funzioni in C++ Fondamenti di Informatica II 3. Funzioni in C++ (parte 1) Corso di Laurea in Ingegneria Informatica A.A. 2008-2009 2 Semestre Corso (A-M) int main() int n, fattoriale=1;

Dettagli

Ingegneria del Software

Ingegneria del Software Ingegneria del Software Analisi Object Oriented ed Elementi di Programmazione OO Origini Le metodologie ad oggi nascono negli anni 70 ma si affermano solo nelgi anni 80 grazie alla nascita dei linguaggi

Dettagli

FUNZIONI. Esempi (pseudo-c): dare un nome a una espressione rendere tale espressione parametrica. float f(){ * sin(0.75); } float f1(int x) {

FUNZIONI. Esempi (pseudo-c): dare un nome a una espressione rendere tale espressione parametrica. float f(){ * sin(0.75); } float f1(int x) { Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvano parti specifiche di un problema Una funzione permette di dare un nome a una espressione rendere tale espressione

Dettagli

Macchine astratte, linguaggi, interpretazione, compilazione

Macchine astratte, linguaggi, interpretazione, compilazione Macchine astratte, linguaggi, interpretazione, compilazione 1 Macchine astratte una collezione di strutture dati ed algoritmi in grado di memorizzare ed eseguire programmi componenti della macchina astratta

Dettagli

Visibilità e tempo di vita delle variabili. (più sintesi di alcuni concetti della prima parte del corso)

Visibilità e tempo di vita delle variabili. (più sintesi di alcuni concetti della prima parte del corso) Visibilità e tempo di vita delle variabili (più sintesi di alcuni concetti della prima parte del corso) Struttura dei programmi C/C++ Un programma C/C++ deve essere contenuto in uno o più file (per ora

Dettagli

Linguaggi di programmazione e astrazione

Linguaggi di programmazione e astrazione Linguaggi di programmazione e astrazione i linguaggi di programmazione ad alto livello moderni sono il più potente strumento di astrazione messo a disposizione dei programmatori che possono, con un solo

Dettagli

Fasi di un Compilatore

Fasi di un Compilatore Dipartimento di Matematica e Informatica Università di Camerino Un implementazione compilativa di un linguaggio di programmazione viene realizzata tramite un programma che prende il nome di compilatore

Dettagli

Introduzione alla programmazione A. Ferrari

Introduzione alla programmazione A. Ferrari Introduzione alla programmazione A. Ferrari Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede tutti i costrutti di controllo dei linguaggi ad

Dettagli

Introduzione alla programmazione. Alice Pavarani

Introduzione alla programmazione. Alice Pavarani Introduzione alla programmazione Alice Pavarani Il linguaggio C Creato da Dennis Ritchie nel 1972 presso i Bell Laboratories Linguaggio di programmazione procedurale, strutturato Linguaggio ad alto livello

Dettagli

FUNZIONI FUNZIONI COME COMPONENTI SW

FUNZIONI FUNZIONI COME COMPONENTI SW FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvano parti specifiche di un problema Una funzione permette di dare un nome a una espressione rendere tale espressione

Dettagli

Esercitazioni di Informatica 3

Esercitazioni di Informatica 3 Esercitazioni di Informatica 3 Part I: Programming Languages Syntax and semantics Laurea in Ingegneria Informatica Politecnico di Milano Polo di Milano Leonardo Esercizio 1: EBNF Utilizzando il linguaggio

Dettagli

passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad una funzione, in

passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad una funzione, in I Parametri di tipo vettore I Il meccanismo del passaggio per valore di un indirizzo consente il passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad

Dettagli

Le istruzioni corrispondono univocamente a quelle macchina, ma vengono espresse tramite nomi simbolici i (parole chiave)

Le istruzioni corrispondono univocamente a quelle macchina, ma vengono espresse tramite nomi simbolici i (parole chiave) ASTRAZIONE Esistono linguaggi a vari livelli di astrazione Linguaggio Macchina: implica la conoscenza dei metodi utilizzati per la rappresentazione delle informazioni Linguaggio Macchina e Assembler: implica

Dettagli

Linguaggi di Programmazione Corso C. Parte n.10 Gestione della Memoria. Nicola Fanizzi

Linguaggi di Programmazione Corso C. Parte n.10 Gestione della Memoria. Nicola Fanizzi Linguaggi di Programmazione Corso C Parte n.10 Gestione della Memoria Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Gestione della Memoria I moderni linguaggi

Dettagli

FUNZIONI FUNZIONI COME COMPONENTI SW

FUNZIONI FUNZIONI COME COMPONENTI SW FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvano parti specifiche di un problema. Una funzione permette di dare un nome a una espressione rendendola parametrica

Dettagli

stampa 1 su un architettura little-endian, 0 su una big-endian. Dunque, alla domanda qual è il significato di un programma?

stampa 1 su un architettura little-endian, 0 su una big-endian. Dunque, alla domanda qual è il significato di un programma? 1 Introduzione Su un argomento il dibattito politico era il più acceso nel paese di Lilliput: se le uova alla coque andassero mangiate aprendone il guscio dal lato piccolo o dal grande. I sostenitori del

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Programmazione modulare (top-down) Fondamenti di Informatica 15. Funzioni in C++ (parte 1) Problemi complessi Conviene suddividere il programma in sottoprogrammi piu semplici mediante la metodologia di

Dettagli

Linguaggi di Programmazione I Lezione 1

Linguaggi di Programmazione I Lezione 1 Linguaggi di Programmazione I Lezione 1 Prof. Marcello Sette mailto://marcello.sette@gmail.com http://sette.dnsalias.org 4 marzo 2008 Introduzione al corso 3 Obbiettivi..............................................................

Dettagli

Nomi. ! Un nome in un linguaggio di programmazione è. esa9amente quello che immaginate

Nomi. ! Un nome in un linguaggio di programmazione è. esa9amente quello che immaginate NOMI, BINDING, AMBIENTI Nomi! Un nome in un linguaggio di programmazione è. esa9amente quello che immaginate o La maggior parte dei nomi sono defini@ dal programma (gli iden@ficatori) o Ma anche i simboli

Dettagli

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010 Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010 Istruzioni: scrivere le risposte alle domande negli spazi presenti nel testo e riconsegnare

Dettagli

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Docenti Parte I prof. Silvio Salza salza@dis.uniroma1.it http://www.dis.uniroma1.it/~salza/fondamenti.htm

Dettagli

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Dettagli

FUNZIONI. Esempi (pseudo-c): dare un nome a una espressione rendere tale espressione parametrica. float f(){ * sin(0.75); } float f1(int x) {

FUNZIONI. Esempi (pseudo-c): dare un nome a una espressione rendere tale espressione parametrica. float f(){ * sin(0.75); } float f1(int x) { Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvano parti specifiche di un problema Una funzione permette di dare un nome a una espressione rendere tale espressione

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA 1 Struttura di un programma Java Un programma Java consiste in un insieme di definizioni di classi. In genere

Dettagli

Scope, Memoria e Tabella dei Simboli

Scope, Memoria e Tabella dei Simboli Scope, Memoria e Tabella dei Simboli La tabella dei simboli è uno strumento fondamentale attraverso il quale interpreti e compilatori implementano la traduzione da un programma scritto in un linguaggio

Dettagli

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free Variabili dinamiche Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free 1 Tipi di variabili in C In C è possibile classificare le variabili in

Dettagli

Oggetti. Oggetti e occultamento delle informazioni. Definire oggetti. Oggetti. Definire oggetti la sintassi. Convenzione sugli identificatori

Oggetti. Oggetti e occultamento delle informazioni. Definire oggetti. Oggetti. Definire oggetti la sintassi. Convenzione sugli identificatori Oggetti Oggetti e occultamento delle informazioni Paolo Coppola Dipartimento di Matematica e Informatica Università degli Studi di Udine http://www.dimi.uniud.it/coppola/ coppola@dimi.uniud.it I metodi

Dettagli

I Linguaggi di Programmazione

I Linguaggi di Programmazione I Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio

Dettagli

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza

Dettagli

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvano parti specifiche di un problema Una funzione permette di dare un nome a una espressione rendere tale espressione

Dettagli

Linguaggi di alto livello, compilatori e interpreti

Linguaggi di alto livello, compilatori e interpreti Linguaggi di alto livello, compilatori e interpreti Percorso di Preparazione agli Studi di Ingegneria Università degli Studi di Brescia Docente: Massimiliano Giacomin Il punto della situazione STATO DATI

Dettagli

DISPENSE DI PROGRAMMAZIONE LINGUAGGI A TIPIZZAZIONE FORTE: IL COSTRUTTO DI TIPO. TIPI SEMPLICI: TIPI PRE-DEFINITI E TIPI DEFINITI DAL PROGRAMMATORE.

DISPENSE DI PROGRAMMAZIONE LINGUAGGI A TIPIZZAZIONE FORTE: IL COSTRUTTO DI TIPO. TIPI SEMPLICI: TIPI PRE-DEFINITI E TIPI DEFINITI DAL PROGRAMMATORE. DISPENSE DI PROGRAMMAZIONE Modulo 3 Linguaggi di programmazione: dati e controllo (Parte I) LINGUAGGI A TIPIZZAZIONE FORTE: IL COSTRUTTO DI TIPO. TIPI SEMPLICI: TIPI PRE-DEFINITI E TIPI DEFINITI DAL PROGRAMMATORE.

Dettagli

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione prof. Domenico

Dettagli

Dichiarazione di una classe. Dichiarazione ereditarietà

Dichiarazione di una classe. Dichiarazione ereditarietà Introduzione Il Java è un linguaggio di programmazione orientato agli oggetti (OOL), perché permette di realizzare in un programma tutti i concetti alla base dell OOP quali: l astrazione dei dati, mediante

Dettagli

Il linguaggio C. Istruzioni, funzioni, dati strutturati

Il linguaggio C. Istruzioni, funzioni, dati strutturati Il linguaggio C Istruzioni, funzioni, dati strutturati Istruzioni Servono a dirigere il flusso di esecuzione di un programma controllano l ordine di esecuzione delle espressioni, quindi dei loro side effects

Dettagli

Elementi di programmazione

Elementi di programmazione Fondamenti di Informatica per la Sicurezza a.a. 2008/09 Elementi di programmazione Stefano Ferrari UNIVERSITÀ DEGLI STUDI DI MILANO DIPARTIMENTO DI TECNOLOGIE DELL INFORMAZIONE Stefano Ferrari Università

Dettagli

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari 7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa

Dettagli

Traduzione ed Interpretazione. Queste sconosciute

Traduzione ed Interpretazione. Queste sconosciute Traduzione ed Interpretazione Queste sconosciute Siano L Linguaggio ad alto livello M L M 0 Macchina astratta di L Macchina ospite Implementazione interpretativa di L Simulazione software di M L su M 0

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

Esempi (pseudo-c):! float f(){ * sin(0.75); } float f1(int x) { 2 + x * sin(0.75); } Esempio

Esempi (pseudo-c):! float f(){ * sin(0.75); } float f1(int x) { 2 + x * sin(0.75); } Esempio Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvano parti specifiche di un problema! Una funzione permette di"! dare un nome a una espressione!! rendere tale espressione

Dettagli

Elementi di programmazione

Elementi di programmazione Fondamenti di Informatica per la Sicurezza a.a. 2003/04 Elementi di programmazione Stefano Ferrari Università degli Studi di Milano Dipartimento di Tecnologie dell Informazione Stefano Ferrari Università

Dettagli

Marco Faella Introduzione al corso

Marco Faella Introduzione al corso Marco Faella Introduzione al corso 1 Lezione n. Parole chiave: Java Corso di Laurea: Informatica Insegnamento: Linguaggi di Programmazione II Email Docente: faella.didattica@gmail.com A.A. 2009-2010 Linguaggi

Dettagli

Una funzione riceve dati di ingresso in corrispondenza ai parametri

Una funzione riceve dati di ingresso in corrispondenza ai parametri FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvano parti specifiche di un problema Una funzione permette di dare un nome a una espressione rendere tale espressione

Dettagli

Variabili. Unità 2. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Variabili. Unità 2. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi Corso di Laboratorio di Informatica Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale

Dettagli

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

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),

Dettagli

Pr ogramming Languages. Sottoprogrammi

Pr ogramming Languages. Sottoprogrammi Pr ogramming Languages Sottoprogrammi 1 ISottoprogrammi Qualche nozione introduttiva DVAL:dominiodeivaloridenotabili,ovverooggettiai quali èpossibiledareunnome:dataobject(variabili), indirizzi, sottoprogrammi,

Dettagli

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

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura: Le classi in java Un semplice programma java, formato da una sola classe, assume la seguente struttura: class Domanda static void main(string args[]) System.out.println( Quanti anni hai? ); La classe dichiarata

Dettagli

ASTRAZIONE. Sono indipendenti dalla macchina hardware sottostante ASTRAZIONE 1

ASTRAZIONE. Sono indipendenti dalla macchina hardware sottostante ASTRAZIONE 1 ASTRAZIONE Esistono linguaggi a vari livelli di astrazione Linguaggio Macchina: implica la conoscenza dei metodi utilizzati per la rappresentazione delle informazioni Linguaggio Macchina e Assembler (Assembly):

Dettagli

Linguaggi e Ambienti di Programmazione

Linguaggi e Ambienti di Programmazione Linguaggi e Ambienti di Programmazione Principi e tecniche diffuse che si incontrano spesso nelle applicazioni dell informatica. Compilatori Editor di struttura: riceve in input una sequenza di comandi

Dettagli

Costanti e Variabili

Costanti e Variabili Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli

Dettagli

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE FUNZIONI Spesso può essere utile avere la possibilità di costruire nuove istruzioni che risolvano parti specifiche di un problema Una funzione permette di dare un nome a una espressione rendere tale espressione

Dettagli