Programmazione orientata agli oggetti
Paolo Bison
Fondamenti di Informatica 1 A.A. 2004/05
Universit`a di Padova
un bit di storia
Simula 67
Nygaard e Dahl, NCC Oslo
Smalltalk 71
Alan Kay, LRG Xerox PARC
OO everywhere
OOPLs, OOA, OOD, OODBs
Cos’è la programmazione OO
paradigma di programmazione
un programma è un insieme di oggetti che
interagiscono tra di loro scambiandosi messaggi
ogni oggetto è caratterizzato da un insieme di operazioni che può eseguire
un messaggio invoca l’attivazione di una particolare operazione da parte di un oggetto
ogni cosa è un oggetto
La programmazione OO
permette di
gestire la complessità
modellare in maniera naturale il mondo reale
minimizzare i costi di manutenzione
aumentare la riutilizzabilità del codice
Concetti base
oggetto (object)
messaggio (message)
classe (class)
ereditarietà (inheritance)
Oggetto
agente computazionale caratterizzato da due elementi:
stato
insieme di valori (variabili) presenti nella sua memoria privata
interfaccia
insieme di operazioni (metodi), ciascuna individuata in maniera univoca da un selettore, che l’oggetto
può eseguire
**
draw
+ x
y
up:
show
==
Cosa può fare un’oggetto
eseguire un proprio metodo che può compiere solamente due azioni:
modificare le variabili della propria memoria privata
interagire con altri oggetti (compreso sè stesso)
inviando e ricevendo messaggi
Messaggio
richiesta ad un oggetto di eseguire un particolare metodo della sua interfaccia
tre componenti:
oggetto destinatario
selettore del metodo da eseguire
eventuali parametri (oggetti)
valore di ritorno
oggetto ottenuto dall’esecuzione del metodo
Interazione tra oggetti
**
draw
% k
t
up:
shift
>>
**
draw
+ x
y
up:
show
==
** 50
OK
Proprietà oggetto-messaggio
“Encapsulation”
- modularità
- “information hiding”
polimorfismo
- “what”: messaggi - “how”: metodi
A + B
Classe
oggetto che descrive l’implementazione di un insieme di oggetti che rappresentano un unico tipo di
componente
definisce le variabili (memoria privata) ed i metodi (interfaccia) di tali oggetti
altri punti di vista:
oggetto “factory” per creare oggetti tutti dello stesso tipo
“template” per oggetti che condividono le medesime
caratteristiche
Istanza
un particolare oggetto descritto da una classe
ciascuna istanza:
ha la propria copia di variabili
condivide gli stessi metodi con le altre istanze
creazione di una istanza
messaggio/operatore new alla classe
Ereditarietà
definizione di una classe (sottoclasse) in termini di altre classi (superclasse)
gerarchia di classi (albero/grafo di ereditarietà)
una sottoclasse può:
definire nuove variabili e/o metodi
ridefinire variabili e/o metodi presenti nelle superclassi
generalizzazione vs. specializzazione
classe Object
Tipo di ereditarietà
ereditarietà singola
ereditarietà multipla
Ereditarietà singola
una classe può avere una sola superclasse
albero di ereditarietà
x,y,alt,larg disegna, trasla FinestraSemplice
titolo disegna
FinestraTitolo mes, bottone
disegna, premi Dialogo
messaggio
Finestra0
Ereditarietà multipla
una classe può avere una o piú superclassi
grafo di ereditarietà
09 : 05
09 : 05 BeatCount
AnaClock DigiClock
DiAnaClock
Oggetti nell’ereditarietà
da cosa sono costituiti stato ed interfaccia?
stato: tutte le variabili definite nella classe e nelle sue progenitrici
interfaccia: tutti i metodi presenti nella classe e nelle
sue progenitrici
Associazione messaggio-metodo
selezione del metodo da eseguire dato il selettore
alla ricezione del messaggio si cerca il metodo da eseguirsi partendo dalla classe del ricevente per poi risalire la catena dell’ereditarietà (“late binding”)
possibilità di eseguire metodi presenti nella
superclasse
Esempio oggetti ed ereditarietà
x,y,alt,larg disegna, trasla FinestraSemplice
titolo disegna FinestraTitolo mes, bottone
disegna, premi Dialogo
messaggio
Finestra0
Dialogo
stato: mes, bottone,x,y,alt,larg
interfaccia: disegna, premi, trasla
FinestraTitolo
stato: titolo,x,y,alt,larg
interfaccia: disegna, trasla
Dinamicità
ambiente dinamico
creazione/distruzione di oggetti
distruzione
implicita
esplicita
Classi astratte
classi che non possono avere istanze
descrivono parti condivise tra più classi
FiguraGeometrica
Triangolo Quadrato Trapezio
TRettangolo
TIsoscele
TEquilatero
Metaclasse
classe le cui istanze sono classi
tutte istanze di una unica classe
contengono le variabili e i metodi di classe
le variabili sono accessibili alle istanze della classe
Programmare in OO
fasi
definire le classi
variabili, metodi, gerarchia di ereditarietà
creare gli oggetti appartenenti a tali classi
specificare le sequenze di messaggi scambiati tra questi oggetti
sviluppo parziale
attivazione
invio del primo messaggio
Building blocks
metodi primitivi
metodi che non sono espressi in forma OO, cablati nel sistema non possono essere cambiati
classi predefinite/standard
insieme di classi che forniscono funzionalità simili a
quelle che si hanno in ogni linguaggio o sistema di
programmazione
Object Oriented Programming Languages
Smalltalk
Java
C++
Eiffel
CLOS
OO COBOL
BETA
C#
OO Perl
C-Talk
Object Pascal
Ruby
Sather