per costruire specifici componenti software

Documenti analoghi
Esiste però anche un ambiente globale:! quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali!

Esiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali

PROCEDURE. Una procedura permette di. void p(int x) { x = x * 2; printf( %d, x); }

Programmi con argomenti passati da linea di comando

void p(int x) { float y = x * sin(0.75); printf( %f, y); }

STRUTTURA DI UN PROGRAMMA

Classi di memorizzazione

Università degli Studi di Cassino Corso di Fondamenti di Informatica Visibilità e tempo di vita delle variabili

Lezione 6. Visibilità degli identificatori e tempo di vita degli oggetti

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Programmazione (imperativa)

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

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

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

Funzioni, Stack e Visibilità delle Variabili in C

Lezione 8. Visibilità degli identifcatori e tempo di vita degli oggetti

Corso sul linguaggio Java

Espressioni con effetti collaterali

Parametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi

La gestione della memoria dinamica Heap

Introduzione al C. Tipi derivati

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Corso di Fondamenti di Informatica

Introduzione al linguaggio C Puntatori

Laboratorio di programmazione

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

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Modelli di interazione tra processi

Tempo di vita e scope delle variabili

Funzioni in C. Architetture multi-componente

Introduzione. Le funzioni in C. Funzioni. Cosa succede

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Funzioni. (Passaggio dei parametri per riferimento) Passaggio dei parametri

Il linguaggio C Il linguaggio C. Caratteristiche del C. Caratteristiche del C. Linguaggi di Programmazione I. Ferdinando Cicalese

Tipi di dato personalizzati Array di struct. Tipi di dato utente. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Passare argomenti al programma

Il linguaggio C funzioni e puntatori

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Lezione 6 programmazione in Java

Strutture Dati. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Strutture Dati 1 / 16

Il linguaggio C. Notate che...

LINGUAGGI DI ALTO LIVELLO

AMBIENTI DI PROGRAMMAZIONE

Scope, Memoria e Tabella dei Simboli

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

Applicando lo stesso meccanismo al tipo puntatore, possiamo dichiarare un array di puntatori:

C: panoramica. Violetta Lonati

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Programmazione con Java

ACSO Programmazione di Sistema e Concorrente

Uso di metodi statici. Walter Didimo

Linguaggi e Ambienti di Programmazione

IL PRIMO PROGRAMMA IN C

Puntatori. Fondamenti di Programmazione

Lab 01 Introduzione a Codelite

File binari e file di testo

Allocazione dinamica della memoria

Fondamenti di Informatica T. Linguaggio C: i puntatori

Il C nel C++: Funzioni

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

I puntatori (richiamo)

Struttura di un Programma C

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Puntatori in C Lucidi della Pof.ssa Pazienza

Si possono applicare solo a variabili (di tipi interi, floating o puntatori), ma non a espressioni generiche (anche se di questi tipi).

Capitolo 5 - Funzioni

Strategie di programmazione

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011

IL CONCETTO DI PACKAGE

Spazio di indirizzamento virtuale

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Linguaggio C: PUNTATORI

Modularizzazione del software

Ottenere una modifica del parametro attuale

Assembly (3): le procedure

Programmazione Procedurale in Linguaggio C++

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI

Stringhe in C. Alessandra Giordani Lunedì 23 aprile 2012

Linguaggi di alto livello. Barriera di astrazione. Pascal. Cobol. Fortran. Basic. Modula-2. Lisp. Simula67 Scheme. Smalltalk C++ Prolog AN

Programmazione ad oggetti

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

Laboratorio di linguaggi

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Lezione 5 Namespace e JavaDoc

Le procedure. L insieme delle istruzioni (4) Prima della chiamata di una procedura. Le procedure (2) Architetture dei Calcolatori (lettere A-I)

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

La classe java.lang.object

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

il tipo di parallelismo dipende dal grado di cooperazione

Concetto di Funzione e Procedura METODI in Java

Il puntatore. Il puntatore

Modulo 2: Strutture fondamentali della programmazione Java

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Procedura. Procedure e funzioni. Esempio di procedura in C. Procedure in C. Esempio con prototipo. Esecuzione del codice

Definizione di classi. Walter Didimo

Array e puntatori in C

La Gestione della Memoria. Carla Binucci e Walter Didimo

Transcript:

VARIABILI LOCALI & Come è noto, in C le variabili possono essere: locali, se definite dentro a una funzione (inclusi i parametri) tempo di vita = l attivazione della funzione visibilità = entro la funzione globali, se definite fuori da qualunque funzione (cioè "a livello esterno") tempo di vita = l intero programma visibilità = ogni file in cui sono dichiarate (dalla dichiarazione in avanti) Nel primo caso, le variabili globali: costituiscono un mezzo per lo scambio di informazioni fra cliente e servitore alternativo al passaggio dei parametri sono un mezzo bidirezionale: la funzione può sfruttarle per memorizzare una informazione destinata a sopravviverle (effetto collaterale o side effect) ma introducono un accoppiamento fra cliente e servitore che limita la riusabilità A cosa servono le variabili globali? per scambiare informazioni fra cliente e servitore in modo alternativo al passaggio dei parametri per costruire specifici componenti software dotati di stato Perché l'uso di variabili globali in alternativa ai parametri limita la riusabilità? perché rendono la funzione stessa dipendente dall ambiente esterno la funzione opera correttamente solo se l ambiente globale definisce tali variabili con quel preciso nome, di quel preciso tipo, e con quell esatto significato se una di tali variabili non è definita - o, peggio, lo è con diverso significato! - la funzione non può funzionare!

Quindi, le variabili globali: non vanno usate per evitare di passare uno o più parametri! servono per costruire specifici componenti software dotati di stato. Una possibile architettura: un file che definisca la funzione e una variabile globale che ricordi lo stato un file dispari.h che dichiari la funzione La variabile globale non si deve usare da fuori! Si vuole costruire un componente software numeridispari che fornisca una funzione int prossimodispari(void) che restituisca via via il "successivo" dispari Per fare questo, tale componente deve tenere memoria al suo interno dell ultimo valore fornito. Dunque, non è una funzione in senso matematico, perché, interrogata più volte, dà ogni volta una risposta diversa. Una possibile realizzazione: int ultimovalore = 0; (sfrutta il fatto che i dispari hanno la forma 2k+1) dispari.h int prossimodispari(void);

L ENVIRONMENT GLOBALE Le variabili globali in C: sono allocate nell area dati globale esistono già prima della chiamata del main sono inizializzate automaticamente a 0 salvo diversa indicazione (opportuna!) possono essere mascherate in una funzione da una variabile locale omonima sono visibili, previa dichiarazione extern, in tutti i file dell applicazione L ENVIRONMENT GLOBALE E PROBLEMATICHE DI PROTEZIONE Potrebbe essere utile avere variabili globali nel senso di permanenti come tempo di vita (per poter costruire componenti dotati di stato)... ma anche protette, nel senso che solo non tutti possano accedervi. VARIABILI STATICHE L ENVIRONMENT GLOBALE E PROBLEMATICHE DI PROTEZIONE Il fatto che le variabili globali in C siano potenzialmente visibili in tutti i file dell applicazione pone dei problemi di protezione: Cosa succede se un componente dell applicazione altera una variabile globale essenziale?? Nel nostro esempio: cosa succede se qualcuno altera ultimovalore? VARIABILI STATICHE In C, una variabile può essere dichiarata static. In questo modo, essa: è permanente come tempo di vita ma è protetta, in quanto è visibile solo entro il suo scope di definizione. Nel caso di una variabile globale, ogni tentativo di accedervi da altri file, tramite dichiarazioni extern, sarà stroncato dal compilatore.

L "PROTETTO" Realizzazione alternativa del componente: static int ultimovalore = 0; (dispari.h non cambia) VARIABILI STATICHE DENTRO A FUNZIONI Una variabile statica può essere definita anche dentro a una funzione. Così: è comunque protetta, in quanto visibile solo dentro alla funzione (come ogni variabile locale) ma è anche permanente, in quanto il suo tempo di vita diventa quello dell intero programma. Consente di costruire componenti (funzioni) dotati di stato ma indipendenti dall esterno. L "PROTETTO" In che senso è "protetto"? La variabile ultimovalore è ora inaccessibile dall'esterno di questo file: l unico modo di accedervi è tramite prossimodispari(). Se anche qualcuno, fuori, tentasse di accedere tramite una dichiarazione extern, il linker non troverebbe la variabile. Se anche un altro file definisse un altra variabile globale di nome ultimovalore, non ci sarebbe comunque collisione fra le due, perché questa esternamente non esiste. L "PROTETTO" Realizzazione alternativa del componente: static int ultimovalore = 0; (dispari.h non cambia)

VARIABILI STATICHE Quindi, la parola chiave static ha sempre e comunque due effetti rende l oggetto permanente rende l oggetto protetto (invisibile fuori dal suo scope di definizione) ma se ne vede sempre uno solo per volta una variabile definita in una funzione, che è comunque protetta, viene resa permanente una variabile globale, già di per sé permanente, viene resa protetta.