Analisi e progettazione orientata agli oggetti

Transcript

Analisi e progettazione orientata agli oggetti
P
A S
Luca Cabibbo
Analisi e
Progettazione del
Software
Oggetti e persistenza
Luca Cabibbo
marzo 2003
1
Oggetti e persistenza
Luca Cabibbo
A PS Motivazioni e contenuti
Contesto
ƒ sviluppo di applicazioni
ƒ mediante le moderne tecniche di
analisi/progettazione/programmazione a oggetti
(OOA/OOD/OOP)
ƒ che devono gestire dati
persistenti/condivisi/transazionali
Linguaggi e modelli di riferimento
ƒ UML e Java
Oggetti e persistenza
ƒ illustrazione e discussione di alcune tecnologie per la
gestione di dati persistenti/condivisi/transazionali
ƒ discussione di alcuni problemi metodologici rilevanti
2
Oggetti e persistenza
Luca Cabibbo
A PS Lo sviluppo del software
Discipline (attività) bello sviluppo del software
ƒ analisi dei requisiti
ƒ analisi
ƒ progettazione
ƒ implementazione
ƒ test
ƒ altre – rilascio, manutenzione, gestione del progetto, …
Organizzazione delle attività
ƒ in fasi, iterazioni e discipline (UP)
3
Oggetti e persistenza
Luca Cabibbo
A PS Analisi e progettazione
L’analisi enfatizza l’investigazione di un problema, ovvero la
comprensione dei suoi requisiti – che cosa
ƒ l’analisi non è interessata direttamente alle soluzioni del
problema
La progettazione enfatizza una soluzione concettuale che
soddisfa i requisiti del problema – come
ƒ la progettazione non è interessata direttamente alla
realizzazione (implementazione) della soluzione
ƒ i progetti possono essere implementati
Do the right thing, and do the thing right
ƒ fa la cosa giusta (analisi), e fa la cosa bene (progettazione)
4
Oggetti e persistenza
Luca Cabibbo
A PS Analisi e progettazione OO
Durante l’analisi orientata agli oggetti (OOA) l’enfasi è sulla
identificazione e descrizione degli oggetti (concetti) nel
dominio del problema
Durante la progettazione orientata agli oggetti (OOD)
l’enfasi è sulla definizione e caratterizzazione degli oggetti
software, e su come essi collaborano per soddisfare i requisiti
Infine, gli oggetti scelti durante l’OOD vengono implementati
durante la programmazione orientata agli oggetti (OOP)
5
Oggetti e persistenza
Luca Cabibbo
A PS Esempio – il sistema POS NextGen
Un sistema POS (point-of-sale, punto di vendita) è
ƒ un sistema informatico usato per registrare vendite e
gestire i pagamenti
ƒ tipicamente usato nei negozi di vendita al dettaglio
ƒ comprende componenti hardware (calcolatori, lettori di
codici a barre) e software
ƒ si interfaccia con diversi servizi applicativi esterni
ƒ ad es., sistemi per la gestione dell’inventario e della
contabilità, calcolatori di tasse realizzati da terzi
6
Oggetti e persistenza
Luca Cabibbo
A PS Architettura a tre livelli ed enfasi dell’OOA/D
7
Oggetti e persistenza
Luca Cabibbo
A PS Analisi orientata agli oggetti
Diagrammi di sequenza di sistema
ƒ descrivono il comportamento del sistema – a scatola nera
ƒ che cosa – indipendentemente dal come
Modello di dominio
ƒ diagramma che visualizza le classi concettuali del dominio
del problema
ƒ le classi concettuali
ƒ descrivono concetti del mondo reale
ƒ sono fonte di ispirazione per le classi di progetto
Contratti delle operazioni
ƒ descrizione dei cambiamenti dello stato degli oggetti del
Modello del dominio causati dell’esecuzione dalle
operazioni di sistema
8
Oggetti e persistenza
Luca Cabibbo
A PS Modello di dominio
9
Oggetti e persistenza
Luca Cabibbo
A PS Dall’analisi alla progettazione a oggetti
La progettazione orientata agli oggetti sviluppa una soluzione
logica basata sul paradigma orientato agli oggetti
ƒ alla base della soluzione c’è la creazione di diagrammi di
interazione
ƒ descrivono come gli oggetti collaborano per soddisfare i
requisiti
ƒ la loro creazione può essere basata sull’applicazione di
principi per l’assegnazione delle responsabilità e di
pattern di progettazione
ƒ vengono inoltre disegnati dei diagrammi delle classi di
progetto
ƒ descrivono le classi software (e le loro interfacce) che
devono essere implementate
10
Oggetti e persistenza
Luca Cabibbo
A PS Diagramma delle classi di progetto
11
Oggetti e persistenza
Luca Cabibbo
A PS Classi concettuali e classi software
Le classi concettuali descrivono i concetti rilevanti della realtà
di interesse
ƒ alcune classi software sono ispirate a classi concettuali
ƒ non tutte le classi software sono ispirate a classi
concettuali
ƒ non tutte le classi concettuali vengono rappresentate da
classi software
12
Oggetti e persistenza
Luca Cabibbo
A PS Gestione di regole di sconto
13
Oggetti e persistenza
Luca Cabibbo
A PS Collegamento con la UI
14
Oggetti e persistenza
Luca Cabibbo
A PS Architettura a strati
Presentation
Swing
Text
not the Java
Swing libraries, but
our GUI classes
based on Swing
ProcessSale
Frame
used in quick
experiments
ProcessSale
Console
Domain
Sales
Register
Pricing
PricingStrategy
Factory
Sale
ServiceAccess
«interface»
ISalePricingStrategy
Payments
Services
Factory
CreditPayment
POSRuleEngine
Inventory
«interface»
IInventoryAdapter
«interface»
ICreditAuthorization
ServiceAdapter
Taxes
POSRuleEngineFacade
«interface»
ITaxCalculatorAdapter
Technical Services
Persistence
DBFacade
15
Log4J
Jess
Oggetti e persistenza
A general
purpose thirdparty rules
engine.
SOAP
Luca Cabibbo
A PS Gestione della persistenza
I sistemi informatici richiedono solitamente di gestire alcuni
dati in modo persistente – nonché condiviso e transazionale
ƒ in una applicazione a oggetti, è necessario rendere
persistenti alcuni oggetti di alcune classi
ƒ le classi persistenti sono classi i cui oggetti vanno resi
persistenti
ƒ spesso, le classi persistenti sono classi della logica
applicativa ispirate alle classi concettuali
La persistenza delle classi può essere realizzata in diversi
modi
ƒ ad esempio, mediante una base di dati a oggetti, una base
di dati relazionale o un insieme di file
ƒ siamo interessati principalmente (ma non solo) alla
persistenza di oggetti mediante basi di dati relazionali
16
Oggetti e persistenza
Luca Cabibbo
A PS Una possibile soluzione
Una prima soluzione consiste nel rendere persistente una
classe della logica applicativa scrivendo direttamente il codice
SQL (JDBC) dentro la classe stessa
Prodotto
SQL
base di dati
Vendita
SQL
logica applicativa
17
Oggetti e persistenza
Luca Cabibbo
A PS Separazione degli interessi
Il principio di progettazione per la separazione degli
interessi suggerisce che durante la progettazione aspetti
(interessi) diversi vadano mantenuti quanto più possibile
separati (in classi e/o moduli separati)
ƒ la logica applicativa va pertanto realizzata in modo
indipendente dalla gestione della persistenza dei dati
ƒ la persistenza dei dati va realizzata mediante un modulo
apposito
ƒ possibilmente di uso generale e indipendente dalla
logica applicativa
18
Oggetti e persistenza
Luca Cabibbo
A PS Una seconda soluzione
Una seconda soluzione consiste nello scrivere il codice SQL
in apposite classi di supporto (data classes) alle classi
persistenti
Prodotto
ProdottoDB
SQL
base di dati
Vendita
VenditaDB
SQL
logica applicativa
19
data classes
Oggetti e persistenza
Luca Cabibbo
A PS Soluzione basata su un persistence layer
Una soluzione migliore consiste nel delegare la gestione della
persistenza degli oggetti ad un modulo apposito –
persistence layer (PL)
ƒ un PL nasconde i dettagli della persistenza (nonché della
condivisione e della transazionalità) al programmatore
Prodotto
Persistence
Manager
SQL
base di dati
Vendita
persistence layer
logica applicativa
20
Oggetti e persistenza
Luca Cabibbo
A PS Uso di un persistence layer
Diversi persistence layer possono essere utilizzati mediante
delle API compatibili con le API ODMG
ƒ le API ODMG sono quelle che consentono di accedere a
una base di dati a oggetti
ƒ in pratica, il programmatore vede il gestore della
persistenza come una base di dati a oggetti, anche se
l’implementazione della persistenza è diversa
PersistenceManager pm = new PersistenceManager(...);
Transaction tx = pm.currentTransaction();
PersonaID pID = new PersonaID("1");
Persona p = (Persona) pm.getObjectByID(pID);
p.setStipendio(1000);
tx.commit();
21
Oggetti e persistenza
Luca Cabibbo
A PS Gestione trasparente della persistenza
Un persistence layer nasconde al programmatore i dettagli di
come gli oggetti vengono resi persistenti
ƒ tre approcci
ƒ O/R mapping – forward engineering
ƒ R/O mapping – reverse engineering
ƒ meet in the middle
22
Oggetti e persistenza
Luca Cabibbo
A PS O/R mapping – forward engineering
Nell’O/R mapping
ƒ il programmatore indica in un file di configurazione quali
sono le classi che vanno rese persistenti
ƒ a partire da questo file
ƒ viene generata la base di dati
ƒ vengono generate le data classes per le classi
persistenti
ƒ le classi persistenti vengono “migliorate” da un postcompilatore (enhancer) che stabilisce la cooperazione
tra classi persistenti e data classes
23
Oggetti e persistenza
Luca Cabibbo
A PS R/O mapping – reverse engineering
Nell’R/O mapping
ƒ il programmatore indica in un file di configurazione la base
di dati relazionale di interesse
ƒ a partire da questo file
ƒ vengono generate le data classes per accedere e
modificare le tuple delle relazioni della base di dati
ƒ il programmatore rende persistente le proprie classi
facendole cooperare (esplicitamente) con le data classes
24
Oggetti e persistenza
Luca Cabibbo
A PS Meet in the middle
Meet in the middle – incontro al centro
ƒ le classi persistenti e la base di dati vengono progettate e
realizzate in modo indipendente
ƒ il programmatore indica in un file di configurazione le
corrispondenze tra classi persistenti e base di dati
ƒ a partire da questo file
ƒ vengono generate le data classes per le classi
persistenti
ƒ le classi persistenti vengono “migliorate” da un postcompilatore (enhancer) che stabilisce la cooperazione
tra classi persistenti e data classes
25
Oggetti e persistenza
Luca Cabibbo
A PS Discussione
L’O/R mapping è utile in fase di prototipazione
ƒ ma non è accettabile se la base di dati va condivisa da più
applicazioni sviluppate in modo indipendente
L’R/O mapping è utile se la base di dati è stabile
ƒ ma non è accettabile se la base di dati varia
continuamente, ad esempio perché la si sta progettando
Meet in the middle è la soluzione più flessibile
ƒ cambiamenti nelle classi persistenti e/o nella base di dati
richiedono solo il cambiamento del file di configurazione
ƒ indipendenza logica dell’applicazione dalla base di dati
ƒ poche realizzazioni – spesso incomplete
26
Oggetti e persistenza
Luca Cabibbo
A PS Corrispondenze tra classi e relazioni
L’approccio meet in the middle è basato su una descrizione
(dichiarativa) delle corrispondenze tra classi e relazioni
ƒ le corrispondenze associano
ƒ classi, con i loro attributi e associazioni
ƒ relazioni, con i loro attributi e vincoli di integrità
Possibili corrispondenze
ƒ una classe con una relazione
ƒ una classe con più relazioni correlate da integrità
referenziali
ƒ più classi (correlate da associazioni) con una relazione
ƒ più classi con più relazioni
Difficoltà
ƒ schemi parzialmente denormalizzati
27
Oggetti e persistenza
Luca Cabibbo
A PS Standard e sistemi
JDO – Java Data Objects – http://www.jdocentral.com/
ƒ una API Java standard per la trasparenza persistente degli oggetti
OJB – ObJect relational Bridge – http://db.apache.org/ojb/
ƒ uno strumento per l’O/R mapping + meet in the middle
ƒ compatibile con le API ODMG e JDO
Torque – http://db.apache.org/torque/
ƒ uno strumento per l’R/O mapping
JRELAY – http://www.objectindustries.com/
ƒ una implementazione di JDO per la persistenza relazionale – O/R
mapping + meet in the middle
JDX – http://www.softwaretree.com
ƒ un altro strumento per l’O/R mapping
Forte for Java 3 – http://wwws.sun.com/software/sundev/jde/
ƒ funzionalità di R/O mapping + meet in the middle
E i produttori di RDBMS?
28
Oggetti e persistenza
Luca Cabibbo
A PS Un’altra tecnologia – EJB
Enterprise Java Beans (EJB) sono componenti Java riusabili
che implementano logica applicativa e abilitano lo sviluppo di
applicazioni distribuite basate su componenti
ƒ gli EJB sono oggetti software che
ƒ vivono nell’ambito di un application server (AS), usato
da contenitore di EJB
ƒ possono essere acceduti remotamente tramite l’AS
Tre tipologie di EJB (ciascuno con le sue varianti)
ƒ session bean – per implementare servizi (azioni) da
eseguire per conto del cliente
ƒ message-driven bean – per implementare servizi asincroni
ƒ entity bean – oggetti persistenti e transazionali utilizzati per
rappresentare dati (entità nel senso del modello ER)
29
Oggetti e persistenza
Luca Cabibbo
A PS Entity bean
Due tipi di entity bean
ƒ entity bean la cui persistenza è delegata completamente al
contenitore (AS) che ospita il bean (CMP)
ƒ va implementata solo la logica applicativa
ƒ entity bean la cui persistenza è gestita esplicitamente dal
bean (BMP)
ƒ oltre alla logica applicativa, vanno implementati metodi
di supporto alla persistenza ma indipendenti dalla logica
applicativa – ejbCreate(), ejbLoad(), ejbStore(),
ejbRemove()
ƒ è comunque compito del contenitore decidere quando e
come invocare questi metodi di supporto alla
persistenza
ƒ è compito del contenitore anche gestire le transazioni
30
Oggetti e persistenza
Luca Cabibbo
A PS Conclusioni
Gli sviluppatori di applicazioni a oggetti vogliono rendere
persistenti i loro oggetti nel modo più efficiente (mediante una
base di dati relazionale) ed efficace possibile
ƒ vogliono ignorare quanto più possibile le problematiche
legate alla persistenza degli oggetti
ƒ progettazione ed evoluzione della base di dati, SQL,
JDBC, gestione delle transazioni, caching di oggetti
persistenti, …
ƒ da queste esigenze nascono gli strumenti di supporto alla
gestione trasparente della persistenza di oggetti
31
Oggetti e persistenza
Luca Cabibbo
A PS Tesine e tesi
Tesine
ƒ sperimentazione di uno strumento per la gestione
trasparente della persistenza – 5 crediti
ƒ sperimentazione e studio approfondito di uno strumento
per la gestione trasparente della persistenza – 10 crediti
Tesi
ƒ studio di modelli per la gestione trasparente della
persistenza di oggetti di tipo meet in the middle
ƒ realizzazione di persistence layer di tipo meet in the middle
ƒ realizzazione di strumenti di supporto a persistence layer di
tipo meet in the middle
ƒ database refactoring
ƒ database testing
32
Oggetti e persistenza
Luca Cabibbo