Lezione 3
Programmazione ad oggetti
 Incapsulamento
 Ereditarietà
 Polimorfismo
1
OOP = OBJECT ORIENTED PROGRAMMING
incapsulamento
2
Lezione 2
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
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
Interfaccia
COMPONENTE
interessa cosa fa e come usarlo, non come funziona internamente
=
INTERFACCIA
anche se i compiti svolti comportano
se un componente viene modificato
un codice molto complicato, per
internamente, ma la sua interfaccia
usare un componente è sufficiente
rimane la stessa, tutti gli altri
conoscere la sua interfaccia
componenti che lo usano non
(sistema di controllo)
devono essere modificati (è
sufficiente ricompilarli/rilinkarli);
5
Lezione 2
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
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 3
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
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
Ereditarietà
Mezzi di trasporto
Mezzi non a motore
Veicoli a motore
Auto
Moto
Autobus
Bicicletta
Cavallo
10
Lezione 3
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
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
Ereditarietà
 Esistono due tipi di ereditarietà:
- singola e multipla
13
Lezione 3
Ereditarietà
 Si parla di ereditarietà singola quando una sottoclasse
deriva da un’unica sopraclasse
sopraclasse
sottoclasse
sottoclasse
14
Lezione 3
Ereditarietà
 Si parla di ereditarietà multipla quando una classe deriva da
due o più sopraclassi
Mezzi di trasporto
Animali
Cavallo
15
OOP – EREDITARIETA’
generalizzazione
antenata, superclasse, genitrice
Insetti
Mammifer
i
bipedi
derivata, discendente
figlia, sottoclasse
quadrupedi
specializzazione
Animali
is-a
cani
programmare per differenze !!
16
Esempi usando il linguaggio Java
 Class veicoli
{
// attributi
// metodi
…
Eredita attributi e metodi
della classe veicoli
}
class automobile extends veicoli
{
// attributi
// metodi
…
}
… e ne può aggiungere di nuovi
17
Lezione 3
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
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
Scarica

Presentazione di PowerPoint