Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
eliana minicozzi linguaggi1 2005-20061 L1 Lezione3
2
eliana minicozzi linguaggi1 2005-2006 2 Parametri :interfaccia tra la procedura chiamante e quella chiamata Parametri: mezzo di comunicazione esplicita dell informazione fra lunità di esecuzione chiamante e la procedura chiamata. Domanda:qual è la differenza fra i parametri e idata Object globali? 3 categorie di parametri: In,Out, IN OUT.
3
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.
4
eliana minicozzi linguaggi1 2005-2006 4 Ancora sui parametri I parametri devono essere specificati sia nellunità che chiama la procedura (statement di chiamata) sia nella definizione della procedura chiamata. I Parametri nellunità 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.
5
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. Questultima alternativa ovviamente permette il controllo dei tipi a compile-time.
6
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;
7
eliana minicozzi linguaggi1 2005-2006 7 Esempio di Associazione Esempio: supponiamo lintestazione 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)
8
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
9
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 ……....
10
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 lesecuzione della procedura e la sua modifica non ha chiaramente effetti sul parametro reale. Il Pascal usa per default questa implementazione
11
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 laccesso solo per modificarne il valore e non per usarlo: parametri OUT sempre alla sinistra degli eventuali statement di assegnazione! Nellimplementazione 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.
12
eliana minicozzi linguaggi1 2005-2006 12 Parametri OUT implementati per copia Nellimplementazione 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
13
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.
14
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. Limplementazione IN OUT per copia è comunemente chiamato: value-result parameter passing.
15
eliana minicozzi linguaggi1 2005-2006 15 Ancora IN OUT Nel caso degli IN-OUT lunica 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
16
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 2 Contrariamente a quello che Ci si aspetta
17
eliana minicozzi linguaggi1 2005-2006 17 Discussione esempio aliasing Linvocazione Test (A, A) produce che A, Y e X sono legati alla stessa locazione producendo aliasing. Laliasing diminuisce molto la comprensibilità della procedura e forza il programmatore a dipendere a livelli profondi dallimplementazione del linguaggio. Per esempio nellimplementazione 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 dallordine in cui i parametri formali saranno scritti in A
18
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.
19
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;
20
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, nellambiente 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 dellespressione 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.
21
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.
22
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;
23
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;
24
eliana minicozzi linguaggi1 2005-2006 24 Riassunto Astrazione Procedurale Nellastrazione 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, allunità di esecuzione che usa p, ovvero è la possibilità di isolare limplementazione di p dallambiente 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
25
eliana minicozzi linguaggi1 2005-2006 25 Esercizi ESERCIZIParadigmaImperativoProcedure.do c ESERCIZIParadigmaImperativoProcedure.do c
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.