SlideShare a Scribd company logo
1 of 29
Download to read offline
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 (inquesto corso si assume tutto in un file):

•      Direttive per il pre-processore: # tipicamente per
       l’inclusione di file di intestazione (#include)
       Definizione della funzione speciale main()
•
______________


       Definizione di eventuali funzioni funz1(), funz2(), …
•
•      Eventuali prototipi di funzioni
       Eventuali definizioni/dichiarazioni di costanti/variabili al di
•
       fuori delle funzioni, come stiamo per vedere ...


    Programmazione - Paolo Valente, 2008/2009
1. Direttive al pre-processore

SINTASSI: #comando
   Noi abbiamo visto la sola direttiva:
  
#include <nomefile>         (utilizzata per includere altri file)

    Esempio: #include <iostream> 
    Esempio: #include <cmath>


Questa direttiva serve per utilizzare funzioni e variabili
definite all'interno di altri file.
Ad esempio, grazie all'inclusione del file iostream, siamo
riusciti ad utilizzare gli oggetti cout, cin e cerr
Programmazione - Paolo Valente, 2008/2009
2. Funzione main ()
• main()è una funzione speciale con tre
  caratteristiche:
   – deve essere sempre presente
   – è la prima funzione che viene eseguita ovunque si trovi
     all’interno del file sorgente (stessa cosa vale nel caso di
     programma su più file)
   – quando termina l’esecuzione del main(), termina il
     programma
• In C la funzione main() contiene due sezioni (la
  prima può eventualmente essere vuota)
   – Parte dichiarativa
   – Parte esecutiva

 Programmazione - Paolo Valente, 2008/2009
Esempio in linguaggio C
Esempio
                                             Direttive al
   #include <stdio.h>                        pre-processore
   main()
                                            Parte dichiarativa
     { <dichiarazioni>
       <istruzioni>                         Parte esecutiva
     }

         Non vi sono simboli speciali per separare la parte
         dichiarativa dalla parte esecutiva



Programmazione - Paolo Valente, 2008/2009
Esempio in linguaggio C++
Esempio
                                            Direttive al
   #include <iostream>
                                            pre-processore
   main()
     { <dichiarazione o istruzione>
       <dichiarazione o istruzione>
              ...
        }




Programmazione - Paolo Valente, 2008/2009
Concetto di blocco
<blocco in C++> ::=
                                             <blocco in C> ::=
  {
                                               {
    <istruzione o dich.>
                                                    [ <dichiarazioni >; ]
    <istruzione o dich.>
                                                    <istruzioni>;
    ...
                                               }
  }

NOTE
• dopo un blocco non occorre il punto e virgola (il ; termina
  le istruzioni semplici, non è un separatore di istruzioni)
• i blocchi possono essere innestati



 Programmazione - Paolo Valente, 2008/2009
3. Concetto di funzione
• L’astrazione di funzione è presente in tutti i linguaggi di
   programmazione di alto livello.
• È l’astrazione del concetto di operatore su un tipo di dato,
   ovvero è un componente software che cattura l'astrazione
   matematica di funzione:
                     f : A × B × ... × Q → S
con molti possibili ingressi ed una sola uscita
(corrispondente al risultato). Esempio:
              int funzione1 ([ parametri; ] )
               {
                                           possono anche mancare
                 ...
               }


Programmazione - Paolo Valente, 2008/2009
Esempio struttura dei programmi C
   #include <stdio.h>
   dichiarazioni;
   funzione1()
     { <dichiarazioni>
       <istruzioni> }
   dichiarazioni;
   funzione2()
     { <dichiarazioni>
       <istruzioni> }
   main()
   { <dichiarazioni>
     <istruzioni> }

Programmazione - Paolo Valente, 2008/2009
Esempio struttura dei programmi C++
   #include <iostream>
   dichiarazioni;
   funzione1()
     { <dichiarazioni mescolate ad istruzioni>
     }
   dichiarazioni;
   funzione2()
     { <dichiarazioni mescolate ad istruzioni>
     }
   main()
     { <dichiarazioni mescolate ad istruzioni>
     }

Programmazione - Paolo Valente, 2008/2009
Regole di visibilità degli
   identificatori (scope) e tempo
       di vita delle variabili




Programmazione - Paolo Valente, 2008/2009
Caratteristiche di una variabile
                     (già note)
   Nome: identificatore

   Indirizzo (lvalue): locazione di memoria a partire
   dalla quale è memorizzato l'oggetto riferito dalla
   variabile

   Valore (rvalue): contenuto dell’area di memoria
   associata alla variabile


   Tipo: insieme di valori che la variabile può
   assumere e di operazioni ad essi applicabili
Programmazione - Paolo Valente, 2008/2009
Caratteristiche di una variabile
                 completamento
   Nome: statico

   Indirizzo (lvalue): statico

   Valore (rvalue): dinamico
   Tipo: statico
    – Il C/C++ è un linguaggio con tipizzazione
      statica e forte
    – Il tipo di una variabile non cambia durante
      l'esecuzione del programma

Programmazione - Paolo Valente, 2008/2009
Visibilità e tempo di vita
    Campo di visibilità (scope) di un identificatore:
    parte (del testo) di un programma in cui
    l'identificatore può essere usato
           in C, C++, Pascal → determinato staticamente
           in LISP → determinato dinamicamente
    Tempo di vita di un oggetto: intervallo di
    tempo in cui l'oggetto è mantenuto in memoria
           in FORTRAN → tempo di vita statico
           in C, C++, Pascal → tempo di vita dinamico
   NOTA: Scope e tempo di vita possono non coincidere

Programmazione - Paolo Valente, 2008/2009
Regole di visibilità statiche e dinamiche
• Regole di visibilità: regole con cui si stabilisce il
  campo di visibilità degli identificatori
• Due alternative
     – Regole di visibilità statiche: il campo di visibilità è
       stabilito in base al testo del programma, cioè in base a
       dove sono dichiarati gli identificatori
     – Regole di visibilità dinamiche: il campo di visibilità è
       stabilito dinamicamente in base alla sequenza di
       chiamata delle funzioni



Programmazione - Paolo Valente, 2008/2009
Dichiarazioni, visibilità e tempo di vita
Vi sono tre casi principali di dichiarazione di
identificatori:

    1. Identificatori dichiarati all’interno di un blocco (di
       una funzione o di un qualsiasi altro blocco) o
       nella lista dei parametri formali di una funzione
    2. Identificatori dichiarati nel blocco del main()
    3. Identificatori dichiarati all’esterno di funzioni



Programmazione - Paolo Valente, 2008/2009
Caso 1: Variabili interne ad un blocco
• Il campo di visibilità degli identificatori dichiarati
  all’interno di un blocco è il blocco stesso
• Sono visibili: dal punto in cui sono dichiarati fino alla fine
  del blocco (con una eccezione!)
• Se si tratta di definizioni di variabili/costanti, queste ultime
  hanno tempo di vita che va dal momento della definizione
  fino alla fine dell'esecuzione delle istruzioni del blocco
  (senza eccezioni)

ECCEZIONE
     – Se nel blocco compare un blocco innestato in cui è dichiarato
       un identificatore con lo stesso nome, la variabile del blocco
       esterno rimane in vita, ma non è visibile nel blocco innestato
Programmazione - Paolo Valente, 2008/2009
Esempio 1
  #include <iostream>

  funzione1()
    { int bz=5;
                                            La variabile bz ha tempo di vita
      bz++;
                                            e scope (visibilità) limitato a tutto
      cout<<bz;
                                            e solo il blocco della funzione1()
    }

  funzione2()
    { int abc=0;
      abc=abc*10;
      cout<<abc;
    }

Programmazione - Paolo Valente, 2008/2009
Esempio 2
  #include <iostream>
  funzione1()
    { int bz=5;
       float ak=3.2;          Le variabili bz, ak, ps hanno tempo di vita
       int ps=9;              relativo a tutto blocco della funzione1()
          ...
              {
                int ps=bz+5;
                cout<<ps ; ?
              }
                       ?
        cout<<ps;
      ...
                 Le variabili bz, ak hanno scope relativo a tutto
    }
                             il blocco della funzione1().
                             La variabile ps definita nel blocco esterno ha scope
                             relativo a tutto il blocco della funzione1(), fatta
                             eccezione per il blocco interno.
Programmazione - Paolo Valente, 2008/2009
Unicità e ordine di definizione
                     degli identificatori
• Definizioni di costanti e variabili associano ad un
  identificatore una costante o una variabile
   – L’associazione dell’identificatore all’oggetto deve essere
     unica per tutto il suo campo di azione

Esempi
  { int intervallo = 5;
    int Y, Z, intervallo;
 }
  Sono scorrette perché il simbolo intervallo è definito due
  volte nello stesso campo di azione (blocco)


Programmazione - Paolo Valente, 2008/2009
Caso 2: Variabili del main()
• In C/C++, le variabili dichiarate nella funzione
  main()
     – Se si tratta di definizioni di variabili/costanti, vivono
       quanto la funzione main(), ovvero hanno tempo di vita
       pari alla durata del programma
     – ma, in generale non sono visibili in qualunque parte
       del programma, perché main() è una funzione come
       tutte le altre
       → visibilità degli identificatori limitata al blocco in
       cui sono dichiarati

         NON SONO VARIABILI CON SCOPE GLOBALE!
Programmazione - Paolo Valente, 2008/2009
Esempio 3
#include <iostream>

fun()
  { int bz=5;                               La variabile bz ha tempo di vita
    bz++;                                   e scope limitato al blocco della
                                            fun()
  }

main()
  { int as=10;                                   La variabile as e la variabile xt hanno
     int xt=5;                                   tempo di vita pari alla durata del
     xt=xt*as;                                   programma, ma scope limitato al
                                                 blocco del main().
     funzione1();
                                                 NON SONO VISIBILI IN fun()
     cout<<xt;
   }

Programmazione - Paolo Valente, 2008/2009
Caso 3: Variabili esterne alle funzioni
• Identificatori dichiarati all'esterno di funzioni sono visibili
  dal punto in cui sono dichiarati (non prima!) fino alla fine
  del file (con un’eccezione)
• Se si tratta di definizioni di variabili/costanti, le relative
  variabili/costanti hanno tempo di vita pari alla durata
  dell'intero programma (senza eccezioni)



ECCEZIONE
     – Se nel blocco di altre funzioni è dichiarata una variabile con lo
       stesso nome, la variabile esterna rimane in vita, ma non è
       visibile all’interno di quel blocco

Programmazione - Paolo Valente, 2008/2009
Struttura generale di un programma C/C++
         all’interno di un unico file
Esempio
   #include <iostream>
   dichiarazioni;

   funzione1()
                                            “S
     { <dichiarazioni>
                                                 co
       <istruzioni> }

                                                      p
   funzione2()
                                                          e”
     { <dichiarazioni>
        <istruzioni> }
   dichiarazioni;
   main()
     { <dichiarazioni>
        <istruzioni> }

Programmazione - Paolo Valente, 2008/2009
Esempio 4
  #include <iostream>
  int x=0;
  funct1()
     { x = x + 3; }
  funct2()
   {
                      /* è un’altra x rispetto
     int x = 10;
                         alla x globale! */
     funct1();
                                             10
     cout<<x; /* x = ?? */
   }
  main()
   {
     x++;
                                             1
     cout<<x; /* x = ?? */
     funct2();
                                             4
     cout<<x; /* x = ?? */
   }

Programmazione - Paolo Valente, 2008/2009
Nomenclatura
• Gli identificatori dichiarati nei blocchi sono
  comunemente denominati locali (al blocco)
     – Se si tratta di definizioni di variabili, si parla di variabili
       locali (al blocco)

• Gli identificatori dichiarati al di fuori dei blocchi, se
  il programma sta su un solo file, sono denominati
  globali
     – Se si tratta di definizioni di variabili ed il programma sta
       su un solo file, si parla di variabili globali




Programmazione - Paolo Valente, 2008/2009
Struttura generale di un programma C/C++
         all’interno di un unico file
Esempio
                                            Globali
   #include <iostream>
   dichiarazioni;
                                                      Locali
   funzione1()
     { <dichiarazioni>
       <istruzioni> }

   funzione2()
     { <dichiarazioni>
        <istruzioni> }
   dichiarazioni;
   main()
     { <dichiarazioni>
        <istruzioni> }

Programmazione - Paolo Valente, 2008/2009
Valori iniziali oggetti
• Il valore iniziale di un oggetto, variabile o costante con
  nome, dipende da dove tale oggetto è definito
     – All'interno di un blocco: corpo di una funzione
       (incluso la funzione main) o qualsiasi altro blocco
               Valore iniziale casuale
           o



     – Al di fuori di tutti i blocchi
               Valori iniziale 0
           o




Programmazione - Paolo Valente, 2008/2009
Parole chiave della lezione
• Concetto di
     – Blocco
     – Funzione

• Visibilità (scope) degli identificatori
• Tempo di vita delle variabili




Programmazione - Paolo Valente, 2008/2009

More Related Content

What's hot

Presentazione corretta algoritmi
Presentazione corretta algoritmiPresentazione corretta algoritmi
Presentazione corretta algoritmimattuzzi
 
07 - Programmazione: Tipi di base e conversioni
07 - Programmazione: Tipi di base e conversioni07 - Programmazione: Tipi di base e conversioni
07 - Programmazione: Tipi di base e conversioniMajong DevJfu
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio cughetta
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)STELITANO
 
Laboratorio Programmazione: In - Out variabili
Laboratorio Programmazione: In - Out variabiliLaboratorio Programmazione: In - Out variabili
Laboratorio Programmazione: In - Out variabiliMajong DevJfu
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi orestJump
 
MS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMobileSchool
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48hFLT.lab
 
13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++Majong DevJfu
 
Cosa sono gli algoritmi?
Cosa sono gli algoritmi?Cosa sono gli algoritmi?
Cosa sono gli algoritmi?mattuzzi
 

What's hot (20)

Algoritmi
Algoritmi Algoritmi
Algoritmi
 
Presentazione corretta algoritmi
Presentazione corretta algoritmiPresentazione corretta algoritmi
Presentazione corretta algoritmi
 
Flow chart
Flow chartFlow chart
Flow chart
 
07 - Programmazione: Tipi di base e conversioni
07 - Programmazione: Tipi di base e conversioni07 - Programmazione: Tipi di base e conversioni
07 - Programmazione: Tipi di base e conversioni
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 
Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)Lezione 5 (7 marzo 2012)
Lezione 5 (7 marzo 2012)
 
Linguaggio C++ - Basi
Linguaggio C++ - BasiLinguaggio C++ - Basi
Linguaggio C++ - Basi
 
T8 supporti
T8 supportiT8 supporti
T8 supporti
 
La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++
 
Pe t1 perl-intro
Pe t1 perl-introPe t1 perl-intro
Pe t1 perl-intro
 
Laboratorio Programmazione: In - Out variabili
Laboratorio Programmazione: In - Out variabiliLaboratorio Programmazione: In - Out variabili
Laboratorio Programmazione: In - Out variabili
 
Python - Primi passi
Python - Primi passi Python - Primi passi
Python - Primi passi
 
MS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partI
 
Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48h
 
13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++
 
T6 codice
T6 codiceT6 codice
T6 codice
 
T2 architettura
T2 architetturaT2 architettura
T2 architettura
 
Cosa sono gli algoritmi?
Cosa sono gli algoritmi?Cosa sono gli algoritmi?
Cosa sono gli algoritmi?
 

Viewers also liked

7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product lineMajong DevJfu
 
Architettura dei Calcolatori 06 Elementi Architetturali Di Base
Architettura dei Calcolatori 06 Elementi Architetturali Di BaseArchitettura dei Calcolatori 06 Elementi Architetturali Di Base
Architettura dei Calcolatori 06 Elementi Architetturali Di BaseMajong DevJfu
 
17 - Programmazione: Introduzione alle liste
17 - Programmazione: Introduzione alle liste17 - Programmazione: Introduzione alle liste
17 - Programmazione: Introduzione alle listeMajong DevJfu
 
12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatoriMajong DevJfu
 
09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del CodiceMajong DevJfu
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazioneMajong DevJfu
 
09 Esercizi Generali
09  Esercizi Generali09  Esercizi Generali
09 Esercizi Generaliguestbe916c
 
08 choosing connectors
08 choosing connectors08 choosing connectors
08 choosing connectorsMajong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural stylesMajong DevJfu
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA CloudMajong DevJfu
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processesMajong DevJfu
 
Pillole di programmazione in C
Pillole di programmazione in CPillole di programmazione in C
Pillole di programmazione in CNicola Corti
 

Viewers also liked (19)

7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
Architettura dei Calcolatori 06 Elementi Architetturali Di Base
Architettura dei Calcolatori 06 Elementi Architetturali Di BaseArchitettura dei Calcolatori 06 Elementi Architetturali Di Base
Architettura dei Calcolatori 06 Elementi Architetturali Di Base
 
2 Sigda - Database
2 Sigda - Database2 Sigda - Database
2 Sigda - Database
 
17 - Programmazione: Introduzione alle liste
17 - Programmazione: Introduzione alle liste17 - Programmazione: Introduzione alle liste
17 - Programmazione: Introduzione alle liste
 
esercizio sigda n 8
esercizio sigda n 8esercizio sigda n 8
esercizio sigda n 8
 
Lezione1 Linguaggio C
Lezione1 Linguaggio CLezione1 Linguaggio C
Lezione1 Linguaggio C
 
12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori12 - Programmazione: Array dinamici e puntatori
12 - Programmazione: Array dinamici e puntatori
 
09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice09 - Programmazione: Ingegneria del Codice
09 - Programmazione: Ingegneria del Codice
 
Py a5 python-text
Py a5 python-textPy a5 python-text
Py a5 python-text
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazione
 
5
55
5
 
Py a4 python-file
Py a4 python-filePy a4 python-file
Py a4 python-file
 
09 Esercizi Generali
09  Esercizi Generali09  Esercizi Generali
09 Esercizi Generali
 
08 choosing connectors
08 choosing connectors08 choosing connectors
08 choosing connectors
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
 
Uml3
Uml3Uml3
Uml3
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
Pillole di programmazione in C
Pillole di programmazione in CPillole di programmazione in C
Pillole di programmazione in C
 

Similar to 06 - Programmazione: Scope Variabili

Similar to 06 - Programmazione: Scope Variabili (20)

Js intro
Js introJs intro
Js intro
 
Guida C++
Guida C++Guida C++
Guida C++
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!
 
05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
Java codestyle & tipstricks
Java codestyle & tipstricksJava codestyle & tipstricks
Java codestyle & tipstricks
 
Corso c++
Corso c++Corso c++
Corso c++
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
Java lezione1
Java lezione1Java lezione1
Java lezione1
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 
Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)Deep diving C# 4 (Raffaele Rialdi)
Deep diving C# 4 (Raffaele Rialdi)
 
Vb.Net
Vb.NetVb.Net
Vb.Net
 
Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1Le basi di Pytthon 3 - Fondamenti n.1
Le basi di Pytthon 3 - Fondamenti n.1
 
MyJOrganizer presentazione
MyJOrganizer presentazioneMyJOrganizer presentazione
MyJOrganizer presentazione
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
 
Analizzatori di programmi in C
Analizzatori di programmi in CAnalizzatori di programmi in C
Analizzatori di programmi in C
 
La scomposizione in sotto programmi in C++.pptx
La scomposizione in sotto programmi in C++.pptxLa scomposizione in sotto programmi in C++.pptx
La scomposizione in sotto programmi in C++.pptx
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented Programming
 
Corso java base
Corso java baseCorso java base
Corso java base
 

More from Majong DevJfu

6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformationMajong DevJfu
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven ArchitectureMajong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture PortfolioMajong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural stylesMajong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architectureMajong DevJfu
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a productMajong DevJfu
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
25 architectural adaptationMajong DevJfu
 
24 dssa and_product_lines
24 dssa and_product_lines24 dssa and_product_lines
24 dssa and_product_linesMajong DevJfu
 
22 deployment and_mobility
22 deployment and_mobility22 deployment and_mobility
22 deployment and_mobilityMajong DevJfu
 
21 security and_trust
21 security and_trust21 security and_trust
21 security and_trustMajong DevJfu
 
20 nfp design_techniques
20 nfp design_techniques20 nfp design_techniques
20 nfp design_techniquesMajong DevJfu
 

More from Majong DevJfu (20)

6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
 
3
33
3
 
2
22
2
 
1
11
1
 
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
 
26 standards
26 standards26 standards
26 standards
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
25 architectural adaptation
 
24 dssa and_product_lines
24 dssa and_product_lines24 dssa and_product_lines
24 dssa and_product_lines
 
23 intro to_dsse
23 intro to_dsse23 intro to_dsse
23 intro to_dsse
 
22 deployment and_mobility
22 deployment and_mobility22 deployment and_mobility
22 deployment and_mobility
 
21 security and_trust
21 security and_trust21 security and_trust
21 security and_trust
 
20 nfp design_techniques
20 nfp design_techniques20 nfp design_techniques
20 nfp design_techniques
 

06 - Programmazione: Scope Variabili

  • 1. Visibilità e tempo di vita delle variabili (più sintesi di alcuni concetti della prima parte del corso)
  • 2. Struttura dei programmi C/C++ Un programma C/C++ deve essere contenuto in uno o più file (inquesto corso si assume tutto in un file): • Direttive per il pre-processore: # tipicamente per l’inclusione di file di intestazione (#include) Definizione della funzione speciale main() • ______________ Definizione di eventuali funzioni funz1(), funz2(), … • • Eventuali prototipi di funzioni Eventuali definizioni/dichiarazioni di costanti/variabili al di • fuori delle funzioni, come stiamo per vedere ... Programmazione - Paolo Valente, 2008/2009
  • 3. 1. Direttive al pre-processore SINTASSI: #comando Noi abbiamo visto la sola direttiva:    #include <nomefile> (utilizzata per includere altri file) Esempio: #include <iostream>  Esempio: #include <cmath> Questa direttiva serve per utilizzare funzioni e variabili definite all'interno di altri file. Ad esempio, grazie all'inclusione del file iostream, siamo riusciti ad utilizzare gli oggetti cout, cin e cerr Programmazione - Paolo Valente, 2008/2009
  • 4. 2. Funzione main () • main()è una funzione speciale con tre caratteristiche: – deve essere sempre presente – è la prima funzione che viene eseguita ovunque si trovi all’interno del file sorgente (stessa cosa vale nel caso di programma su più file) – quando termina l’esecuzione del main(), termina il programma • In C la funzione main() contiene due sezioni (la prima può eventualmente essere vuota) – Parte dichiarativa – Parte esecutiva Programmazione - Paolo Valente, 2008/2009
  • 5. Esempio in linguaggio C Esempio Direttive al #include <stdio.h> pre-processore main() Parte dichiarativa { <dichiarazioni> <istruzioni> Parte esecutiva } Non vi sono simboli speciali per separare la parte dichiarativa dalla parte esecutiva Programmazione - Paolo Valente, 2008/2009
  • 6. Esempio in linguaggio C++ Esempio Direttive al #include <iostream> pre-processore main() { <dichiarazione o istruzione> <dichiarazione o istruzione> ... } Programmazione - Paolo Valente, 2008/2009
  • 7. Concetto di blocco <blocco in C++> ::= <blocco in C> ::= { { <istruzione o dich.> [ <dichiarazioni >; ] <istruzione o dich.> <istruzioni>; ... } } NOTE • dopo un blocco non occorre il punto e virgola (il ; termina le istruzioni semplici, non è un separatore di istruzioni) • i blocchi possono essere innestati Programmazione - Paolo Valente, 2008/2009
  • 8. 3. Concetto di funzione • L’astrazione di funzione è presente in tutti i linguaggi di programmazione di alto livello. • È l’astrazione del concetto di operatore su un tipo di dato, ovvero è un componente software che cattura l'astrazione matematica di funzione: f : A × B × ... × Q → S con molti possibili ingressi ed una sola uscita (corrispondente al risultato). Esempio: int funzione1 ([ parametri; ] ) { possono anche mancare ... } Programmazione - Paolo Valente, 2008/2009
  • 9. Esempio struttura dei programmi C #include <stdio.h> dichiarazioni; funzione1() { <dichiarazioni> <istruzioni> } dichiarazioni; funzione2() { <dichiarazioni> <istruzioni> } main() { <dichiarazioni> <istruzioni> } Programmazione - Paolo Valente, 2008/2009
  • 10. Esempio struttura dei programmi C++ #include <iostream> dichiarazioni; funzione1() { <dichiarazioni mescolate ad istruzioni> } dichiarazioni; funzione2() { <dichiarazioni mescolate ad istruzioni> } main() { <dichiarazioni mescolate ad istruzioni> } Programmazione - Paolo Valente, 2008/2009
  • 11. Regole di visibilità degli identificatori (scope) e tempo di vita delle variabili Programmazione - Paolo Valente, 2008/2009
  • 12. Caratteristiche di una variabile (già note) Nome: identificatore Indirizzo (lvalue): locazione di memoria a partire dalla quale è memorizzato l'oggetto riferito dalla variabile Valore (rvalue): contenuto dell’area di memoria associata alla variabile Tipo: insieme di valori che la variabile può assumere e di operazioni ad essi applicabili Programmazione - Paolo Valente, 2008/2009
  • 13. Caratteristiche di una variabile completamento Nome: statico Indirizzo (lvalue): statico Valore (rvalue): dinamico Tipo: statico – Il C/C++ è un linguaggio con tipizzazione statica e forte – Il tipo di una variabile non cambia durante l'esecuzione del programma Programmazione - Paolo Valente, 2008/2009
  • 14. Visibilità e tempo di vita Campo di visibilità (scope) di un identificatore: parte (del testo) di un programma in cui l'identificatore può essere usato in C, C++, Pascal → determinato staticamente in LISP → determinato dinamicamente Tempo di vita di un oggetto: intervallo di tempo in cui l'oggetto è mantenuto in memoria in FORTRAN → tempo di vita statico in C, C++, Pascal → tempo di vita dinamico NOTA: Scope e tempo di vita possono non coincidere Programmazione - Paolo Valente, 2008/2009
  • 15. Regole di visibilità statiche e dinamiche • Regole di visibilità: regole con cui si stabilisce il campo di visibilità degli identificatori • Due alternative – Regole di visibilità statiche: il campo di visibilità è stabilito in base al testo del programma, cioè in base a dove sono dichiarati gli identificatori – Regole di visibilità dinamiche: il campo di visibilità è stabilito dinamicamente in base alla sequenza di chiamata delle funzioni Programmazione - Paolo Valente, 2008/2009
  • 16. Dichiarazioni, visibilità e tempo di vita Vi sono tre casi principali di dichiarazione di identificatori: 1. Identificatori dichiarati all’interno di un blocco (di una funzione o di un qualsiasi altro blocco) o nella lista dei parametri formali di una funzione 2. Identificatori dichiarati nel blocco del main() 3. Identificatori dichiarati all’esterno di funzioni Programmazione - Paolo Valente, 2008/2009
  • 17. Caso 1: Variabili interne ad un blocco • Il campo di visibilità degli identificatori dichiarati all’interno di un blocco è il blocco stesso • Sono visibili: dal punto in cui sono dichiarati fino alla fine del blocco (con una eccezione!) • Se si tratta di definizioni di variabili/costanti, queste ultime hanno tempo di vita che va dal momento della definizione fino alla fine dell'esecuzione delle istruzioni del blocco (senza eccezioni) ECCEZIONE – Se nel blocco compare un blocco innestato in cui è dichiarato un identificatore con lo stesso nome, la variabile del blocco esterno rimane in vita, ma non è visibile nel blocco innestato Programmazione - Paolo Valente, 2008/2009
  • 18. Esempio 1 #include <iostream> funzione1() { int bz=5; La variabile bz ha tempo di vita bz++; e scope (visibilità) limitato a tutto cout<<bz; e solo il blocco della funzione1() } funzione2() { int abc=0; abc=abc*10; cout<<abc; } Programmazione - Paolo Valente, 2008/2009
  • 19. Esempio 2 #include <iostream> funzione1() { int bz=5; float ak=3.2; Le variabili bz, ak, ps hanno tempo di vita int ps=9; relativo a tutto blocco della funzione1() ... { int ps=bz+5; cout<<ps ; ? } ? cout<<ps; ... Le variabili bz, ak hanno scope relativo a tutto } il blocco della funzione1(). La variabile ps definita nel blocco esterno ha scope relativo a tutto il blocco della funzione1(), fatta eccezione per il blocco interno. Programmazione - Paolo Valente, 2008/2009
  • 20. Unicità e ordine di definizione degli identificatori • Definizioni di costanti e variabili associano ad un identificatore una costante o una variabile – L’associazione dell’identificatore all’oggetto deve essere unica per tutto il suo campo di azione Esempi { int intervallo = 5; int Y, Z, intervallo;  } Sono scorrette perché il simbolo intervallo è definito due volte nello stesso campo di azione (blocco) Programmazione - Paolo Valente, 2008/2009
  • 21. Caso 2: Variabili del main() • In C/C++, le variabili dichiarate nella funzione main() – Se si tratta di definizioni di variabili/costanti, vivono quanto la funzione main(), ovvero hanno tempo di vita pari alla durata del programma – ma, in generale non sono visibili in qualunque parte del programma, perché main() è una funzione come tutte le altre → visibilità degli identificatori limitata al blocco in cui sono dichiarati NON SONO VARIABILI CON SCOPE GLOBALE! Programmazione - Paolo Valente, 2008/2009
  • 22. Esempio 3 #include <iostream> fun() { int bz=5; La variabile bz ha tempo di vita bz++; e scope limitato al blocco della fun() } main() { int as=10; La variabile as e la variabile xt hanno int xt=5; tempo di vita pari alla durata del xt=xt*as; programma, ma scope limitato al blocco del main(). funzione1(); NON SONO VISIBILI IN fun() cout<<xt; } Programmazione - Paolo Valente, 2008/2009
  • 23. Caso 3: Variabili esterne alle funzioni • Identificatori dichiarati all'esterno di funzioni sono visibili dal punto in cui sono dichiarati (non prima!) fino alla fine del file (con un’eccezione) • Se si tratta di definizioni di variabili/costanti, le relative variabili/costanti hanno tempo di vita pari alla durata dell'intero programma (senza eccezioni) ECCEZIONE – Se nel blocco di altre funzioni è dichiarata una variabile con lo stesso nome, la variabile esterna rimane in vita, ma non è visibile all’interno di quel blocco Programmazione - Paolo Valente, 2008/2009
  • 24. Struttura generale di un programma C/C++ all’interno di un unico file Esempio #include <iostream> dichiarazioni; funzione1() “S { <dichiarazioni> co <istruzioni> } p funzione2() e” { <dichiarazioni> <istruzioni> } dichiarazioni; main() { <dichiarazioni> <istruzioni> } Programmazione - Paolo Valente, 2008/2009
  • 25. Esempio 4 #include <iostream> int x=0; funct1() { x = x + 3; } funct2() { /* è un’altra x rispetto int x = 10; alla x globale! */ funct1(); 10 cout<<x; /* x = ?? */ } main() { x++; 1 cout<<x; /* x = ?? */ funct2(); 4 cout<<x; /* x = ?? */ } Programmazione - Paolo Valente, 2008/2009
  • 26. Nomenclatura • Gli identificatori dichiarati nei blocchi sono comunemente denominati locali (al blocco) – Se si tratta di definizioni di variabili, si parla di variabili locali (al blocco) • Gli identificatori dichiarati al di fuori dei blocchi, se il programma sta su un solo file, sono denominati globali – Se si tratta di definizioni di variabili ed il programma sta su un solo file, si parla di variabili globali Programmazione - Paolo Valente, 2008/2009
  • 27. Struttura generale di un programma C/C++ all’interno di un unico file Esempio Globali #include <iostream> dichiarazioni; Locali funzione1() { <dichiarazioni> <istruzioni> } funzione2() { <dichiarazioni> <istruzioni> } dichiarazioni; main() { <dichiarazioni> <istruzioni> } Programmazione - Paolo Valente, 2008/2009
  • 28. Valori iniziali oggetti • Il valore iniziale di un oggetto, variabile o costante con nome, dipende da dove tale oggetto è definito – All'interno di un blocco: corpo di una funzione (incluso la funzione main) o qualsiasi altro blocco Valore iniziale casuale o – Al di fuori di tutti i blocchi Valori iniziale 0 o Programmazione - Paolo Valente, 2008/2009
  • 29. Parole chiave della lezione • Concetto di – Blocco – Funzione • Visibilità (scope) degli identificatori • Tempo di vita delle variabili Programmazione - Paolo Valente, 2008/2009