ugo de'liguoro - informatica 2 a.a. 03/04 lez. 7 tipi di dato e strutture dati specifica e...

34
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Upload: elda-alessi

Post on 03-May-2015

215 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Tipi di dato e strutture dati

Specifica e realizzazione di strutture informative come classi

Page 2: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Che cos’è un tipo di dato?

• Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti

• Linguaggi di programmazione come Pascal, C, C++ o Java consentono all’utente di definirne di nuovi

Cos’è un tipo?

Page 3: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Insieme di valori + operatori

+

0, 1, 2, …, n, …

Interi

true, false

Booleani

not

I tipi di dato sono modelli matematici

Page 4: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

I numeri razionali

Le rappresentazioni più usate sono quella decimale

(imprecisa), oppure le frazioni

,3

5,

2

1bd

cbad

d

c

b

a

Page 5: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Specifica: la sintassi

Consiste nel definire nuovi identificatori:• nome del tipo definito:

Es. Ratio

• nomi e tipi degli operatoriEs.

NewRatio: void RatioAssign: Int, Int RatioSum: Ratio, Ratio RatioInvert: Ratio RatioLessOrEqual: Ratio, Ratio Bool

Page 6: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Specifica: la semantica

Consiste nel definire il significato/ comportamento degli operatori

Equazionalmente:

LessOrEqual(Assign(a, b), Assign(c, d)) = (ad bc)

Bene per le proprietà del campo dei razionali, ma problematico per

esprimere side effects

Page 7: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Specifica: la semantica

Consiste nel definire il significato/ comportamento degli operatori

Con pre e post-condizioni

NewRatio(): Post: produce la frazione 0/1

Assign(n, m): Post: ritorna n/m

Sum(r, s): Post: ritorna r + s

Page 8: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Il significato dell’astrazione

Quanto fa 2/3 + r ?

Sum(Assign(2,3), r)

Il razionale r è maggiore o eguale

a 0 ?LessOrEqual(Assign(0,1), r)

Utente

Page 9: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Il significato dell’astrazione

Vorrei sapere se le frazioni sono ridotte ai

minimi termini

Questi sono affari privati

Posso conoscere il denumeratore di r?

La specifica non prevede questo operatore

Utente

Page 10: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Il significato dell’astrazione

Utente

L’utente interagisce con i valori di tipo Ratio solo attraverso gli

operatori: non può né deve conoscere i dettagli della loro

realizzazione

Page 11: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Il significato dell’astrazione

Implementazione dell’ADT

barriera

operatoreProgramma applicativo

Programma applicativo

Accesso diretto ai dati

ADT = Abstract Data Type

Page 12: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Che cos’è una struttura dati?

modo sistematico di rappresentare ed organizzare datiStruttura dati =

a f k z q d i w

vettore

2 5 1 9

lista

0010011010010111

numero intero rappr. in binario

Page 13: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Primitive di accesso

Una struttura dati deve essere dotata di primitive che consentano di costruire, distruggere, esplorare e modificare gli aggregati di dati:

a f k z q d i w

base = indirizzo del primo elemento

V[i] = valore all’indirizzo

base + i dim(valore)

V

Page 14: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Primitive di accesso

Una struttura dati deve essere dotata di primitive che consentano di costruire, distruggere, esplorare e modificare gli aggregati di dati:

5 1 9

L = Puntatore al primo el.

p

p.next

p.info2

Cons(2, L)

Page 15: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Primitive di accesso

Una struttura dati deve essere dotata di primitive che consentano di costruire, distruggere, esplorare e modificare gli aggregati di dati:

0010011010010111

not

1101100101101000

Page 16: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Invarianti di struttura

Una proprietà di una struttura dati che deve essere mantenuta dopo qualunque accesso alla struttura è un invariante di struttura

2 5 1 9

lista

I puntatori di una lista devono concatenare tra loro tutti i singoli elementi

Page 17: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Invarianti di struttura

Una proprietà di una struttura dati che deve essere mantenuta dopo qualunque accesso alla struttura è un invariante di struttura

numeratore

denumeratore

denumeratore 0

Se così abbiamo deciso, possiamo chiedere che num. e den. siano primi tra loro

Page 18: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

I numeri razionali: realizzazione

numeratore

denumeratore

Struttura dati: un record typedef struct ratio {

int num, den;

} Ratio;

Ratio Sum (Ratio a, Ratio b)

{ Ratio c;

c.num = a.num*b.den + b.num*a.den;

c.den = a.den*b.den;

return c;

}

Page 19: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Una rivoluzione copernicana

Universo centrato sulle funzioni:i nomi dei dati sono passati alle funzioni che così vi accedono

Universo centrato sulle funzioni:i nomi dei dati sono passati alle funzioni che così vi accedono

Universo centrato sui dati:i nomi delle funzioni sono

passati ai dati, che li interpretano e usano per modificare sé stessi

Universo centrato sui dati:i nomi delle funzioni sono

passati ai dati, che li interpretano e usano per modificare sé stessi

Page 20: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Oggetti

Un oggetto consiste di:• una collezione di dati nascosti (stato)• un insieme M di metodi pubblici in grado di

manipolare lo stato e di comunicare all’esterno informazioni sullo stato

Un oggetto consiste di:• una collezione di dati nascosti (stato)• un insieme M di metodi pubblici in grado di

manipolare lo stato e di comunicare all’esterno informazioni sullo stato

Programmazione orientata agli oggetti:

• le unità di base di un programma sono gli oggetti

• l’esecuzione di un programma consiste nell’inviare messaggi agli oggetti, i quali attivano in risposta i loro metodi

Page 21: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Oggetti: esempio

value 0

get (codice di get)

set (codice di set)

riferimento

oggetto

mycell.set(0); … mycell.get() = 0 …

Page 22: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Una realizzazione più efficiente

value 0

value 1

get (codice di get)

set (codice di set)

Il processo che identifica i metodi che appartengono ad un oggetto realizzato in questo modo prende il nome di method lookup.

Page 23: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Classi

Una classe è una descrizione (un prototipo) di una collezione di oggetti, consistente in:

1. un elenco di campi e dei loro tipi (che realizzano lo stato)

2. un elenco di metodi, incluse le loro definizioni (corpo)

Una classe è una descrizione (un prototipo) di una collezione di oggetti, consistente in:

1. un elenco di campi e dei loro tipi (che realizzano lo stato)

2. un elenco di metodi, incluse le loro definizioni (corpo)

Page 24: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Classi: esempio

class cell is

var value: Integer := 0;

method get(): Integer is

return this.value;

method set(n: Integer) is

this.value := n;

this è un riferimento all’oggetto che esegue il metodo

Page 25: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Istanziazione

In un linguaggio “class based” gli oggetti sono istanze di classi

var myCell: TypeOf(cell) := new cell;

In alcuni linguaggi (C++, Java) il tipo di una classe coincide con la classe stessa

L’operatore new è un allocatore (in C++ è una evoluzione di malloc)

Page 26: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Dichiarazione e definizione

class nome della classe {

private: lista di variabili e metodi privati

public: lista di variabili e metodi pubblici

};

Una classe si dichiara utilizzando la sintassi:

Per definire un metodo si usa invece la sintassi:

tipo del valore nome della classe::nome del metodo (lista argomenti)

{corpo del metodo }

operatore di risoluzione

Page 27: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Esempio: numeri complessiclass Complex {

private:float real, imag;

public:void assign_real(float);void assign_imag(float);float get_real();float get_imag();Complex add(Complex);Complex multitly(Complex);// ecc.

};void Complex::assign_real(float re) {real = re;}float Complex::get_real() {return real;}

Page 28: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

OggettiGli oggetti sono istanze delle classi; condividono i metodi e le variabili della classe (precedute dal qualificatore static), mentre posseggono propri campi per le variabili oggetto.

Es.

Complex a, b, c; // crea tre oggetti della classe

Una volta definiti, gli oggetti possono invocare metodi per notificare o modificare il proprio stato:

a.assign_real(7.2);

float x = a.get_real() ; // x vale 7.2

Inoltre un oggetto può essere definito attraverso un’assegnamento:

a = b.add(c); // significa a = b + c;

Page 29: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Il puntatore this

Un metodo appartenente ad una classe può accedere direttamente ai campi privati; per sottolineare che questi campi sono quelli dell’oggetto cui appartiene il metodo si usa il puntatore this (in altri linguaggi self):

Es. Un modo più esplicito di scrivere il metodo assign_real della classe Complex è

void Complex::assign_real(float re)

{this->real = re;}

Dalla stessa sintassi usata risulta che il tipo di this in un metodo appartenente alla classe X ha tipo X* (puntatore a oggetti di tipo/classe X).

Page 30: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Funzioni inlineQuando il corpo di un metodo si riduce ad un’assegnazione ovvero a ritornare il valore di una variabile di campo privato, allora può essere inserito direttamente nella dichiarazione della classe (il metodo allora si dice inline):class Complex {

private:float real, imag;

public:void assign_real(float re) {real = re;}void assign_imag(float im) {imag = im;}float get_real() {return real;}float get_imag() {return imag;}Complex add(Complex);Complex multitly(Complex);// ecc.

};

Nota: le funzioni inline possono essere precedute dalla parola inline.

inline functions

Page 31: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Costruttori

Ciascuna classe dispone di uno o più costruttori. Un costruttore è un metodo con lo stesso nome della classe, il cui compito è di allocare gli oggetti della classe, eventualmente inizializzandone i campi.

class Complex {

private: float real, imag;

public:

Complex(float re=0, float im=0)

{real=re,imag=im;}

// ecc.

};

Complex a; // a.real = 0.0, a.imag = 0.0

Complex b(7.3); // b.real = 7.3, b.imag = 0.0

Complex c(7.3,5.1); // c.real = 7.3, c.imag = 5.1

valori di default

Page 32: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Razionali in C++

class Ratio {

public:

Ratio (int n=0, int d=0);

void Assign (int n, int d);

Ratio Sum (Ratio r);

bool LessOrEqual (Ratio r);

void print ();

private:

int num, den;

};

Interfaccia:

corrisponde alla specifica sintattica

Page 33: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Razionali in C++

Ratio::Ratio(int n, int d)

{ num = n;

den = d;

}

void Ratio::Assign (int n, int d)

{ num = n, den = d;

}

costruttore

:: operatore di risoluzione

Page 34: Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi

Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7

Razionali in C++

Ratio Ratio::Sum (Ratio r)

{ Ratio q (num*r.den+den*r.num,den*r.den);

return q;

}

Si usa come:

Ratio a (2, 3);

Ratio b (5, 4);

Ratio c = a.Sum(b); // c = a + b;