Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
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
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
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
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
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
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
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
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
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
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
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);
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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