SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
Parte 1




                     Gestione del codice




Linguaggi dinamici – A.A. 2009/2010
                                           1
Introduzione
T   I moderni linguaggi dinamici mettono a
    disposizione dei meccanismi di manipolazione
    avanzata del codice
T   Tali meccanismi permettono di:
      T   identificare il tipo di un oggetto a tempo di
          esecuzione
      T   modificare il codice del programma in
          esecuzione
      T   intercettare e gestire gli errori a run time



Linguaggi dinamici – A.A. 2009/2010
                                                          2
Metaprogramming
                           p g       g




Linguaggi dinamici – A.A. 2009/2010
                                         3
Alcune definizioni
T   Il metaprogramming è la scrittura di un
    programma in grado di scrivere o manipolare
    altri programmi o se stesso
T   Più in generale, un metaprogramma effettua a
            generale
    tempo di esecuzioni operazioni che sarebbero,
    in condizioni normali, effettuate a tempo di
                  normali
    compilazione
T   L'obiettivo d l
    L' bi tti del metaprogramming è quello di
                      t             i       ll
    produrre programmi in grado di adattarsi
    dinamicamente ad una configurazione che
    di      i     t d            fi     i    h
    cambia nel tempo, senza intervento umano

Linguaggi dinamici – A.A. 2009/2010
                                                    4
Alcune definizioni
T   Metaprogramma: il prodotto dell'atto di
    metaprogramming
T   Metalinguaggio: linguaggio utilizzato per
    scrivere il metaprogramma
T   Linguaggio oggetto: il linguaggio del
    programma manipolato
                     i l t
T   Se il metalinguaggio ed il linguaggio di
    programmazione coincidono, l'attività di
    metaprogramming prende il nome di reflection
    o introspection


Linguaggi dinamici – A.A. 2009/2010
                                                   5
Un primo esempio di metaprogramming
T   Si consideri lo script di shell meta.sh
T   Tale script crea (e scrive su disco) un
    programma program.sh che stampa i numeri
    da 1 a 1000
T   L'esempio considerato è molto semplice, ed
    introduce una forma di programmazione
    generativa
      T   Genero codice in maniera esplicita
T   Nelle forme più avanzate di metaprogramming,
                p                   p g       g,
    non viene necessariamente generato codice
    esplicito
      p
Linguaggi dinamici – A.A. 2009/2010
                                                   6
Reflection




Linguaggi dinamici – A.A. 2009/2010
                                               7
Introduzione
T   La forma di gran lunga più comune di
    metaprogramming è quella in cui il programma
    modifica il proprio comportamento a tempo di
    esecu o e (reflection)
    esecuzione ( e ect o )
T   La reflection è implementata tramite un
    insieme di meccanismi suppletivi al run time
    del linguaggio
      T   Self-examination
          Self examination (introspection)
      T   Self-modification
      T   Self-replication


Linguaggi dinamici – A.A. 2009/2010
                                                   8
Aspetti implementativi
T   Un linguaggio che supporta la reflection deve
    essere in grado di:
      T   identificare e modificare costrutti di codice
          (blocchi, classi
          (blocchi classi, metodi) a run time
      T   convertire una stringa contenente il nome
          simbolico di un oggetto in un riferimento
          all'oggetto a run time
      T   eseguire il codice contenuto in una stringa a
          run time
      T   estendere le funzionalità offerte dal linguaggio


Linguaggi dinamici – A.A. 2009/2010
                                                             9
Type introspection
T   La type introspection è la capacità di un
    linguaggio (solitamente, orientato agli oggetti)
                (solitamente
    di determinare il tipo di un dato a tempo di
    esecu o e
    esecuzione
T   La type introspection è spesso utilizzata per
    implementare il polimorfismo
      T   Si individua il tipo di dato di un oggetto
      T   Si i di id la lista di metodi della classe di
             individua l li t         t di d ll l
          appartenenza dell'oggetto
      T   Si esegue il metodo relativo
                            t d    l ti


Linguaggi dinamici – A.A. 2009/2010
                                                          10
Individuazione dinamica di oggetti
T   I linguaggi dinamici moderni hanno un
    meccanismo di individuazione dinamica di
    oggetti
      T   Si memorizza il nome dell oggetto in una
                                  dell'oggetto
          variabile di tipo stringa
      T   Si interpreta il contenuto della stringa come il
          nome dell'oggetto desiderato (variabile, istanza
          di una classe, metodo)
                  classe




Linguaggi dinamici – A.A. 2009/2010
                                                             11
Valutazione dinamica di espressioni
T   I linguaggi dinamici moderni hanno un
    meccanismo di esecuzione dinamica delle
    espressioni
T   Espressioni:
      T   Espressioni matematiche e logiche
      T   Blocchi di codice
          Bl   hi      di
      T   Funzioni
T   Si memorizza I'espressione che si vuole
    valutare all'interno di una stringa
                                     g
T   Si intrepreta il contenuto della stringa, e si
    ritorna il risultato
Linguaggi dinamici – A.A. 2009/2010
                                                     12
Valutazione dinamica di espressioni
T   Vantaggi:
      T   È possibile costruire del codice polimorfo in
                                           polimorfo,
          grado di modificarsi ed adattarsi a tempo di
          esecuzione
T   Svantaggi:
      T   Se l
          S le stringhe rappresentanti il codice non sono
                   i h                  i    di
          ben controllate, è possibile incorrere in seri
          rischi di sicurezza




Linguaggi dinamici – A.A. 2009/2010
                                                            13
Estensione delle funzionalità
T   I linguaggi dinamici moderni possono essere
    estesi in diversi modi
T   Estensione dell'API (run time)
      T   Concetto di modulo software
          C      tt        d l   ft
      T   Il programma diventa uno scheletro invocante
          funzionalità importate
          f    i    li à i
T   Estensione dell'interprete (compile time)
      T   Scrittura moduli software per l'implementazione
          di nuovi costrutti
      T   Esistono generatori di compilatori (Parrot) in
          g
          grado di semplificare il lavoro
                       p
Linguaggi dinamici – A.A. 2009/2010
                                                            14
Gestione degli errori
                               g




Linguaggi dinamici – A.A. 2009/2010
                                            15
Anomalie
T   La stragrande maggioranza dei linguaggi
    dinamici moderni prevede un meccanismo per
    intercettare e gestire situazioni anomale a run
    t e
    time
T   Classici esempi di anomalie a run time
      T   Puntatore ad una variabile nullo
      T   Indice array fuori limite
      T   Errore di I/O
      T   Divisione per 0



Linguaggi dinamici – A.A. 2009/2010
                                                      16
Eccezioni
T   Il meccanismo standard di gestione delle
    anomalie è quello delle eccezioni software
      T   Nato con il linguaggio SmallTalk
      T   Reso popolare dal linguaggio Java
          R          l    d l li      i J
      T   Presente nei linguaggi più popolari:
          Perl, P th
          P l Python, Ruby, C#
                         R b




Linguaggi dinamici – A.A. 2009/2010
                                                  17
Sollevamento delle eccezioni
T   Il concetto di base è il seguente: ogni volta che
    si presenta una anomalia, viene sollevata una
                     anomalia
    eccezione
      T   Si interrompe il funzionamento del programma
      T   Viene eseguito codice di gestione (tipicamente,
          per rilasciare le risorse ed uscire in maniera
          pulita dal programma)
T   Le eccezioni possono essere sollevate:
      T   In seguito ad anomalie provocate da istruzioni
      T   Manualmente, dal programmatore (parole chiavi
          throw, raise)

Linguaggi dinamici – A.A. 2009/2010
                                                            18
Eccezioni: aspetti implementativi
T   Il run time environment prevede la definizione
    di una classe madre rappresentante la
    generica eccezione software
T   Tale classe contiene almeno:
      T   un identificatore dell'istanza di eccezione
      T   una rappresentazione dello stack al momento
                            i      d ll      k l
          dell'anomalia
T   Ciascuna anomalia a tempo di esecuzione può
    essere vista come una sottoclasse particolare
    della classe madre delle eccezioni


Linguaggi dinamici – A.A. 2009/2010
                                                        19
Costrutto Try-Catch-Finally
T   Le anomalie generate a tempo di esecuzione
    possono essere intercettate e gestite, senza
                                    gestite
    causare necessariamente un abort
T   Si utilizza un costrutto molto popolare
                                   popolare,
    denominato try-catch-finally
      T   Nato
          N t con il linguaggio SmallTalk
                     li        i S llT lk
      T   Affermatosi con il linguaggio Java
      T   Presente nei linguaggi dinamici più popolari:
          Perl, Python, Ruby, C#
T   Se non si gestisce una eccezione, il run time
    environment esegue un gestore di default
    (stampa stack trace) ed esce
Linguaggi dinamici – A.A. 2009/2010
                                                          20
Costrutto Try-Catch-Finally
T   La struttura generale del costrutto try-catch è
    la seguente:
try {
    <Blocco di codice>;
} catch (Eccezione e1) {
    <Gestisci anomalia>;
}…{
catch (Eccezione en) {
    <Gestisci anomalia>;
}…{
} finally {
    <Codice eseguito alla fine del try-catch, sempre>;
}


Linguaggi dinamici – A.A. 2009/2010
                                                         21
Costrutto Try-Catch-Finally
T   Viene eseguito il codice all'interno del blocco
    try
T   Se viene rilevata una anomalia, il run time
    environment lancia una eccezione:
      T   individua la classe eccezione associata
          all'anomalia
            ll'     li
      T   istanzia un oggetto di tale classe
      T   Individua il blocco catch relativo alla classe (o
          alla prima superclasse compatibile) e lo esegue
      T   esegue il blocco finally


Linguaggi dinamici – A.A. 2009/2010
                                                              22
Costrutto Try-Except-Finally
T   In python, il costrutto è molto simile a quello di
    Java
try:
   <Blocco di codice>;
except E
       t Eccezione e1:
              i
   <Gestisci anomalia>;
 …
except Eccezione en:
   <Gestisci anomalia>;
except:
      p
   <Gestisci anomalia di una qualunque eccezione>;
else:
   <Codice eseguito in assenza di eccezioni ;
     Codice                          eccezioni>;
finally:
   <Codice eseguito alla fine del try-except, sempre>;


Linguaggi dinamici – A.A. 2009/2010
                                                         23
Lancio manuale di eccezioni
T   Oltre al costrutto try-catch-finally, viene fornito
    anche un meccanismo per il lancio manuale di
    eccezioni
T   Parola chiave throw (o raise):
      T   Prende in ingresso un oggetto eccezione del
          tipo specificato
      T   Lancia l'eccezione relativa




Linguaggi dinamici – A.A. 2009/2010
                                                          24
Modello Catch or Specify
T   Alcuni linguaggi (Java, in particolare)
    implementano un modello di tipo Catch or
    Specify
T   Ciascuna anomalia generata all interno di un
                                  all'interno
    metodo deve essere:
      T   gestita tramite un costrutto t
              tit t    it       t tt try-catch-finally
                                             t h fi ll
      T   dichiarata esplicitamente nella signature del
          metodo (“rilanciata” - parola chiave th
             t d (“ il    i t ”       l hi      throws))
T   Diversamente, il compilatore interrompe il
    processo di compilazione con un errore


Linguaggi dinamici – A.A. 2009/2010
                                                           25
Parte 1




               Gestione dinamica delle
                      funzioni




Linguaggi dinamici – A.A. 2009/2010
                                         26
Introduzione
T   I linguaggi dinamici moderni offrono
    meccanismi per la definizioni di particolari
    funzioni
      T   Funzioni anonime
      T   Closure
T   Tali f
    T li funzioni sono spesso utilizzate nel
              i i                tili t    l
    contesto di uno scheletro di codice generico,
    per specializzare il comportamento del
              i li             t      t d l
    programma in funzione delle condizioni
    operative
           ti


Linguaggi dinamici – A.A. 2009/2010
                                                    27
Funzioni anonime
T   Una funzione anonima è una funzione che non
    è legata ad un nome e ad una signature
T   Esempio: funzione di ordinamento
      T   Esegue sempre lo stesso algoritmo
          E                l t       l    it
      T   A seconda del tipo di dato, l'operatore di
          confronto cambia
              f          bi
      T   Si può definire una funzione anonima come
          operatore di confronto, e passarla come
          argomento alla funzione di ordinamento



Linguaggi dinamici – A.A. 2009/2010
                                                       28
Funzioni anonime
T   In Java, la definizione di una funzione anonima
    richiede una nested class:
     T   ActionListener l = new ActionListener { public
         void actionPerformed(ActionEvent e) {…}}
T   In C# abbiamo i delegate:
     T   public delegate void Delegato(string s)
     T   static void Messaggio(string s) {
         Console.WriteLine(s);}
         Console WriteLine(s);}
     T   static void Main(string[] args)
     T   { Delegato dt = new DelegatoTest(Messaggio);
     T   dt ("Saluti"); }

Linguaggi dinamici – A.A. 2009/2010
                                                          29
Closure
T   In topologia, una chiusura di un insieme è
    l insieme
    l’insieme stesso più tutti gli elementi
    dell’ambiente circostante che servono a
    rendere l’insieme c uso
     e de e     s e e chiuso
T   Esempi:
     T   Dato l’intervallo (0 1) la sua chiusura è [0 1]
              l intervallo (0,1),                  [0,1]
     T   Dato l’insieme dei punti interni di un rettangolo,
         la sua chiusura è l’insieme più i punti del
                             l insieme
         perimetro




Linguaggi dinamici – A.A. 2009/2010
                                                              30
Closure
S In informatica, la closure (chiusura) della
  definizione di una funzione è data dal codice
  della funzione più l’insieme dei dati
  dell ambiente
  dell’ambiente circostante che sono necessari
  per completare la definizione della funzione
S P ti
  Praticamente, la chiusura comprende:
              t l hi                  d
     S     Non solo il codice della funzione
     S     Ma anche le variabili necessarie
          S Attenzione! Il valore delle variabili viene
             valutato alla chiamata
          S Ogni istanza della funzione ha le sue
               g
             variabili
Linguaggi dinamici – A.A. 2009/2010
                                                          31
Closure
T   Una closure è una funzione anonima, alla quale
    è associato un insieme di parametri
T   L'insieme dei parametri è assegnato non dal
    programmatore (tramite una invocazione)
                                 invocazione),
    bensì da uno statement del programma (ad es.,
    un iteratore)
T   Tipicamente, lo closure sono disponibili se il
    linguaggio supporta funzioni come fi t l
    li        i        t f   i i       first-class
    entities:
     T   Variabili che contengono (riferimenti a) funzioni
     T   Funzioni che restituiscono funzioni

Linguaggi dinamici – A.A. 2009/2010
                                                             32
Esempio di closure
function crea_contatore (int i)
{
  var inizio = i; // variabile che fa parte della chiusura
  return function { return inizio++; } ;
}

var da 5 = crea contatore(5);
    da_5 crea_contatore(5);
var da_10 = crea_contatore(10);

print da_5()         // 5
print da_5()         // 6
print da_10()        // 10
print da_5()         // 7
print da 10()
      da_10()        // 11
Linguaggi dinamici – A.A. 2009/2010
                                                             33

Mais conteúdo relacionado

Mais procurados

13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++
Majong DevJfu
 
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
Majong DevJfu
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
ughetta
 

Mais procurados (10)

MS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partI
 
Lucidi relativi al DVD di Programmazione in C
Lucidi relativi al DVD di Programmazione in CLucidi relativi al DVD di Programmazione in C
Lucidi relativi al DVD di Programmazione in C
 
Pe t3 perl-moduli
Pe t3 perl-moduliPe t3 perl-moduli
Pe t3 perl-moduli
 
Lezione1 Linguaggio C
Lezione1 Linguaggio CLezione1 Linguaggio C
Lezione1 Linguaggio C
 
Pillole di programmazione in C
Pillole di programmazione in CPillole di programmazione in C
Pillole di programmazione in C
 
13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++
 
Le Espressioni Regolari e gli Automi
Le Espressioni Regolari e gli AutomiLe Espressioni Regolari e gli Automi
Le Espressioni Regolari e gli Automi
 
I linguaggi di programmazione 3BS
I linguaggi di programmazione 3BSI linguaggi di programmazione 3BS
I linguaggi di programmazione 3BS
 
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti08 - Programmazione: Passaggio valori tra funzioni per riferimenti
08 - Programmazione: Passaggio valori tra funzioni per riferimenti
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 

Destaque (17)

Pe a1 perl-unit_testing
Pe a1 perl-unit_testingPe a1 perl-unit_testing
Pe a1 perl-unit_testing
 
T2 architettura
T2 architetturaT2 architettura
T2 architettura
 
T5 memoria
T5 memoriaT5 memoria
T5 memoria
 
T1 introduzione
T1 introduzioneT1 introduzione
T1 introduzione
 
UE week 2
UE week 2UE week 2
UE week 2
 
Corso Python Django
Corso Python DjangoCorso Python Django
Corso Python Django
 
Py a3 python-metaprogramming
Py a3 python-metaprogrammingPy a3 python-metaprogramming
Py a3 python-metaprogramming
 
Py a2 python-documentazione
Py a2 python-documentazionePy a2 python-documentazione
Py a2 python-documentazione
 
Py t1 python-intro
Py t1 python-introPy t1 python-intro
Py t1 python-intro
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
 
Pe t4 perl-oggetti
Pe t4 perl-oggettiPe t4 perl-oggetti
Pe t4 perl-oggetti
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazione
 
Py a4 python-file
Py a4 python-filePy a4 python-file
Py a4 python-file
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-database
 
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 
Storage devices powerpoint
Storage devices powerpointStorage devices powerpoint
Storage devices powerpoint
 

Semelhante a T6 codice

Estendere Java con il Meta Programming System di JetBrains
Estendere Java con il Meta Programming System di JetBrains Estendere Java con il Meta Programming System di JetBrains
Estendere Java con il Meta Programming System di JetBrains
Federico Tomassetti
 
2010.11.19 iniziare con f#
2010.11.19 iniziare con f#2010.11.19 iniziare con f#
2010.11.19 iniziare con f#
Marco Parenzan
 
Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...
Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...
Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...
LUSPIO LanguageCamp
 
Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...
Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...
Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...
LUSPIO LanguageCamp
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili
Majong DevJfu
 
15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi
Majong DevJfu
 
Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristiche
Majong DevJfu
 

Semelhante a T6 codice (20)

05 1 intro-struttura
05 1 intro-struttura05 1 intro-struttura
05 1 intro-struttura
 
Coding class da scratch a python
Coding class  da scratch a pythonCoding class  da scratch a python
Coding class da scratch a python
 
Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#Programmazione funzionale: un primo approccio attraverso F#
Programmazione funzionale: un primo approccio attraverso F#
 
Less is more? OmegaT: vantaggi e svantaggi di un approccio essenziale e open ...
Less is more? OmegaT: vantaggi e svantaggi di un approccio essenziale e open ...Less is more? OmegaT: vantaggi e svantaggi di un approccio essenziale e open ...
Less is more? OmegaT: vantaggi e svantaggi di un approccio essenziale e open ...
 
Estendere Java con il Meta Programming System di JetBrains
Estendere Java con il Meta Programming System di JetBrains Estendere Java con il Meta Programming System di JetBrains
Estendere Java con il Meta Programming System di JetBrains
 
Open xml
Open xmlOpen xml
Open xml
 
2010.11.19 iniziare con F#
2010.11.19 iniziare con F#2010.11.19 iniziare con F#
2010.11.19 iniziare con F#
 
2010.11.19 iniziare con f#
2010.11.19 iniziare con f#2010.11.19 iniziare con f#
2010.11.19 iniziare con f#
 
Corso SDL Trados
Corso SDL TradosCorso SDL Trados
Corso SDL Trados
 
Cose un cat_tool
Cose un cat_toolCose un cat_tool
Cose un cat_tool
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
Introduction to HTML
Introduction to HTMLIntroduction to HTML
Introduction to HTML
 
Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...
Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...
Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...
 
Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...
Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...
Sistemi autore, linguaggio controllato e manualistica aziendale: scrivere per...
 
06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili06 - Programmazione: Scope Variabili
06 - Programmazione: Scope Variabili
 
15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi15 - Programmazione: Algoritmi
15 - Programmazione: Algoritmi
 
Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristiche
 
CAT Tools for dummies - Corso online organizzato da Langue & Parole 2017
CAT Tools for dummies - Corso online organizzato da Langue & Parole 2017CAT Tools for dummies - Corso online organizzato da Langue & Parole 2017
CAT Tools for dummies - Corso online organizzato da Langue & Parole 2017
 
Py t2 python-moduli
Py t2 python-moduliPy t2 python-moduli
Py t2 python-moduli
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 

Mais de Majong DevJfu

8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
Majong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
Majong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
Majong 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 Architecture
Majong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
Majong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
Majong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
Majong 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 product
Majong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
Majong DevJfu
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
25 architectural adaptation
Majong DevJfu
 

Mais de Majong DevJfu (20)

8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
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
 
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
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
5
55
5
 
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
 

T6 codice

  • 1. Parte 1 Gestione del codice Linguaggi dinamici – A.A. 2009/2010 1
  • 2. Introduzione T I moderni linguaggi dinamici mettono a disposizione dei meccanismi di manipolazione avanzata del codice T Tali meccanismi permettono di: T identificare il tipo di un oggetto a tempo di esecuzione T modificare il codice del programma in esecuzione T intercettare e gestire gli errori a run time Linguaggi dinamici – A.A. 2009/2010 2
  • 3. Metaprogramming p g g Linguaggi dinamici – A.A. 2009/2010 3
  • 4. Alcune definizioni T Il metaprogramming è la scrittura di un programma in grado di scrivere o manipolare altri programmi o se stesso T Più in generale, un metaprogramma effettua a generale tempo di esecuzioni operazioni che sarebbero, in condizioni normali, effettuate a tempo di normali compilazione T L'obiettivo d l L' bi tti del metaprogramming è quello di t i ll produrre programmi in grado di adattarsi dinamicamente ad una configurazione che di i t d fi i h cambia nel tempo, senza intervento umano Linguaggi dinamici – A.A. 2009/2010 4
  • 5. Alcune definizioni T Metaprogramma: il prodotto dell'atto di metaprogramming T Metalinguaggio: linguaggio utilizzato per scrivere il metaprogramma T Linguaggio oggetto: il linguaggio del programma manipolato i l t T Se il metalinguaggio ed il linguaggio di programmazione coincidono, l'attività di metaprogramming prende il nome di reflection o introspection Linguaggi dinamici – A.A. 2009/2010 5
  • 6. Un primo esempio di metaprogramming T Si consideri lo script di shell meta.sh T Tale script crea (e scrive su disco) un programma program.sh che stampa i numeri da 1 a 1000 T L'esempio considerato è molto semplice, ed introduce una forma di programmazione generativa T Genero codice in maniera esplicita T Nelle forme più avanzate di metaprogramming, p p g g, non viene necessariamente generato codice esplicito p Linguaggi dinamici – A.A. 2009/2010 6
  • 8. Introduzione T La forma di gran lunga più comune di metaprogramming è quella in cui il programma modifica il proprio comportamento a tempo di esecu o e (reflection) esecuzione ( e ect o ) T La reflection è implementata tramite un insieme di meccanismi suppletivi al run time del linguaggio T Self-examination Self examination (introspection) T Self-modification T Self-replication Linguaggi dinamici – A.A. 2009/2010 8
  • 9. Aspetti implementativi T Un linguaggio che supporta la reflection deve essere in grado di: T identificare e modificare costrutti di codice (blocchi, classi (blocchi classi, metodi) a run time T convertire una stringa contenente il nome simbolico di un oggetto in un riferimento all'oggetto a run time T eseguire il codice contenuto in una stringa a run time T estendere le funzionalità offerte dal linguaggio Linguaggi dinamici – A.A. 2009/2010 9
  • 10. Type introspection T La type introspection è la capacità di un linguaggio (solitamente, orientato agli oggetti) (solitamente di determinare il tipo di un dato a tempo di esecu o e esecuzione T La type introspection è spesso utilizzata per implementare il polimorfismo T Si individua il tipo di dato di un oggetto T Si i di id la lista di metodi della classe di individua l li t t di d ll l appartenenza dell'oggetto T Si esegue il metodo relativo t d l ti Linguaggi dinamici – A.A. 2009/2010 10
  • 11. Individuazione dinamica di oggetti T I linguaggi dinamici moderni hanno un meccanismo di individuazione dinamica di oggetti T Si memorizza il nome dell oggetto in una dell'oggetto variabile di tipo stringa T Si interpreta il contenuto della stringa come il nome dell'oggetto desiderato (variabile, istanza di una classe, metodo) classe Linguaggi dinamici – A.A. 2009/2010 11
  • 12. Valutazione dinamica di espressioni T I linguaggi dinamici moderni hanno un meccanismo di esecuzione dinamica delle espressioni T Espressioni: T Espressioni matematiche e logiche T Blocchi di codice Bl hi di T Funzioni T Si memorizza I'espressione che si vuole valutare all'interno di una stringa g T Si intrepreta il contenuto della stringa, e si ritorna il risultato Linguaggi dinamici – A.A. 2009/2010 12
  • 13. Valutazione dinamica di espressioni T Vantaggi: T È possibile costruire del codice polimorfo in polimorfo, grado di modificarsi ed adattarsi a tempo di esecuzione T Svantaggi: T Se l S le stringhe rappresentanti il codice non sono i h i di ben controllate, è possibile incorrere in seri rischi di sicurezza Linguaggi dinamici – A.A. 2009/2010 13
  • 14. Estensione delle funzionalità T I linguaggi dinamici moderni possono essere estesi in diversi modi T Estensione dell'API (run time) T Concetto di modulo software C tt d l ft T Il programma diventa uno scheletro invocante funzionalità importate f i li à i T Estensione dell'interprete (compile time) T Scrittura moduli software per l'implementazione di nuovi costrutti T Esistono generatori di compilatori (Parrot) in g grado di semplificare il lavoro p Linguaggi dinamici – A.A. 2009/2010 14
  • 15. Gestione degli errori g Linguaggi dinamici – A.A. 2009/2010 15
  • 16. Anomalie T La stragrande maggioranza dei linguaggi dinamici moderni prevede un meccanismo per intercettare e gestire situazioni anomale a run t e time T Classici esempi di anomalie a run time T Puntatore ad una variabile nullo T Indice array fuori limite T Errore di I/O T Divisione per 0 Linguaggi dinamici – A.A. 2009/2010 16
  • 17. Eccezioni T Il meccanismo standard di gestione delle anomalie è quello delle eccezioni software T Nato con il linguaggio SmallTalk T Reso popolare dal linguaggio Java R l d l li i J T Presente nei linguaggi più popolari: Perl, P th P l Python, Ruby, C# R b Linguaggi dinamici – A.A. 2009/2010 17
  • 18. Sollevamento delle eccezioni T Il concetto di base è il seguente: ogni volta che si presenta una anomalia, viene sollevata una anomalia eccezione T Si interrompe il funzionamento del programma T Viene eseguito codice di gestione (tipicamente, per rilasciare le risorse ed uscire in maniera pulita dal programma) T Le eccezioni possono essere sollevate: T In seguito ad anomalie provocate da istruzioni T Manualmente, dal programmatore (parole chiavi throw, raise) Linguaggi dinamici – A.A. 2009/2010 18
  • 19. Eccezioni: aspetti implementativi T Il run time environment prevede la definizione di una classe madre rappresentante la generica eccezione software T Tale classe contiene almeno: T un identificatore dell'istanza di eccezione T una rappresentazione dello stack al momento i d ll k l dell'anomalia T Ciascuna anomalia a tempo di esecuzione può essere vista come una sottoclasse particolare della classe madre delle eccezioni Linguaggi dinamici – A.A. 2009/2010 19
  • 20. Costrutto Try-Catch-Finally T Le anomalie generate a tempo di esecuzione possono essere intercettate e gestite, senza gestite causare necessariamente un abort T Si utilizza un costrutto molto popolare popolare, denominato try-catch-finally T Nato N t con il linguaggio SmallTalk li i S llT lk T Affermatosi con il linguaggio Java T Presente nei linguaggi dinamici più popolari: Perl, Python, Ruby, C# T Se non si gestisce una eccezione, il run time environment esegue un gestore di default (stampa stack trace) ed esce Linguaggi dinamici – A.A. 2009/2010 20
  • 21. Costrutto Try-Catch-Finally T La struttura generale del costrutto try-catch è la seguente: try { <Blocco di codice>; } catch (Eccezione e1) { <Gestisci anomalia>; }…{ catch (Eccezione en) { <Gestisci anomalia>; }…{ } finally { <Codice eseguito alla fine del try-catch, sempre>; } Linguaggi dinamici – A.A. 2009/2010 21
  • 22. Costrutto Try-Catch-Finally T Viene eseguito il codice all'interno del blocco try T Se viene rilevata una anomalia, il run time environment lancia una eccezione: T individua la classe eccezione associata all'anomalia ll' li T istanzia un oggetto di tale classe T Individua il blocco catch relativo alla classe (o alla prima superclasse compatibile) e lo esegue T esegue il blocco finally Linguaggi dinamici – A.A. 2009/2010 22
  • 23. Costrutto Try-Except-Finally T In python, il costrutto è molto simile a quello di Java try: <Blocco di codice>; except E t Eccezione e1: i <Gestisci anomalia>; … except Eccezione en: <Gestisci anomalia>; except: p <Gestisci anomalia di una qualunque eccezione>; else: <Codice eseguito in assenza di eccezioni ; Codice eccezioni>; finally: <Codice eseguito alla fine del try-except, sempre>; Linguaggi dinamici – A.A. 2009/2010 23
  • 24. Lancio manuale di eccezioni T Oltre al costrutto try-catch-finally, viene fornito anche un meccanismo per il lancio manuale di eccezioni T Parola chiave throw (o raise): T Prende in ingresso un oggetto eccezione del tipo specificato T Lancia l'eccezione relativa Linguaggi dinamici – A.A. 2009/2010 24
  • 25. Modello Catch or Specify T Alcuni linguaggi (Java, in particolare) implementano un modello di tipo Catch or Specify T Ciascuna anomalia generata all interno di un all'interno metodo deve essere: T gestita tramite un costrutto t tit t it t tt try-catch-finally t h fi ll T dichiarata esplicitamente nella signature del metodo (“rilanciata” - parola chiave th t d (“ il i t ” l hi throws)) T Diversamente, il compilatore interrompe il processo di compilazione con un errore Linguaggi dinamici – A.A. 2009/2010 25
  • 26. Parte 1 Gestione dinamica delle funzioni Linguaggi dinamici – A.A. 2009/2010 26
  • 27. Introduzione T I linguaggi dinamici moderni offrono meccanismi per la definizioni di particolari funzioni T Funzioni anonime T Closure T Tali f T li funzioni sono spesso utilizzate nel i i tili t l contesto di uno scheletro di codice generico, per specializzare il comportamento del i li t t d l programma in funzione delle condizioni operative ti Linguaggi dinamici – A.A. 2009/2010 27
  • 28. Funzioni anonime T Una funzione anonima è una funzione che non è legata ad un nome e ad una signature T Esempio: funzione di ordinamento T Esegue sempre lo stesso algoritmo E l t l it T A seconda del tipo di dato, l'operatore di confronto cambia f bi T Si può definire una funzione anonima come operatore di confronto, e passarla come argomento alla funzione di ordinamento Linguaggi dinamici – A.A. 2009/2010 28
  • 29. Funzioni anonime T In Java, la definizione di una funzione anonima richiede una nested class: T ActionListener l = new ActionListener { public void actionPerformed(ActionEvent e) {…}} T In C# abbiamo i delegate: T public delegate void Delegato(string s) T static void Messaggio(string s) { Console.WriteLine(s);} Console WriteLine(s);} T static void Main(string[] args) T { Delegato dt = new DelegatoTest(Messaggio); T dt ("Saluti"); } Linguaggi dinamici – A.A. 2009/2010 29
  • 30. Closure T In topologia, una chiusura di un insieme è l insieme l’insieme stesso più tutti gli elementi dell’ambiente circostante che servono a rendere l’insieme c uso e de e s e e chiuso T Esempi: T Dato l’intervallo (0 1) la sua chiusura è [0 1] l intervallo (0,1), [0,1] T Dato l’insieme dei punti interni di un rettangolo, la sua chiusura è l’insieme più i punti del l insieme perimetro Linguaggi dinamici – A.A. 2009/2010 30
  • 31. Closure S In informatica, la closure (chiusura) della definizione di una funzione è data dal codice della funzione più l’insieme dei dati dell ambiente dell’ambiente circostante che sono necessari per completare la definizione della funzione S P ti Praticamente, la chiusura comprende: t l hi d S Non solo il codice della funzione S Ma anche le variabili necessarie S Attenzione! Il valore delle variabili viene valutato alla chiamata S Ogni istanza della funzione ha le sue g variabili Linguaggi dinamici – A.A. 2009/2010 31
  • 32. Closure T Una closure è una funzione anonima, alla quale è associato un insieme di parametri T L'insieme dei parametri è assegnato non dal programmatore (tramite una invocazione) invocazione), bensì da uno statement del programma (ad es., un iteratore) T Tipicamente, lo closure sono disponibili se il linguaggio supporta funzioni come fi t l li i t f i i first-class entities: T Variabili che contengono (riferimenti a) funzioni T Funzioni che restituiscono funzioni Linguaggi dinamici – A.A. 2009/2010 32
  • 33. Esempio di closure function crea_contatore (int i) { var inizio = i; // variabile che fa parte della chiusura return function { return inizio++; } ; } var da 5 = crea contatore(5); da_5 crea_contatore(5); var da_10 = crea_contatore(10); print da_5() // 5 print da_5() // 6 print da_10() // 10 print da_5() // 7 print da 10() da_10() // 11 Linguaggi dinamici – A.A. 2009/2010 33