Elementi di C# 1.0
Delegati ed eventi. Eccezioni. Enumeratori.
Elementi di C# 2.0
Static Classes. Generics e collezioni generiche.Nullable Types. Partial Types e Partial Classes. Anonymous Methods.Iteratori,
Elementi di C# 3.0
Auto-implemented properties.Object Initializers e Collection Initializers. Implicit Typed Variables. Anonymous Types.Extension Methods. Lambda Expression.
Elementi di C# 1.0
Delegati ed eventi. Eccezioni. Enumeratori.
Elementi di C# 2.0
Static Classes. Generics e collezioni generiche.Nullable Types. Partial Types e Partial Classes. Anonymous Methods.Iteratori,
Elementi di C# 3.0
Auto-implemented properties.Object Initializers e Collection Initializers. Implicit Typed Variables. Anonymous Types.Extension Methods. Lambda Expression.
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