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...