G. Mecca – Università della Basilicata – [email protected]Programmazione Orientata agli Oggetti in Linguaggio Java Ereditarietà e Polimorfismo: Conclusioni versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) 2 G. Mecca - Programmazione Orientata agli Oggetti Sommario m Ricapitolazione m Gestione della Persistenza m Eccezioni m API di Java Tokenizzazione Properties m Test e Logging Ereditarietà e Polimorfismo: Conclusioni >> Sommario
23
Embed
Programmazione Orientata agli Oggetti in Linguaggio Java · 26/01/2005 1 G. Mecca – Università della Basilicata – [email protected] Programmazione Orientata agli Oggetti in Linguaggio
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Programmazione Orientataagli Oggetti in Linguaggio Java
Ereditarietà e Polimorfismo:Conclusioni
versione 2.2Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons
(vedi ultima pagina)
2G. Mecca - Programmazione Orientata agli Oggetti
Sommario
mRicapitolazionemGestione della PersistenzamEccezionimAPI di JavaðTokenizzazioneðProperties
m Test e Logging
Ereditarietà e Polimorfismo: Conclusioni >> Sommario
26/01/2005
2
3G. Mecca - Programmazione Orientata agli Oggetti
Ricapitolazione
mEreditarietà e Polimorfismoðricapitoliamo le idee fondamentali
mPerchè esistonoðper consentire di rappresentare più
fedelmente gli oggetti del mondo realeðrelazioni di “specializzazione” nelle
tassonomie e relazioni “is-a”ðrisparmiando per quanto possibile nella
scrittura del codice
Ereditarietà e Polimorfismo: Conclusioni >> Ricapitolazione
4G. Mecca - Programmazione Orientata agli Oggetti
Ricapitolazione
m Tipi di ereditarietàðereditarietà dell’implementazione >> riutilizzo
del codice della superclasseðereditarietà dell’interfaccia, ovvero del tipo
>> sostituibilità tra oggettim Il secondo tipoðè molto importante perchè, unito al binding
dinamico, consente la programmazione basata sul polimorfismo
Ereditarietà e Polimorfismo: Conclusioni >> Ricapitolazione
26/01/2005
3
5G. Mecca - Programmazione Orientata agli Oggetti
Ricapitolazione
m In concretoðentrambi i meccanismi possono essere
spiegati sulla base di una semantica definitaðquella della associazione gerarchia di oggetti
mAssociazione gerarchica tra oggettiðla creazione di un oggetto scatena sempre la
creazione di altri oggetti nella gerarchiaðgli oggetti sono in associazione (riferimenti
super) e collaborano tra di loro
Ereditarietà e Polimorfismo: Conclusioni >> Ricapitolazione
6G. Mecca - Programmazione Orientata agli Oggetti
Ricapitolazione
mEreditarietà dell’implementazioneðriguarda qualsiasi classe Java (e C#)ðogni classe ha una superclasse,
eventualmente Objectðcollaborando, l’associazione gerarchica di
oggetti è in grado di eseguire tutti i metodi implementati dagli oggetti della gerarchia
Ereditarietà e Polimorfismo: Conclusioni >> Ricapitolazione
26/01/2005
4
7G. Mecca - Programmazione Orientata agli Oggetti
Ricapitolazione
mEreditarietà dell’interfaccia (di tipo)ðanche questa riguarda qualsiasi classe Java
(e C#)ðtutti gli oggetti sono anche di tipo Objectðl’associazione gerarchica di oggetti può
presentarsi ai riferimenti con “facce” diverse, ovvero come un oggetto con molti tipiðcambiando l’oggetto di turnoðsenza cambiare l’oggetto puntato
Ereditarietà e Polimorfismo: Conclusioni >> Ricapitolazione
8G. Mecca - Programmazione Orientata agli Oggetti
Ricapitolazione
mAlgoritmo di esecuzione dei metodiðdipende dal tipo di binding
mBinding staticoðle chiamate sono eseguite dall’oggetto di
turno o dai suoi superoggetti
mBinding dinamicoðle chiamate sono eseguite dall’oggetto
puntato o dai suoi superoggetti
Ereditarietà e Polimorfismo: Conclusioni >> Ricapitolazione
26/01/2005
5
9G. Mecca - Programmazione Orientata agli Oggetti
Ricapitolazione
Ereditarietà e Polimorfismo: Conclusioni >> Ricapitolazione
Ereditarietà
Ereditarietà dellefunzionalità(extends)
Ereditarietà del tipo (extends,implements)
Algoritmo di esecuzionedei metodi
Bindingstatico
Bindingdinamico
Polimorfismo
10G. Mecca - Programmazione Orientata agli Oggetti
Ricapitolazione
m Linee guidaðpreferire l’associazione all’estensioneðusare l’estensione solo se le classi
rappresentano oggetti in relazione is-aðusare l’estensione solo se è necessario
l’upcast dalla sottoclasse alla superclasseðusare l’estensione solo quando non è
possibile sostituirla con l’implementazione di interfacce
Ereditarietà e Polimorfismo: Conclusioni >> Ricapitolazione
26/01/2005
6
11G. Mecca - Programmazione Orientata agli Oggetti
Gestione della Persistenza
m In entrambe le applicazioniðvengono utilizzati i file
mGestione Apppuntamentiðper salvare e caricare l’agenda
mVolpi e Conigliðper caricare la configurazione del gioco
mNel seguitoðapprofondiamo questi argomenti
Ereditarietà e Polimorfismo: Conclusioni >> Gestione della Persistenza
12G. Mecca - Programmazione Orientata agli Oggetti
Gestione della Persistenza
m In entrambi i casiðviene utilizzato un DAO per la gestione della
persistenza
mDAOðclasse dello strato di persistenza utilizzata
per operazioni di caricamento e salvataggio dei dati del modelloðtipicamente componente statico
Ereditarietà e Polimorfismo: Conclusioni >> Gestione della Persistenza
26/01/2005
7
13G. Mecca - Programmazione Orientata agli Oggetti
Gestione della Persistenza
m Inoltreðin entrambi i casi viene utilizzato il
meccanismo di trasformazione delle eccezioni
mDAOExceptionðeccezione che incapsula varie eccezioni
diverse che possono verificarsi nello strato di persistenza
Ereditarietà e Polimorfismo: Conclusioni >> Gestione della Persistenza
14G. Mecca - Programmazione Orientata agli Oggetti
Gestione della Persistenza
m In appuntamentiðDAOAgendaðpublic static Agenda carica(String nomeFile)ðpublic static salva(Agenda agenda, String nomeFile)ðl’approccio è quello usuale: caricamento,
lavoro in memoria centrale, salvataggio
Ereditarietà e Polimorfismo: Conclusioni >> Gestione della Persistenza
26/01/2005
8
15G. Mecca - Programmazione Orientata agli Oggetti
Gestione della Persistenza
m Il metodo carica(nomeFile)ðconsiste nel creare un nuovo oggetto di tipo
Agenda e riempirlo con i valori del fileðprima del caricamento l’oggetto Agenda non
esiste (e non si sa se esisterà – eccezioni)ðviene creato e restituito dal metodo
m Il metodo salva()ðviceversa in questo caso è necessario
salvare un’agenda esistente
Ereditarietà e Polimorfismo: Conclusioni >> Gestione della Persistenza
16G. Mecca - Programmazione Orientata agli Oggetti
Eccezioni
mNei metodi per la persistenzaðè necessario lavorare con varie eccezioniðcontrollate e non controllate
System.out.println("Utilizzo: java Principale");System.out.println(" oppure: java Principale nomeFile.properties");return;
} else if (args.length == 1) {nomeFile = args[0];
} else if (args.length == 0) {nomeFile = "e:\\codice\\it\\unibas\\volpiEConigli\\config.properties";
}Principale p = new Principale();p.esegui(nomeFile);
}public void esegui(String nomeFile) {
try {DAOConfigurazione.caricaConfigurazione(nomeFile);Gioco gioco = new Gioco();gioca(gioco);
} catch (DAOException daoe) {System.out.println("Errore negli argomenti " + daoe.getMessage());
}}
Ereditarietà e Polimorfismo: Conclusioni >> API di Java
26/01/2005
20
39G. Mecca - Programmazione Orientata agli Oggetti
Test e Logging
mPer finireðalcuni aspetti interessanti dei test delle due
applicazioni
mGestione appuntamentiðtest sui metodi che gestiscono la persistenza
mVolpi e Conigliðtest di unità e test funzionaliðl’utilizzo di test manuali
Ereditarietà e Polimorfismo: Conclusioni >> Test e Logging
40G. Mecca - Programmazione Orientata agli Oggetti
Test e Logging
m Test sulla persistenzaðtest sui metodi di caricamento dell’agendaðtest sui metodi di salvataggio dell’agenda
mPer verificare il caricamentoðè necessario predisporre file di dati di testðcaricarli ðed effettuare asserzioni sui dati caricati
Ereditarietà e Polimorfismo: Conclusioni >> Test e Logging
26/01/2005
21
41G. Mecca - Programmazione Orientata agli Oggetti
Test e Logging
mPer verificare il salvataggioðè necessario creare un oggetto di tipo
agenda e riempirlo con impegni variðsalvarlo sul disco in un fileðricaricarlo ed effettuare asserzioni sui dati
caricati
Ereditarietà e Polimorfismo: Conclusioni >> Test e Logging
>> it.unibas.appuntamenti.test.TestAgenda
42G. Mecca - Programmazione Orientata agli Oggetti
Test e Logging
m I test di Volpi e Conigliðdue caratteristiche interessanti
m La prima caratteristicaðeffettuare test manuali sull’applicazione è
praticamente impossibileði test di regressione sono assolutamente
indispensabili per garantire la correttezza dell’applicazione
Ereditarietà e Polimorfismo: Conclusioni >> Test e Logging
26/01/2005
22
43G. Mecca - Programmazione Orientata agli Oggetti
Test e Logging
mAttenzioneðl’applicazione ha una logica applicativa molto
complessaðper effettuare il debugging è stato necessario
utilizzare estensivamente il loggingðsolo attraverso l’analisi dei messaggi di log si
riesce a ricostruire il movimento degli animali sulla scacchiera
Ereditarietà e Polimorfismo: Conclusioni >> Test e Logging
>> it.unibas.volpieconigli.modello.Gioco
44G. Mecca - Programmazione Orientata agli Oggetti
Test e Logging
m La seconda caratteristicaði test della classe Gioco sono in realtà test
funzionali dell’applicazioneðverificano che le configurazioni successive
del gioco siano corretteðsono un po’ intricati da scrivere perchè
richiedono confronti tra la configurazione precedente e quella successiva
Ereditarietà e Polimorfismo: Conclusioni >> Test e Logging
>> it.unibas.volpieconigli.test.TestGioco
26/01/2005
23
45G. Mecca - Programmazione Orientata agli Oggetti
Riassumendo
mRicapitolazionemGestione della PersistenzamEccezionimAPI di JavaðTokenizzazioneðProperties
m Test e Logging
Ereditarietà e Polimorfismo: Conclusioni >> Sommario
46G. Mecca - Programmazione Orientata agli Oggetti
Termini della Licenza
Termini della Licenza
m This work is licensed under the Creative Commons Attribution-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
m Questo lavoro viene concesso in uso secondo i termini dellalicenza “Attribution-ShareAlike” di Creative Commons. Per ottenereuna copia della licenza, è possibile visitarehttp://creativecommons.org/licenses/by-sa/1.0/ oppure inviare unalettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.