SlideShare a Scribd company logo
Parte 2




      Programmazione ad oggetti
              in Perl




Linguaggi dinamici – A.A. 2009/2010
                                      1
Introduzione
T   Unità fondamentale degli oggetti: classe
      T   Contenitore di variabili (attributi) e funzioni
          (metodi)
T   Strumenti a di
    St     ti disposizione della OOP
                    i i    d ll
      T   Astrazione: capacità di ridurre il numero di
          dettagli implementativi
          d     li i l         i i
      T   Incapsulamento: capacità di nascondere i
          dettagli ai moduli esterni
      T   Ereditarietà: capacità di perfezionare il
          comportamento di una classe
      T   Polimorfismo: capacità di adattare il
          comportamento in funzione di ingressi e uscita
Linguaggi dinamici – A.A. 2009/2010
                                                            2
Definizione di classe in Perl
T   Una classe è definita all'interno di un package
    o di un modulo, e non richiede istruzioni
            modulo
T   Una classe è una reference ad una variabile
    anonima,
    anonima che contiene una informazione extra
    riguardante il fatto di essere una classe
T   Questa informazione extra viene fornita alla
    Q     t i f       i       t   i    f   it ll
    variabile battezzandola (blessing) in un tipo di
    classe
      l
      T   Istruzione bless anon_hash, $class_type
      T   Cambia il tipo di dato da hash a classe


Linguaggi dinamici – A.A. 2009/2010
                                                       3
Il metodo costruttore
T   Il blessing avviene nel metodo costruttore, che
    solitamente viene chiamato new
      T   Il primo parametro in ingresso è un puntatore a:
            T nome della classe (se istanzio un oggetto

              direttamente)
            T i t
              istanza di un oggetto (se istanzio un oggetto
                                   tt ( i t      i       tt
              da una sottoclasse)
      T   Gli altri parametri possono essere usati per
                lt i        ti                        ti
          definire gli attributi iniziali dell'oggetto
      T   Si crea una h h anonima e la si inizializza
                        hash         i     l i i i i li
      T   Si battezza la hash
      T   Si ritorna la hash battezzata
Linguaggi dinamici – A.A. 2009/2010
                                                              4
Creazione di un oggetto
T   Il programma che vuole creare una istanza di
    un oggetto deve eseguire le seguenti
    operazioni
      T   Importare il modulo corrispondente (in
          alternativa: si definisce un package main
          all interno
          all'interno dello stesso file)
          use MyClass;
      T   Invocare il metodo costruttore della classe ed
          assegnare il risultato ad una variabile reference
          my $obj ref = MyClass->new();
            y $ j_          y            ();



Linguaggi dinamici – A.A. 2009/2010
                                                              5
Costruttori parametrici
T   I costruttori parametrici sono banali
T   All'interno del costruttore
      Tsi usano più istruzioni shift per estrarre tutti i
       parametri (dal secondo in poi!)
                t i (d l     d i      i!)
     T si inizializzano i campi della hash anonima con i

       valori desiderati
          l i d id       i
T   Si può passare una hash di coppie
    arg_name=value
T   All'interno del programma invocante
      T   si crea un'istanza di un oggetto tramite il
          metodo costruttore, che riceve una lista di
          parametri
Linguaggi dinamici – A.A. 2009/2010
                                                            6
Distruttori
T   È possibile definire un metodo distruttore,
    invocato quando scompare l'ultimo riferimento
                                 l ultimo
    all'oggetto
T   È sufficiente definire un metodo DESTROY()
    all'interno del package




Linguaggi dinamici – A.A. 2009/2010
                                                    7
Ereditarietà
T   All'interno di un package, l'array speciale @ISA
    contiene la lista dei nomi delle superclassi
T   Nel caso in cui un attributo o un metodo non
    sia direttamente definito in una classe, gli
                                      classe
    elementi di @ISA sono scanditi in ordine FIFO
T   Per d fi i
    P definire una sottoclasse:
                        tt l
      T   Si importa il modulo della superclasse
          use superclasse;
      T   Si dichiara la sottoclasse:
          our @ISA = ( “superclasse” )


Linguaggi dinamici – A.A. 2009/2010
                                                       8
Ereditarietà
T   Il Perl definisce due parole chiave nel contesto
    dell ereditarietà
    dell'ereditarietà
     T PARENT: si riferisce alla prima superclasse


     T SUPER si riferisce ad una qualunque
       SUPER: i if i        d          l
       superclasse (la prima in cui viene trovato un
       attributo o metodo mancante)
        tt ib t       t d          t )




Linguaggi dinamici – A.A. 2009/2010
                                                       9
Polimorfismo
T   È sufficiente ridefinire un metodo all'interno di
    una sottoclasse per sostituirlo alle definizioni
    presenti nelle superclassi
T   L interprete
    L'interprete Perl gestisce il polimorfismo
    automaticamente, andandosi a cercare il
    metodo con la signature adatta




Linguaggi dinamici – A.A. 2009/2010
                                                        10
Metodi di classe e di istanza
T   Un package può contenere metodi di classe
    (detti anche singleton) validi per qualunque
                 singleton),
    istanza di oggetto appartenente a quella classe
T   Non esiste una sintassi particolare per definire
    i metodi di classe ed i metodi di istanza
T   I metodi di classe sono invocati tramite il nome
        t di     l           i      ti t   it
    della classe, ed il primo parametro è il nome
    della l
    d ll classe:
    my $result = Class->method(args);
T   I metodi di istanza sono invocati tramite un
          di i               i      i     i
    oggetto, ed il primo parametro è una reference:
    my $
       $result = $ bj
            lt $obj->method(args);
                       th d(    )
Linguaggi dinamici – A.A. 2009/2010
                                                       11
MOOSE
T   Esistono moduli che forniscono costrutti più
    eleganti e semplici per la programmazione ad
    oggetti
T   Ad es., moose
       es
     T   http://www.iinteractive.com/moose/index.html
     T   Ispirato al modello ad oggetti di Perl 6




Linguaggi dinamici – A.A. 2009/2010
                                                        12

More Related Content

What's hot

OOP with C#
OOP with C#OOP with C#
OOP with C#
Manuel Scapolan
 
programmazione ad oggetti
programmazione ad oggettiprogrammazione ad oggetti
programmazione ad oggettimariacaporale
 
MS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partI
MobileSchool
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-databaseMajong DevJfu
 
Presentazione primi principi oop
Presentazione primi principi oopPresentazione primi principi oop
Presentazione primi principi oop
yrcorr
 
C# Language Evolution
C# Language EvolutionC# Language Evolution
C# Language Evolution
Marco Parenzan
 
Corso pratico di C# - 2013
Corso pratico di C# - 2013Corso pratico di C# - 2013
Corso pratico di C# - 2013
Matteo Valoriani
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
Marco Parenzan
 
C#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivereC#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivere
Matteo Valoriani
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48h
FLT.lab
 
Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione Base
Felice Pescatore
 
Programmazione Funzionale per tutti
Programmazione Funzionale per tuttiProgrammazione Funzionale per tutti
Programmazione Funzionale per tutti
Salvatore Sorrentino
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingMajong DevJfu
 

What's hot (20)

Py t1 python-intro
Py t1 python-introPy t1 python-intro
Py t1 python-intro
 
Py a4 python-file
Py a4 python-filePy a4 python-file
Py a4 python-file
 
OOP with C#
OOP with C#OOP with C#
OOP with C#
 
programmazione ad oggetti
programmazione ad oggettiprogrammazione ad oggetti
programmazione ad oggetti
 
2006 Py03 intermedio
2006 Py03 intermedio2006 Py03 intermedio
2006 Py03 intermedio
 
MS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partIMS_corso base iOS iPhone_partI
MS_corso base iOS iPhone_partI
 
Py a6 python-database
Py a6 python-databasePy a6 python-database
Py a6 python-database
 
Presentazione primi principi oop
Presentazione primi principi oopPresentazione primi principi oop
Presentazione primi principi oop
 
Pe t3 perl-moduli
Pe t3 perl-moduliPe t3 perl-moduli
Pe t3 perl-moduli
 
C# Language Evolution
C# Language EvolutionC# Language Evolution
C# Language Evolution
 
Corso pratico di C# - 2013
Corso pratico di C# - 2013Corso pratico di C# - 2013
Corso pratico di C# - 2013
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
2006 Py04 avanzato
2006 Py04 avanzato2006 Py04 avanzato
2006 Py04 avanzato
 
C#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivereC#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivere
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48h
 
Pe t1 perl-intro
Pe t1 perl-introPe t1 perl-intro
Pe t1 perl-intro
 
Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione Base
 
Programmazione Funzionale per tutti
Programmazione Funzionale per tuttiProgrammazione Funzionale per tutti
Programmazione Funzionale per tutti
 
T4 tipizzazione
T4 tipizzazioneT4 tipizzazione
T4 tipizzazione
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
 

Viewers also liked

Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazioneMajong DevJfu
 
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testingMajong DevJfu
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA CloudMajong DevJfu
 
Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86Majong DevJfu
 
4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color4 Livello Ip Parte1 Color
4 Livello Ip Parte1 ColorMajong DevJfu
 
esercizio sigda n 11
esercizio sigda n 11esercizio sigda n 11
esercizio sigda n 11Majong DevJfu
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Majong DevJfu
 
5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria5 Trasporto Affidabile Teoria
5 Trasporto Affidabile TeoriaMajong DevJfu
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Majong DevJfu
 
2 sistemi informativi d azienda
2 sistemi informativi d azienda2 sistemi informativi d azienda
2 sistemi informativi d azienda
Majong DevJfu
 
Linguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendLinguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendMajong DevJfu
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su LinuxMajong DevJfu
 
Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Majong DevJfu
 
Sistemi Operativi: Processi - Lezione 07
Sistemi Operativi: Processi - Lezione 07Sistemi Operativi: Processi - Lezione 07
Sistemi Operativi: Processi - Lezione 07Majong DevJfu
 

Viewers also liked (20)

Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazione
 
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
 
Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86
 
4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color
 
3 H2 N Parte3
3 H2 N Parte33 H2 N Parte3
3 H2 N Parte3
 
esercizio sigda n 11
esercizio sigda n 11esercizio sigda n 11
esercizio sigda n 11
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03
 
5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04
 
8 Www2009 Parte1
8 Www2009 Parte18 Www2009 Parte1
8 Www2009 Parte1
 
2 sistemi informativi d azienda
2 sistemi informativi d azienda2 sistemi informativi d azienda
2 sistemi informativi d azienda
 
Linguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendLinguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: Frontend
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su Linux
 
E6 Concorre
E6 ConcorreE6 Concorre
E6 Concorre
 
9 Ftp Telnet Email
9 Ftp Telnet Email9 Ftp Telnet Email
9 Ftp Telnet Email
 
Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05
 
6 Dns Parte2
6 Dns Parte26 Dns Parte2
6 Dns Parte2
 
Sistemi Operativi: Processi - Lezione 07
Sistemi Operativi: Processi - Lezione 07Sistemi Operativi: Processi - Lezione 07
Sistemi Operativi: Processi - Lezione 07
 
esercizio sigda n 8
esercizio sigda n 8esercizio sigda n 8
esercizio sigda n 8
 

Similar to Pe t4 perl-oggetti

Java lezione 4
Java lezione 4Java lezione 4
Java lezione 4
Sergio Ronchi
 
Strutture dati 04-funzionicustom-classioggetti
Strutture dati 04-funzionicustom-classioggettiStrutture dati 04-funzionicustom-classioggetti
Strutture dati 04-funzionicustom-classioggetti
Studiabo
 
Data mining 04-funzionicustom-classioggetti
Data mining 04-funzionicustom-classioggettiData mining 04-funzionicustom-classioggetti
Data mining 04-funzionicustom-classioggetti
Studiabo
 

Similar to Pe t4 perl-oggetti (6)

Template
TemplateTemplate
Template
 
Java lezione 4
Java lezione 4Java lezione 4
Java lezione 4
 
Strutture dati 04-funzionicustom-classioggetti
Strutture dati 04-funzionicustom-classioggettiStrutture dati 04-funzionicustom-classioggetti
Strutture dati 04-funzionicustom-classioggetti
 
Data mining 04-funzionicustom-classioggetti
Data mining 04-funzionicustom-classioggettiData mining 04-funzionicustom-classioggetti
Data mining 04-funzionicustom-classioggetti
 
Corso Java
Corso JavaCorso Java
Corso Java
 
T6 codice
T6 codiceT6 codice
T6 codice
 

More from Majong DevJfu

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

More from 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
 

Pe t4 perl-oggetti

  • 1. Parte 2 Programmazione ad oggetti in Perl Linguaggi dinamici – A.A. 2009/2010 1
  • 2. Introduzione T Unità fondamentale degli oggetti: classe T Contenitore di variabili (attributi) e funzioni (metodi) T Strumenti a di St ti disposizione della OOP i i d ll T Astrazione: capacità di ridurre il numero di dettagli implementativi d li i l i i T Incapsulamento: capacità di nascondere i dettagli ai moduli esterni T Ereditarietà: capacità di perfezionare il comportamento di una classe T Polimorfismo: capacità di adattare il comportamento in funzione di ingressi e uscita Linguaggi dinamici – A.A. 2009/2010 2
  • 3. Definizione di classe in Perl T Una classe è definita all'interno di un package o di un modulo, e non richiede istruzioni modulo T Una classe è una reference ad una variabile anonima, anonima che contiene una informazione extra riguardante il fatto di essere una classe T Questa informazione extra viene fornita alla Q t i f i t i f it ll variabile battezzandola (blessing) in un tipo di classe l T Istruzione bless anon_hash, $class_type T Cambia il tipo di dato da hash a classe Linguaggi dinamici – A.A. 2009/2010 3
  • 4. Il metodo costruttore T Il blessing avviene nel metodo costruttore, che solitamente viene chiamato new T Il primo parametro in ingresso è un puntatore a: T nome della classe (se istanzio un oggetto direttamente) T i t istanza di un oggetto (se istanzio un oggetto tt ( i t i tt da una sottoclasse) T Gli altri parametri possono essere usati per lt i ti ti definire gli attributi iniziali dell'oggetto T Si crea una h h anonima e la si inizializza hash i l i i i i li T Si battezza la hash T Si ritorna la hash battezzata Linguaggi dinamici – A.A. 2009/2010 4
  • 5. Creazione di un oggetto T Il programma che vuole creare una istanza di un oggetto deve eseguire le seguenti operazioni T Importare il modulo corrispondente (in alternativa: si definisce un package main all interno all'interno dello stesso file) use MyClass; T Invocare il metodo costruttore della classe ed assegnare il risultato ad una variabile reference my $obj ref = MyClass->new(); y $ j_ y (); Linguaggi dinamici – A.A. 2009/2010 5
  • 6. Costruttori parametrici T I costruttori parametrici sono banali T All'interno del costruttore Tsi usano più istruzioni shift per estrarre tutti i parametri (dal secondo in poi!) t i (d l d i i!) T si inizializzano i campi della hash anonima con i valori desiderati l i d id i T Si può passare una hash di coppie arg_name=value T All'interno del programma invocante T si crea un'istanza di un oggetto tramite il metodo costruttore, che riceve una lista di parametri Linguaggi dinamici – A.A. 2009/2010 6
  • 7. Distruttori T È possibile definire un metodo distruttore, invocato quando scompare l'ultimo riferimento l ultimo all'oggetto T È sufficiente definire un metodo DESTROY() all'interno del package Linguaggi dinamici – A.A. 2009/2010 7
  • 8. Ereditarietà T All'interno di un package, l'array speciale @ISA contiene la lista dei nomi delle superclassi T Nel caso in cui un attributo o un metodo non sia direttamente definito in una classe, gli classe elementi di @ISA sono scanditi in ordine FIFO T Per d fi i P definire una sottoclasse: tt l T Si importa il modulo della superclasse use superclasse; T Si dichiara la sottoclasse: our @ISA = ( “superclasse” ) Linguaggi dinamici – A.A. 2009/2010 8
  • 9. Ereditarietà T Il Perl definisce due parole chiave nel contesto dell ereditarietà dell'ereditarietà T PARENT: si riferisce alla prima superclasse T SUPER si riferisce ad una qualunque SUPER: i if i d l superclasse (la prima in cui viene trovato un attributo o metodo mancante) tt ib t t d t ) Linguaggi dinamici – A.A. 2009/2010 9
  • 10. Polimorfismo T È sufficiente ridefinire un metodo all'interno di una sottoclasse per sostituirlo alle definizioni presenti nelle superclassi T L interprete L'interprete Perl gestisce il polimorfismo automaticamente, andandosi a cercare il metodo con la signature adatta Linguaggi dinamici – A.A. 2009/2010 10
  • 11. Metodi di classe e di istanza T Un package può contenere metodi di classe (detti anche singleton) validi per qualunque singleton), istanza di oggetto appartenente a quella classe T Non esiste una sintassi particolare per definire i metodi di classe ed i metodi di istanza T I metodi di classe sono invocati tramite il nome t di l i ti t it della classe, ed il primo parametro è il nome della l d ll classe: my $result = Class->method(args); T I metodi di istanza sono invocati tramite un di i i i i oggetto, ed il primo parametro è una reference: my $ $result = $ bj lt $obj->method(args); th d( ) Linguaggi dinamici – A.A. 2009/2010 11
  • 12. MOOSE T Esistono moduli che forniscono costrutti più eleganti e semplici per la programmazione ad oggetti T Ad es., moose es T http://www.iinteractive.com/moose/index.html T Ispirato al modello ad oggetti di Perl 6 Linguaggi dinamici – A.A. 2009/2010 12