1 / 25

L1 Lezione3

L1 Lezione3. 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?

len-hill
Download Presentation

L1 Lezione3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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. 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. 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. 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. 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; 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) 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 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 …….... 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 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. 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 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. 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. 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 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 Il risultato in Pascal è 2 2 2 Contrariamente a quello che Ci si aspetta Poiché “var” in Pascal è implementatoper indirizzo qui A, Y e X sono legati alla stessa locazione 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 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. 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; 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. 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 . 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; 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; 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 eliana minicozzi linguaggi1 2005-2006

  25. Esercizi • ESERCIZIParadigmaImperativoProcedure.doc eliana minicozzi linguaggi1 2005-2006

More Related