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
Documenti analoghi
Persistenza di oggetti
§ 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...