lezione 3 programmazione ad oggetti incapsulamento ereditarietà polimorfismo 1

19
Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Upload: graziano-miceli

Post on 02-May-2015

222 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Lezione 3

Programmazione ad oggetti

IncapsulamentoEreditarietàPolimorfismo

1

Page 2: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

2

incapsulamento

ered

itarie

polimorfism

o

Page 3: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Incapsulamento

Con il termine incapsulamento si indica la proprietà degli oggetti di incorporare al loro interno sia gli attributi che i metodi, cioè le caratteristiche e i comportamenti dell’oggetto. Tutto ciò che si riferisce ad un certo oggetto è racchiuso e contenuto all’interno dell’oggetto stesso

Gli attributi e i metodi sono incapsulati nell’oggetto. In questo modo tutte le informazioni utili che riguardano un oggetto sono al suo interno. Questo è uno dei vantaggi della programmazione ad oggetti

3

Lezione 2

Page 4: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Interfaccia

Un oggetto può essere utilizzato inviando ad esso i messaggi. L’insieme dei messaggi, che consentono l’interazione con gli oggetti, rappresenta la sua interfaccia

L’interfaccia è costituita dall’elenco dei metodi identificati dal loro nome. Per ogni metodo occorre indicare anche il numero e il tipo dei parametri e il valore di ritorno del metodo

Chi utilizza l’oggetto deve conoscere solo la sua interfaccia. In questo modo può sapere quali metodi possono essere invocati, quali sono i parametri da passare e che cosa ricaverà come valore di ritorno

4

Lezione 2

Page 5: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

5

COMPONENTEinteressa cosa fa e come usarlo, non come funziona internamente

=INTERFACCIA

se un componente viene

modificato internamente, ma la

sua interfaccia rimane la stessa,

tutti gli altri componenti che lo

usano non devono essere

modificati (è sufficiente

ricompilarli/rilinkarli);

anche se i compiti svolti

comportano un codice molto

complicato, per usare un

componente è sufficiente

conoscere la sua interfaccia

(sistema di controllo)

Page 6: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Accesso agli attributi

Anche gli attributi sono nascosti nell’oggetto

Per poter leggere o modificare il valore di un attributo, si dovrebbe utilizzare un metodo che esegue l’operazione richiesta

Per esempio, se volessimo conoscere il valore della velocità dell’oggetto auto1 dovremmo usare il seguente messaggio:

auto1.leggiVelocità()

Questo garantisce l’information hiding, ma comporta che per ogni attributo dell’oggetto siano definiti il metodo per leggere e il metodo per modificare il suo valore

6

Lezione 2

Page 7: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Accesso agli attributi

Alcuni linguaggi hanno cercato di superare questa difficoltà consentendo un modo diverso per manipolare gli attributi; in questo caso ci si riferisce direttamente agli attributi:

auto1.velocitàQuesta modalità di accesso agli attributi viola

la regola dell’information hiding, perché gli attributi non restano più nascosti all’interno dell’oggetto, ma offre la facilitazione di poter manipolare gli attributi senza usare i messaggi

7

Lezione 2

Page 8: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Ereditarietà

L’ereditarietà è lo strumento che permette di costruire nuove classi utilizzando quelle già sviluppate

Quando una classe viene creata attraverso il meccanismo di ereditarietà a partire da un’altra classe, essa riceve in eredità tutti gli attributi e i metodi della classe generatrice

8

Lezione 3

Page 9: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Ereditarietà

La classe che è stata derivata da un’altra usando l’ereditarietà prende il nome di sottoclasse. La classe generatrice di una sottoclasse si chiama sopraclasse

Queste relazioni tra le classi individuano una gerarchia che nasce da un processo di specializzazione. Infatti le classi che si trovano in cima alla gerarchia sono le più generali e man mano che si scende si trovano classi più specializzate

9

Lezione 3

Page 10: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Ereditarietà

10

Lezione 3

Mezzi di trasporto

Veicoli a motore Mezzi non a motore

Auto Moto Autobus Bicicletta Cavallo

Page 11: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Ereditarietà

La sottoclasse eredita dalla sopraclasse tutti gli attributi e tutti i metodi con la possibilità di inserire le differenze.

La nuova classe si differenzia dalla sopraclasse in due modi:

- per estensione, quando la sottoclasse aggiunge nuovi attributi e metodi che si sommano a quelli ereditati - per ridefinizione, quando la sottoclasse ridefinisce i metodi ereditati, viene cioè data un’implementazione diversa di un metodo

11

Lezione 3

Page 12: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Ereditarietà

L’ereditarietà serve a definire nuove classi, derivate da altre, che ereditano gli attributi e i metodi, con la possibilità di ridefinirli o di aggiungerne di nuovi.

12

Lezione 3

Page 13: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Ereditarietà

Esistono due tipi di ereditarietà: - singola e multipla

13

Lezione 3

Page 14: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Ereditarietà

Si parla di ereditarietà singola quando una sottoclasse deriva da un’unica sopraclasse

14

Lezione 3

sopraclasse

sottoclasse sottoclasse

Page 15: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Ereditarietà

Si parla di ereditarietà multipla quando una classe deriva da due o più sopraclassi

15

Lezione 3

Mezzi di trasporto Animali

Cavallo

Page 16: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

16

Animali

Insetti Mammiferi

quadrupedi

bipedi

cani

gen

era

lizzazio

ne

sp

ecia

lizzazio

ne

antenata, superclasse, genitrice

derivata, discendentefiglia, sottoclasse

is-a

programmare per differenze !!

Page 17: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Esempi usando il linguaggio Java

Class veicoli { // attributi // metodi … }

class automobile extends veicoli { // attributi // metodi … }

17

Eredita attributi e metodi della classe veicoli

… e ne può aggiungere di nuovi

Page 18: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Polimorfismo

Il polimorfismo indica la possibilità per i metodi di assumere forme, cioè implementazioni, diverse all’interno della gerarchia delle classi

Tutti i veicoli a motore possiedono il metodo accelera - Le sottoclassi automobile e moto ereditano il metodo accelera, ma è probabile che lo ridefiniscano per adeguarlo alle particolari esigenze - Il metodo accelera dell’automobile si manifesterà con la pressione del pedale, mentre nella moto sarà implementato con il movimento della manopola

Queste due diverse implementazioni evidenziano l’aspetto polimorfico del metodo accelera

18

Lezione 3

Page 19: Lezione 3 Programmazione ad oggetti Incapsulamento Ereditarietà Polimorfismo 1

Polimorfismo

Durante l’esecuzione del programma, un’istanza della classe veicoli a motore può rappresentare sia una automobile che una moto

Non è possibile sapere, prima dell’esecuzione, se si tratta di una automobile o di una moto

Il collegamento dinamico garantisce che, richiamando il metodo, tra tutte le implementazioni venga scelta quella corretta che corrisponde all’oggetto interessato

19

Lezione 3