+ All Categories
Home > Documents > Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base:...

Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base:...

Date post: 12-Oct-2020
Category:
Upload: others
View: 4 times
Download: 0 times
Share this document with a friend
29
G. Mecca – Università della Basilicata – [email protected] Programmazione Orientata agli Oggetti Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti Sommario m Introduzione m Interfaccia e Implementazione Modificatori di Visibilità m Ruoli e Strati Applicativi Architettura di Base m Librerie di Java Sviluppare Librerie Elementi di Base: Ruoli e Responsabilità >> Sommario
Transcript
Page 1: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

1

G. Mecca – Università della Basilicata – [email protected]

Programmazione Orientataagli Oggetti

Elementi di Base:Ruoli e Responsabilità

versione 1.0

2G. Mecca - Programmazione Orientata agli Oggetti

Sommario

m Introduzionem Interfaccia e ImplementazioneðModificatori di Visibilità

mRuoli e Strati ApplicativiðArchitettura di Base

m Librerie di JavaðSviluppare Librerie

Elementi di Base: Ruoli e Responsabilità >> Sommario

Page 2: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

2

3G. Mecca - Programmazione Orientata agli Oggetti

Introduzione

m Applicazione a oggettiðcollezione di componenti che collaborano per

realizzare gli obiettivi applicativi

mRispetto alla progr. proceduraleði componenti sono entità ben identificabili ed

autonomeðciascun componente ha precise

responsabilità nell’applicazione

Elementi di Base: Ruoli e Responsabilità >> Introduzione

4G. Mecca - Programmazione Orientata agli Oggetti

Introduzione

m Problema fondamentale della POOðcorretta attribuzione delle responsabilità ai

componentiðquanti e quali componenti utilizzareðcosa ciascun componente deve conoscereðcosa ciascun componente deve saper fare ðcome devono comunicare i componentiðin questa lezione alcune linee guida iniziali

Elementi di Base: Ruoli e Responsabilità >> Introduzione

Page 3: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

3

5G. Mecca - Programmazione Orientata agli Oggetti

Interfaccia e Implementazione

mComponente dell’applicazioneðclasse o oggetto dell’applicazioneðrealizzato attraverso il codice sorgenteðviene creato durante la vita dell’applicazioneðle classi vengono create dalla macchina

virtuale (modulo “class loader”)ðgli oggetti vengono creati dalle classiðentrambi vengono invocati da altri compon.

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

6G. Mecca - Programmazione Orientata agli Oggetti

Interfaccia e Implementazione

m Implementazione del componenteðcodice sorgente di una classe che descrive

la struttura del componente

mCodice sorgente di una classeðcontiene tutte le informazioni necessarie per

la creazione del corrispondente componente classeðcontiene tutte le informazioni necessarie per

creare oggetti (istanze) della classe

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

Page 4: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

4

7G. Mecca - Programmazione Orientata agli Oggetti

Interfaccia e Implementazione

m Ciclo di vita di un componenteðtre fasi principali

m Sviluppoðconcepimento (progettazione)ðscritturaðcompilazione

m Creazioneðall’interno dell’applicazione

m Utilizzoðesecuzione dei metodi

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

8G. Mecca - Programmazione Orientata agli Oggetti

Interfaccia e Implementazione

m In ciascuna faseðintervengono attori diversi

m Sviluppoðsviluppatore

mCreazioneðmacchina virtuale

mUtilizzoðaltri componenti

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

Page 5: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

5

9G. Mecca - Programmazione Orientata agli Oggetti

Interfaccia e Implementazione

mUn principio fondamentaleði diversi attori hanno prospettive diverse

rispetto allo stesso componente

m Sviluppatore e Macchina Virtualeðsono rilevanti tutti i dettagli relativi

all’implementazione del componenteðtutto il codice sorgente della classe

corrispondente

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

10G. Mecca - Programmazione Orientata agli Oggetti

Interfaccia e Implementazione

m Altri componentiðper i componenti che utilizzano il

componente la prospettiva è completamente diversaðè rilevante solo l’interfaccia del componente

m Interfaccia del componenteðl’elenco dei servizi che il componente è in

grado di offrire all’esternoðil modo per utilizzarli

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

Page 6: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

6

11G. Mecca - Programmazione Orientata agli Oggetti

Interfaccia e Implementazione

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

package calcolatrice;

public class Calcolatrice {

private double risultato;

public somma(double a,double b) {

this .risultato = a + b;}...

}

calcolatrice

Calcolatrice

doublerisultato

98765 : Calcolatrice

instance-of

: Principale

void somma(double a, double b);void sottrai(double a, double b);void dividi(double a, double b);void moltiplica( double a, double b);doublegetRisultato()...

3 + 5 ??

3 + 5 ??

implementazione

interfaccia

12G. Mecca - Programmazione Orientata agli Oggetti

Interfaccia e Implementazione

m Metaforaðinterfaccia: quello che l’omino sa fareðimplementazione: tutti i dettagli di come lo fa

m Esempioðsupponiamo che il nostro omino sia un idraulicoðalla massaia con la lavatrice rotta interessa la sua

interfaccia, ovvero:“riparami la lavatrice”, “ecco fatto, sono 500 Euro”ðnon le interessa la sua implementazione (come e

con quali strumenti ripara la lavatrice)

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

Page 7: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

7

13G. Mecca - Programmazione Orientata agli Oggetti

Interfaccia e Implementazione

m Rapporto interfaccia – implementazioneðcostruito secondo uno dei principi fondamentali della

programmazione a oggettim Incapsulamento (“Information Hiding”)ðl’implementazione deve essere nascosta all’esterno,

in modo da poter cambiare senza cambiare il comportamento esternoðl’interfaccia del componente è l’unica cosa che deve

essere visibile all’esternoðl’interfaccia dovrebbe essere la più semplice e

piccola possibile

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

14G. Mecca - Programmazione Orientata agli Oggetti

Interfaccia e Implementazione

m Esempio: classe per la “lista di reali”m Una interfaccia comuneð void clear(), int size() void add(double x), void add(int pos,

double x), double get(int pos), int indexOf(double x), voidremove(int pos)

m Due possibili implementazioniðle strutture di dati usate per realizzare la lista non

devono essere visibili all’esternoði metodi di servizio delle implementazioni (es:

posizioneEsistente()) non devono essere visibili

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

Page 8: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

8

15G. Mecca - Programmazione Orientata agli Oggetti

Interfaccia e Implementazione

m Alcune consuetudini generaliðle proprietà di un componente sono

considerate parte dell’implementazione e NON devono essere visibili all’esternoðtutti i metodi “di servizio” del componente –

metodi non destinati ad essere chiamati dall’esterno – NON devono essere visibili

m Per ottenere questo scopoðmodificatori di visibilità

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

16G. Mecca - Programmazione Orientata agli Oggetti

Modificatori di Visibilità

mModificatore di visibilitàðconsentono di stabilire il livello di visibilità di:ðuna proprietàðun metodoðun’intera classe di componenti

m Parole chiaveðpublicðprivate

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

Page 9: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

9

17G. Mecca - Programmazione Orientata agli Oggetti

Modificatori di Visibilità

m Tre possibilitàm Il modificatore è publicðvisibilità in tutta l’applicazione (interfaccia)

m Il modificatore è privateðvisibilità solo all’interno della classe di

componenti

m Il modificatore è assenteðvisibilità “friendly”, all’interno del package

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

>> circonferenzea

18G. Mecca - Programmazione Orientata agli Oggetti

Esempio

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

+static void main()+Principale()

Principale

+static posMaxLunghezza()+Circonferenza(double x, double y,

double r)+Circonferenza()

+static final double PIGRECO

Circonferenza

circonferenzea

instance-of instance-of

+doublegetAscissaCentro()+void setAscissaCentro(double x)+doublegetOrdinataCentro()+void setOrdinataCentro(double y)+doublegetRaggio()+void setRaggio(double r)+doublegetLunghCirconf()+doublegetSupCerchio()+doublegetQuadranteCentro()

: Circonferenza

+void esegui()

: Principale

+void esegui()-void schermoLeggiNumero()-Circonf schermoLeggiCirconf()-void schermoStampaCirconf()

: Principale

+doublegetAscissaCentro()+void setAscissaCentro(double x)+doublegetOrdinataCentro()+void setOrdinataCentro(double y)+doublegetRaggio()+void setRaggio(double r)+doublegetLunghCirconf()+doublegetSupCerchio()+doublegetQuadranteCentro()

-double ascissaCentro-double ordinataCentro-double raggio

: Circonferenza

+Circonferenza(double x, double y, double raggio)

+Circonferenza()+static int posCirconfMassima()+double getAscissaCentro()+void setAscissaCentro(double x)+double getOrdinataCentro ()+void setOrdinataCentro(double y)+double getRaggio()+void setRaggio(double r)+double getLunghezzaCirconferenza()+double getSuperficieCerchio()+double getQuadranteCentro()

+static final double PIGRECO-double ascissaCentro-double ordinataCentro-double raggio

Circonferenza

+static void main()+Principale()+void esegui()-void schermoLeggiNumero()-Circonferenza schermoLeggiCirc()-void schermoStampaCirconf()

Principale

Page 10: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

10

19G. Mecca - Programmazione Orientata agli Oggetti

Modificatori di Visibilità

m Idioma: metodi di accesso e modificað“getters” and “setters”ðper ciascuna proprietà privata vengono

creati, se necessario, due metodiðun eventuale metodo per rendere visibile

all’esterno il valore della proprietà (“getter”)ðun eventuale metodo per modificare

dall’esterno il valore della proprietà (“setter”)

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

20G. Mecca - Programmazione Orientata agli Oggetti

Modificatori di Visibilità

class Circonferenza {private double raggio;

public double getRaggio() {return this.raggio;

}

public void setRaggio(double raggio) {this.raggio = raggio;

}

...

}

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

metodo “setter”set + nome dellaproprietà con lamaiuscola

metodo “getter”get + nome dellaproprietà con lamaiuscola

Page 11: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

11

21G. Mecca - Programmazione Orientata agli Oggetti

Modificatori di Visibilità

mNotaðattenzione alla segnature dei metodiðproprietà nomeStrano di tipo tipoStrano:ðmetodo get: public tipoStrano getNomeStrano()

ðmetodo set:public void setNomeStrano (tipoStrano valore)

m Per le proprietà di tipo booleanðalternativa: public boolean isNomeStrano()

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

22G. Mecca - Programmazione Orientata agli Oggetti

Modificatori di Visibilità

m Attenzioneðse Circonferenza ha due costruttorið public Circonferenza(double x, double y, double r) {...}ð public Circonferenza() {}

ðquesti due pezzi di codice hanno esattamente la stessa semantica

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

Circonferenza c = new Circonferenza(5, 7, 10);

Circonferenza c = new Circonferenza();

c.setAscissaCentro(5);c.setOrdinataCentro(7);c.setRaggio(10);

Page 12: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

12

23G. Mecca - Programmazione Orientata agli Oggetti

Modificatori di Visibilità

m Un’annotazioneðnon sempre metodi il cui nome rispecchia quello di

un getter o di un setter corrispondono ad una proprietàðdipende dall’implementazione

m Esempioðnell’interfaccia di Circonferenzað public double getLunghezzaCirconferenza()ð public double getSuperficieCerchio()

Elementi di Base: Ruoli e Responsabilità >> Interfaccia e Implementazione

24G. Mecca - Programmazione Orientata agli Oggetti

Ruoli e Strati Applicativi

mRuolo di un componenteðsuoi compiti nell’applicazioneðdescritti dalla sua interfaccia

mCome scegliere l’interfacciaðaltri principi guida della programmazioneðmassimizzare la coesioneðminimizzare l’accoppiamento

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Page 13: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

13

25G. Mecca - Programmazione Orientata agli Oggetti

Ruoli e Strati Applicativi

mMinimizzare l’accoppiamento (>>)ði componenti dovrebbero dipendere meno

possibile gli uni dagli altriðla comunicazione dovrebbe essere basata su

interfacce chiare e ragionevolmente sempliciði componenti non devono conoscere i dettagli

delle implementazioni di altri componentiðcambiamenti nell’implementazione di un

componente non devono influenzare gli altri

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

26G. Mecca - Programmazione Orientata agli Oggetti

Ruoli e Strati Applicativi

mMassimizzare la coesioneðogni componente dovrebbe avere una serie

di compiti ben identificati e dello stesso tipoðun componente non dovrebbe occuparsi di

fare più cose di natura diverse

m In altri terminiði componenti dovrebbero essere specializzati

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Page 14: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

14

27G. Mecca - Programmazione Orientata agli Oggetti

Ruoli e Strati Applicativi

mMetaforaðdue modelli di applicazione

m Applicazione ad alta coesioneðsocietà di omini e donnine moderna e

organizzata – di carattere industrialeðciascuno ha un lavoro ed è specializzato

m Applicazione a bassa coesioneðsocietà primitiva di tipo non specializzato

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

28G. Mecca - Programmazione Orientata agli Oggetti

Ruoli e Strati Applicativi

m I ruoli tipici di un’applicazioneðcorrispondono agli strati applicativi fondamentali

dell’applicazioneðogni strato è una collezione di componenti che sono

in grado di portare a termine una funzione specifica

m Metaforaðil ruolo è il “mestiere” del componenteðlo strato applicativo rappresenta il luogo di lavoro del

componente

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Page 15: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

15

29G. Mecca - Programmazione Orientata agli Oggetti

Strati Applicativi

m Gli strati fondamentaliðognuno ha una precisa responsabilità

m Interfacciaðgestisce l’interazione con l’utente (schermi)

m Controlloðgestisce il flusso di controllo dell’applicazione

(prende le decisioni su cosa fare dopo)m Modelloðmantiene lo stato dell’applicazione (dati) e

implementa la “logica applicativa”

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

30G. Mecca - Programmazione Orientata agli Oggetti

Strati Applicativi

mComunicazione con l’esternoðrealizza tutte le forme di comunicazione del

sistema con sistemi esterniðin particolare: gestione della persistenza –

es: comunicazione con DBMS o con il file system

m Servizi di baseðcomponenti di utilizzo trasversale; es: librerie

matematiche, collezioni, ecc.

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Page 16: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

16

31G. Mecca - Programmazione Orientata agli Oggetti

Strati Applicativi

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Inte

rfac

cia

Con

frollo

Mod

ello

Com

unic

azio

ne(P

ersi

sten

za)

Servizi di BaseUtente

32G. Mecca - Programmazione Orientata agli Oggetti

Architettura di Base

m Problemaðcome organizzare questi strati in

un’architettura ?ðquali sono le regole di comunicazione ?ðper cominciare, un’architettura semplice

m Architettura di baseðinterfaccia e controllo assiemeðmodello e comunicazione assiemeðpiù i componenti di base

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Page 17: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

17

33G. Mecca - Programmazione Orientata agli Oggetti

Architettura di Base

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Mod

ello

e

Per

sist

enza

utilizza

crea

MemoriaPersistente

Inte

rfac

cia

e C

ontro

llo

Servizi di Base

34G. Mecca - Programmazione Orientata agli Oggetti

Architettura di Base

m Interfaccia e Controllo ðl’applicazione è fatta di una sequenza di

schermi – tipicamente menu con opzioniðin ogni schermo vengono visualizzati dati e

vengono acquisiti dati dall’utente ðsulla base dei dati acquisiti dall’utente, viene

decisa la prossima operazioneðed il successivo schermo da visualizzare

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Page 18: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

18

35G. Mecca - Programmazione Orientata agli Oggetti

Architettura di Base

mModello e Persistenzaðil modello è fatto di una serie di componenti

che mantengono lo stato dell’applicazioneðeseguono la logica applicativa – ovvero le

operazioni fondamentali dell’applicazioneðeventualmente contengono il codice per la

gestione della persistenza (es: gestione del file system)

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

36G. Mecca - Programmazione Orientata agli Oggetti

Architettura di Base

m Metaforaðl’applicazione è un negozio di lavanderia ði componenti di I&C stanno al banco e ricevono dai

clienti le commesse (funzione di interfaccia)ðcomandano il funzionamento dei componenti di M&P

(funzione di controllo)ði componenti di M&P lavorano nel retrobottegaðsi occupano del lavaggio, delle macchine, tengono la

contabilità e lo stato del magazzino (logica applicat.)ði componenti di I&C restituiscono gli indumenti lavati

ai clienti e gestiscono i reclami (funzione di controllo)

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Page 19: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

19

37G. Mecca - Programmazione Orientata agli Oggetti

Un Esempio: Indovina il Numero

m it.unibas.indovinasempliceðun’applicazione Java per giocare a “Indovina

il Numero”ðil il giocatore deve indovinare un numero tra

1 e 100 scelto a caso dal computer

m Specificheðper descrivere esattamente le specifiche,

utilizziamo come strumento i casi d’uso

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

38G. Mecca - Programmazione Orientata agli Oggetti

Un Esempio: Indovina il Numero

mCaso d’Usoðstoria di utilizzo del sistema da parte di un

utenteðdescrizione dei requisiti “funzionali”: cosa

deve saper fare il sistema

m Struttura del caso d’usoðuno scenario principale – o scenario di

successoðzero o più scenari secondari

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Page 20: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

20

39G. Mecca - Programmazione Orientata agli Oggetti

Caso d’Uso “Giocatore Gioca Partita”Scenario principale

1) il giocatore immette il suo nome per iniziale la partita2) il sistema sceglie un numero a caso tra 1 e 1003) il giocatore immette i suoi tentativi, uno alla volta4) il sistema confronta ciascun tentativo con il numero da indovinare; se

il giocatore non ha indovinato, il sistema risponde con un messaggio del tipo “Prova con un numero più alto” oppure “Prova con un numero più basso”

5) quando il giocatore indovina il sistema informa il giocatore e verifica se ha battuto o uguagliato il record di tentativi e lo informa con un messaggio – inoltre, se il giocatore ha battuto il record, il record viene aggiornato

6) il sistema propone di giocare una nuova partita7) l’utente sceglie di giocare di nuovo oppure di uscire dal gioco

Scenario alternativo n. 1 (punto di diramazione: 3)Condizione: il giocatore interrompe la partita

1) il sistema visualizza un messaggio con il numero di tentativi effettuati fino a quel punto ed il numero da indovinare

2) si riprende dal passo 6

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

>> indovinasemplice

40G. Mecca - Programmazione Orientata agli Oggetti

Esempio: Indovina il Numero

m Interfaccia e controlloðcomunicazione con l’utente (console)ðgestisce il controllo della partita

mModello e Persistenzaðstato della partita e regole di funzionamento

del giocoðgestione del record persistente su file

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Page 21: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

21

41G. Mecca - Programmazione Orientata agli Oggetti

void schermoInizioGioco()

: Principale

Architettura di Base

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Mod

ello

e

Per

sist

enza

Inte

rfac

cia

e C

ontr

ollo

Servizi di Base

static main()Principale()

Principale

new

Partita()

Partita

void setNome()void setTentativo()void reset()boolean getTrovato()String getNome()int getNumTent()int getNumero() String getSuggerim()

123 : Partita

Record()

Record

void checkRecord()boolean isUguagliato()boolean isNuovoRecord()int getValoreRecord()void reset()

987 : Record

+ void schermoInizioGioco()- void schermoTentativo()- void schermoFineGioco()- void schermoInterruzione()- void schermoUscita()

-Partita partita-Record record

: Principale

+void setNome()+void setTentativo()+void reset()+boolean getTrovato()+String getNome()+int getNumTent()+int getNumero() +String getSuggerim()

-String nome-int numero-int numeroTentativi-boolean trovato-String suggerimento

123 : Partita

#123#987

+void checkRecord()+boolean isUguagliato()+boolean isNuovoRecord()+int getValoreRecord()+void reset()-voidsetValoreRecord()

-String nomeFile-boolean nuovoRecord-boolean uguagliato

987 : Record

new

new

java.lang.String java.io.PrintWriter ...java.lang.System

42G. Mecca - Programmazione Orientata agli Oggetti

Architettura di Base

m Struttura tipica di una classe del modelloðuna serie di proprietà private (stato)ðmetodi getter e setter per le proprietàðaltri metodi pubblici relativi alla logica

applicativaðcostruttore standardðeventuali altri costruttori

m Terminologia Java per queste classið“bean” o “JavaBean”

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

>> Partita.java

Page 22: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

22

43G. Mecca - Programmazione Orientata agli Oggetti

Architettura di Base

m La classe Recordðinterfaccia sempliceðcheckRecord, isUguagliato, isNuovoRecord,

getValoreRecord

m L’implementazioneðutilizza il file system per salvare il valore del record

corrente in un file di testoðall’esterno il tipo di persistenza è invisibileðè possibile cambiare il formato del file o la tecnologia

senza che questo sia visibile

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

44G. Mecca - Programmazione Orientata agli Oggetti

Architettura di Base

m Attenzioneðdifferenza tra package e strato applicativoðsono due concetti indipendenti

m Il packageðè uno strumento per organizzare il codice e i

nomi delle classiðimplicazioni sintattiche (istruzione package)ðmetaforicamente, rappresenta il condominio

(l’indirizzo) di una classe

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Page 23: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

23

45G. Mecca - Programmazione Orientata agli Oggetti

Architettura di Base

m Lo strato applicativoðè un modo per organizzare le funzioni dei

componenti; strumento per dividere il lavoro tra i componentiðnon ha implicazioni sintatticheðmetaforicamente, rappresenta il luogo di lavoro (la

funzione) del componentem Molto spessoði package sono organizzati sulla base degli strati

applicativiðma questo non è in alcun modo necessario

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

46G. Mecca - Programmazione Orientata agli Oggetti

Architettura di Base

m Linee guidaðl’inizio dell’esecuzione è sempre nello strato di

Interfaccia e Controllo (main)ði comp. di I&C visualizzano dati e acquisiscono datiði comp. di I&C creano i componenti di M&Pði comp. di I&C chiamano metodi dei comp. di M&P

per accedere allo stato dell’applicazioneði comp. di I&C prendono decisioni sullo schermo

successivoði comp. di I&C NON accedono a sistemi esterni (es:

disco)ði comp. di I&C NON eseguono logica applicativa

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

Page 24: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

24

47G. Mecca - Programmazione Orientata agli Oggetti

Architettura di Base

m Linee guidaði componenti di modello e persistenza vengono creati

dai componenti di I&Cði comp. di M&P NON creano componenti di I&Cði comp. di M&P vengono utilizzati e modificati dai

comp. di I&Cði comp. di M&P NON utilizzano i comp. di I&Cði comp. di M&P mantengono lo stato

dell’applicazione e conoscono le regole di funzionamento dell’applicazioneði comp. di M&P NON visualizzano dati nè

acquisiscono dati dall’utente

Elementi di Base: Ruoli e Responsabilità >> Ruoli e Strati Applicativi

48G. Mecca - Programmazione Orientata agli Oggetti

Le Librerie di Java

m I servizi di baseðcomponenti delle librerie di Javaðlibreria: collezione di classi ðvarie centinaia di classi di utilizzo più o meno

comune

mMetaforaði servizi di base sono gli strumenti di lavoro

della lavanderiaðdalla macchina lavatrice al ferro da stiro

Elementi di Base: Ruoli e Responsabilità >> Le Librerie di Java

Page 25: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

25

49G. Mecca - Programmazione Orientata agli Oggetti

Le Librerie di Java

m Le principali libreriem java.langðcomponenti fondamentali del linguaggio; es: String,

Math, Systemðil nome del package può essere omesso

m java.ioðcomponenti per la gestione del flussi di lettura e

scritturam java.utilðvarie strutture di dati (es: liste)

Elementi di Base: Ruoli e Responsabilità >> Le Librerie di Java

50G. Mecca - Programmazione Orientata agli Oggetti

Le Librerie di Java

mDue package molto importantiðjava.awtðjavax.swingðcollezione di componenti per la costruzione

di interfacce grafiche sofisticate

m Altri packageðjava.soundðjava.appletðjava.net ...

Elementi di Base: Ruoli e Responsabilità >> Le Librerie di Java

>> Documentazione di Java

Page 26: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

26

51G. Mecca - Programmazione Orientata agli Oggetti

Le Librerie di Java

mNormalmenteðquasi tutte le esigenze di calcolo sono

soddisfacibili utilizzando le librerie di Java

m Se non fosse cosìðè possibile sviluppare le proprie librerie di

componentiðla programmazione a oggetti è ideale per

questo scopo

Elementi di Base: Ruoli e Responsabilità >> Le Librerie di Java

52G. Mecca - Programmazione Orientata agli Oggetti

Sviluppare Librerie

mUn esempioðuna librerie per la gestione di liste di numeri

reali in Java

mNotaðJava ha le sue eccellenti librerie per le

collezioni, ma il loro utilizzo è complessoðci vorrà un po’ prima di arrivare ad utilizzarleðper ora trattiamo un esempio sempliceðvalido per qualsiasi tipo di dato

Elementi di Base: Ruoli e Responsabilità >> Le Librerie di Java

Page 27: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

27

53G. Mecca - Programmazione Orientata agli Oggetti

it.unibas.utilita.ListaDiReali

m Costruttore vuotoðListaDiReali()

m Interfacciaðvoid clear()ðint size()ðvoid add(double val)ðvoid add(int pos,

double val)ðvoid remove(int pos)ðint indexOf(double val)

m Implementazioneðarray con indicatore di

riempimentoðmolto simile ad una

libreria in C++m Due differenzeðl’implementazione è

completamente nascostaðalcuni trucchi a oggetti

Elementi di Base: Ruoli e Responsabilità >> Le Librerie di Java

>> it.unibas.utilita.ListaDiReali

54G. Mecca - Programmazione Orientata agli Oggetti

Sviluppare Librerie

m Attenzione alla differenzaðcomponente sviluppato per una specifica

applicazioneðcomponente sviluppato per una libreria

mNel secondo casoðmaggiore enfasi sul riusoðil componente è pensato per essere utilizzato

in applicazioni diverseðminore controllo sulle condizioni di utilizzo

Elementi di Base: Ruoli e Responsabilità >> Le Librerie di Java

Page 28: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

28

55G. Mecca - Programmazione Orientata agli Oggetti

Sviluppare Librerie

m Nel caso della libreriaðè necessario uno stile diverso di programmazione

m “Programmazione difensiva”ðstile di programmazione che tende a curare

maggiormente la correttezzaðin particolare, non è possibile fare affidamento sul

comportamento dei componenti chiamanti

m Come segnalare gli errori ?ðeccezioni (>>)

Elementi di Base: Ruoli e Responsabilità >> Le Librerie di Java

56G. Mecca - Programmazione Orientata agli Oggetti

Riassumendo

m Interfacciaðtutto quello che un componente sa fareðdefinisce il ruolo di un componente >> suo

compito (lavoro) nell’applicazione

mObiettivoðcostruire società di componenti organizzatiði componenti si dividono i compiti e

collaborano tra di loro secondo regole precise

Elementi di Base: Ruoli e Responsabilità >> Riassumendo

Page 29: Programmazione Orientata agli Oggettidb.unibas.it/users/mecca/corsi/2002-2003/...Elementi di Base: Ruoli e Responsabilità versione 1.0 2 G. Mecca - Programmazione Orientata agli Oggetti

04/06/2003

29

57G. Mecca - Programmazione Orientata agli Oggetti

Riassumendo

m Strato applicativoðluogo di lavoro del componente

m Interfaccia e controlloðcompito di relazione con il pubblico

mModello e persistenzaðcompito di fare funzionare la bottega

m Servizi di baseðinfrastruttura e strumenti di lavoro

Elementi di Base: Ruoli e Responsabilità >> Riassumendo

58G. Mecca - Programmazione Orientata agli Oggetti

Riassumendo

m Introduzionem Interfaccia e ImplementazioneðModificatori di Visibilità

mRuoli e Strati ApplicativiðArchitettura di Base

m Librerie di JavaðSviluppare Librerie

Elementi di Base: Ruoli e Responsabilità >> Sommario


Recommended