Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u...

41
Componenti A.Natali Marz o 1999 1

Transcript of Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u...

Page 1: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 1

Page 2: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 2

Oggetti

Un oggetto possiede stato, funzionamento e identita'.

Struttura e funzionamento di oggetti simili sono definiti nella loro classe comune (di cui sono istanze). – I termini istance ed object sono intercambiabili

Page 3: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 3

Classi

Una classe descrive la struttura interna e il funzionamento di un oggetto.

Gli oggetti di una stessa classe hanno la stessa rappresentazione interna, le stesse operazioni e lo stesso funzionamento.

name

Attributes

Operations

Page 4: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 4

Il ruolo del costrutto class

Permette protezione e information hiding Usabile come modulo o come specifiche della

struttura e del comportamento di oggetti Consente di definire e realizzare tipi di dato

(astratto)

Page 5: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 5

class: concetto o meccanismo?

Il costrutto class mescola vari piani:

– specifica come si costruisce– specifica cosa si vede– specifica come e’ fatto– specifica come funziona

Page 6: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 6

Class: esempio

CAccount c1;

c1 e’ una variabile di tipo CAccount, la classe che specifica – come si costruisce l’oggetto denotato da c1, – come e’ fatto l’oggetto denotato da c1 – quali sono le operazioni eseguibili sull’oggetto

denotato da c1

Page 7: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 7

Classi in UML

CAccount

# amount: Real

+ debit( v : Real )+ credit( v : Real )

+ public- private# protected

Page 8: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 8

class CAccount

public class CAccount {//Variabili istanza (variabili di stato)double amount = 0;

//CostruttoreCAccount( double v ){ amount = v; }

//Metodipublic void debit( double v ){ amount -= v; }public void credit( double v ){ amount += v; }}

Page 9: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 9

Oggetti e variabili

CAccount c1;

c1 e’ una variabile (di stile imperativo) che: in C++: contiene la rappresentazione di

una istanza della classe CAccount in Java: contiene un riferimento null;

Caccount c1=new Caccount(10);

Page 10: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 10

Classi e tipi

Molti linguaggi oo fanno coincidere il concetto di classe con quello di tipo.

Il concetto di classe non coincide pero’ con quello di tipo.

La classe e’ la realizzazione di un tipo di dato (astratto)

Il concetto di tipo e’ meglio catturato dal costrutto interface

Page 11: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 11

Classe e Interfaccia

Java introduce il costrutto interface che consente di definire una collezione di prototipi di operazioni ciascuna delle quali dovra' essere realizzata come metodo di una qualche classe.

Il costrutto interface complementa ed estende il costrutto class.

Il nome di una interfaccia puo' essere usato per denotare un tipo.

Page 12: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 12

ContoCorrente: interfaccia

public interface IAccount{

public void debit( double v ); //prelievopublic void credit( double v ); //deposito

}

Page 13: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 13

La classe come realizzazione dell’interfaccia

public class CAccount implements IAccount{...}

IAccount c1 = new CAccount( 10 );CAccount c2 = new CAccount( 20 );

c1 = c2; //SIc2 = c1; //NO ????

IAccount c3 = c2; //SI

Page 14: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 14

Contratti tra cliente e servitore

L’interfaccia esplicita una parte del contratto tra cliente e servitore– Le specifiche sintattiche non bastano

La classe garantisce la consistenza degli oggetti– Occorre esprimere e gestire casi di non

conformita’ (eccezioni)

Page 15: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 15

Invarianti ed eccezioni

Il valore del conto corrente deve essere sempre superiore a un valore limite prefissato (per una certa categoria di clienti)

L'operazione debit non restituisce alcun valore in uscita, e quindi non e' in grado di segnalare una eventuale anomalia al cliente

Page 16: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 16

Una nuova specifica

public interface IAccount{public void debit( double v )

throws EOverDrawn; //prelievo con eccezionepublic void credit( double v ); //deposito}

IAccount c1 = new CAccount( 10 );

try{c1.debit( 500 );

}catch( Exception e ){ … }

Page 17: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 17

Una nuova realizzazione

public class CAccount implements IAccount{//VARIABILE DI CLASSE static double debitLimit = -10;

//Variabili istanza (variabili di stato)double amount = 0;

//CostruttoreCAccount( double v ){ amount = v; }

//Metodipublic void credit( double v ){ amount += v; }

Page 18: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 18

Metodi con eccezione

//Metodipublic void debit( double v )

throws EOverDrawn;{ double t = amount - v;

if( v > debitLimit )amount = t;

else throw new EOverDrawn();

}//debit

}//

Page 19: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 19

Consistenza ed asserzioni

Invariant == (amount > debLimit)public void debit( double v )

throws EOverDrawn;{ require: true;

double t = amount - v;if( v > debitLimit ) amount = t; else throw new EOverDrawn();

ensure: (amount==oldAmount-v) && invariant

}//debit

Page 20: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 20

La classe nella progettazione

Apre la via alla specifica incrementale del software secondo i principi-base del modello ad oggetti (un modello non ancora completamente specificato)

Page 21: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 21

Modello ad oggetti

I concetti su cui si basa:– classi– oggetti– e sulle loro relazioni

sono usabili in modo seamless come building blocks in tutte le fasi dello sviluppo del software:

E’ orientato alla progettazione per il cambiamento

Page 22: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 22

La progettazione per il cambiamento

Supporta l'intera sequenza che va dai requisiti (o dalla loro modifica) al sistema funzionate

Supporta lo sviluppo iterativo di un sistema lungo il tutto il suo tempo di vita

Concepisce ciascuna iterazione come una modifica a un sistema esistente

Page 23: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 23

Una nuova specifica

Il conto corrente deve contenere una lista dei movimenti effettuati

Invariante:– La lista dei movimenti deve corrispondere alla

sequenza di richieste

Page 24: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 24

Ereditarieta’

Nasce come una relazione tra classi in cui una classe condivide la struttura e/o il funzionamento definito in un'altra classe (ereditarieta' singola) o in varie altre classi (ereditarieta' multipla).

Scaturisce dall'esigenza di introdurre un meccanismo per condividere (parti di) una descrizione, cioe' per riusare codice gia' funzionante.

Page 25: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 25

Specifica incrementale

public interface IACCOUNT extends IAccount{

public String toString(); //rapprresent. esterna public String log(); //lista movimenti

}//IACCOUNT

Page 26: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 26

Ereditarieta’: concetto o meccanismo?

L'interpretazione di una classe come un tipo di dato (astratto) induce a vedere l’ereditarieta' come un meccanismo per definire sottotipi. Si parla in questo caso di ereditarieta' strict.

L'ereditarieta' tra classi intese come tipi puo' essere interpretata come un meccanismo per introdurre polimorfismo

Page 27: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 27

Polimorfismo

In linguaggi polimorfici un valore o una variabile puo' denotare istanze di molti diversi tipi ( classi ) ammesso che questi siano collegati tra loro da relazioni tipo-sottotipo ( classe-sottoclasse ).

dataType min(dataType v1, dataType v2)

Page 28: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 28

Vincoli imposti dalle relazioni sui tipi

Un sottotipo T1 di un tipo T introduce vincoli addizionali alla specifica di T, cui corrisponde un sottoinsieme piu' limitato di oggetti rispetto all'insieme di oggetti definito da T. – Una variabile di tipo T puo' denotare un oggetto di

tipo T1 ma non viceversa

– Infatti e' vero che ogni oggetto di tipo T1 e' anche di tipo T, ma non e' vero il contrario

Page 29: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 29

La regola di conformita’

Ogni oggetto di tipo T1, sottotipo di T, puo’ essere usato in tutti i contesti in cui e' ammissibile un oggetto del tipo T.

Page 30: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 30

Ereditarieta’ e subtyping

La specifica di un sottotipo deve continuare a soddisfare ai vincoli del tipo-genitore.

– come garantire la regola di conformita' ?

– cosa significa raffinare il contratto rappresentato dall'interfaccia e dal funzionamento di una classe?

Page 31: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 31

Realizzazione incrementale

public class CACCOUNT extends CAccount implements IACCOUNT{

// eredita struttura e operazioni di CAccount// accede alle variabili private di CAccount

// specializza le vecchie operazioni // realizza le nuove operazioni di IACCOUNT

Page 32: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 32

Realizzazione incrementale

// specializza le vecchie operazioni

public void credit( double v ){ logObj.add(“credit “+ v );amount += v; //MEGLIO DI NO!!

}//credit

L'ereditarieta' puo' compromettere il principio dell'incapsulamento dell'informazione se una classe derivata ha accesso ai dati di una classe genitore.

Page 33: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 33

Qualificatori di accesso

public private protected

nessuno: in Java vi e’ una visibilita’ a livello di package

Page 34: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 34

Realizzazione incrementale

// specializza le vecchie operazioni

public void credit( double v ){ logObj.add(“credit “+ v );

super.credit( v );}//credit

Si riusa l’operazione precedente

Page 35: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 35

Realizzazione incrementale

// realizza le nuove operazioni di IACCOUNT

Vector logObj = new Vector(10,5);

public String toString(){ return “”+ amount; }public String log(){ return logObj;}//log

}//CACCOUNT

Page 36: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 36

Una operazione polimorfica

void credit100( CAccount a1 ){a1.credit( 100 );

}//credit100;

IAccount c1 = new CAccount( 10 );IACCOUNT c2 = new CACCOUNT( 20 );

credit100( c1 );credit100( c2 );System.out.println( c2.log() );

Page 37: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 37

Java vs. C++

In C++ l’operazione precedente non e’ polimorfica:– il trasferimento degli argomenti implica la

copia degli oggetti – il meccanismo di binding e’ di tipo eager,

mentre il polimorfismo richiede un meccanismo di late binding

Page 38: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 38

Progetto orientato al cambiamento

Operazioni “aperte” Operazioni primitive (dipendenti dalla

rappresentazione) e non Classi astratte

Page 39: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 39

Operazioni “aperte”

A

+ m1( v : Real )+ m2( v : Real )

B

+ m2( v : Real )

m1 chiama m2il funzionamento di m1 dipende dall’oggetto che la sta eseguendo

Page 40: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 40

Operazioni non primitive

list insOrd( list l1, listData x){if ( l1.isEmpty() )

return nl.addFirst( x );else if ( x.less( l1.head() ) )

return l1.addFirst(x); else return insOrd( l1.tail(),x ).addFirst(x);

}//insOrd

Page 41: Componenti A.Natali Marzo 19991. 2 Oggetti u Un oggetto possiede stato, funzionamento e identita'. u Struttura e funzionamento di oggetti simili sono.

Componenti A.Natali Marzo 1999 41

Classe astratta

Consente di fattorizzare un’interfaccia comune a un insieme di sottotipi (sottoclassi)

Definisce il codice delle operazioni non primitive, lasciando alle sottoclassi la specifica del codice delle primitive (metodi abstract)

Può definire variabili