25
eliana minicozzi linguaggi1 2 005-2006 1 L1 Lezione3

Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

Embed Size (px)

Citation preview

Page 1: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

1

L1 Lezione3

Page 2: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

2

Parametri :’interfaccia tra la procedura chiamante e quella chiamata Parametri: mezzo di comunicazione

esplicita dell’ informazione fra l’unità di esecuzione chiamante e la procedura chiamata. Domanda:qual è la differenza fra i parametri e i”data Object” globali?

3 categorie di parametri: In,Out, IN OUT.

Page 3: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

3

Ovvio significato dei parametri In: contengono l’ informazione che l’ unità di

esecuzione chiamante passa alla procedura nel momento della chiamata: solitamente passati per valore.

Out : Informazione dalla procedura chiamata alla chiamante nel momento in cui avviene il ritorno del controllo alla chiamante.

In Out: che hanno funzioni sia dell’ IN che dell’ Out Out e In Out sono solitamente passati per indirizzo :

cioè i parametri attuali sono il nome del data object in cui va messo l’ eventuale valore di ritorno.

Page 4: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

4

Ancora sui parametri

I parametri devono essere specificati sia nell’unità che chiama la procedura (statement di chiamata) sia nella definizione della procedura chiamata.

I Parametri nell’unità che chiama si chiamano parametri reali (attuali), nella procedura chiamata si chiamano parametri formali. I parametri attuali e i parametri formali corrispondenti devono essere dello stesso tipo nei linguaggi fortemente tipati.

Page 5: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

5

Legame parametri con il tipo

REGOLA: avviene a compile time.Eccezioni: - I parametri formali vengono legati al tipo a run-

time quando la procedura è chiamata. Questo naturalmente non permette un controllo dei tipi a compile time.

- I parametri formali vengono legati a run-time con sottotipi di qualche tipo di base a cui si è legato il parametro a tempo di compilazione.

Quest’ultima alternativa ovviamente permette il controllo dei tipi a compile-time.

Page 6: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

6

Associazione:Parametri attuali con parametri formali

− per posizione: a seconda della posizione relativa nella sequenza dei parametri;

− per nome: il nome del parametro formale è aggiunto come prefisso al parametro attuale;

Page 7: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

7

Esempio di Associazione Esempio: supponiamo l’intestazione della seguente

procedura (ADA):procedure TEST (A: in Atype; b: in out Btype; C: out Ctype)

invocazione con associazione per posizione : TEST(X, Y, Z); Invocazione con associazione per nome: TEST(A=>X, C=>Z, b=>Y);

Una ulteriore tecnica `e la cosiddetta associazione di default. Essa permette di specificare valori di default ai parametri formali che non sono statilegati a valori da parametri attuali (valida ovviamente solo per parametri In)

Page 8: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

8

Implementazione dei Parametri Tutti i tipi di parametri possono essere

implementati per indirizzo o per copia : Per capire al volo le diapositive seguenti ricordate che gli IN contengono informazione mandata, per essere usata, dalla procedura chiamante, gli OUT devono riportare alla chiamante i risultati della computazione che si è svolta nella procedura chiamata

Page 9: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

9

Parametri IN implementati per indirizzo il parametro IN è trattato come una costante

con nome: il compilatore controllerà che il parametro

formale non sia modificato dalla procedura: non appaia nella parte sinistra di uno

statement di assegnazione , non sia usato, nella procedura, come

parametro reale di OUT o di IN OUT in uno statement di chiamata di un’ altra procedura ……....

Page 10: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

10

Parametri IN implementati per copia Il parametro attuale è trattato come valore di

una variabile locale alla procedura chiamata (il cui nome è il nome del parametro formale). Può essere modificato durante l’esecuzione della procedura e la sua modifica non ha chiaramente effetti sul parametro reale .

Il Pascal usa per default questa implementazione

Page 11: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

11

Parametri OUT implementati per indirizzo Per distinguerli dai parametri IN OUT, spesso i

compilatori, quando sono passati per indirizzo, permettono l’accesso solo per modificarne il valore e non per usarlo: parametri OUT sempre alla sinistra degli eventuali statement di assegnazione! Nell’implementazione per copia, il parametro formale è usato come una variabile locale il cui valore iniziale è indefinito. Al termine della procedura il suo valore è passato al parametro reale.

Page 12: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

12

Parametri OUT implementati per copia Nell’implementazione per copia, il parametro

formale è usato come una variabile locale il cui valore iniziale è indefinito. Al termine della procedura il suo valore è passato al parametro reale

Page 13: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

13

Parametri IN OUT implementati per indirizzo

Non ci sono restrizioni del parametro formale dentro la procedura.

In Pascal questo è il modello usato per i parametri VAR.

Page 14: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

14

Parametri IN OUT implementati per copia Ritroviamo tutto quello che abbiamo nelle

implementazioni per copia degli IN e degli OUT: Si crea una variabile locale per il parametro formale e il parametro reale viene copiato nella variabile locale. Quando la procedura termina, il valore finale del parametro formale viene copiato nella locazione del parametro reale.

L’implementazione IN OUT per copia è comunemente chiamato: value-result parameter passing.

Page 15: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

15

Ancora IN OUT

Nel caso degli IN-OUT l’unica differenza nel passaggio per copia o per indirizzo è che nel secondo caso il parametro reale è modificato ogni volta che il parametro formale è modificato; nel primo caso, gli effetti delle modifiche si hanno solo alla fine della procedura

Page 16: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

16

ALIASING

Aliasing è la possibilità di riferirsi con nomi differenti alla stessa locazione.

Esempio: program main; var A : integer; procedure test ( var X, Y : integer ); begin X : = A + Y; writeln (A, X, Y); end; begin A : = 1; Test (A,A); end

Poiché “var” in Pascal è implementatoper indirizzo qui A, Y e X sono legati alla stessa locazione

Il risultato in Pascal è 2 2 2Contrariamente a quello che Ci si aspetta

Page 17: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

17

Discussione esempio aliasing

L’invocazione Test (A, A) produce che A, Y e X sono legati alla stessa locazione producendo aliasing.

L’aliasing diminuisce molto la comprensibilità della procedura e forza il programmatore a dipendere a livelli profondi dall’implementazione del linguaggio.

Per esempio nell’implementazione del Pascal dei parametri definiti VAR, il programma scriverà 2 2 2;

Se (cosa che non è) i VAR fossero implementati per copia, il risultato del writeln sarà 1 2 1. Cosa che uno si aspetta. Ma anche in questo caso al termine di TEST la locazione identificata da A, potrà contenere 1 o 2, in dipendenza dall’ordine in cui i parametri formali saranno scritti in A

Page 18: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

18

Riassumendo: Aliasing avviene quando

a) variabili non locali e parametri formali implementati per indirizzo condividono lo stesso indirizzo

b) quando due parametri reali condividono la stessa locazione.

c) quando c’è il trasferimento di valori in locazioni diverse.

In ogni caso anche quando i parametri sono implementati per copia, può ancora verificarsi ambiguità quando due OUT o IN OUT parametri reali si riferiscono alla stessa entità dato.

Page 19: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

19

Definizione di funzioni o “VRP: value-returning-procedure” Esempio di definizione in Pascal e in Modula

2: In Pascal

function F (X: Xtype; Y: Ytype) : Result type; In Modula 2

procedure F (X: Xtype ; Y: Ytype) : Result type;

Page 20: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

20

Funzioni: esecuzione. Sono procedure che restituiscono un valore alla unità chiamante: esse

quindi hanno bisogno, in aggiunta a tutto quello che riguarda le procedure, di aver definito il tipo del valore che ritornano.

Sono realizzate • o creando, senza previa definizione, nell’ambiente locale della

procedura chiamata, una pseudovariabile legata al nome della VRP, a cui si può accedere solo per modifiche (per es. deve apparire solo alla sinistra di uno statement di assegnazione).Il cui valore viene ritornato all’ unità chiamante quando finisce l’ esecuzione della VPR.

• o utilizzando uno statement di ritorno,contenente Return seguito da un’ espressione, per restituire esplicitamente il controllo alla procedura chiamante inviandole allo stesso tempo il valore dell’espressione sopracitata.

Nota che: tutti i tipi di parametri che pure si possono implementare possono avere effetti indesiderabili in quanto l’ espressione che astrae la VRP non dovrebbe cambiare implicitamente nessun valore dell’ ambiente in cui viene invocata.

Page 21: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

21

Overloading

E’ permessa la definizione di due procedure (funzioni) con lo stesso nome a patto che il numero di parametri e/o il tipo di essi (nel caso di funzione e/o il tipo del valore di ritorno) siano diversi .

Page 22: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

22

Esempio di overloading in ADA procedure MAIN is R: FLOAT:= 0.0; I: INTEGER:= 0; function F(X: FLOAT) return INTEGER is begin return 1; end; function F(X: INTEGER) return INTEGER is begin return 2; end; function F(X: FLOAT; Y: INTEGER) return INTEGER is begin return 3; end;

Page 23: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

23

Segue Esempio di overloading in Ada function F(X: INTEGER; Y: FLOAT) return INTEGER is begin return 4; end; function F(X: INTEGER) return FLOAT is begin return 5.0; end; begin put (F(R)); -- Stampa 1 put (F(I)); -- Stampa 2 put (F(R,I)); -- Stampa 3 put (F(I,R)); -- Stampa 4 R:= F(I); put (Integer(R)); -- Stampa 5 end MAIN;

Page 24: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

24

Riassunto Astrazione Procedurale Nell’astrazione procedurale abbiamo visto due importanti

proprietà: INCAPSULAMENTO e PARAMETRIZZAZIONE Incapsulamento: è la proprietà di nascondere i dettagli dell’

implementazione di una procedura p e quindi anche dell’ ambiente locale, all’unità di esecuzione che usa p, ovvero è la possibilità di isolare l’implementazione di p dall’ambiente in cui viene usato.

Parametrizzazione: è la proprietà mediante la quale una procedura può effettuare attività diverse al variare dei ‘valori’ dei suoi parametri.

Per esempio “ordinamento su array”, può ordinare ogni array di ogni grandezza purché corrisponda alla definizione dei parametri

Page 25: Eliana minicozzi linguaggi1 2005-20061 L1 Lezione3

eliana minicozzi linguaggi1 2005-2006

25

Esercizi

ESERCIZIParadigmaImperativoProcedure.doc