ereditarietà e polimorfismo 1. ereditarietà una classe (classe derivata) può ereditare da unaltra...

15
Ereditarietà e Polimorfismo 1

Upload: palmiro-borrelli

Post on 02-May-2015

238 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

1

Ereditarietà e Polimorfismo

Page 2: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

2

Ereditarietà• Una classe (classe derivata) può

ereditare da un’altra classe (classe base)

• La classe derivata eredita dati e comportamento della classe padre ai quali può aggiungere altri dati e funzionalità

• La keyword base permette ad una classe derivata di fare riferimento alla classe base

• Il costruttore di una classe derivata tipicamente richiama un costruttore della classe base

Page 3: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

3

Polimorfismo• L’ereditarietà fa si che un oggetto possa appartenere a più di un

tipo (la sua classe e la classe base)• Conversione

– Type cast: se la conversione non può essere eseguita -> errore(eccezione)– Operatore as: se la conversione non può essere eseguita il risultato è null

• Controllo– Operatore is: permette di controllare se un oggetto appartiene ad un determinato tipo

Page 4: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

4

• Una classe derivata può ridefinire membri della classe base• Una classe derivata può ridefinire completamente i membri

che la classe base ha dichiarato virtuali (virtual)– Metodi e proprietà possono essere virtuali (non i campi)– La dichiarazione del metodo che ridefinisce un metodod virtuale va accompagnata

dalla keyword override– Un metodo virtuale ridefinito, viene chiamato a prescindere dat tipo della variabile su

cui è invocato• E’ possibile dichiarare una classe come abstract

– Classi astratte non possono essere istanziate (non si può crerae un oggetto di tali classi); sono tipicamente utilizzate per fornire funzionalità comuni a una serie di classi derivate

– Contengono tipicamente uno o più metodi abstract (metodi virtual senza implementazione)

Page 5: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

5

• Esempi:

Page 6: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

6

Structs• Strutture – simili alle classi ma con importanti differenze

– Value Type (class è un Reference Type)– Non hanno ereditarietà– Possono contenere metodi– Possono avere costruttori (ma devono necessariamente avere dei parametri, non si

può specificare un costruttore di default senza parametri)– I campi non possono essere inizializzati al momento della dichiarazione (eccetto

quelli static)

• Ideali per oggetti “leggeri”– Sono allocate nello stack (a differenza degli oggetti che sono semprte allocati nello

heap)• Utilizzo più efficiente della memoria (non serve Garbage Collection)• Int, float, double ... sono tutte struct

Page 7: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

7

Page 8: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

8

Structs e Classi

10

10

20

cv

sv20

cv1

10sv1

20

cv

10sv

20

cv1

5sv1

20

5

20

Page 9: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

9

Boxing ed Unboxing• Sistema dei tipi unificato

– Tutti i tipi derivano implicitamente da object– Con Boxing ed Unboxing si intende la possibilità di convertire un Value Type in

un object (Reference Type) ed un object (Reference Type) in un Value Type• Conversione Boxing: Value Type -> object

– Alloca un apposito oggetto della classe object e vi copia il valore dentro• Conversione Unboxing: object -> Value Type

– Controlla il tipo del valore contenuto e, se possibile, copia il valore dall’oggetto nella variabile Value Type

123i

o

123j

int

123

Page 10: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

10

Passaggio dei Parametri• In C# si possono passare i parametri

– per valore (modalità predefinita) – viene creata una copia della variabile passata dal chiamante

– per riferimento (parola chiave ref) – il chiamante passa un riferimento alla variabile

• Un caso particolare del passaggio per riferimento si ha utilizzando la parola chiave out invece di ref: in tal caso non è necessario che il parametro sia inizializzato prima della chiamata

• Bisogna prestare attenziona a non confondere la modalità di passaggio dei parametri (per valore o riferimento) con il tipo di variabile (Value Type o Reference Type)

• E’ possibile passare Value Types sia per valore che per riferimento e passare Reference Types sia per valore che per riferimento

Page 11: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

11

• Esempio: – Value Types passati per valore

10sv

20

7num

10sv

20

7num

5v

20

3n

Page 12: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

12

• Esempio: – Value Types passati per riferimento

10sv

20

7num

5sv

20

3num

5v

20

3n

svv

nnum

Page 13: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

13

• Esempio– Reference Types passati per valore

cv 10

20

cv 5

20

v 1

1

cv 5

20

v

Page 14: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

14

• Esempio– Reference Types passati per riferimento

cv 10

20

cv 5

20

v 1

1

cv 1

1

cvv

Page 15: Ereditarietà e Polimorfismo 1. Ereditarietà Una classe (classe derivata) può ereditare da unaltra classe (classe base) La classe derivata eredita dati

15

Interfacce• Una interfaccia

– Contiene solo la dichiarazione (non l’implementazione) di metodi e proprietà– Definisce struttura e semantica di specifiche funzionalità– Un’interfaccia può ereditare da una o più interfacce (ereditarietà multipla)– Una classe può ereditare da una sola classe base, ma può implementare una o più

interfacce– Convenzione: i nomi delle interfacce iniziano con “I”– Esempio: