• Non ci sono risultati.

Programmazione orientata agli oggetti

N/A
N/A
Protected

Academic year: 2021

Condividi "Programmazione orientata agli oggetti"

Copied!
13
0
0

Testo completo

(1)

Programmazione orientata agli oggetti

Paolo Bison

Fondamenti di Informatica 1 A.A. 2004/05

Universit`a di Padova

Programmazione orientata agli oggetti, Paolo Bison, A.A. 2004-05, 2004-10-28 – p.1/25

un bit di storia



Simula 67

Nygaard e Dahl, NCC Oslo



Smalltalk 71

Alan Kay, LRG Xerox PARC



OO everywhere

OOPLs, OOA, OOD, OODBs

(2)

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

Programmazione orientata agli oggetti, Paolo Bison, A.A. 2004-05, 2004-10-28 – p.3/25

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

(3)

Concetti base



oggetto (object)



messaggio (message)



classe (class)



ereditarietà (inheritance)

Programmazione orientata agli oggetti, Paolo Bison, A.A. 2004-05, 2004-10-28 – p.5/25

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

==

(4)

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

Programmazione orientata agli oggetti, Paolo Bison, A.A. 2004-05, 2004-10-28 – p.7/25

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

(5)

Interazione tra oggetti

**

draw

% k

t

up:

shift

>>

**

draw

+ x

y

up:

show

==

** 50

OK

Programmazione orientata agli oggetti, Paolo Bison, A.A. 2004-05, 2004-10-28 – p.9/25

Proprietà oggetto-messaggio



“Encapsulation”

- modularità

- “information hiding”



polimorfismo

- “what”: messaggi - “how”: metodi

A + B

(6)

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

Programmazione orientata agli oggetti, Paolo Bison, A.A. 2004-05, 2004-10-28 – p.11/25

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

(7)

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

Programmazione orientata agli oggetti, Paolo Bison, A.A. 2004-05, 2004-10-28 – p.13/25

Tipo di ereditarietà



ereditarietà singola



ereditarietà multipla

(8)

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

Programmazione orientata agli oggetti, Paolo Bison, A.A. 2004-05, 2004-10-28 – p.15/25

Ereditarietà multipla



una classe può avere una o piú superclassi



grafo di ereditarietà

09 : 05

09 : 05 BeatCount

AnaClock DigiClock

DiAnaClock

(9)

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

Programmazione orientata agli oggetti, Paolo Bison, A.A. 2004-05, 2004-10-28 – p.17/25

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

(10)

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

Programmazione orientata agli oggetti, Paolo Bison, A.A. 2004-05, 2004-10-28 – p.19/25

Dinamicità



ambiente dinamico



creazione/distruzione di oggetti



distruzione



implicita



esplicita

(11)

Classi astratte



classi che non possono avere istanze



descrivono parti condivise tra più classi

FiguraGeometrica

Triangolo Quadrato Trapezio

TRettangolo

TIsoscele

TEquilatero

Programmazione orientata agli oggetti, Paolo Bison, A.A. 2004-05, 2004-10-28 – p.21/25

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

(12)

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

Programmazione orientata agli oggetti, Paolo Bison, A.A. 2004-05, 2004-10-28 – p.23/25

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

(13)

Object Oriented Programming Languages



Smalltalk



Java



C++



Eiffel



CLOS



OO COBOL



BETA



C#



OO Perl



C-Talk



Object Pascal



Ruby



Sather



PHP

Programmazione orientata agli oggetti, Paolo Bison, A.A. 2004-05, 2004-10-28 – p.25/25

Riferimenti

Documenti correlati

• La dichiarazione di classe incapsula (cioè nasconde) la definizione dei campi e dei metodi degli oggetti creabili come istanza della classe?. • A tempo di esecuzione, un

 definisce le variabili (memoria privata) ed i metodi (interfaccia) di tali oggetti.  altri punti

 definisce le variabili (memoria privata) ed i metodi (interfaccia) di tali oggetti.  altri punti

public void draw(Window w, Position where){…}. public

■ La funzione costruttore di un oggetto locale (definito all'interno di una funzione o di un blocco di istruzioni) viene eseguita nel momento in cui viene incontrata l'istruzione

■ Le variabili static sono molto utili per gestire informazioni comuni a tutti gli oggetti di una classe (per esempio possono fornire i dati di default per l'inizializzazione

■ così come una classe è un modello per istanziare oggetti (della classe) a tempo d'esecuzione, un template è un modello per istanziare classi o funzioni (del template) a tempo

quando viene istanziato da un altro oggetto della stessa classe. l’argomento è una reference ad un