Programmazione orientata agli oggetti ?· agli oggetti • Origini del modello a oggetti: • Linguaggi…

Download Programmazione orientata agli oggetti ?· agli oggetti • Origini del modello a oggetti: • Linguaggi…

Post on 16-Feb-2019

217 views

Category:

Documents

2 download

Embed Size (px)

TRANSCRIPT

Programmazione OO

1

Programmazione orientataagli oggetti

Origini del modello a oggetti:

Linguaggi di Programmazione

Sistemi Operativi

Intelligenza Artificiale

Esigenza di una metodologia di strutturazione deiprogrammi basata sulla protezione e sulriutilizzo delle informazioni

Tutto cio` ha portato alla definizione del concetto dioggetto

Programmazione OO

2

Oggetto

Collezione di operazioni che condividono uno stato[Wegner, 90]

point:objectx:=0; y:=0;read_x: -> x; {restituisce il

valore di x}read_y: -> y; {restituisce il

valore di y}change_x(dx): x:=x+dx;change_x(dy): y:=y+dy;

Linguaggi di programmazione ad oggetti, veri epropri linguaggi "general-purpose"

Aspetti fondamentali:

Distinzione tra classe ed istanza (anchemetaclassi);

Descrizioni di classi in termini di proprieta`(default) che ammettono eccezioni

Supportano conoscenza procedurale comemetodi associati agli oggetti

Programmazione OO

3

Tecnologia ad Oggetti:

anni 60 - inizi (Simula67)

Aggancio con il filone dellaProgrammazione modulareTipo di dato Astratto

anni 70 - Goldberg (Smalltalk)unico ambiente integrato e graficoorientato allo sviluppo rapidodi applicazioni

anni 80 - Meyer (Eiffel)linguaggio ad oggetti con accentosulla correttezza ed il controllostatico

Stroustrup (C++)estensione del linguaggio C con classiproposta ibrida con implicazioni ediffusione molto significativeorientato allo sviluppo di sistema

Programmazione OO

4

Caratteristiche principali:

Modularita`

Protezione (information hiding)

Riusabilita`

Ereditarieta`

Polimorfismo

Genericita`

Dinamicita`

Programmazione OO

5

Caratteristiche principali (cont.):

Riusabilita`

La possibilita` di riutilizzare un intero sistemasoftware o parti di esso nello sviluppo di altriprodotti software

Modularita` e Protezione

Un modulo consiste di un interfaccia e di unaimplementazione

Dati

Interfaccia

Corpo

Chi usa il modulo conosce solo linterfaccia

Limplementazione e` nascosta

Programmazione OO

6

Modularita` (cont.)

Tre categorie di moduli

- Moduli che offrono solo funzioni e procedure enon contengono dati (librerie)

- Strutture Dati Astratte (ADS, astrazioni di dato):una ADS consiste di dati e funzioni: i dati sononascosti e possono essere modificatii solo dallefunzioni del modulo

- Tipi di Dati Astratti (ADT): un ADT e` simile auna ADS, ma rappresenta un tipo di dato

Programmazione OO

7

Tipo di Dato Astratto

Un ADT definisce una struttura dati e linsiemedelle operazioni che possono essere eseguite suuna particolare istanza dellADT

I dati e limplementazione sono privati in mododa non poter essere alterati accidentalmente

Un ADT funziona esattamente come un tipo didato di base, quale int o float

Per evitare la duplicazione di informazioni, alcunilinguaggi (Simula67) introducono una relazione diereditarieta` di comportamenti fra tipi di datiastratti (classi)

Programmazione OO

8

Ereditarieta`

Meccanismo per costruire nuovi ADT partendo daquelli esistenti ereditandone le proprieta`

Riutilizzo del codice

container percent_loaded

box volume function height width length

cylinder volume function radius length

railroad_car age function year_built

box_car tank_car engine caboose

Una classe C2 puo` essere ottenuta comesottoclasse di una classe C1, dichiarataprecedentemente, riutilizzando cosi` le definizionidi informazioni ed operazioni di C1

Un'istanza di C2 avra` non solo i comportamenti(variabili ed operazioni) specificati localmente inC2, ma anche quelli ereditati dalla classeprogenitrice C1, e cosi' via percorrendo la catenadelle superclassi

Programmazione OO

9

Ereditarieta` (cont.)

- Nei primi linguaggi con classi (Simula67,Alphard) la relazione di ereditarieta` e` asingolo genitore, cioe' una classe puo` ereditareal piu` da una ed una sola superclasse

- Gerarchia di ereditarieta`: albero

Programmazione per differenza

- Le sottoclassi aggiungono codice o informazionio ridefiniscono comportamenti o significati deidati

Programmazione OO

10

Polimorfismo

- Dal greco "pluralita` di forme"

Permette di utilizzare lo stesso nome peridentificare operazioni simili che differiscono perla realizzazione

- Una sola interfaccia per molte azioni (metodi)

Ad esempio, push e pop per stack di int, float,char (overloading)

- Il compito di selezionare l'azione specifica daapplicare viene delegato al compilatore

Programmazione OO

11

Genericita`

- Possibilita' di definire moduli o classi parametrici

- Una classe (modulo) generica e` definita intermini di alcuni "parametri formali"

- La classe (modulo) viene istanziata solo quando sispecificano i parametri attuali corrispondenti aiformali

Ad esempio, stack di elementi di tipo T:

class stack (T)

da cui si istanziano:

stack (int) SI;

stack (float)SR;

Overloading, incarica il sistema di ritrovare larealizzazione corretta

vs.

Genericita`, si usa un modulo generico attraversole sue istanze, che non sono piu` flessibili.

Programmazione OO

12

Dinamicita`

- Creazione e distruzione di oggetti a tempo diesecuzione

- Valutazione a tempo di esecuzione dell'identita'degli oggetti (dynamic binding e polimorfismoorizzontale)

- Variazioni comportamento (polimorfismo verti-cale)

Collegamento tra entita`:

In un ambiente di programmazione in-the-large, ilriferimento fra entita` distinte puo' essere:

- risolto prima dell'esecuzione (binding statico) (ades., MODULA2)

- determinato solo all'esecuzione (bindingdinamico) (ad es., SMALLTALK e metodi virtualiin C++)

Programmazione OO

13

Programmazione a Oggetti

La Programmazione a Oggetti (Object-OrientedProgramming, OOP) e` uno stile di programmazione

Un linguaggio supporta uno stile diprogrammazione se fornisce gli strumenti perrenderne conveniente (facile, sicuro ed efficiente)limpiego

Il programmatore specifica cosa fare con un oggettopiuttosto che concentrarsi su come qualcosa vienefatto

Programmazione OO

14

Terminologia

Classe

- costrutto base per definire tipi di dati astratti

- member variables: descrivono i dati contenuti neltipo di dato astratto (STATO)

- member functions: definiscono le OPERAZIONIpossibili sul tipo di dato

STATO

OPERAZIONI

interfaccia

- Solo alcune delle variabili ed alcune delleoperazioni verranno rese visibili all'esterno(interfaccia)

- Invisibilit della realizzazione del servizio

- Separazione tra:

interfaccia erealizzazione

Programmazione OO

15

Classe (cont.)

"Template" da cui possono essere creati gli oggetti(tipi)

Per raggruppare e riusare comportamenticomuni di alcune risorse in un unico contenitore

Una classe descrive un insieme di oggetti che hanno la stessa interfaccia ed hanno gli stessi attributi interni

La classe point ha le stesse variabili di un oggettoistanza, ma con diversa interpretazione (variabili"potenziali")

point: class{variabili locali delle istanze}{operazioni o metodi}

Copia delle variabili locali per ciascuna istanza,mentre il codice dei metodi e` condiviso

Programmazione OO

16

Terminologia (cont.)

Oggetto

Entita` base della programmazione Object-Oriented

istanza di un ADT che possiede proprieta`(variabili di istanza) e fornisce operazioni(metodi) definite per quel particolare tipo di dato

L'operazione di creazione di un'istanza crea unacopia delle variabili

p1:=make_instance_point(0,0);p2:=make_instance_point(1,1);

Programmazione OO

17

OPERAZIONI

Descrizione oggetti istanze

STATO

CLASSE point oggetto p1

STATO

STATO

oggetto p2

Programmazione OO

18

Tipi di oggetti: [Wegner, 1990]

Tipi di oggetti

Funzionali Imperativi Attivi

Vulcan AttoriSmalltalk, C++

Funzionali, non hanno stato modificabile

Imperativi, stato aggiornabile attraverso operazioni

Attivi, gli oggetti sono processi attivi alla ricezionedel messaggio (necessita` di sincronizzazione)

Programmazione OO

19

Variabili:

Possono essere con tipo o meno

STATO OPERAZIONI

interfaccia

var1 tipo1;var2 tipo2;

var2 operazione2 ...

ambienti per il rapido sviluppo prototipale

Smalltalknessun tipo associato alle variabilicontrolli di correttezza dinamici

ambienti con maggiore controllo

Eiffel, C++tipo associato alle variabilicontrolli di correttezza statici e dinamici

Programmazione OO

20

Semantica per riferimento

Una variabile non puo` contenere un oggetto, masolo un riferimento ad esso

In un modello ad oggetti "puro", la creazione di unoggetto restituisce il puntatore all'oggetto creato(Smalltalk, Java)

Un oggetto contiene nel proprio stato soloriferimenti ad altri oggetti o valori primitivi (tipipredefiniti)

Semantica per valore

Una variabile contiene l'in

Recommended

View more >