2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi...

53
Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di programmazione UNIVERSITA’ DI FIRENZE Facoltà di Ingegneria Giacomo Bucci

Transcript of 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi...

Page 1: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 1

2

Richiami Struttura dei programmi

Paradigmi di programmazione

UNIVERSITA’ DI FIRENZEFacoltà di Ingegneria

Giacomo Bucci

Page 2: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 2

Contenuto

• Concetti basilari di programmazione e struttura dei programmi• Astrazione, Scomposizione dei problemi (divide et

impera)• Programmazione difensiva

• Il caso dell’Arianne

• Information Hiding (incapsulamento)• Dati Astratti• Oggetti

Page 3: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 3

All’inizio della storia..• Il primo linguaggio di programmazione è

stato il linguaggio Assembler• Rifletteva il linguaggio macchina• Era la forma simbolica del linguaggio macchina

• LD RA, MEM invece di 0010010110100100

• Il linguaggio di macchina non ha alcuna struttura, c’è solo questo:

• Successione di statement (incremento del registro PC di macchina)

• Salto incondizionato (modifica del PC)• Salto condizionato (incremento o modifica del PC)

Page 4: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 4

I primi linguaggi (di alto livello)

• Indipendenti dall’architettura di macchina e orientati a classi di problemi (FORTRAN, COBOL, BASIC, ..)

• Introducevano due astrazioni fondamentali, alla base di qualunque linguaggio di programmazione (passato, presente e futuro)• Astrazione di controllo • Astrazione procedurale

• Astrazione: Descrizione semplificata di un sistema che mette in evidenza alcuni degli aspetti e ne sopprime altri

Page 5: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 5

Astrazione di controllo• E’ la forma più elementare di astrazione consentita

dai linguaggi di alto livello• Statement altrimenti indipendenti vengono raccolti in

un unico statement• begin … end {…} • if, switch, while, for

B

S1 S2 if (B) S1 else S2;

if B then S1 else S2;

Page 6: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 6

Astrazione ProceduraleProceduraleI linguaggi di programmazione tradizionali (FORTRAN,

Basic, Pascal, C) sono procedurali• Un programma/sottoprogramma viene visto come la

trasformazione degli argomenti di ingresso (X) nei risultati (Y), secondo la procedura (la funzione) P

P

Esempio Y = SIN (X) Il simbolo SIN nasconde tutti i dettagli relativi al calcolo del seno di XIl modo in cui viene effettuato il calcolo è irrilevante

Page 7: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 7

Il problema del go to• A fine anni ’60 ci si accorse che i programmi che

facevano uso di goto tendevano a funzionare male• Il goto corrisponde al salto incondizionato del linguaggio

macchina• Si arrivò a concludere che il goto andava bandito e

che i programmi dovevano essere fatti di costrutti a un solo ingresso e una sola uscita. Inoltre:• Applicazione sistematica dell’astrazione di controllo e

procedurale• Scomposizione in problemi più semplici (divide et impera)• Sviluppo top-down

Era la programmazione strutturata• prima vera “tecnologia” per lo sviluppo dei programmi

(anni ’70)

Page 8: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 8

In modo intuitivo

• Evitare grafi come quello di destra

{R}

S1

S2

{Q}

{P}

B{Q}

S

{P}

• S viene diviso in S1 e S2; di norma S1 e S2 sono più semplici di S (divide et impera)

Page 9: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 9

• Vengono dette ASSERZIONI• Si scrive {P} S {Q}• La notazione {P} S {Q} significa:

se lo stato delle variabili soddisfa il predicato P e viene eseguito lo statement S, allora, al termine dello statement S, lo stato delle variabili soddisfa il predicato Q

S

Formalmente{P}

{Q}P e Q: predicati (condizioni) sui valori delle variabili rispettivamente in ingresso e in uscita allo statement S

Verificare formalmente i programmi (come fosse la dimostrazione di un teorema)Sintetizzare i programmi Ricerca anni ‘70

Page 10: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 10

Conseguenza importante: Programmare in modo difensivo

<type> procedure (p1,p2,…,pn){if (PRE(p1,p2,…)==false) return error;

...corpo della procedura;

if (POST(., ...,) == false) {..cura il malanno;

}}

procedure

{PRE}

{POST}

Page 11: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 11

Programmazione difensiva• Si assicura la congruenza degli ingressi

rispetto alla specifica della procedura• Si effettuano le azioni per forzare la

postcondizione oppure si prende un provvedimento di altro genere ma che eviti la prosecuzione come se niente fosse

• Concetti parzialmente recepiti nei moderni linguaggi di programmazione (EXCEPTION)

Page 12: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 12

Il caso dell’Arianne 5

Page 13: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 13

Arianne 5• On June 4, 1996 an unmanned Arianne 5 rocket launched by the

European Space Agency exploded just forty seconds after its lift-off from Kourou, French Guiana.

• The rocket was on its first voyage, after a decade of development costing $7 billion.

• The destroyed rocket and its cargo were valued at $500 million. • A board of inquiry investigated the causes of the explosion and in

two weeks issued a report. • It turned out that the cause of the failure was a software error in

the inertial reference system. Specifically a 64 bit floating point number relating to the horizontal velocity of the rocket with respect to the platform was converted to a 16 bit signed integer. The number was larger than 32,767, the largest integer storable in a 16 bit signed integer, and thus the conversion failed.

Page 14: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 14

Arianne 5• Più precisamente si è trattato di un errore di riuso di

un componente sw.• Era stato riusato il software del sistema SRI (Système de

Référence Inertielle) del precedente Arianne 4.• Aveva sempre funzionato con Arianne 4 perché la velocità

orizzontale non aveva mai raggiunto un valore superiore a 32767

• Il precedente software era stato preso come “buono”:• Per Arianne 4 era stato dimostrato che la velocità in questione

non poteva superare il max rappresentabile in 16 bit.• Ma Arianne 5 seguiva una differente traiettoria e aveva una

maggiore velocità.

Page 15: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 15

Anche la beffa!• Il modulo SRI eseguiva un calcolo che serviva ad

“allineare” alcuni parametri del sistema prima del lancio.

• Non aveva nessuna funzionalità a lancio avvenuto!!!

• A rigore questo calcolo avrebbe dovuto concludersi a -9.• Siccome in un lancio il count down può essere sospeso (per

qualche secondo) e siccome il reset di RSI richiedeva qualche ora, i progettisti si erano dati un po’ margine, mantenendo il calcolo attivo per 50 secondi (dallo start of fligth mode).

• Dopo circa 40 secondi dallo stacco

Page 16: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 16

Eppure…• Il modulo SRI era duplicato

• (due computer uno in backup)

• Il calcolatore principale era duplicato• Ha tentato di aggiustare la traiettoria sulla base del valore errato,

deviando bruscamente e poi comandando (correttamente) l’esplosione

Ma…• Non c’era uno specifico exception handler per catturare

l’eccezione….. • Il progettisti avevano previsto controlli sui valori di 4 variabili su 7

(quelle per le quali l’analisi aveva previsto la possibilità di errore, che non era stata prevista sulla velocità orizzontale - correttamente per Arianne 4!!!)• Ciò per motivi di prestazioni (80% utiliz.)

Page 17: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 17

Design by contractint convert (double horizontal_bias){require {

horizontal_bias <= MAXIMUM_BIAS;}//corpo della procedura

}

La precondizione (require ..) dice chiaramente e in modo inequivocabile il vincolo che il parametro di ingresso deve soddisfare

Dovrebbe essere parte del linguaggio !!

Page 18: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 18

Meglio ancoratipo nome(parametri){require { :::: }

invariant { ::: n > 10; //esempio di invariante

} \\corpo

ensure { :::n <= old n + 100; //esempio

}}

Le clausole sono il contratto tra “client”e “supplier”

E’ banale pensare a un programma che estrae le clausole ai fini della documentazione.

Page 19: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 19

Purtroppo…..• Né C++ né JAVA prevedono la

programmazione per contratto• L’unico linguaggio è Eiffel

Raccomandazione: • Usare il criterio della programmazione

difensiva• Eccezioni

Chiuso l’inciso sulla programmazione difensiva

Page 20: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 20

Contenuto

• Concetti basilari di programmazione e struttura dei programmi• Astrazione, Scomposizione dei problemi (divide et

impera)• Programmazione difensiva

• Il caso dell’Arianne

• Information Hiding (incapsulamento)• Dati Astratti• Oggetti

Page 21: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 21

Limiti della programmazione strutturata

• Va bene per la progettazione di un algoritmo a misura di singolo programmatore

• Non va bene per la progettazione di sistemi • non realizza il concetto di componente software• riusabilità, modificabilità, manutenibilità basse

• Motivo: dati e strutture di controllo che agiscono su di essi sono sostanzialmente separati

Page 22: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 22

Esempio

Caio

Data d;

if (d.mese==9)qualchecosa();

• Lavoro diviso tra due programmatori:• Tizio: progetta la parte del sistema che comprende la

definizione della struttura Data• Caio: progetta una parte che usa Data

Tiziostruct Data {

int giorno;int mese;int anno;}

Data d;

if (d.mese==9)printf(“Sett”);

Page 23: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 23

…..Esempio

Per Caio è un disastro!!!• Il suo codice non funziona

più• Va cambiato:

Data d;if (strcmp(d.mese==“Sett”))

qualchecosa();

• Tizio decide di cambiare la definizione di Data

Tiziostruct Data {

int giorno;char mese[4];int anno;}

Data d;

printf(“%s”,d.mese);

Page 24: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 24

Cosa accade

P1

Bisogna disciplinare l’accesso alla struttura dati

A D hanno accesso sia P1 sia P2, in modo incontrollato

DP1

Page 25: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 25

Che fare?

• Nascondere i dati entro i moduli di programma, rendendoli invisibili all’esterno

• imporre che tutte le interazioni avvengano solo attraverso le procedure visibili dall’esterno: queste procedure definiscono l’interfaccia al modulo• Operazioni di lettura• Operazioni di scrittura/modifica

Page 26: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 26

Information hiding

• I dati (le strutture dati) all’interno di un modulo costituiscono le variabili di stato del modulo stesso

• I dati all’interno del modulo si leggono/modificano solo attraverso l’esecuzione delle procedure che fanno parte dell’interfaccia del modulo

BB

AA

MM

D1

D2

Page 27: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 27

Un modulo (stile ADA)

Module M is A, B;procedure A is ...procedure B is ...

MM

BB

AA D1

D2 BB

AA

MM

D1

D2

Page 28: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 28

Interfaccia

• Le procedure visibili dall’esterno costituiscono l’interfaccia1) operazioni di lettura delle variabili di stato del modulo2) operazioni di modifica dello stato del modulo

Principio fondamentale:

Programmare verso l’interfaccia non verso l’implementazione

Page 29: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 29

Linguaggi convenzionali• FORTRAN, C, Pascal non hanno costrutti di

modularizzazione:• Confinare i dati in “moduli di compilazione indipendenti”• Rendere visibili solo gli identificatori che danno il nome alle

procedure che si vogliono rendere chiamabili dall’esterno

• Esempio• Un modulo che rappresenta uno stack può essere definito

attraverso un numero limitato di procedure:

push, pop, init, is_empty

Page 30: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 30

Il modulo stack• Il modo in cui è definito è irrilevante

• (vettore, lista, …)• quel che conta è che il modulo risponda alle specifiche di

interfaccia

Interfaccia

Corpo

Specifica come il modulo si interfaccia

Implementa la specifica

In C ci si aiuta con i file .h Java ha il concetto di Interfaccia

e Implementazione

Page 31: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 31

Buoni e cattivi

• La soluzione a destra• difficile da capire• difficile localizzare gli errori• difficile da modificare/estendere• difficile da riusare• costosa da manutenere

Porte

Flip-flop

ALU

Registri

• Di per sé i moduli non sono né buoni né cattivi

Non è coesa

Page 32: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 32

Coesione• I moduli dovrebbero essere altamente coesivi

• all’interno dello stesso modulo componenti che sono strettamente legate l’una all’altra

• in modo che un modulo costituisca una unità di programma ben identificata

• In letteratura: 7 livelli di coesione • Funzionale (MAX) … Incidentale (MIN)

Page 33: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 33

Accoppiamento

• L’accoppiamento tra moduli di programma dovrebbe essere minimo:

• Nessuna assunzione da parte del chiamante

Page 34: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 34

AccoppiamentoIn letteratura: 5 livelli di accoppiamento• Minimo: i moduli si passano (attraverso le

interfacce) solo parametri scalari o strutture di cui vengono usati tutte le componenti

• Massimo: un modulo può modificare direttamente il contenuto di un altro• Esempio: il modulo A modifica le istruzioni

contenute nel modulo B

Che aiuto danno i moderni linguaggi di programmazione ??

Variabili globali ??

Page 35: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 35

Contenuto

• Concetti basilari di programmazione e struttura dei programmi• Astrazione, Scomposizione dei problemi (divide et

impera)• Programmazione difensiva

• Il caso dell’Arianne

• Information Hiding (incapsulamento)• Dati Astratti• Oggetti

Page 36: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 36

I dati astratti• Un modulo può essere riguardato come il

manager dei dati che esso racchiude al suo interno

• Oppure come una sorta di dato astratto, cioèun dato sul quale sono definite le operazioni costituite dalle operazioni di interfaccia

Esempio: il precedente stack è definito attraverso queste operazioni:

push, pop, init, is_empty

Page 37: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 37

….I dati astratti• Il linguaggio di programmazione deve

permettere:• di definire un nuovo tipo di dato, cioè un dato

non primitivo come gli interi, reali, etc.,• di definire variabili di quel tipo

• Il compilatore deve garantire il corretto accesso al nuovo tipo di dati (type checking)

• E’ passato il termine di Abstract Data Type (ADT), anche se sarebbe meglio parlare di User DefinedType

Page 38: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 38

ADT a run-time

• L’incapsulamento ora è di tipo concettuale (fisicamente i dati sono stati separati dalle procedure)

• Attuato attraverso il controllo dei tipi del compilatore che consente il riferimento a dati solo attraverso le procedure

(Dagli ADT agli oggetti il passo è breve)

pushpushinit

is_empty

Stack_1

Stack_2Stack_3

Page 39: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 39

Contenuto

• Concetti basilari di programmazione e struttura dei programmi• Astrazione, Scomposizione dei problemi (divide et

impera)• Programmazione difensiva

• Il caso dell’Arianne

• Information Hiding (incapsulamento)• Dati Astratti• Oggetti

Page 40: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 40

Programmazione OO

• La programmazione OO è l’evoluzione della programmazione con ADT con in più:• Ereditarietà (a volte si usano i termini

Specializzazione Generalizzazione)• Associazione, aggregazione di oggetti• Polimorfismo

• C++, Java, …

Page 41: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 41

Ereditarietà:

Minerale AnimaleVegetale

Natura

Erbivoro Carnivoro

MuccaElefante Cane Gatto

daTartufi daPenna

ISAISA

Page 42: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 42

Associazione• L’Associazione è la forma più generale di

relazione tra oggetti

• Si rappresenta con una linea e con alcuni ornamenti

Ditta PersonaLavora per1 1..*

In StarUML questo ornamento non c’è

dipendentedatore

Page 43: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 43

Aggregazione

• E’ una forma speciale di associazione • Quando un oggetto “aggrega” più oggetti di uno stesso tipo

(classe)• In pratica è una associazione uno a molti (evita di indicare la

molteplicità)

• A volte si distingue tra Aggregazione e Composizione• Aggregazione

• quando un oggetto si compone di altri che hanno vita autonoma

• Composizione• quando un oggetto si compone di altri oggetti che esistono solo

in funzione del primo Una sottigliezza di cui normalmente si fa a meno.

Page 44: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 44

Polimorfismo• Capacità di presentare comportamenti diversi• Basato sulla presenza di un’interfaccia comune per differenti

classi di oggetti

Cerchio

Where()Move()Draw()Rotate()Area()

Geometria Cerchio

Forma

Where()Move()Draw()Rotate()Area()

Geometria

Quadrato

Where()Move()Draw()Rotate()Area()

GeometriaQuadrato

Triangolo

Where()Move()Draw()Rotate()Area()

GeometriaTriangolo

Page 45: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 45

Metodi astratti: la loro implementazione èrimandata a una classe derivata da Forma.

class Point {……}

abstract class Forma {protected Point center; //Geometria di Forma

public Point where (){return center;

}public void move (Point to) {

center= to; draw();}public abstract void draw (); public abstract void rotate(int g); public abstract double area();

La classe Forma

Interfaccia

Page 46: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 46

La classe Cerchiopublic class Cerchio extends Forma{private double r; //geom. del cerchio

public Cerchio(double r, Point center){this.r = r;this.center = center;

}

public double area() {return r*r*3,14;

}public void draw () {..}public void rotate (int g) {}

}

Page 47: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 47

Uso polimorfico//Creazione

Forma[] ff = new Forma[10];ff[0] = new Cerchio(...); ff[1] = new Cerchio(...);ff[2] = new Quadrato(...);ff[3] = new Triangolo(..); ff[4] = ..;

//Uso polimorfico ff[0].draw(); //ha l’effetto di disegnare il I cerchio ff[1].draw(); //ha l’effetto di disegnare il quadratoff[3].draw(); // ..il triangolo

int i = 0; double a= 0; while (ff[i] != null){

a= a+ff[i].area(); i++;}

Page 48: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 48

In passato (in C …)

• Si usava la parametrizzazione !!!

void Move (elemento el, tipo t);if (t == cerchio) {/* spostamento del cerchio*/}

if (t == triangolo) {/* spostamento del triangolo*/}

if (t == rettangolo) {/* spostamento del rettangolo*/}

Page 49: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 49

..in sintesi

• Gli aspetti comuni sono stati definiti solo una volta• Gli aspetti diversificati sono stati ridefiniti per ogni

specifica forma• Se il quadrato deve essere modificato in un

rettangolo, le modifiche vanno apportate solo alla classe Quadrato

• Se si deve aggiungere un’altra figura non si tocca niente dell’esistente.

Page 50: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 50

Il principio della Delega• Un oggetto che riceve una richiesta può delegare un

altro o altri oggetti a gestire la richiesta stessa• La delega consente di usare ed estendere il

comportamento di una classe:• Classe originale: Delegato• Classe che usa/estende: Delegante

Il concetto di delega è una sorta di “Pattern” basilare della programmazione Object Oriented

DelegatoDelegante1 1usa

usatoIl delegante provvede le funzionalità del delegato (chiamando i suoi metodi) e può aggiungerne di proprie

Page 51: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 51

Delega

• La Struttura delega i suoi componenti a effettuare il movimento

• Il move() della struttura consiste nell’invocazione dei move() tutti i solidi che la compongono

forall s in solidi s.move()

Page 52: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 52

Sospendiamo qui

• Seguirà UML

Page 53: 2 Richiami Struttura dei programmi Paradigmi di programmazione · Linguaggi/struttura dei programmi 2011-2012 G. Bucci 1 2 Richiami Struttura dei programmi Paradigmi di ... • Salto

Linguaggi/struttura dei programmi 2011-2012

G. Bucci 53