Sviluppo di una applicazione su piattafotma Android con il supporto di un DBMS orientato ad oggetti

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Sviluppo di una applicazione su piattafotma Android con il supporto di un DBMS orientato ad oggetti"

Transcript

1 Università degli Studi dell Aquila Facoltà di Ingegneria Tesi di Laurea in Ingegneria Informatica e Automatica Sviluppo di una applicazione su piattafotma Android con il supporto di un DBMS orientato ad oggetti Relatore: Prof. Serafino Cicerone Laureando: Marco Campoli Anno Accademico

2 Indice Introduzione 6 1 Dispositivi mobili ed Android Perchè programmare per dispositivi mobili Sistemi per dispositivi mobili ed OHA Android: Introduzione Storia Versione della piattaforma Java e Dalvik Virtual Machine (DVM) Architettura di Android ADT. Android Development Tool Tipologie di applicazioni Componenti Stato di un processo File androidmanifest.xml e risorse Le risorse, struttura di un progetto e classe R Tipi semplici di risorse Risorse associate ai file La classe R Activity, Intent e comunicazione tra Activity Activity View e Layout

3 Indice Intent e comunicazione tra Activity Gestione degli eventi Dialog, Toast, Widget e Notification Dialog Toast Notification Service Home-screen Widget Gestione dei dati Database ad oggetti e relazionali Database Relazionali e RelationalDBMS SQL SQLlite ODBMS ed RDBMS DBMS ad oggetti Db4o Licenza Object Container ed Operazioni basilari Query Transizioni Proprietà ACID Relazioni inverse Tipologie di relazioni ed Ereditarietà Reference cache Equivalence ed Equality Concetto di identità e trasparent persistence Concetto di attivazione Configurazione Client-server mode DRS. Data Replication System Db4o ed SQL (SQLite) Performance Perst

4 Indice Salvataggio degli oggetti Relazioni tra oggetti Attivare gli oggetti Cercare Oggetti Transizioni Relational Database Wrappers Repliation System Perst vs Db4o Realizzare un applicazione Android-Db4o Introduzione Il problema Casi d uso Casi d uso Capionario Architettura logica MVC ed organizzazione dei package Pattern Singleton Modello di dominio Analisi dei casi d uso e SSD System Sequence Diagram Il nostro caso d uso: Aggiungere un Cliente Aggiungere un Indirizzo Aggiungere Recapiti Aggiungere un Cliente Modificare ed eliminare un Cliente Modificare un Cliente Eliminare un Cliente Conclusioni Il problema La soluzione considezioni personali sviluppi futuri

5 Indice Bibliografia 132 A Programazione ad oggetti e Java 134 A.1 Programmazione ad oggetti A.2 Java: storia e caratteristiche B ORM ed Hibernate 138 5

6 Introduzione Con la nascita dei moderni dispositivi mobili o smartphone è possibile la creazione di applicazioni che si occupano di qualsiasi attività l utente voglia eseguire. Con l inserimento di sistemi di localizzazione geografica GPS, fotocamere, riproduttori mp3 ed altri strumenti, le capacità di questi device sono assimilabili a quelle di un personal computer di circa otto anni fa, dai costi, in alcuni casi molto inferiori. Le precedenti affermazioni fanno capire che il concetto di personal computer si sta spostando verso dispositivi sempre più piccoli, che possono accompagnare i suoi utilizzatori in ogni momento della giornata. Recenti statistiche affermano che il numero di smartphone venduti nel mondo supera nettamente quello dei PC. Caratteristica che accomuna ogni applicazione sviluppata per smartphone o calcolatore elettronico, è sicuramente la gestione di una grande quantità di dati. Ad esempio, potrebbe essere necessario salvare elementi relativi un cliente o un prodotto, per poterli recuperare in un secondo momento. Questa situazione è associata all informatica fin dai suoi albori. Negli anni sono state realizzate soluzioni sempre più performanti, concluse con la creazione delle basi dati e DBMS (Data Base Management System), cioè sistemi di gestione dei database. Esistono varie tipologie di smartphone ed ognuno ha un proprio sistema integrato. La maggior parte di questi sono tecnologie proprietarie, cioè di dominio privato, facenti capo in generale ad una singola azienda. Tipici esempi sono Symbian prodotto da Nokia o Ios prodotto da Apple. In un mondo come l informatica in cui si fanno spazio le teconologie open-source, 6

7 Capitolo 0 mancava certamente una piattaforma dedica a questi dispositivi. Con la l avvento di Android (prodotto da Google) sono stati rilasciati gli strumenti per la creazione delle applicazioni e il sistema stesso, per cui molti programmatori si sono accostati a questo tipo di progettazione. Le ricerche effettuate sui vari devices fanno notare che la piattaforma Google è quella che nell immediato futuro e molto probabilmente nei prossimi anni sarà predominante nel mercato. Ad avvalere questa ipotesi è stato recentemente registrato un numero di tre miliardi di applicazioni scaricate. Spesso un applicazione deve far riferimento ad una grande quantità di dati. Per rendere persistenti questi valori si fa uso delle basi di dati. Nel 90% dei casi (che è appunto la fetta di mercato occupata) parlando di un database ci si riferisce ad un modello relazionale, cioè ad una struttura creata da tabelle, chiavi e relazioni. Per eliminare qualche problema tra il linguaggio utilizzato per la realizzazione di applicazioni in Android ed i sistemi relazionali, è possibile utilizzare una nuova tipologia di DBMS che va sotto il nome di OODBMS (Object Oriented DBMS). Esistono molti sistemi di gestione delle basi dati ad oggetti, peró si preferisce concentrarsi su elementi open-source adatti all integrazione in Android. Il risultato della ricerca porta a due soli elementi che vanno sotto il nome di Db4o e Perst. La tesi è corredata da un applicazione di riferimento dedicata alla gestione di un campionario di merci. Nella realtà esistono già molti apps che si occupano di questo problema, però non tutte sono scaricabili gratuitamente o fanno uso di un DBMS ad orientato agli oggetti. Programmi di questo genere molte volte sono specifici per la gestione dei soli prodotti; come si vedrà, BAgent oltre alle merci è in grado di gestire clienti, ordini, appuntamenti, tipologie per i prodotti e parametri opzionali aggiunti dinamicamente. L applicazione è stata realizzata mediante il Pattern MVC, il quale definisce chi e come deve eseguire deteriminati compiti e il Pattern Singleton, usato per la gestione degli elementi appartenenti allo stesso. Come ampliamente consigliato dalla comunità di sviluppatori Android, BAgent è stato realizzato mediante l uso dell IDE Eclipse per il quale è stato fornito l ADT 7

8 Capitolo 0 (Android Development Tool), plugin messo a disposizione da Google, ed OME (Object Manager Enterprise), per la visione degli elementi contenuti nel database direttamente all interno dell IDE. Per realizzare l applicazione si è fatto uso di molti grafici. Per questi è stata utilizzata la versione di prova di Poseidon for UML e strumenti di ingegneria inversa. La struttura in capitoli del presente documento è racchiuso nella successiva sezione: Capitolo 1. In questo capitolo vengono forniti i motivi per i quali è consigliabile sviluppare per dispositivi mobili e di conseguenza, vengono introdotti i sistemi di maggior successo in questo ambito. In un secondo momento si introduce Android, il sistema, gli elementi fondamentali e i motivi per cui l applicazione BAgent è stata realizzata con esso. L ultimo paragrafo è dedicato ai vari metodi di gestione dei dati per questa piattaforma, con il quale si introduce il capitolo successivo. Capitolo 2. Dedicato allo studio dei DBMS ed in particolare degli ODBMS. Inizialmente vengono descritti gli RDBMS, SQLite e sistemi di mapping (ORM ). La seconda parte è invece concentrata sullo studio dei database orientati ad oggetti, in particolare su Db4o, Perst e sui confronti tra i vari sistemi di gestione dei dati. Questo capitolo descrive anche i motivi per cui si è utilizzato Db4o per la realizzazione dell applicazione. Capitolo 3. Capitolo dedicato alla descrizione dell applicazione di riferimento. In esso sono racchiuse i concetti fondamentali dell applicazione e la sua struttura. BAgent è stato descritto sommariamente attraverso un modello realizzato con strumenti di ingegneria inversa di Poseidon for UML. Nella seconda parte vengono descritti i casi d uso, cioè tutte le funzioni che l app offre al suo utilizzatore, in questo caso chiamato Attore. I casi d uso sono divisi in quattro macro categorie nelle quali l attore che interagisce con l applicazione è sempre lo stesso, cioè è l utente che la utilizza. Alla fine del capitolo è stata dichiarata la struttura in package del progetto e le implementazioni dei Patterns Singleton ed MVC. Capitolo 4. In questo capitolo si realizzano gli SSD o diagrammi di sequenza, 8

9 Capitolo 0 i quali descrivono le interazioni tra gli elementi caratteristici di BAgent. Avendo sviluppato l applicazione secondo il pattern MVC, questi grafici evidenziano le relazioni che avvengono tra i vari elementi che lo compongono. A partire da questi elementi viene descritto anche il codice relativo al caso d uso Aggiungi Cliente, nel quale sono riportati i metodi per l accesso e il recupero dati relativi ad indirizzi, numeri di telefono, fax ed direttamente dalla rubrica interna al dispositivo. Nella parte finale si descrive il codice per recuperare un oggetto Cliente all interno del database ed effettuare operazioni di modifica o eliminazione su di esso. Capitolo 5. Capitolo dedicato alle conclusioni tratte dallo studio di Android e degli ODBMS. In esso sono raccolte riflessioni al problema interposto nella realizzazione della tesi e alle sue soluzioni. L applicazione di riferimento BAgent potrebbe inoltre essere ulteriormente approfondita realizzandola in modo diverso per tablet, integrando nuove funzioni e rendendola disponibile per un numero maggiore di versioni della piattaforma. 9

10 Capitolo 1 Dispositivi mobili ed Android In questi ultimi anni si sta svolgendo una rivoluzione legata all uso dei dispositivi mobili 1. I moderni dispositivi includono fotocamere, media players, sistemi GPS e touchscreen. Queste caratteristiche aumentano le possibilità di utilizzo da parte dell utente finale e quindi la varietà di applicazioni che un programmatore può creare. Fin dai primi anni in cui è cresciuto il mercato dei dispositivi mobili, essi erano sempre caratterizzati dall avere un sistema proprietario. Ciascuna di queste piattaforme aveva proprie caratteristiche, storia e linguaggio. Con l avvento delle tecnologie esposte in precedenza si è introdotta una barriera per i programmatori che si distaccano da questo tipo di filosofia, poichè prediligono le tecnologie open-source 2. 1 Con la notazione dispositivi mobili (o smartphone) si intende un qualsiasi strumento elettronico capace di ricevere chiamate, caratterizzato dall essere mobile. Come si vedrà questa è solo una delle tante caratteristiche disponibili. 2 In un epoca segnata dall uso di teconologie open source è sempre mancata una piattaforma dedica ai dispositivi mobili. Come si vedrà, Android è caratterizzato dal fatto di essere open source, quindi consultabile e migliorabile da chiunque voglia farlo. La licenza scelta è la Open Source Apache Licence

11 Capitolo Perchè programmare per dispositivi mobili Le informazioni che prima erano accessibili solo attraverso un personal computer, ora possono essere recuperate attraverso dispositivi 3 che hanno la caratteristica di essere mobili e di dimensioni sempre più ridotte. In questo modo si può estendere il concetto di personal computer per dispositivi sempre più piccoli e che ci possono accompagnare in qualsiasi momento. Molto importanti sono le seguenti note: Il mercato dei dispositivi mobili ha superato quello dei personal computer 4 [1]. Il 2009 è stato l anno in cui il numero di accessi ad internet fatto con un dispositivo mobile ha superato quello dei personal computer 5. Ci sono molti fattori cui tener conto quando si scrivono applicazioni software per smartphone. I dispositivi sono limitati da un piccolo schermo, una ridotta memoria e processori a bassa potenza 6. 3 Rispetto un destkop o un notebook computer, i dispositivi mobili hanno: processori lenti, RAM limitata, memoria limitata, batteria limitata, piccoli schermi a bassa risoluzione ed altri problemi. Ogni sviluppatore dovrebbe tener conto di essi, anche se per ogni nuova generazione di telefoni diminuisce il gap prestazionale. Si stima che la potenza di calcolo di un qualsiasi smartphone sia paragonabile a quella di un personal computer di circa otto anni fa. Queste righe risalgono ad un articolo scritto nel 2010 e al giorno d oggi si può affermare che questo gap è stato ridotto ulteriormente con l avvento ad esempio di dispositivi dual-core. 4 Il boom del mercato degli smartphone è avvenuto tra il 2004 e 2005 dove furono raddoppiate le vendite. L ultimo dato fornito afferma che sono 21 milioni gli smartphone venduti nel mondo nell ultimo trimeste del 2011 (a differenza dei normali telefoni che hanno raggionto i 20 milioni di prodotti venduti). 5 Con 24 miliardi di device dotati di connessione wireless e 12 miliardi di device connessi alla rete mobile attesi per il 2020 (per un mercato stimato di 1,2 triliardi di dollari) stiamo decisamente entrando in una nuova era. 6 Questa caratteristica è tipica dei dispositivi rilasciati negli scorsi anni. Anche se è buona norma assumere che essi siano a risorse limitate, va anche assunto il fatto che come avviene per i personal computer, anche per gli smartphone o tablet le prestazioni aumentano con il rilascio di nuovi dispositivi. 11

12 Capitolo 1 Si deve sempre ottimizzare il codice per renderlo veloce e responsabile. Le applicazioni sono pensate per essere eseguite in piccoli schermi. Si dovrebbero creare applicazioni in modo da essere intuitive all utente finale e che siano ben visibili su schermi a diversa grandezza. Quando si sviluppano applicazioni che fanno uso della rete internet è buona norma assumere che la connessione potrebbe essere lenta e molto costosa. Alla base di quanto detto, la nuova frontiera per i programmatori è data dallo sviluppo di applicazioni per telefoni di nuova generazione. Inoltre, è buona norma tener conto di quali costi ogni azione coinvolge; in qualche caso come ad esempio l uso di GPS o il trasferimento dati sono richiesti costi aggiuntivi a seconda dell operatore e della tariffa utilizzata; l utente ha sempre la possibilità di disabilitare queste funzioni e lo sviluppatore è tenuto a rispettare queste scelte. 1.2 Sistemi per dispositivi mobili ed OHA Il mercato degli smartphone può essere declinato attraverso tre grandi società che vanno sotto il nome di Google, Nokia ed Apple. Google è responsabile del progetto Android [5] [6] [7], mentre le altre due sono responsabili di Symbian 7 ed ios 8. I produttori dei tre sistemi sono in continua disputa legale e letteraria 9. 7 Prodotto della Symbian Foundation. La sua nascita risale al giugno del 1998 con la creazione di Symbian Limited nata dalla cooperazione di diverse compagnie telefoniche. L ultima versione disponibile del sistema operativo è la 5.0. Il 4 febbraio 2010 è diventato un sistema operativo libero, mentre Il 5 Aprile 2011 Nokia annuncia un cambiamento nei criteri necessari per contribuire al progetto trasformandolo in un sistema dove solo le aziende possono collaborare al suo sviluppo. 8 Sistema operativo sviluppato da Apple per iphone, ipod ed ipad. Il sistema operativo è stato presentato il nove gennaio 2007 al Macworld Conference Expo e la versione 1.0, ancora priva di nome, è entrata in commercio con il primo iphone il 29 giungno dello stesso anno. L ultima versione è stata rilasciata nel 2011 ed è la quinta. 9 L ultima disputa ripresa dai media risale a qualche mese fa. In una conferenza esponenti importanti della Nokia hanno affermato che Google ha creato Android grazie ad Apple (in qualche modo avrebbe copiato il sistema ios). 12

13 Capitolo 1 Come visibile nel seguente grafico a torta (fornito da Millennial Media nell agosto 2011), si può affermare che Google ed Apple sono i maggiori produttori di dispositivi mobili. Figura 1.1: Grafico delle vendite dei vari produttori di dispositivi mobili. Come si vede bene dall immagine, Android è il sistema utilizzato sul 54% dei moderni telefoni, a fronte del 28% dei dispositivi ios. Molto distante, con solo il 13%, si colloca RIM (casa produttrice dei BlackBerry) [2] [3]. Sicuramente Google ed Apple si contengono una grossa fetta di mercato. Questo può essere dovuto dalla natura open-source di android e dalle innumerevoli caratteristiche ed accessori rilasciati dalla Apple per i suoi prodotti 10. Per quanto affermato bisogna specificare che andorid non è la risposta Google all IPhone. L IPhone è un sistema hardware e software proprietario facente capo ad una singola società (Apple). Android è uno stack open-source prodotto e supportato dalla OHA. 10 Android non è da meno ad ios. Sono recenti le notizie della brevettazione da parte di Apple di un sistema che consente di effettuare qualsiasi operazione durante una chiamata. È riscontrabile che nei dispositivi Android questo avveniva già da molto tempo, ma in futuro dovrà essere eliminata a causa del brevetto. 13

14 Capitolo 1 La Open Handset Alliance (OHA) è un insieme di circa cinquanta società, dove oltre a Google troviamo sviluppatori software, costruttori di componenti (Intel e Texas Instruments) e MOBILE CARRIERS 11. Di questa società fanno parte anche le più note case costruttrici di dispositivi tra le quali si citano Motorola, T-Mobile, Samsung, Sony-Ericsson e Toshiba. 1.3 Android: Introduzione Android è un vero e proprio stack di strumenti e librerie caratterizzato da un sistema costruito sul kernel open-source Linux (nella versione 2.6), da librerie ed API scritte in C. Con queste caratteristiche ogni applicazione può avere accesso all hardware mediante specifiche API. Android dispone di una vasta comunità di sviluppatori, i quali rilasciano nuove applicazioni 12 (apps) che estendono le funzionalità del telefono. Per motivi di sicurezza informatica, le apps possono essere scaricate e utilizzate mediante un servizio di distribuzione fidato, quindi un sito internet che fornisca sia l applicazione stessa che le relative certificazioni 13. A differenza di altri sistemi, il linguaggio utilizzato da Android è Java 14. In questo modo nello sviluppo di applicazioni si ereditano tutti i pregi introdotti dalla Sun, le sue API, ed inoltre ne vengono aggiunte ulteriori atte allo sviluppo di questo tipo di applicazioni. 11 I mobile carriers sono letteralmente gli operatori di telefonia mobili. Di questo gruppo fa parte ad esempio la Vodafone. 12 Attualmente sono disponibili nel market oltre applicazioni, dove la maggior parte di esse è scaricabile senza costi aggiuntivi. A dimostrazione del successo del market è recenetemente stato raggiunto il numero di 10miliardi di app scaricate. Per festeggiare l avvenimento Google ha fornito il download di tutte le applicazioni a pagamento alla modica cifra di 0.50 centesimi di euro. 13 Il sito in questione prende il nome di AndroidMarket. Per venire incontro alle necessità degli sviluppatori è stata prevista la possibilità di disattivare il controllo dei certificati a partire dalla versione 2.2 della piattaforma. 14 Java è un linguaggio di programmazione orientato agli oggetti descritto dalle specifiche rilasciate da Sun nel

15 Capitolo 1 La scelta di Java [16] ha però un risvolto in contrasto con quella che è la natura open di Android. I dispositivi che intendono adottare la Virtual Machine associata all ambiente J2ME (JVM o KVM) devono pagare una royality. Per rispondere a questa esigenza Android non esegue bytecode Java, per cui non ha bisogno di una JVM. Google ha adottato una propria VM che prende il nome di Dalvik 15, la quale trasforma il codice scritto in Dalvik dex-code (Dalvik Executable). Le applicazioni sono sviluppate all interno di un framework, ossia di una struttura dati specifica. La struttura del framework è molto chiara se si utilizza l ambiente di sviluppo (SDK) con IDE Eclipse 16. Il Software Development Kit include tra le altre cose, gli strumenti di sviluppo, librerie ed un emulatore. L SDK è installabile su qualsiasi computer X86 e su uno dei sistemi operativi di maggior uso, quali Linux, Windows o Mac. Incluso nel Kit si trovano: API: che garantiscono l accesso allo stack Android da parte degli sviluppatori. Esse sono le stesse con cui sono state create le applicazioni native. Tools di sviluppo: strumenti rilasciati per compilare e fare il debug delle applicazioni. Emulatore: l emulatore è un dispositivo completamente interattivo per testare e vedere le apps direttamente dal PC. Esso è eseguito nell AVD (Android Virtual Device), il quale simula il dispositivo con le sue configurazioni hardware all interno di un personal computer. Documentazione: informazioni dettagliate riguardanti la versione correntemente installata nel PC. 15 Il nome Dialvik deriva da una località islandese. La scelta di utilizzare una virtual machine diversa da quella di Java deriva dal fatto che si deve programmare per un terminale mobile che risponde necessariamente ad eventi (touch schermo, azioni da tastiera). Altri sostengono invece che questa scelta è dovuta solo alla presenza di royality. 16 Eclipse è L IDE ufficialmente supportata per lo sviluppo di applicazioni Android. Per esso è stato fornito un plug-in che racchiude elementi per la creazione dei file.xml e Java. Da sottolineare che Eclipse non è indispensabile per la creazione di apps. 15

16 Capitolo 1 Esempi: collezione di esempi atti dimostrare le capacità di Android. Senza alcun dubbio è nell interesse dei creatori del sistema fornire strumenti adeguati per la creazione di applicazioni. Infatti, il successo di una piattaforma può essere diretta conseguenza del numero di estensioni disponibili per l ambiente stesso. Un motto molto ricorrente nei libri e negli articoli dedicati ad Android il seguente: tutte le applicazioni sono uguali. Questo vuol dire che tutte le applicazioni, comprese quelle native, sono scritte con le medesime API ed eseguite allo stesso tempo. Ogni app. scritta in Android ha due caratteristiche predominanti: È caratterizzata da una parte dinamica scritta in Java ed una parte statica XML che ne definisce il layout. È eseguita in un proprio processo, in una istanza della Dalvik Storia Questo stack fu inizialmente sviluppato da Android Inc. 17 e successivamente acquisito da Google. I cofondatori di Android Inc., Andy Rubin, Rich Miner, Nick Sears (vicepresidente di T-Mobile) e Chris White hanno fatto parte della realizzazione della piattaforma in Google. Nel 2007 è stata rilasciata la prima versione del Software Development Kit (SDK) che ha consentito agli sviluppatori di realizzare le prime applicazioni sperimentali. Il primo dispositivo Android, il T-Mobile G1, fu rilasciato nel lontano ottobre 2008 e alla fine del 2009 più di 20 smartphone furono lanciati per il mercato di circa 26 nazioni. Sempre alla fine del 2008 Google ha dato la possibilità agli sviluppatori di alcuni paesi (tra cui non c era l Italia) di acquistare un telefono, il Dev Phone 1, per sperimentare l uso di applicazioni senza vincoli di operatori. Subito dopo l uscita della 1.0, si è iniziato a lavorare per la versione 1.1 (rilasciata nel dicembre 2008). Una delle limitazioni di essa era sicuramente quella che obbligava i dispositivi ad usare una tastiera fisica. Con il rilascio della 1.5 (maggio 2009) fu introdotta la tastiera virtuale, in modo da eliminare il precedente vincolo 17 Android Inc. è stata fondata a Palo Alto California nell ottobre Essa ha fornito le basi del sistema Android. 16

17 Capitolo Questa versione è stata chiamata con un suo secondo nome Cupcake ed ha identificativo API rappresentato dal valore Il 16 settembre 2009 è stata rilasciata la versione 1.6 dell SDK (chiamata anche Donut) con diverse importanti novità, sia a livello utente, sia a livello di API (livello assegnato a 4). In essa sono state implementate nuove funzioni e tecnologie come il supporto alle reti CDMA 20, diverse risoluzioni di schermo e un sistema di ricerca globale (interno e su internet). I primi cellulari con Android 1.6 nativo sono stati lanciati sul mercato globale poco dopo. Nell ottobre 2009, dopo poche settimane dal rilascio della versione 1.6, è venuto il turno della distribuzione 2.0. Essa introduce la possibilità d inviare dati tramite Bluetooth, nuove API (identificate con il numero 7) e correzione di errori. Poco dopo il rilascio della 2.0, il 12 gennaio 2010 è stato rilasciato l Android SDK 2.1 (Eclair). Il 20 maggio 2010 al Google I/O conference è stato presentato l Android SDK 2.2 (chiamato anche Froyo). Sono stati inseriti importanti aggiornamenti in questa versione: nuovo kernel linux , un nuovo compilatore JIT 21, Tethering Wi-fi 22 per utilizzare il terminale come Hotspot Wireless 23, oltre a nuove API (assegnate a 18 Atre importanti innovazioni di questa versione sono senzaltro la possibilità di creare widget e folders. 19 Questo identificatore chiamato API LEVEL dichiara al sistema il livello di compatibilità dell applicazione. In questo caso come nelle successive distribuzioni è stata garantita la retro compatibilità con le vecchie versioni. 20 Il Code Division Multiple Access (accesso multiplo a divisione di codice nota anche con l acronimo CDMA) è il protocollo di accesso multiplo a canale condiviso più diffuso nelle retiwireless. 21 Un compilatore just-in-time o JIT permette un tipo di compilazione con la quale è possibile aumentare le performance dei sistemi, traducendo il bytecode nel codice macchina nativo in fase di run-time. L obiettivo finale è di combinare i vantaggi della compilazione del bytecode a quelli della compilazione nativa aumentando le prestazioni. 22 Il tethering consiste nell uso di un telefono cellulare come modem per offrire accesso alla rete ad altri dispositivi che ne sono sprovvisti. La connessione tra i due dispositivi può avvenire via Bluetooth, Wi-Fi o USB. 23 Con il termine Hotspot ci si riferisse ad un area dove è possibile accedere su internet in modalità senza fili attraverso l uso di un Router collegato a un provider; attualmente lo standard più diffuso in questo ambito è il Wi-Fi. 17

18 Capitolo 1 livello 8). In questa relase è stata anche aggiunta la possibilità di installare le apps sulla SD Card, mentre, il 7 dicembre 2010 è stata rilasciata la versione 2.3 cui è stata assegnata la versione delle API a livello 9. Nel gennaio del 2011 viene presentarto Honeycomb (3.0) dedicato ai soli tablet. La versione definitiva dell SDK 3.0 è stata invece ufficializzata solo il 23 febbraio 2011, mentre l undici maggio 2011 è stata rilasciata la distribuzione SDK 3.1. Android 3.0 aggiorna il livello API al valore 13. Nell ottobre 2011 è stata presentata la versione 4.0 (Ice Cream Sandwich) destinata sia per smartphone che tablet, abbandonando la precedente situazione dove smartphone e tablet utilizzavano sistemi operativi diversi. La relase aggiunge un numero di features per gli utenti e i programmatori, alla quale si associa la versione API con identificativo Versione della piattaforma Gli sviluppatori Android forniscono mensilmente la stima dei dispositivi che hanno avuto accesso all Android Market (figura 1.2) e il numero di applicazioni disponibili per una particolare versione (figura 1.3), in periodi uguali di una settimana [7]. Figura 1.2: Diagramma a torta degli accessi al market relativi ad ogni versione della piattaforma (Febbraio 2012). 18

19 Capitolo 1 Figura 1.3: Diagramma delle applicazioni nel market disponibili per ogni versione della piattaforma (Febbraio 2012). La versione più diffusa risulta essere Froyo con il 27.8% di accessi. In costante ascesa è invece Gingerbread nelle versioni e successive (58.1%). Eclair è al 7.6%, mentre le versioni 1.x raggiungono in totale il 2% circa. Bisogna sottolineare che Honeycomb fa fatica ad imporsi, segno del successo non proprio esaltante dei tablet Android. Questa è una delle maggiori motivazioni che ha indotto gli sviluppatori, pochi mesi dopo il rilascio della versione 3.0, ad introdurre Ice Cream Sandwich, la quale è utilizzabile sia per smartphone che tablet (anche questa statistica può considerarsi non pervenuta, poichè al momento è disponibile solo per il dispositivo Nexus One. Notizie confortanti arrivano dai produttori di smartphone, i quali dichiarano il rilascio di aggiornamenti alla versione 4.0 a partire dalla prossima primavera). Facendo riferimento alla precedente tabella ed hai dati rilasciati nei mesi scorsi 24, si può affermare che gli sviluppatori possono contare su Froyo come piattaforma 24 Luglio 2010: le versioni 2.x occupano il 58,8% del diagramma, mentre le 1.x il restante 41,2%. Settembre 2010: La crescita dei dispositivi che si aggiornano all ultima versione è rassicurante. La versione più diffusa è Eclair (2.1) con oltre il 41% del mercato, mentre al secondo posto troviamo l ultimissima FroYo (2.2), che in pochi mesi recupera terreno a discapito di altre meno recenti. Si registra che il 29% degli utenti utilizza ancora versioni 1.x. Dicembre 2010: in questo mese finalmente avviene il sorpasso di Froyo (2.2) su Eclair 19

20 Capitolo 1 e fare uso senza troppi problemi delle API di sistema di livello 8. Come si vede dal diagramma numero 1.2, uno dei problemi caratteristici in Android è la frammentazione delle sue distribuzioni. Anche se esistono versioni predominanti, ci sono moltissimi utenti che fanno ancora riferimento a quelle vecchie. Questa situazione può essere data dal fatto che i produttori di smartphone non hanno rilasciato una nuova versione della piattaforma per tutti i dispositivi (motivo dovuto ai costi che ogni produttore dovrebbe investire per l aggiornamento del sistema). Questo problema si ripresenta quando un utente vuole scaricare una determinata applicazione, a seconda della versione del proprio smartphone essa potrebbe non essere disponibile. Solo recentemente si è raggiunta una soluzione: gli sviluppatori possono inserire più volte la stessa applicazione nel market, in riferimento alle diverse versioni del sistema Java e Dalvik Virtual Machine (DVM) Android sfrutta il linguaggio di programmazione Java nella versione 5 per la creazione delle applicazioni. Sono implementate la quasi totalità delle API, ma sono state escluse le Abstract Window Toolkit (AWT 25 ) e le Swing 26. La scelta di utilizzare (2.1), con percentuali rispettivamente del 43,4% e del 39,6% (l 80% del totale). Febbraio 2011: Android 2.2 Froyo rappresenta il 57,6% del mercato, mentre Eclair scende al 31.4%. Android 1.6 scende al 6,3% e Android 1.5 al 3,9%. Si nota anche la presenza di Android 2.3 Gingerbread, attualmente presente solo sul Nexus S (circa 1%). Ottobre 2011: Android 2.2 Froyo rimane la versione più diffusa con una percentuale del 45.3%, mentre Gingerbread rappresenta il 38.2%. Al terzo posto troviamo Android 2.1 Eclair con una percentuale ancora alta, 11.7%; seguono infine Android 1.6 Donut con l 1.4%, Android 1.5 Cupcake con l 1.1% e rimane ancora poco diffuso, Honeycomb, le cui versioni risultano sotto il punto percentuale. Gennaio 2012: mese in cui viene riportata per la prima volta la versione 4.0 della piattaforma. 25 La Abstract Window Toolkit (AWT) è la libreria Java contenente le classi e le interfacce fondamentali per la creazione di elementi grafici. Essa è stata inserita nelle API standard di Java per lo sviluppo di applicazioni GUI. 26 Swing è un framework per Java orientato allo sviluppo di interfacce grafiche. Parte delle classi del framework Swing sono implementazioni di widget, come caselle 20

21 Capitolo 1 Java forse è dovuta al fatto che un applicazione compilata può essere eseguita senza alcuna modifica in sistemi operativi diversi, a patto che per questi esista una specifica JVM in grado di tradurre le istruzioni Bytecode in codice nativo. Come già visto nell introduzione, Android ha adottato una propria VM che prende il nome di Dalvik. Si tratta di una VM ottimizzata per l esecuzione di applicazioni in dispositivi a risorse limitate, la quale esegue codice contenuto all interno di file di estensione.dex, ottenuto a sua volta in fase di building, a partire da file.class di bytecode Java. Ufficialmente questa scelta è stata dettata dalla necessità di risparmiare memoria per la memorizzazione e l esecuzione delle applicazioni. Da un applicazione Java descritta da codice con estensione.jar, si ha circa il 50% in più di memoria della stessa applicazione con estensione.dex. Questa diminuzione avviene in fase di trasformazione dal bytecode Java al bytecode per la DVM, durante il quale i diversi file.dex sono in grado di condividere informazioni che altrimenti verrebbero ripetute più volte. Un altro aspetto molto importante della DVM riguarda il meccanismo di generazione del codice che viene detto register based, a differenza di quello della JVM detto invece stack based. Attraverso questo meccanismo i progettisti della DVM si aspettano, a parità di codice Java, di ridurre del 30% il numero di operazioni da eseguire. Per capire come questo possa avvenire si propone un semplice esempio. Supponiamo di voler valutare la seguente operazione: c= a+b; Se con L indichiamo una operazione di Load e con S indichiamo quella di Store, la precedente operazione si può tradurre nel seguente modo: push b; //LS push a; //LS add; //LLS store c; //LS Se volessimo ora eseguire la stessa operazione con un meccanismo register based otterremo: add a,b,c; //LLS Questa ultima istruzione mostra il caricamento degli operandi a e b in zone diverse di testo, pulsanti, pannelli e tabelle. 21

22 Capitolo 1 di un registro e la memorizzazione del risultato in c. In questo caso si ottiene un minor tempo di esecuzione delle istruzioni, al prezzo di un maggior sforzo in fase di compilazione o trasformazione Architettura di Android Android è un architettura che comprende tutto lo stack degli strumenti per la creazione di applicazioni per dispositivi mobili, dove i layer inferiori forniscono strumenti a quelli superiori. In questa struttura si nota la presenza di un sistema operativo, un insieme di librerie native, ed una implementazione della VM. Lo stack è composto dagli elementi in figura 1.4, i quali sono trattati in dettaglio nelle prossime righe. 1. Linux Kernel: il layer più basso del dispositivo nella versione 2.6 di linux. La necessità è quella di disporre di un vero e proprio sistema operativo che fornisce strumenti di basso livello, attraverso la definizione di diversi driver. In particolare, si possono notare la presenza di driver per la gestione delle periferiche multimediali, del display, della connessione Wi-Fi e dell alimentazione. 2. Librerie: layer superiore al kernel che include varie librerie, le quali fanno riferimento a un insieme di progetti Open Source C/C++. Tra esse si citano: Surface Manager (SM): componente fondamentale che ha la responsabilità di gestire le View, ovvero ciò di cui l interfaccia grafica è composta. La SM ha il compito di coordinare le diverse finestre che le applicazioni visualizzano sullo schermo. Open GL ES: libreria utilizzata per la grafica 3D, la quale permette l accesso alle funzionalità di un eventuale acceleratore grafico hardware. Si tratta di una versione OpenGL specializzata per dispositivi mobili. Scalable Graphics Library (SGL): libreria C++ utilizzata per la grafica 2D. Media Framework: la maggior parte delle applicazioni Android sono caratterizzate da un elevato contenuto di componenti multimediali. Vi è 22

23 Capitolo 1 Figura 1.4: Stack Android. 23

24 Capitolo 1 la necessità di un componente in grado di gestire i diversi CODEC 27 per i vari formati audio e video. Questo componente è basato sulla libreria open source OpenCore ed è fornita da Packet Video (uno dei membri fondatori dell OHA). FreeType: motore di piccole dimensioni ed efficiente, utilizzato per i Free Font Type 28. Attraverso FreeType le aplicazioni sono in grado di visualizzare immagini di alta qualità. SQLite: libreria che implementa un DBMS relazionale caratterizzato dall essere molto compatto. WebKit: si tratta di un browser engine 29 (e non un semplice browser) basato sulle tecnologie HTML 30, CSS 31, JavaScript 32 e DOM Un codec è un programma o un dispositivo che si occupa di codificare e/o decodificare digitalmente un segnale analogico (tipicamente audio o video), affinchè possa essere salvato su un supporto di memorizzazione o richiamato per la sua lettura o riproduzione. 28 Insieme di caratteri tipografici caratterizzati e accomunati da un certo stile grafico. 29 Componente software che interpreta delle informazioni in ingresso codificate secondo uno specifico formato e le elabora creandone una rappresentazione grafica. Nel caso di un browser vengono interpretati gli stili associati ai documenti scaticati e li rappresenta sul monitor. 30 In informatica l HTML (HyperText Markup Language o linguaggio di descrizione per ipertesti) è il linguaggio di markup (che definisce modalità di impaginamento formattazione e visualizzazione dati) solitamente usato per i documenti ipertestuali disponibili nel World Wide Web. In tali documenti, un tratto di testo può essere contrassegnato inserendo dei tag, che ne descrivono la funzione, il colore o altre caratteristiche. 31 Il CSS (Cascading Style Sheets o Fogli di stile) è un linguaggio usato per definire la formattazione di documenti HTML ed XML. I fogli di stile permettono di separare i contenuti dalla formattazione e permettere quindi, una programmazione più chiara e facile da utilizzare. 32 JavaScript è un un linguaggio object based comunemente usato per l esecuzione di controlli nei siti web lato client. Altra caratteristica fondamentale è che esso è in grado di rispondere ad eventi; al contrario di quanto si possa pensare, Javascript non è un parente di Java. 33 Il DOM (Document Object Model, letteralmente modello a oggetti del documento) è una forma di rappresentazione dei documenti strutturati come modello 24

25 Capitolo 1 SSL: libreria usata per la gestione dei Secure Soket Layer atta ad osservare gli aspetti legati alla sicurezza nello scambio di comunicazioni. Libc: si tratta di un implementazione della libreria standard C ottimizzata per dispositivi basati su linux embedded come Android. 3. Android run time: include librerie core e la DVM. Questo è il motore delle applicazioni e forma le basi dell application frameworks. Core Library: classi relative all ambiente nella quale l applicazione viene eseguita; le core library sono rappresentate da pacchetti di formato.dex. 4. Application Framework: tutte le librerie viste fino a questo momento vengono utilizzate da componenti di più alto livello che compongono l Application Frameworks. Questo livello fornisce le classi usate per creare le applicazioni. Tutte le apps Android utilizzano lo stesso AF (da qui è possibile trovare un ulteriore conferma del motto ricorrente: All Applications Are Equals). In questo layer possiamo trovare: Activity Manager: responsabilità di questo componente è l organizzazione delle varie schermate di un applicazione a seconda dell ordine di visualizzazione delle stesse sullo schermo. Ogni schermata è rappresentata da un Activity. Package Manager: gestire il ciclo di vita delle applicazioni. responsabilità del package manager è quella di Window Manager: componente che permette di gestire le finestre delle diverse applicazioni sullo schermo del dispositivo. Telephony Manager: permette l interazione con le funzionalità caratteristiche di un telefono, come la possibilità di iniziare una chiamata o di verificare lo stato della stessa. orientato agli oggetti. DOM è lo standard ufficiale del W3C per la rappresentazione di documenti strutturati, in maniera da essere neutrali sia per la lingua che per la piattaforma. Sfortunatamente negli scorsi anni questa struttura non è mai stata presa come riferimento, rendendo molto difficile la vita dei programmatori web. 25

26 Capitolo 1 Content Provider (CP): componente fondamentale nella realizzazione delle applicazioni Android, poichè ha la responsabilità di gestire la condivisione di informazioni tra vari processi. Il funzionamento è simile a quello di un repository, in cui diverse applicazioni interagiscono, inserendo o leggendo informazioni. Resource Manager: ha la responsabilità di gestire un insieme di file di tipo diverso, tra cui immagini, file di configurazione o di ottimizzazione delle risorse. View System: compito del View System è la gestione degli eventi associati alle applicazioni. Location Manager: API che prendono il nome di Location Based Application (LBA). Queste permettono di gestire le attività con il sistema di Geo Referenziazione (GPS). Notification Manager: il Notification Manager mette a disposizione un insieme di strumenti per inviare particolari notifiche al dispositivo. Tra gli avvisi è possibile citare la vibrazione o visualizzazione di un icona ADT. Android Development Tool L SDK include molti tool ed utilities per aiutare i programmatori a creare, testare ed effettuare debug. L Android Development Tool contiente molti di questi elementi che fanno uso dell IDE Eclipse. Tra questi si possono citare: SDK e Virtual Device Manager: usato per creare e gestire l Android Virtual Device, cioè un istanza dell emulatore in grado di simulare specifiche hardware ed API disponibili per diversi dispositivi. Questa soluzione permette agli sviluppatori di testare il software per diversi schermi e risoluzioni. Emulatore Android: utilizzato dagli sviluppatori per testare ed effettuare debug delle applicazioni. Con l emulatore è possibile simulare SMS, chiamate e tempi di latenza. Dialvik Debug Monitoring Service (DDMS): usato per monitorizzare e controllare la DVM quando di effettua il debug dell applicazione. 26

27 Capitolo Tipologie di applicazioni Le applicazioni sviluppabili in ambiente Android possono essere raggruppate nelle seguenti quattro categorie: Foregound: un applicazione è detta in foreground quando interagisce con l utente e viene sospesa quando non è visibile. Con elementi di questo tipo bisogna considerare il ciclo di vita delle Activity (introdotto nei prossimi paragrafi). Background: applicazione con limitata interazione con l utente che si trova per la maggior parte del tempo nascosta, in modo da ascoltare le azioni causate dall hardware, dal sistema o da altre applicazioni. Esse si trovano in foreground solo nel caso in cui debbano essere configurate 34 dall utente. Intermittent: alcune applicazioni sono interattive ma fanno la maggior parte del lavoro in background. Queste sono generalmente una unione delle Activity con i Background Services. Estensioni della piattaforma che gestiscono chat ed sono tipici esempi. App Widget: alcuni elementi sono rappresentati solo da una schermata nella home del dispositivo mobile. Questi vanno appunto sotto il nome di widget. Alcune Applicazioni possono essere molto complesse, quindi molto difficili da far rientrare in una delle precedenti categorie (in alcuni casi è possibile racchiudere le precedenti in un unico elemento) Componenti Le estensioni Android devono garantire un certo livello di interattività con gli utenti. Questo deve avvenire in modo altamente intuitivo e senza alcuno spreco di risorse. I progettisti hanno pensato di fornire alcuni componenti e un meccanismo di comunicazione tra essi, in modo da permettere un ottimale sfruttamento delle delle risorse ed estensibilità della piattaforma. 34 È buna norma implementare la funzione di configurazione all interno delle applicazioni di tipo Background. Questa procedura rende possibile il settaggio di opzioni. 27

28 Capitolo 1 I componenti costruiscono i blocchi principali delle applicazioni e possono essere racchiusi in: Activity: ogni schermata è un estensione della classe Activity. Le Activity usano le Views per avere un interfaccia grafica con l utente, le quali rispondono alle azioni degli stessi. Siccome un applicazione può essere composta da più schermate, la piattaforma organizza le attività secondo una struttura a stack, dove l attività in cima è quella attiva in un particolare momento. La visualizzazione di una nuova schermata porterà questa in cima allo stack, ponendo in pausa la precedente. Quando una Activity termina il proprio lavoro fa in modo di ritornare le eventuali informazioni raccolte. Il sistema rende tutte queste operazioni trasparenti all utente che usa il dispositivo, mentre lo sviluppatore deve gestire gli stati di un attività attraverso opportuni metodi di callback 35. Service: i componenti Services operano in background facendo l upload delle risorse e delle Activity visibili. Essi vengono spesso citati con la notazione: invisible workers of your application. Content provider: utilizzati per gestire le repository di informazioni. Android include alcuni Content Provider nativi che si riferiscono ad informazioni ad esempio circa i contatti telefonici, chiamate, eccetera. Intent e intent filter: quando un applicazione ha la necessità di eseguire una particolare operazione non fa altro che creare creare un Intent, richiedendo l utilizzo di una qualunque risorsa o componente in grado di poterla esaudire. Un Intent deve essere caratterizzato da informazioni relative all acquisizione dei 35 Con questo termine si intende una funzione che viene richiamata da un altra funzione o dal sistema operativo; questi metodi sono in grado di gestire determinati eventi. 28

29 Capitolo 1 dati e da un meccanismo per identificare il tipo. Questi dati sono rappresentati mediante un oggetto di tipo String e da una URI 36. A completamento di quanto scritto, serve un meccanismo che permetta ad un applicazione di dichiarare l insieme degli Intent che gli stessi sono in grado di gestire. Questo viene realizzato attraverso gli Intent filter. Broadcast receivers: La gestione di eventi esterni può essere realizzata attraverso la definizione di Broadcast receiver. L arrivo di un evento esterno implica l attivazione di un Intent receiver ma non necessariamente l esecuzione di una Activity e nemmeno la notifica all utente. Notification: le notifiche forniscono un input all utente che non perdere il focus dell Activity corrente. Questa tecnica fornisce segnali da parte di un Service oppure un Broadcast receiver Stato di un processo Come introdotto nei precedenti paragrafi, ogni applicazione fa riferimento ad un proprio processo in un istanza della Dalvik Virtual Machine. Se i processi in esecuzione all interno del dispositivo esauriscono la memoria, ne vengono eliminati alcuni al fine di favorire l esecuzione di quelli visibili. Il sistema sceglie quale processo terminare in base a determinate priorità. A tale proposito, le tipologie sono state classificate in: Active process. Visible process. Service process. Background process. 36 URI: Uniform Resource Identifier. Permette di specificare molti tipi di dato secondo la notazione scheme://host:port/path, dove si definisce authority l insieme dell host e della porta. Insieme all URI è molto importante il concetto di mime-type dei dati associati, il quale è caratterizzato da una coppia chiave-valore. 29

30 Capitolo 1 Empty process. dove la figura 1.5 mostra l albero delle priorità. Figura 1.5: Albero delle priorità. Active process: componenti di applicazioni che interagiscono con l utente. Di norma all interno del dispositivo ci sono pochi processi di questo tipo. Essi hanno priorità impostata al valore Critico, quindi verranno terminati solo nel caso in cui non fossero disponibili le risorse per la loro esecuzione. Visible process: processi visibili ma inattivi. Un processo si trova in questo stato quando una Activity è parzialmente visibile all utente ma allo stesso tempo oscurata. La priorità assegnata a questi processi prende il nome di High. Started Service Process: processi che non hanno interfaccia grafica ma con priorità paragonabile a quella delle Activity allo stato di RUNNING. Si provvede alla loro eliminazione solo nel caso di reale necessità, ovvero per non precludere l esecuzione dei processi elencati in precedenza. Anche questi processi hanno priorità impostata ad High. 30

31 Capitolo 1 Background Process: in genere esiste un gran numero di processi in background che vengono terminati usando il pattern LSFK. La priorità è impostata a Low. Empty Process: si tratta di processi legati a nessun componente predefinito della piattaforma e quindi tra i primi candidati all eliminazione. Si parla di empty process perchè Android di solito mantiene in memoria applicazioni anche dopo aver terminano il loro ciclo di vita. 1.4 File androidmanifest.xml e risorse Ogni applicazione Android include il file AndoridManifest.xml salvato nella root del progetto. Questo è utilizzato per definire la struttura dei meta-data dell applicazione, i suoi componenti e le sue richieste sotto forma di file XML. Il file include i nodi per componenti quali Activity, Services, Content Provider, Broadcast Receiver (trattati nel seguito), un icona da visualizzare nel menu, una label per il nome dell applicazione e temi. È inoltre necessario definire permessi che determinano come l applicazione può interagire con l utente e come essa possa interagire con altre applicazioni. L Android Manifest ha come elemento di root il tag manifest. In questo tag vendono definiti gli attributi versioncode, utilizzato per definire la versione corrente dell applicazione, e l attributo versionname, che specifica la versione visibile agli utenti. <manifest xmlns : android : // schemas. android. com/apk/ r e s / android package= com. my domain. my app android : versioncode= 1 android : versionname= 0.9 Beta > [ ] </manifest > Il tag manifest può contenere molti nodi a seconda delle richieste dell aplicazione. Il primo di essi è sicuramente uses-sdk che è in grado di definire la versione minima 31

32 Capitolo 1 37, massima 38 ed il target SDK che può essere utilizzato. <uses sdk android : minsdkversion= 4 android : targetsdkversion= 5 > </u s e s sdk> Subito dopo il tag manifest è possibile trovare il nodo application utilizzato per specificare i meta-data delle applicazioni. <a p p l i c a t i o n android : icon android : /my theme android : name= MyApplication android : debuggable= true > [ ] </a p p l i c a t i o n > Il precedente elemento può contenere a sua volta i tag Activity, Services, Content Provider e Broadcast Receiver che specificano i componenti dell applicazione. All interno del nodo application è possibile trovare uno o più nodi activity, richiesti per il corretto funzionamento di ogni Activity visualizzata sullo schermo. Usando l attributo android:name si specifica il nome della classe Activity. Ogni nodo di questo tipo può contenere intent-filter 39, il quale specifica quale Intent può eseguire l Activity. 37 Il parametro segnala la versione minima delle API in cui l applicazione non genera errori. Nel caso in cui si omette l attributo minsdkversion, l applicazione fallirà l esecuzione nel momento in cui si cerca di accedere ad API non disponibili per quel dispositivo. La scelta multipla delle proprietà introdotte non è consentita, poichè, si suppone che un dispositivo compatibile con una determinata versione sia in grado di eseguire applicazioni sviluppate per le versioni precedenti. 38 Inserendo l attributo maxversion non sarà possibile installare l applicazione in dispositivi con livello API maggiore. È buona norma non inserire questo attributo se non si riscontrano problemi con nuove versioni delle API. 39 Pensando ad un intent come la volontà di un particolare componente di eseguire una determinata azione su un determinato insieme di dati, un intet-filter è invece la dichiarazione da parte di un componente di essere in grado di soddisfare un intent. 32

33 Capitolo 1 Il tag service è utilizzato per segnalare la presenza di una classe Service utilizzata nell applicazione. Anche questo nodo può contenere tag figli di tipo intent-filter. Come nei casi precedenti, i nodi provider e receiver vengono utilizzati per segnalare content provider e broadcast receiver rispettivamente. Altro nodo di notevole importanza è uses-permission, il quale permette di dichiarare i permessi che l applicazione dovrà ricevere dall utente per consentire il corretto funzionamento della stessa. Se un applicazione richiede specifici permessi da parte dell utente, essi saranno esposti prima dell installazione della stessa. Nel caso in cui l utente non accetta l uso di questi, l applicazione non sarà installata. Come si può intuire, una corretta gestione del file manifest potrebbe essere molto difficile. Fortunatamente gli sviluppatori hanno hanno messo a disposizione un esenzione per l IDE Eclipse in grado di gestire in modo visuale quest ultimo Le risorse, struttura di un progetto e classe R Potrebbe essere molto produttivo estraniare le risorse di un progetto e renderle disponibili attraverso delle costanti. Android supporta questo sistema per molti elementi che vanno da un semplice valore come una stringa o un colore, per finire con immagini (Drawable), animazioni e temi. Nel momento in cui si rende necessario l utilizzo delle risorse, l applicazione sa dove si trova il corretto valore da visualizzare, quindi questo meccanismo è del tutto trasparente all utente e come si vedrà può essere trasparente anche verso un progettista. Le risorse possono essere di due tipologie: quelle che vanno sotto la cartella res e quelle nella cartella di nome assets. Le prime sono compilate in un formato conveniente e sono accessibili attraverso costanti generate dalla classe R. Nella cartella res sono disponibili di default le sotto-cartelle values, drawableldpi, drawable-mdpi, drawable-hdpi, utilizzate per la gestione di elementi drawable per diverse tipologie di schermi. Di questa cartella fanno parte anche le risorse layout e non compilate (raw) per le quali viene comunque generato in identificativo nella classe R. La seconda cartella va sotto il nome di assets e contiene risorse che mantengono il loro stato di origine, cioè non vengono compilate. Queste tipo di risorse possono 33

34 Capitolo 1 essere gestite solamente attraverso la classe AssetManager Tipi semplici di risorse I tipi semplici includono string, colors, dimensions, integer-array e string-array. Tutti questi tipi sono salvati come file XML ed inclusi della cartella res/values. String: specificate dal tag string ed associate ad una chiave univoca nell applicazione. Integer e String Array: queste risorse contengono rispettivamente array di interi o stringhe. Elementi di questo tipo possono essere creati mediante l uso di tag item, dichiarati a loro volta all interno di string-array o integer-array. Color: usando il tag color si specificano risorse di tipo colore. I colori vengono specificati usando il simbolo # seguito da uno o due numeri esadecimali per i rispettivi valori di rosso, verde e blù. È inoltre possibile l inserimento di un ulteriore coppia esadecimale, la quale indica i parametri alpha di trasparenza. Drawable: definite nella cartella res/drawable, alle quali rientrano le immagini e Drawable composti come ad esempio LevelListDrawable e StateListDrawable. Da segnalare che non tutte le specializzazioni della classe Drawable possono essere definite in modo dichiarativo attraverso documenti XML. Stili e temi: uno stile definisce un insieme di attributi che possono essere applicati ad un particolare componente, View o UI. Per gli stili si ha un tag di tipo style in cui definiamo un attributo di tipo name, contenuti da uno o più tag item. Mentre uno stile si applica a un componente, un tema è un insieme di stili che si impostano a livello di applicazione o di singola attività. È possibile ereditare le proprietà di un tema già definito attraverso l attributo parent, contenente il nome del tema specifico. Come nel precedente caso si può dichiarare un insieme di sotto nodi item, ognuno con lo specifico attributo name. 34

35 Capitolo 1 Dimension: il tag dimen seguito da un identificatore di scala definisce risorse di tipo dimension. Questi parametri possono essere utili per creare costanti di altezza e larghezza espressi in px, mm, dp, sp. Animations: Android supporta due tipi di animations, le Tweened animations, usate per ruotare e muovere le View, oppure le frame-by-frame animations, le quali visualizzano una sequenza di immagini Drawable. Layouts: risorse utilizzate per disegnare le user interface o elementi customizzati attraverso documenti XML. Le activity vengono messe in relazione con i layout attraverso l uso del metodo setcontentview e sono salvati in un file separato all interno della cartella /res/layout Risorse associate ai file Le risorse associate ai file non si traducono in oggetti particolari, ma possono essere utilizzate in base alle loro specifiche caratteristiche. In questo caso si parla di determinati file binari o documenti XML che possono racchiudersi nei seguenti punti. Assets: si tratta di file che non corrispondono a vere e proprie risorse, in quanto per esse, non vengono generate costanti per la classe R e non viene eseguita alcuna ottimizzazione. L unico modo per accedere a queste informazioni da parte dell applicazione è quello di utilizzare la classe AssetsManager. Risorse XML: una risorsa XML può essere interpretata dal sistema in modi diversi. Il più semplice prevede di gestire il file come semplice documento contenuto nella cartella /res/xml. Risorse raw: si tratta di file contenuti all interno della cartella /res/raw ai quali sono associati delle costanti della classe R, ma non vengono ottimizzate. Esempi di questo tipo possono essere file video, audio o comunque file cui si ha la necessità di accedere secondo una modalità di stream. 35

36 Capitolo La classe R Le risorse possono essere usate direttamente all interno del del codice dell applicazione usando la classe statica R. Questa classe contiene sottoclassi per ogni tipo di risorsa definita nell applicazione. Ogni sottoclasse associa una risorsa ad una variabile attraverso un identificatore che corrisponde ad una locazione nella tabella delle risorse. Tra le classi interne contenute in R si trova la classe layout che contiene a sua volta una costante intera di nome main. In questo modo, per accedere alla risorsa main si deve usare il costrutto R.layout.main. 1.5 Activity, Intent e comunicazione tra Activity Nei seguenti paragrafi si entrerà più in dettaglio nello studio degli elementi fondamentali in Android e cioè, le Activity e gli Intent. Come si vedrà, le Activity forniscono il core delle applicazioni, mentre gli Intent sono utilizzati per far comunicare le precedenti Activity Ogni schermata da visualizzare sul dispositivo estende la classe Activity. Per utilizzarle è necessario segnalarle nel file AndroidManifest, inserendo tag application, contenuti a loro volta nei nodi activity. Tipicamente esiste una schermata principale rappresentata da una Activity di nome main. Questa schermata è di solito supportata da una o più Activity che aggiungono informazioni ed interazioni alla prima. Ciclo di vita di una Activity e metodi di callback Le Activity sono rappresentate mediante una struttura a stack basata sul principio last-in-first-out 40 dove l oggetto in cima alla pila è quello visibile. Attraverso questo 40 Il termine LIFO è l acronimo di Last In First Out (Ultimo ad entrare, primo ad uscire) ed esprime il concetto relativo al modo di immagazzinare dati, in cui l ultimo valore introdotto è il primo ad uscire. 36

37 Capitolo 1 stack è possibile determinare lo stato di un Activity. Quando una nuova Activity viene avviata questa vine portata in cima alla pila e quella precedente scala di una posizione. Questo ciclo è illustrato nella seguente tabella. Figura 1.6: Activity che si muove nello stack dell applicazione. All interno dello stack ogni attività si può trovare in uno dei seguenti stati: Active: quando una Activity è in cima allo stack ed è in grado di ricevere gli input da parte degli utenti, viene posta nello atato Active. Android cerca di mantenere in vita queste, fermando se necessario quelle a priorità minore. Paused: caso in cui una Activity è visibile ma non ha il focus. Questo stato si ha quando Activity superiori hanno un grado di trasparenza, oppure non occupano tutto lo spazio a disposizione. Stopped: una Activity non visibile si trova in questo stato; essa rimane in memoria mantenendo tutte le informazioni, ma è la prima ad essere eliminata in caso di bisogno. Inactive: dopo che una Activity è stata eliminata e prima che essa sia nuovamente lanciata, si trova in questo stato. 37

38 Capitolo 1 I metodi di callback Per ognuno dei punti espressi nel paragrafo precedente esiste un metodo definito di callback, il quale permette l esecuzione di diverse operazioni. Queste relazioni sono rappresentate nella figura 1.7. Il primo metodo nella tabella ha la seguente forma: protected void oncreate(bundle savedinstancestate) Si tratta dell operazione invocata in corrispondenza della creazione di una Activity, dove la prima istruzione da eseguire sarà sempre l invocazione dell analogo metodo della classe padre (super.oncreate()). Questa caratteristica è tipica di tutti i metodi di callback e per non appesantire la lettura si ometteranno ulteriori note a riguardo. Il parametro di tipo Bundle fornisce un riferimento allo stato che l Activity aveva prima di essere eliminata dal sistema. Questo parametro può essere salvato all interno del metodo onsaveinstancestate() ed essere ripreso nel precedente. Se il metodo oncreate termina con successo, la Activity viene preparata per la visualizzazione e il sistema invoca il metodo definito: protected void onstart() di ovvio significato. La successiva funzione dipende dal fatto che la Activity abbia ottenuto o meno il focus, quindi sia quella in cima allo stack. Se ciò è verificato viene invocato: protected void onresume() e se questo termina con successo, la Activity è nello stato RUNNING e può interagire con l utente. Una Activity da rimuovere dalla posizione iniziale dello stack viene messa nello stato PAUSED e conseguentemente vengono invocati i metodi: protected void onpause() e protected void onstop() dove il secondo è eseguito solo nel caso in cui il primo è terminato con successo. Successivamente si può ripristinare l attività precedente con: protected void onrestart() La logica del metodo onrestart() è molto simile a quella di oncreate(); rispetto questo metodo, onrestart() deve preoccuparsi di un eventuale ripristino dello stato. Dopo l esecuzione di onrestart() vengono invocati rispettivamente onstart() ed onresume() secondo le stesse modalità viste in precedenza. 38

39 Capitolo 1 Figura 1.7: Ciclo di vita delle Activity e relativi metodi di callback. 39

40 Capitolo 1 Il sistema elimina le Activity portandole dallo stato PAUSED in cui l aveva lascita a quello di STOPPED invocando il metodo: protected void onstop() e poi nello stato INACTIVE con: protected void ondestroid() Ciclo di vita di una Activity e metodi di Callback Il ciclo di vita di una Activity è racchiuso dall invocazione dei metodi oncreate() ed ondestroy(). In questa situazione la Activity è visibile, mentre tra i metodi onstart() ed onstop() è possibile anche l interazione con l utente. Il ciclo attivo invece, è compreso tra onresume() ed il metodo onpause(). Una Activity in questo stato è in foreground e riceve input da parte degli utenti. Immediatamente prima del metodo onpause() c è una chiamata ad onsaveinstancestate() che salva lo stato di una Activity in un oggetto di tipo Boundle, il quale sarà passato come visto prima al metodo oncreate() View e Layout Con l aumentare della risoluzione degli schermi, della loro grandezza e della potenza dei processori, sono aumentate le caratteristiche che uno smartphone può fornire dal punto di vista del layout. Gli sviluppatori android hanno definito delle classi View 41, dediche alla visualizzazioni e alle interazioni con gli utenti. Una delle caratteristiche principali delle View è sicuramente legata al fatto che esse possono essere descritte sia all interno di documenti XML (all interno della cartella /res/layout), o tramite codice, utilizzando le opportune API. Il metodo più semplice per creare le View è sicuramente la creazione di tag. All interno di questi sono inseriti molti attributi come andorid:id, android:layout height ed android:layout width, i quali indicano rispettivamente un identificatore, l altezza e la larghezza. Gli ultimi due attributi descritti sono obbligatori e possono con- 41 Le View non sono l unico strumento per fornire un layout. Esiste infatti la classe ViewGroup, estenzione della classe View, la quale è disegnata per contenere più View contemporaneamente. 40

41 Capitolo 1 tenere costanti statiche come FILL PARENT 42 o WRAP CONTENT 43, mentre si possono usare altri parametri per definire padding, margini ed elementi specifici. Android mette a disposizione molte generalizzazioni della classe View. prossime righe descriveremo quelle più importanti. Nelle LinearLayout: componente base che permette di disporre le View in esso contenute su una singola riga o colonna, a seconda della proprietà orientation 44. RelativeLayout: in questo caso è possibile specificare la posizione assoluta delle View in esso contenute; sono molto importanti gli attributi descritti dalla classe RelativeLayout.LayoutParams 45 ed è necessario evitare ciclicità di essi, all interno del contenitore. TableLayout: le TableLayout permettono di organizzare le View secondo una struttura formata da righe e colonne. All interno dei nodi TableRow è possibile la definizione di attributi come layout column ed layout span. FrameLayout: permette il controllo sulla visualizzazione delle View, fornendo strumenti per nasconderle o visualizzarle. ListView: permettono di visualizzare informazioni attraverso una lista. Questa non fa altro che implementare righe attraverso il metodo setadapter( ListAdapter adapter ), dove ListAdapter è una collezione di Adapter L attributo FILL PARENT indica che la View occupa tutto lo spazio disponibile all interno del contenitore. 43 L attributo WRAP CONTENT indica che la View occupa solo lo spazio necessario alla visualizzazione. 44 Ogni dispositivo è sensibile ai cambiamenti dell orientamento. Per View come LinearLayout o RelativeLayout è possibile utilizzare l attributo andorid:layout orientation, il quale specifica la tipologia di orientazione (portaint o landscape). 45 Molto importanti sono gli attributi layout torightof, layout toleftof, layout alignparentright, layout alignparentleft, layout alignbaseline. 46 Gli Adapter permettono di associare dati a determinate View. A seconda della View associata all Adapter, esso verrà definito in diverso modo (ad esempio un Adapter associato ad una ListView è definito ListAdapter). Essi possono essere assimilabili a collezioni di elementi come le liste, però, al contrario di queste fanno 41

42 Capitolo 1 GridView: molto simile ad una ListView, però in questo caso si può specificare il numero di colonne attraverso il quale visualizzare gli elementi. ExpandableListView: molto utile nel caso in cui si vogliono visualizzare dati che si differenziano tra loro da una sola caratteristica. Con le ExpandableListView viene utilizzata la classe ExpandableListAdapter per evidenziare gli attributi diversi degli elementi che andranno a comporre la lista. ScrollView: si tratta di una specializzazione della classe FrameLayout che consente l inserimento di una sola View figlia (questa però potrà contenere un numero indefinito di figli), effettuando lo scroll del suo contenuto. Da notare che una ListView non effettua lo scroll se è all interno di questo tag. In questo caso è necessario inserire codici che aggirino l ostacolo. Spinner: elemento di selezione univoco, a partire da un elenco scelto dallo sviluppatore. Gallery: permette la visualizzazione di immagini sullo schermo con scrolling orizzontale. Queste devono essere passate alla View mediante un oggetto di tipo ImageSpinnerAdapter. Layout Custom: Android permette la realizzare Layout customizzati attraverso opportune specializzazioni della classe ViewGroup o dei layout descritti in precedenza. Come per i Layout, è anche possibile la creazione di attributi custom. Widget toolbox Esse sono utilizzate per creare semplici interfacce che vanno sotto il nome di Widget. La seguente lista racchiude la maggior parte di essi. TextView: utilizzate per inserire elementi di sola lettura nella pagina. Supporta testi multi linea e formattazione di stringhe. La gestione del testo avviene rifermiento sempre ad un layout che dovrà contenere i dati passati mediante un Array. 42

43 Capitolo 1 attraverso overload del metodo settext(), mentre per recuperarlo, si utilizza il metodo gettext(). EditText: elemento che permette l editazione di un testo. Button: pulsante standard utilizzato per inviare input al programma. AutoCompleteTextView e MultiAutoCompleteTextView: entrambe permettono di suggerire parole all interno di una EditText. Mentre il primo permette il suggerimento di singole parole, il secondo è dedico a parole all interno di frasi. In entrambi i casi è necessario passare all oggetto le parole su cui effettuare le ricerche, ad esempio recuperando dati all interno di un database. CheckBox: pulsante rappresentato dagli stati checked e unchecked. RadioButton: anche questo componente è caratterizzato dagli stati checked ed unchecked. A differenza del precedente non si può deselezionare l elemento scelto. È possibile raggruppare più elementi all interno di una RadioGroup, dove uno ed un solo un elemento viene selezionato in ogni istante. ToggleButton: pulsante che implementa la funzione on/off nel quale è possibile visualizzare label diverse a seconda dello stato. CheckedTextView: versione checkable di una TextView. L utilizzo prevalente di questa classe avviene nella gestione delle View all interno delle liste. I possibili valori della modalità sono descritti dalle costanti CHOICE MODE NONE (tipologia di selezione default), CHOICE MODE SINGLE (permette di selezionare un solo valore) ed CHOICE MODE MULTIPLE (per la selezione di un insieme di valori). ImageView: le classi di questo tipo permettono di reperire un immagine. AnalogClock e DigitalClock per la visualizzazione di un orologio analogico o digitale. 43

44 Capitolo 1 Tutte le precedenti classi derivano dalla classe View. Anche se questa situazione può essere facilmente intuibile, molto più anomalo è che la classe TextView viene ereditata da tutte le altre, le quali estendono i suoi metodi Intent e comunicazione tra Activity Come annunciato, gli Intent sono utilizzati in Android per la comunicazione all interno di una o più applicazioni o come messaggi di sistema. In generale gli Intent possono essere usati per: Dichiarare come le Activity o i Service possono essere azionati per eseguire una determinata azione. Registrare l avvenimento di un determinato evento. Far partire esplicitamente un particolare Service o Activity. Inviare messaggi al sistema Il tipico scenario prevede un componente con la necessità di eseguire una particolare azione su un determinato insieme di dati. In diversi casi, il componente non sa quale sarà l oggetto in grado di soddisfare la sua richiesta, perchè questo dipenderà dall insieme degli elementi installati nel dispositivo. Ciascuno di questi avrà descritte le proprie competenze attraverso degli Intent Filter all interno del file AndoridManifest.xml. È compito del dispositivo decidere in base ad una serie di regole, quale componente attivare 47 in corrispondenza di un particolare Intent. In questo caso si parla di Intent implicito. Un Intent può essere esplicito quando il nome del componente che risponderà è già noto in fase di creazione dello stesso. La creazione di Intent espliciti può essere fatta in due modi, a seconda che la Activity da lanciare debba ritornare o meno dati. Supponendo il caso in cui l attività portata in cima allo stack non deve ritornare alcuna notifica a quella di partenza, si utilizza il metodo public void startactivity(intent intent) dove l Intent può specificare la classe Activity da aprire, può includere un azione 47 Il processo seguito dal dispositivo, per la determinazione del componente da attivare a seguito del lancio di una Intent, si chiama Intent Resolution. 44

45 Capitolo 1 da eseguire o un insieme di dati, espressi mediante URI 48 o dati semplici. Dopo l invocazione del precedente metodo è creata una nuova Activity che diviene attiva e visibile, quindi è mossa al primo posto dello stack. Invocando il metodo finish, oppure premendo il tasto back del dispositivo, essa è chiusa e rimossa dallo stack. Esiste un secondo metodo usato quando è necessario per far ritornare dati. In questo caso si parla di attività padre ed attività figlia, dove viene invocato il metodo: startactivityforresult(intent intent, int requestcode) nel quale, l Intent è quello da lanciare, mentre requestcode è un intero identificativo dell attività chiamata. Per reperire i dati nell attività padre si presuppone un meccanismo di recupero. Esso avviene attraverso l invocazione di protected void onactivityresult(int requestcode, int resultcode, Intent data) dove il requestcode è un intero per distinguere quale attività sta ritornando, mentre resultcode specifica l esito della chiamata. Se il parametro è impostato a Activity.RESULT OK si indica un esito positivo dell invocazione, mentre con Activity.RESULT CANCELED si indica che l operazione non è andata a buon fine, oppure è stata annullata. Da sottolineare che l Intent anche in questo caso può ritornare una URI nel modo definito in precedenza o una collezione di informazioni extra (mediante la chiamata dei metodi.putextra(name, value)) Gestione degli eventi La gestione degli eventi è uno dei concetti fondamentali riguardanti l utilizzo dei componenti di un interfaccia grafica. Al verificarsi un evento possono eseguirsi determinati codici, quindi, occorrono dei listener in grado di verificare determinati avvenimenti. 48 Per esempio, si può inviare mediante URI, un numero di telefono che permette di iniziare una chiamata. In questo caso si utilizza il parametro ACTION DIAL. Altri tipi di azioni native possono essere: ACTION CALL (inizia immediatamente una chiamata, usando il numero contenuto nella URI), ACTION INSERT (apre una Activity per inserire un nuovo elemento nel cursore specificato nella URI dell intent), ACTION WEB SEARCH (apre una pagina web di ricerca basandola sul testo inserito nella URI dell intent). 45

46 Capitolo 1 Esiste una regola associata al nome di un evento che può essere sintetizzata come: se Evento è il nome dell evento l interfaccia ad esso associata sarà View. OnEventoListener, la quale definisce metodi di callback. Inoltre, la registrazione dell ascoltatore avviene attraverso la definizione di metodi del tipo setoneventolistener. Gli eventi di principale importanza sono racchiusi nelle seguenti righe: OnClickListener: (click) evento di selezione. Dalla versione 1.6 dell SDK è possibile specificare il metodo da eseguire dopo il click, mediante un attributo, all interno del documento XML. Questo attributo prende il nome di android:onclick. OnLongClickListener: (long click) evento di selezione prolungata di un componente. OnFocusChangeListener: (focus change) acquisizione o perdita del focus da parte di un componente. OnKeyListener: (key) evento di selezione di un tasto. OnTouchListener: (touch) evento di touch. Alcuni metodi della classe View vengono invocati automaticamente su tali metodi, dei quali è possibile farne l overriding e tutti sono caratterizzati da un parametro identificatore KeyEvent del tasto premuto. Tra essi si citano: onkeydown onkeyup onkeylongpress onkeypreime onkeymultiple onkeyshortcut onkeyup 46

47 Capitolo Dialog, Toast, Widget e Notification A partire dalle versioni 2.0 della piattaforma sono state inserite importanti novità. Di questa categoria fanno parte gli home-screen Widget (da non confondere con i widget relativi alle classi View) ed i notification services. Oltre i precedenti elementi citati, si tratteranno in questa sezione i Dialog ed i Toast, i quali sono tutti utilizzati per fornire informazioni all utente in modo semplice e veloce Dialog Le finestre di dialogo permettono la visualizzazione e l inserimento di piccole quantità di informazioni. Ogni Dialog è caratterizzata da una Activity da cui acquisisce le informazioni ed è rappresentata mediante i seguenti metodi: showdialog(int id): per la visualizzazione su schermo, dove id è l identificativo della finestra. oncreatedialog(int id): utilizzato per la creazione della finestra ed eseguito solo durante la prima richiesta di visualizzazione. onpreparedialog(int id, Dialog dialog): permette di preparare la finestra ad una successiva visualizzazione. DismissDialog(): un dialog che ha terminato il proprio compito può essere nascosto attraverso questo metodo. Utilizzandolo non vengono effettuate ulteriori chiamate ad oncreatedialog(int id) per le successive visualizzazioni. RemoveDialog(): metodo che rimuove la finestra di dialogo. A differenza del precedente verranno effettuate le chiamate oncreatedialog(int id) per le successive visualizzazioni. In Android è possibile creare le seguenti finestre di dialogo: Alert: permettono di segnalare informazioni come errori, warning ecc. Una finestra di tipo Alert può contenere informazioni circa un titolo ed un messaggio. 47

48 Capitolo 1 Progress: utilizzate quando si vuole caricare una notevole quantità di dati, oppure eseguire un operazione molto lunga. Queste finestre forniscono all utente l idea del caricamento dati. Date e Time Picker: finestre di dialogo relative ad informazioni su date ed orari. Custom Dialog: è possibile utilizzare specializzazioni delle AlertDialog o delle ProgressDialog per le proprie interfacce Toast Un toast è il meccanismo con cui Android mostra dei messaggi temporanei sullo schermo, in cui non si prevede nessun tipo di interazione con l utente (se non la visualizzazione stessa). Per la creazione di questi elementi è necessario dichiarare una stringa da visualizzare ed una durata. La durata può assumere i valori descritti dalle costanti LENGTH SHORT, LENGTH LONG, abedue appartenenti alla classe Toast, oppure un qualsiasi lasso di tempo espresso in millisecondi. Per default i Toast vengono visualizzati in basso nello schermo del dispositivo. Questa ed altre caratteristiche possono essere customizzate. Essendo questo elemento molto semplice da creare e facile da comprendere, essi possono essere una valida alternativa alle finestre di dialogo. I produttori di dispositivi mobili che girano su Android, li prediligono nel momento in cui si ha bisogno di fornire informazioni all utente Notification Service Questo componente fornisce un meccanismo alternativo per la notificare la presenza di particolari informazioni. La notifica di questi messaggi avviene nella parte alta del display detta status bar e non interrompono l eventuale attività dell utente, il quale per visualizzarla dovrà trascinare la barra di riferimento verso il basso. Le informazioni contenute in una notifica vengono incapsulate all interno di un oggetto Notification. Ciascuna Notification contiene: un icona. 48

49 Capitolo 1 Un breve messaggio da visualizzare ed un layout corrispondente. Un Intent da lanciare nel caso di selezione. Oltre a le informazioni obbligatorie è possibile associare un particolare un suono 49, una vibrazione 50, l attivazione dei LED Home-screen Widget I Widget e più specificatamente le AppWidgets sono componenti visuali rappresentati nella home del dispositivo. Un Widget è creato per la visualizzazione di elementi come appuntamenti, messaggi inviati o informazioni riguardanti il meteo. Spesso i progettisti di applicazioni forniscono diverse versioni dei Widget, che visualizzano le stesse informazioni, in modi diversi e con diversa grandezza 52. Questi elementi sono implementati come IntentReceivers ed utilizano Remote- Views 53 per visualizzarne il contenuto. Per la loro creazione è necessario inserire tre componenti: 1. Un layout che definisce la UI del Widget. 2. Un file XML che definisce i metadata associati. 49 Per aggiungere un suono alla notifica è necessario modificare un attributo pubblico, nel caso si voglia utilizzare un suono di default, oppure creare un riferimento ad un media da riprodurre mediante URI per la riproduzione di un suono specifico. 50 Anche per la vibrazione bisogna modificare un attributo pubblico, dove il corrispondente valore è un Array di long i quali rappresentano, in millisecondi, il dalay relativo alla prima vibrazione, la sua durata, ed eventuali coppie di informazioni dello stesso tipo, relativamente a delay e durata di vibrazioni successive alla prima. 51 In questo caso è possibile scegliere il colore del LED, la durata relativa all accenzione e allo spegnimento. 52 La home-screen di un dispositivo Android è divisa da una griglia 4x4, dove ognuna di esse ha grandezza prefissata di 74x74 dp (device-indipendent pixels). Per scegliere il numero dei bolcchi che il widget occuperà è necessario effettuare il seguente conto: Mininum size dp= (Cell-coun * 74dp) 2dp. Nel caso il numero non corrisponda al precedente conto vengono utilizzate un numero di celle che più si avvicina ad esso. 53 RemoteView: classe che descrivere una gerarchia di view che possono essere visualizzare in un processo separato. La gerarchia è dichiarata attraverso un file XML e questa classe racchiude operazioni base per modificare il contenuto. 49

50 Capitolo 1 3. Un Intent Receiver che definisce i controlli. 4. Un periodo minimo per l aggiornamento espresso in millisecondi, oppure un attività di configurazione. 5. Uno specifico tag all interno del file AndroidManifest.xml. Anche se un Widget è definito attraverso un file XML creato ad-hoc, non è possibile inserire tutte le View messe a disposizione in Android. Attualmente i Layout utilizzabili sono limitati a: FrameLayout LinearLayout RelativeLayout Le View utilizzabili sono invece: AnalogClock Button Chronometer ImageButton ImageView ProgressBar TextView 1.7 Gestione dei dati Il salvataggio ed il caricamento dei dati è una caratteristica essenziale per molte applicazioni. Le tecniche utilizzate in android per questo tipo di operazioni si dividono in: 50

51 Capitolo 1 Shared Preferneces: permettono il salvataggio di elementi primitivi (String, Long, Boolean, Float ed Integer) mediante una coppia key/value che prende il nome di preferenza. Per creare una Shared Preference è necessario chiamare il metodo getshared- Preferences passando il nome della stessa, mentre per modificarla è inoltre necessario effettuare chiamate ai metodi edit() e commit(). Una volta aperta la preferenza è possibile operare con i dati in essa contenuti attraverso i metodi get() 54 e put() 55. Application State: ogni Activity include come visto in precedenza determinati eventi atti al salvataggio dello stato corrente. In questo caso si utilizzano oggetti Bundle in cui possono essere passati parametri primitivi rappresentati da una coppia key/value. Files: permettono il salvataggio di dati su file. Come avviene in Java è possibile aprire stream in lettura e scrittura attraverso i metodi openfileinput(string name) ed openfileoutput(string name, int mode), dove si specifica il nome del file e nel caso di scrittura, si decide la visibilità dello stesso da parte di altre applicazioni. Un valore corrispondente a MODE PRIVATE della classe Context permette di specificare che il file è accessibile solo all applicazione che lo crea. Un valore impostato a MODE WORLD READABLE permette la lettura ad altre applicazioni, mentre MODE WORLD WRITEABLE permette anche la scrittura. Casi d uso sono principalmente i seguenti: 54 Tra i metodi get di una shared preference troviamo: getboolean(string key, Boolean defaultvalue), getfloat(string key, Float defaultvalue), getint(string key, Integer defaultvalue), getlong(string key, Long defaultvalue), getstring(string key, String defaultvalue). In tutti questi casi i parametri hanno lo stesso significato. Il primo è utilizzato come chiave della preferenza, mentre il secondo imposta il valore di essa ad uno di default, scelto nel caso in cui non venga trovata la chiave corrispondente. 55 Allo stesso modo dei metodi get() è possibile utilizzare i metodi put() sostituendo get a put. Gli attributi da passare assumono lo stesso significato del caso precedente. 51

52 Capitolo 1 Lettura o scrittura su filesystem locale. Le modalità di accesso mofica e creazione sono quelle descritte in precedenza. Lettura o scrittura di informazioni su SD card. I procedimenti di lettura e scrittura sono ugauali a quelli su filesystem locale. L unica differenza è nella directory in cui tali memorie vengono montate. In queste situazioni è molto utilizzato il metodo: String extstdir = Environment.getExternalStorageDirectory().toString() il quale restituisce una stringa contenente la posizione della directory. Lettura di un file statico che si trova all interno della cartella res/raw. In questa cartella sono inseriti file a cui non si vuole applicare nessun processo di ottimizzazione, ma caratteristici dell identificatore della classe R. Per utilizzare questa tipologia di risorse è necessario utilizzare il metodo: openrawresource(int id) il quale restituisce un oggetto di tipo InputStream. Content Providers: i Content Providers offrono uno strumento ben definito per usare e diffondere dati. Essi sono rappresentati attraverso una semplice URI, 56, del tipo content://schema. Molti database nativi 57, come contatti telefonici o media store, possono essere utilizzati dai Content Providers per l accesso, la modifica e l eliminazione, dei dati in esso contenuti. 56 È buona norma utilizzare il path del progetto nella URI nel seguente modo content://com.companyname.provider.applicationname/datapath. Allo stesso modo la dicitura /RowNumber è rappresentata per effettuare una singola richiesta. Ancora una volta troviamo l associazione tra una URI ed un mime-type dei corrispondenti elementi. Un mime-type è composto da una parte type ed una parte subtype (ad esempio un mime-type potrebbe essere image/jpeg), dove la prima parte esprime un contenuto e la seconda, dipendente dalla prima, una descrizione della modalità di rappresentazione del dato. 57 Esempi di Content Providers nativi possono essere UserDictionary (contenente i dati relativi al dizionario utente), Setting (conentente le preferenze del dispositivo), MediaStore (gestisce l accesso ai dati multimediali quali audio, video ed immagini), Contacts (per la gestione dei contatti dell utente) e CallLog (gestore delle chiamate). 52

53 Capitolo 1 Database: una delle caratteristiche nella progettazione di applicazioni Android ed in generale per qualsiasi piattaforma o linguaggio è la gestione di dati attraverso un database. Esistono molte tecnologie per la creazione di base dati, ma quella che ha avuto maggior successo fa uso di uno schema relazionale. Google ed altri produttori di sistemi per dispositivi mobili hanno implementato un RDBMS all interno dello stack, un database embedded chiamato SQLite. Attraverso delle reali necessità, negli ultimi anni sono apparse nuove tecnologie per la memorizzazione dei dati all interno di un database. Queste vengono comunemente chiamate OODBMS [10] oppure ODBMS dove O sta per Object. Una buona parte di questa tesi è dedica allo studio di queste tecnologie, si rimanda allo specifico capitolo per approfondire i concetti. 53

54 Capitolo 2 Database ad oggetti e relazionali In molte applicazioni è richiesta la gestione permanente dei dati. L informatica ha inizialmente messo a disposizione un sistema per gestione delle informazioni mediante dei semplici archivi poco flessibili e performanti. Il programmatore aveva la completa responsabilità circa l organizzazione e gestione dei dati, il che portava ad una grande ridondanza di dati, spreco di memoria e rischio di inconsistenza degli stessi. In un secondo momento a questi semplici archivi si sono aggiunti sistemi più potenti chiamati banche dati o base dati. Un database è un insieme di dati permanente organizzato per minimizzare la ridondanza e per essere accessibile da parte di più utenti ed applicazioni. Insieme alle basi di dati si citano i DBMS. Un DBMS (Data Base Management System) è un sistema software progettato per consentire la creazione e manipolazione di database. Se in passato i DBMS erano diffusi principalmente presso le grandi aziende e istituzioni, oggi il loro utilizzo è diffuso in ogni contesto. Un DBMS può essere costituito da un insieme complesso di programmi che controllano l organizzazione, la memorizzazione e il reperimento dei dati in un database. Esso controlla anche la sicurezza e l integrità della base di dati, non consentendo a più utenti di modificare lo stesso record contemporaneamente mediante il blocco dei record. I linguaggi di interrogazione del database permettono agli utenti di interrogare il sistema e di analizzarne i dati mediante delle query. Molti DBMS support- 54

55 Capitolo 2 ano le API (Application Programming Interface) dell Open Database Connectivity (ODBC) o Java Database Connectivity (JDBC, lo standard per Java), le quali forniscono strumenti standardizzati per l accesso ai database. 2.1 Database Relazionali e RelationalDBMS Nel 1970 si cominciò a produrre diversi documenti culminati nel Modello Relazionale. Si descrisse un nuovo sistema per archiviare e modificare grandi quantità di dati mediante l uso di righe (record o anche tuple) e tabelle. Il modello relazionale si basa sulla nozione di relazione appartenente alla teoria degli insiemi. Per ogni record 1 viene definita una chiave 2, ovvero un identificatore univoco della tupla. La chiave può essere qualunque dato memorizzato, un campo aggiunto specificatamente per questo scopo, o una combinazione di più campi (chiave composta). In questo tipo di rappresentazione l ordinamento di righe e colonne è irrilevante. Inoltre, nel caso in cui il valore non è disponibile su una n-pla si utilizza la nozione di valore nullo (NULL), il quale può generare problemi nel caso in cui il campo sia importante per la tabella e per questo motivo esistono specifiche per l inserimento forzato degli elementi. Esistono linguaggi per effettuare operazioni di inserimento, modifica, ed interrogazione. Questi rientrano sotto il nome di: DDL 3, DML 4 e QUERIES 5, i quali 1 Nelle basi di dati relazionali l elemento corrispondente al record è chiamato tupla. 2 Una chiave è l elemento di riferimento che distingue una riga da un altra. Una chiave può essere interna, se appartiene alla stessa tabella, o esterna, se si fa riferimento ad un campo relativo ad una tabella diversa da quella attuale. Di solito si fa uso di un ID per la creazione di una chiave int. 3 DDL: Data Definition Language. I database relazionali utilizzano istruzioni del tipo CREATE TABLE, che permettono la definizione di una tabella all interno dello schema. 4 DML: Data Manipolation Language; consente di leggere, inserire, modificare o eliminare i dati in un database. I comandi DML esprimono azioni da effettuare sui dati identificati dalla parola iniziale dell istruzione che quasi sempre è un verbo. Nel caso di SQL i verbi utilizzati sono SELECT, INSERT, UPDATE e DELETE. 5 QUERIES: Interrogazioni al database effettuate mediante il costrutto SELECT- 55

56 Capitolo 2 sono spesso associati ad SQL 6. Il modello relazionale rappresenta oltre il 90% della tecnologia aziendale riguardo i DBMS. Il successo di questo sistema è dovuto alla sua solidità, al suo linguaggio SQL e al fatto che è stato il primo ad entrare nel mercato globale; le aziende che hanno costruito il proprio DB mediante uno schema relazionale non vedono la necessità di cambiare modello. Al giorno d oggi molti programmi sono spesso costruiti con l aiuto della tecnologia ad oggetti e database relazionali. Un sistema ad oggetti è caratterizzato da identità, stati, ecc, mentre il modello relazionale è caratterizzato da tabelle, colonne, righe e chiavi. In questo caso diviene necessario un sistema intermedio detto OR- DBMS 7 che introduce un nuovo livello nello stack software, dettato da un ORM SQL SQL [8] è un linguaggio progettato per leggere, modificare e gestire dati memorizzati in un sistema di gestione di basi di dati, basato sul modello relazionale. La prima versione fu sviluppata da IBM all inizio degli anni settanta e in quelli successivi sono state rilasciate altre versioni riconosciute dall ISO 9. FROM-WHERE. 6 SQL: Structured Query Language. Questo sistema si basa su un solido modello matematico, ma al tempo stesso è di facile comprensione. 7 ORDBMS: object-relational mappers. Oggi molte applicazioni mischiano il modello relazionale e il modello a oggetti; si parla quindi di ORDBMS o Object Relational DBMS. Naturalmente si può utilizzare un programma procedurale con un modello relazionale. Bisogna ammettere che questa soluzione è abbastanza obsoleta, quindi si esula dal descrivere eventuali vantaggi o difetti della stessa. 8 ORM o Object-Relational Mapping. È una tecnica di programmazione che favorisce l integrazione di sistemi software orientati agli oggetti con sistemi RDBMS. Tra gli ORM si possono citare Hibernate o Tolpick; questi sistemi incrementano la complessità e la latenza del sistema. 9 L Organizzazione internazionale per la normazione (ISO o International Organization for Standardization); è la più importante organizzazione a livello mondiale per la definizione di norme tecniche. Le norme ISO sono numerate e hanno un formato del tipo ISO 99999:yyyy: Titolo dove è il numero della norma, yyyy l anno di pubblicazione e Titolo è una breve descrizione. 56

57 Capitolo 2 La maggior parte dei sistemi per la gestione di database implementano questi standard ed aggiungono funzionalità proprietarie. In questo modo si creano dialetti che si differenziano, seppur minimamente da altri. SQL progettato originariamente come linguaggio di tipo dichiarativo, si è successivamente evoluto con l introduzione di costrutti procedurali, istruzioni per il controllo di flusso, tipi di dati definiti dall utente e varie altre estensioni. Lo standard si divide in: Data Definition Language: (DDL) permette di creare e cancellare database o di modificarne la struttura. Data Manipulation Language: (DML) usato per aggiungere inserire e manipolare i dati. Data Control Language: (DCL) usato per autorizzare gli utenti o un gruppo di essi ad accedere ai dati. Query language: (QL) permette di interrogare il database. Tra i costrutti fondamentali appartenenti alle precedenti categorie si citano: CREATE TABLE: per la creazione di una tabella dei campi e degli id in essa contenuti. ALTER TABLE: per modificare la struttura di una tabella (aggiungere, rimuovere e modificare un campo). DROP TABLE: per la cancellazione di una tabella. INSERT: inserimento dei dati in una tabella. SELECT: ricerca di campi all interno di una singola tabella. A questo costrutto si associa la clausola FROM (tabelle cui cercare i campi) e WHERE (clausole di selezione). JOIN: utilizzato per cercare campi all interno di più tabelle. Questa tecnica è in grado di fondere le precedenti. 57

58 Capitolo 2 Come un qualsiasi linguaggio di programmazione, anche l SQL utilizza una serie di simboli atti a definire uguaglianze, fare confronti e calcoli mediante operatori. Gli operatori messi a disposizione dal SQL standard si dividono in quattro categorie: Operatori di confronto; Operatori aritmetici; Operatori condizionali; Operatori logici; SQLlite Una delle caratteristiche di Android riguarda la possibilità di gestire i dati attraverso un database relazionale. Si tratta di SQLlite, un DBMS che ha tra le sue caratteristiche principali quella di essere molto leggero (circa 500kb), veloce, semplice ed open-source. Essendo adatto per dispositivi a risorse limitate, è stato implementato nello stack Android (oltre che a molti dispositivi elettronici, incluso molti riproduttori MP3, iphone ed ipod). In Android ogni database SQLite [9] è parte integrante dell applicazione a cui si riferisce; gli strumenti per la gestione di SQLlite si possono dividere nelle classi usate per la gestione dei cursori 10 e in quelle per la gestione delle informazioni. È inoltre possibile associare un insieme di DB-SQLite alla stessa applicazione. Il database è integrato in un singolo file, non sono necessarie configurazioni e non serve una connessione client-server per interrogare il DB (questa non è nemmeno possibile). Al contrario della maggior parte dei RDBMS, non è stato implementato l uso delle sintassi SQL come: ALTER TABLE, TRIGGER e VIEW (viste). È possibile utilizzare un metodo per la creazione del database e dichiarare se è apribile solo in lettura (OPEN READONLY ), oppure se è possibile accedervi anche in scrittura (OPEN WRITE). In alternativa si può creare un database in memoria 10 Un cursore definisce un insieme di operazioni che si possono classificare in: operazioni di movimento le quali permettono di posizionare il cursore in varie posizioni, ed operazioni di controllo che permettono di fare test sui dati estratti. Infine ci sono le operazioni che permettono l accesso ai dati contenuti nel cursore stesso. 58

59 Capitolo 2 senza crearne il rispettivo file, di modo che, il DB è cancellato al momento della chiusura dell applicazione di riferimento. La creazione delle tabelle avviene allo stesso modo con cui si creano in un normale database relazionale, cioè con l esecuzione delle classiche istruzioni SQL del tipo CREATE TABLE seguito dalle chiavi, dagli eventuali indici ecc. Per i database creati con SQLlite è strettamente raccomandato aggiungere una chiave identificativa con l attributo autoincrement 11. Classe SQLiteDatabase la classe SQLiteDatabase mette a disposizione gli strumenti per effettuare le query che si possono classificare in: ExecSQL: in grado di eseguire script SQL di vario tipo purchè non di query (SELECT ). Delete: permette di eliminare dati a partire dal nome della tabella e l eventuale clausola WHERE con i rispettivi valori. Insert: permetterne l inserimento di un nuovo elemento all interno della tabella. Update: prevede in genere un oggetto di tipo ContentValues 12 contenente i nuovi valori da aggiornare e le eventuali nuove informazioni relative alla clausola WHERE. Replace: usata nel caso in cui si ha la necessità di sostituire completamente i valori di un insieme di righe. Query: insieme di API che permettono l estrazione dei dati dalle tuple. risultato di una operazione di query fa riferimento ad un oggetto Cursor, il quale permette di scorrere le informazioni restituite. 11 L attributo autoincrement indica che ad ogni nuova tupla inserita si inserisce un nuovo identificatore, in modo del tutto trasparente all utente. 12 Per inserire i dati si utilizza un oggetto di tipo ContentValues. Il metodo put del ContentValues prende in ingresso il nome del valore (String key) e il valore stesso (String value); l oggetto ContentValues è in pratica è una mappa che associa al nome di una colonna, il rispettivo valore utilizzato per il passaggio dei valori. 59 Il

60 Capitolo 2 Classe SQLiteQueryBuilder Spesso si ha la necessità di creare query dinamiche il cui insieme di colonne, di clausole where o criteri di ordinamento, non sono noti al momento della compilazione. In questi casi viene utilizzata la classe SQLiteQueryBuilder, la quale permette di incapsulare in un unico oggetto la logica di creazione delle query. 2.2 ODBMS ed RDBMS Supponiamo di aver creato un programma con un linguaggio orientato ad oggetti, ad esempio Java. Questo programma ha un numero di oggetti da dover salvare all interno di un qualsiasi database. Assumendo di aver creato una semplice classe da memorizzare in uno schema relazionale, si deve creare codici SQL per la creazione delle tabelle. Allo stesso modo si dovranno scrivere molte righe di codice per effettuare query, upload ed eliminazioni. Il precedente progetto potrebbe essere implementato utilizzando la teoria degli ORDBMS. In questo caso lo sviluppatore non deve gestire il lavoro di traduzione di una tupla in un oggetto. Infatti, questo avviene in modo semi-trasparente. L unico compito lasciato allo sviluppatore è la gestione della traduzione di una tabella in un oggetto (che di solito avviene mediante file XML). La precedente ipotesi ha dei limiti dettati dai tempi di latenza richiesti per effettuare il mapping e dalla gestione dello stesso. Gli sviluppatori si sono chiesti perciò se tutti questi problemi potevano essere risolti. Il risultato fu la creazione dei Pure Object Database. Con questa soluzione, oltre a non dover effettuare nessun tipo di traduzione tra modello relazionale e quello ad oggetti, non si deve creare nessuna struttura per il database, poichè essa è definita direttamente dalle relazioni delle classi. Esistono molti database ad oggetti e molti di essi sono caratterizzati dalla licenza open-source. Lo scopo della tesi è quello di associare una base di dati ad un applicazione Android, quindi si può restringere il cerchio, cercando sistemi che non hanno bisogno di una connessione client-server per operare con i dati in esso contenuti. Il 60

61 Capitolo 2 risultato evidenzia Db4o [11] [12] prodotto dalla Versant e Perst [15] prodotto da McObject. 2.3 DBMS ad oggetti Molti sviluppatori hanno conoscenza dei database. La maggior parte di essi hanno familiarità con la programmazione orientata agli oggetti ed hanno necessità di utilizzare un database per mantenere la persistenza. Utilizzando le nozioni introdotte in precedenza si deve effettuare un mapping tra un sistema ad oggetti verso un sistema relazionale. Esther Dyson 13 ha espresso la seguente affermazione per fare un paragone tra Relational Database ed Object Database: Using tables to store objects is like driving your car home and then disassembling it to put it in the garage. It can be assembled again in the morning, but one eventually asks whether this is the most efficient way to park a car. In casi in cui la struttura del progetto è costituita solo da un elemento, potrebbe essere semplice convertire l oggetto in una tabella di un database relazionale. Sfortunatamente non è sempre così semplice; potrebbero esserci oggetti che hanno riferimenti ad altri o collezioni di essi. In casi come questi risulta difficile creare tabelle a partire dai precedenti. Questo problema può essere eliminato mediante l utilizzo di ODBMS 14. Gli 13 Esther Dyson (Zurigo, 14 luglio 1957) è una giornalista statunitense nota esperta campo delle tecnologie digitali emergenti. Dyson e la sua azienda sono specializzati nell analisi dell impatto delle tecnologie informatiche, nei mercati, sull economia e nella società. 14 ODBMS: Object Database Management System. Nel 1989 all interno della pubblicazione The Object-Oriented Database System Manifesto, Malcom Atkinson e Francois Bancilhon definirono un ODBMS come un sistema di basi di dati orientato agli oggetti che deve soddisfare due criteri: deve essere un DBMS e un sistema orientato agli oggetti. Il primo criterio si traduce in 5 richieste: persistenza, gestione del salvataggio dati, concorrenza, recovery e creazione di query ad hoc. Il secondo requisito si traduce in in sette affermazioni: oggetti complessi, identità degli oggetti, incapsulazione, tipi di classi, estensibilità, overriding, ereditarietà. La strada degli ODBMS però è ancora più lunga, infatti inizia nel lontano 1980 con il progetto ORION che porterà alla nascita di ITASCA e Versant. Per avere il primo progetto Open-Source si dovrà aspettare il 2004 (Db4o). 61

62 Capitolo 2 Figura 2.1: Sistema ORM, messo a confronto con un database ad oggetti (Db4o in particolare). ODBMS non sono una nuova tecnologia poichè sono stati implementati nelle applicazioni fin dall inizio degli anni 90, ma non hanno avuto almeno inizialmente una grande notorietà. A seguito della creazione di questi sistemi è stato fondato l OD- MG 15 che ha cercato di stabilire le regole per i database ad oggetti, quali ODL 16 ed OQL 17. Questi standard sono stati adottati con molte estensioni, ma non sono stati mai presi come regole da seguire. La versione finale dello standard ODMG, ODMG 3.0, venne rilasciata nel 2001, ma il gruppo si è sciolse poco dopo. Mediante l utilizzo di database ad oggetti, lo schema del database è rappresentato dalle stesse classi. Gli oggetti sono salvati esattamente nello stesso modo in cui essi sono creati all interno dell applicazione. In questa struttura è importante mantenere le relazioni delle classi all interno del database, ed al contrario dei database 15 ODGM: Object Database Management Group. L ODMG è stato concepito nell estate del 1991 da fornitori di database ad oggetti. Nel 1998 l ODMG ha cambiato il suo nome, in modo da riflettere le specifiche di database ad oggetti e relazionali ad oggetti (prodotto di mapping). Tra il 1993 e il 2001 la ODMG ha pubblicato cinque revisioni. 16 ODL: Object Data Language. Linguaggio per la definizione di oggetti equivalente al linguaggio DDL di strutture relazioniali. 17 OQL: Object Query Language (linguaggio standardizzato per le query). Con l OQL è possibile effettuare query in modo del tutto simile all SQL, mantenendo strutture base SELECT-FROM-WHERE, ma eliminando INSERT DELETE ed UPDATE. L idea di creare query in questo modo venne abbandonata nel 2001 e nel 2005, venne proposto di creare query mediante il linguaggio di programmazione utilizzato. 62

63 Capitolo 2 Figura 2.2: Visione degli OID, relativi agli oggetti, mediante il tool Object Manager. relazionali è possibile l inserimento di relazioni inverse, a cui daremo spazio in un paragrafo dedicato. Un oggetto è salvato mediante una chiave univoca OID 18. Questa chiave fa in modo che ogni oggetto sia univoco rispetto agli altri, in modo da poter creare oggetti identici ma distinti fra loro. L identificatore è solitamente un numero e non è visibile agli utenti ed agli sviluppatori. Anche se esistono molte analogie tra il concetto di ID tipico dei modelli relazionali e quello OID, esistono molte differenze tra di loro. Mentre una chiave è creata, visibile e può essere modificata dagli utenti, un OID non è modificabile ed è un concetto del tutto trasparente all utente. L unicità di una chiave concerne solamente le relazioni a cui essa riferisce, mentre gli OID permettono di identificare una singola istanza all interno di tutta la base dati. In questo caso si potrebbe incorrere in problemi poichè è possibile creare e salvare duplicati di oggetti che già esistono nel database. Questo problema è risolto lasciando allo sviluppatore la scelta di poter aggiungere oggetti identici, mediante controlli effettuati via codice. 18 OID: Object ID. Chiave univoca all interno del database. Essa è utilizzata per mantenere le relazioni tra gli oggetti in modo del tutto trasparente all utente e allo sviluppatore. Anche per le relazioni inverse si fa uso degli OID. 63

64 Capitolo 2 Figura 2.3: semplice struttura ad albero di una base ad oggetti, contentente Piloti, Scuderie ed Automobili. L intera base dati può essere vista sotto forma di un grafo o di un albero in cui, i nodi sono costituiti dagli oggetti rappresentati, mentre gli archi indicano i collegamenti esistenti. Lo spostamento da un nodo all altro è indicato con il termine navigazione o attraversamento. La navigazione è il modo con cui si effettua l accesso all interno di una base dati orientata agli oggetti: ci si sposta da un oggetto verso un altro a lui direttamente connesso fino a giungere al nodo foglia (finale). In questi ultimi anni molte aziende stanno avendo un occhio di riguardo verso gli OODBMS. Le applicazioni che traggono i maggiori vantaggi dall utilizzo di questo approccio sono quelle che gestiscono relazioni complesse tra oggetti 19. Benefici di questo modello vanno dall eliminazione di molte linee di codice per accedere ai dati (Query, Insert ed ORM), alla riduzione o eliminazione di configurazioni. 19 La letteratura scientifica enfatizza sulle performance delle basi dati ad oggetti: viene affermato che su dati complessi, un DBMS orientato agli oggetti si dimostra dal 10% al 100% più veloce di un RDBMS. L ampiezza di tale intervallo viene giustificata dal diverso grado di complessità del dato memorizzato. 64

65 Capitolo Db4o Db4o 20 è un prodotto sponsorizzato dalla Versant Corporation 21 utilizzato in più di 170 paesi in tutto il mondo, con una comunità composta da più di membri. La missione degli sviluppatori è fornire un alternativa all approccio relazionale. Db4o è nato nel 2004, principalmente utilizzato per dispositivi mobili e per progetti che girano su Java o.net. Tra le industrie che usano db4o si possono citare aziende che si occupano di comunicazione, scienze mediche e trasporti. Tra le principali industrie ci sono: Boeing, Bosch ed Intel. Molto frequentemente queste industrie scelgono il database Versant nel caso in cui si devono gestire oltre 10GB 22 di dati. Altra caratteristica importante riguarda il fatto che db4o a discapito di altri DBMS embedded consente la modalità client-server 23, oltre ad un sistema di replicazione DRS (database replication system) verso un server a modello relazionale. Db4o è basato da una singola libreria 24 facile da implementare in un applicazione, sia essa basata su Java oppure su.net. Il suo successo sicuramente dovu- 20 Db4o è stato creato dalla Db4object inc., fondata nel 2000 da Carl Rosenberger. Qualche anno dopo è stato rilasciato il primo prodotto: db4o 1.0 per Java. Nel 2004 la compagnia è stata incorporata sotto la CEO Christof Wittig. 21 La Versant Corporation è sita nella città di Redwood, California. Versant è leader nel campo dei database ad oggetti, supportando tecnologie open-source e commerciali. Tra i progetti open-source spicca sicuramente Db4o, mentre la soluzione commerciale adatta ad applicazioni destkop, è stata chiamata VOD (Versant Object Database). 22 È stato provato che db4o può essere utilizzabile con database fino a 254GB. Se il database cresce oltre questo punto si possono creare nuovi file. Questa soluzione può eliminare il limite di spazio, ma in questi casi è consigliabile l uso di database relazionali, i quali hanno limiti di dimensione ben superiori. 23 Molte applicazioni interagiscono con il database mediante un modello client/server. Con l utilizzo di Db4o questo non è necessario. Le ragioni di questa scelta sono sicuramente da imputare all utilizzo prevalente in client standalone che non consentono connessione verso nessun server. Db4o non è stato il primo sistema ad introdurre questa caratteristica, esistono infatti molti database relazionali che fanno uso della stessa modalità. 24 Esistono tre diverse versioni di Db4o; in tutti i casi bisogna includere all interno del progetto una libreria di riferimento denominata con il nome di core. In alternativa è possibile includere nel progetto solo determinate classi diminuendo la memoria occupata. 65

66 Capitolo 2 to alle elevate performance, agli zero costi di amministrazione ed alla sua elevata semplicità. Altro punto fondamentale sta nella sua versione open-source che ha nettamente aumentato il successo di questo sistema. Per tutte le caratteristiche esposte in precedenza, Db4o è una valida alternativa ad SQLite per la gestione di database all interno delle apps Android. Come nel caso di SQLite, il file del database è incluso nella directory data/data/package-name/ in un singolo file con estensione.db4o. In alternativa si può utilizzare l estensione.yap (yet another protocol), ma è consentito utilizzare qualsiasi altra estensione Licenza La doppia licenza dei prodotti sta diventando uno dei modelli fondamentali per i progetti software delle aziende, mantenendo in questo modo le potenzialità di ognuna delle caratteristiche open-source e closed-source. È importante capire cosa permettono questi modelli per evitare di incorrere in violazioni, specialmente per le licenze open. Di solito per il prodotto open si usa la licenza GNU 25. La Versant offre tre differenti licenze: General Public Licence (GPL) verrsione 3: il prodotto è liberamente utilizzabile per questa licenza sotto le specifiche della licenza GPL. Commercial License: questa licenza a discapito della GPL, include opzioni premium, come il supporto tecnico 24/7, ed inoltre è possibile contravvenire alle richieste necessarie nella licenza GPL. Db4o Opensource Compatibility Licence (docl): utilizzabile per progetti a libero dominio che implementano db4o, ma che non rientrano nelle specifiche GPL o commerciale. 25 GPL: General Public License (version 2). La GNU General Public License è una licenza per software libero. È comunemente indicata con l acronimo GNU GPL o semplicemente GPL. La GNU GPL assicura all utente libertà di utilizzo, copia, modifica e distribuzione. 66

67 Capitolo Object Container ed Operazioni basilari L Object Container può essere considerato come la porta di accesso al database. Normalmente si deve aprire la connessione quando l applicazione inizia, chiudendola nel momento in cui essa termina. Le operazioni basilari includono il caricamento, la modifica, l eliminazione e le query sugli oggetti. Essi sono trattati nel dettaglio nelle prossime righe. Apertura Database: per aprire il database non si deve inserire nessuna istruzione. L unica condizione richiesta è il passaggio all Object Container del file-name relativo al database in questione. Chiusura Database: è molto importante la chiusura dell ObjectContainer attraverso il metodo close(). Questo dichiara la chiusura di una connessione aperta. Chiudendo la transizione si scrivono gli oggetti creati o modificati nel database nella sessione corrente. Caricare oggetti: caricare oggetti nel database è estremamente facile. Bisogna solo passare l oggetto da salvare attraverso il metodo store(). Utilizzando questo metodo i dati non sono scritti nel database immediatamente, ma saranno scritti alla fine della transizione. Delete: per eliminare un oggetto si utilizza il metodo delete(), cui passare l oggetto da eliminare. Attualmente db4o non verifica se un oggetto che si intende eliminare sia referenziato con un altri, per cui è compito dello sviluppatore effettuare questa verifica. Update: in questo caso bisogna recuperare gli oggetti, modificarli mediante i metodi setxxx() caratteristici delle classi, ed infine utilizzare nuovamente il metodo store(). Se si vuole effettuare una modifica è necessario effettuare operazioni di recupero e modifica nella stessa transizione. In caso contrario viene inserito un nuovo elemento nel database, il che porta ad un grave errore. 67

68 Capitolo 2 Opzioni: prima dell apertura dell Object Container è possibile dichiarare una serie di configurazioni, come la stampa della versione del database, la creazione di indici 26, ecc. Index: come per la maggior parte dei RDBMS, Db4o supporta gli indici aggiungendo una voce per ogni oggetto. In questo modo operazioni di inserimento e modifica sono leggermente più lente, ma le query sono altamente preformanti 27. Tipi primitivi come interi, long e double, possono essere indicizzati. In casi come questo le query raggiungono prestazioni significative. In altro modo possono essere indicizzati stringhe, DateTime, DateTimeOffset, BigDecimal e BigNumber allo stesso modo dei tipi primitivi. Non posso essere invece indicizzati Array e collezioni Query Probabilmente la caratteristica fondamentale dei database è quella di poter reperire dati da esso. La capacità di effettuare query è fondamentale per il successo di una base dati. Il modo di definire le query può essere assimilato al modello di dati; i database relazionali ad esempio sono sempre associati al loro linguaggio SQL 28. Essendo Db4o un sistema ad oggetti ci si rende facilmente conto che è necessaria una nuova struttura per effettuare query. Db4o supporta diversi meccanismi per effettuare le query. Per ognuno di essi si ha come risultato un oggetto di tipo ObjectSet, il quale è una API che ha le stesse 26 Gli indici rendono altamente preformanti le query, aumentando però i tempi di latenza di modifiche ed inserimenti. Per queste ragioni è sconsigliabile il loro uso per database di piccole dimensioni, in quanto le perdite in tempo potrebbero essere superiori ai benefici indotti. 27 Ogni volta che si desidera salvare un oggetto con un indice, Db4o ha bisogno di aggiungere ulteriori dati. Gli sviluppatori indicano che è consigliabile l utilizzo degli indici in schemi di oltre oggetti. 28 A confermare l importanza che questo linguaggio ha avuto nei sistemi relazionali la dicitura SQL è spesso inserita all interno del nome di un RDBMS, ad esempio MySQL, PostGreSQL, SQLite. 68

69 Capitolo 2 caratteristiche di un iteratore. Utilizzando metodi come HasNext e Next è possibbile scorrere, vedere se esiste un successivo elemento e spostare di conseguenza l oggetto ObjectSet al successivo elemento. I modi con cui è possibbile effettuare le query vanno sotto il nome di NQ (Native Query), QBE (Query By Example) e SODA Queries. Da precisare che è possibile effettuare ricerche sia su tipi semplici di dati come interi, che su Array, stringhe o addirittura oggetti. Il compito di scegliere la tipologia di query da utilizzare nell applicazione è lasciata allo sviluppatore. In alcune circostanze si preferisce avere una soluzione performante. In casi come questi vengono utilizzate le SODA. In altri casi è possibile richiedere una soluzione confortevole. In questi casi si utilizzano le NQ. Infine ci citano le QBE, ideali per esercitarsi, ma limitate nelle sue funzionalità. Per reperire i dati di due oggetti affetti una relazione è sufficiente effettuare solo una ricerca verso il nodo radice (oggetto principale). In un sistema relazionale invece è necessario effettuare due query separate oppure un Join. Si può facilmente intuire che con db4o si possono eliminare molte righe di codice e quindi possibili errori. Query By Example Il primo metodo messo a disposizione per effettuare le query sono le Query By Example. Esse sono sono utili per ricercare oggetti ma hanno funzionalità molto ristrette. Il modo più semplice per usare le QBE è passare un oggetto tipo (utilizzando metodi setxxx()) al metodo querybyexample(). Il motore di db4o seleziona tutte le corrispondenze con l oggetto creato e ritorna solo quelle trovate. Le limitazioni delle Query-By-Example riguardano l impossibilità di effettuare query contenenti espressioni logiche, oltre alla necessità di dover creare un oggetto costruttore. Esse non possono inoltre contenere valori di default come 0 nel caso di numeri, stringhe vuote o valori NULL. Nel caso in cui si devono effettuare selezioni che vanno al di la delle possibilità delle QBE, si utilizzano le Native Query e le SODA Query, illustrate nei prossimi paragrafi. 69

70 Capitolo 2 Native Query Le native-query utilizzano la semantica del proprio linguaggio di programmazione 29, quindi è un ottimo strumento per effettuare ricerche all interno del database. Le native-query sono state introdotte in Db4o 5.0 e con esse è possibile utilizzare i metodi getxxx() delle specifiche classi. In questo modo si possono effettuare ricerche usando comparatori, range di valori, operatori logici e di uguaglianza (allo stesso modo è possibile utilizzare operatori composti dalla somma di più operatori logici). Nel caso in cui il risultato dell espressione è true viene ritornato l oggetto specifico. Ultimo appunto sta nel fatto che internamente db4o cerca di analizzare le native query per convertirle in SODA, introducendo tempi di latenza superiori. SODA Query Le ultime API utilizzate per effettuare le query sono denominate SODA 30. Questa metodologia è adatta per la generazione dinamica di selezioni e per la gestione di query molto performanti, basate sulla nozione di query-graph. Un querygraph lascia allo sviluppatore il compito di scegliere quali oggetti cercare attraverso il metodo constrain (il quale aggiunge un nodo alla query), ed usare chiamate al metodo descend per applicare specifici campi di ricerca. Nella struttura a grafo i nodi rappresentano le classi e gli archi rappresentano le relazioni tra i nodi. possibile inserire costanti per ogni nodo per scegliere quali oggetti sono candidati ad essere inclusi nel risultato della ricerca. Con le SODA è possibile inserire metodi di comparazione ed operatori logici. Esistono inoltre comparatori speciali per le stringhe come start-with, ends-with e like. Come nei dababase relazionali è possibile utilizzare metodi per l ordinamento ed elementi riguardanti le QBE (in questo caso si inserisce un oggetto tipo (QBE) e si effettua la query attraverso specifici metodi (SODA)). 29 L idea di far integrare le query con il proprio linguaggio di programmazione ha avuto molto successo. Ad esempio la microsoft nel 2006 ha progettato LINQ (Language Integrated Queries) in una versione del database DLINQ. 30 Le SODA sono state inizialmente create come progetto open-source da Carl Rosemerger ma con le nuove versioni, questo strumento è completamente integrato all interno di Db4o. È 70

71 Capitolo 2 Figura 2.4: Semplice struttura a grafo, per una query SODA, in cui si desidera selezionare un Oggetto Persona, con attributo nome, uguale a Lincoln. Spesso le SODA sono difficili da capire ed interpretare, quindi molti programmatori scelgono di utilizzare le Native Query (attraverso strutture del proprio linguaggio di programmazione) Transizioni Tutte le operazioni effettuate in db4o sono caratterizzate da una transizione. Esiste sempre una transizione che si sta eseguendo caratterizzata dall istanza della classe Object Container. Ogni transizione agisce implicitamente, ma il progettista è in grado di decidere quando effettuare una commit 31 per rendere persistenti le modifiche. Per effettuare una transizione di commit bisogna invocare l omonimo metodo commit() all oggetto contenitore. Se si incorre in un qualsiasi tipo di problema (crash, distacco dell energia elettrica) durate l operazione, questa viene interrotta e lo stato del database torna automaticamente all istante prima della chiamata. Allo stesso modo della commit, si può utilizzare anche il metodo di rollback. Utilizzando questo metodo è necessario effettuare una chiamata a refresh() per essere sicuri che gli oggetti in memoria siano gli stessi contenuti nel database. 31 Oltre ad essere decisa dall utente la commit è effettuata in modo trasparente alla chiusura dell object cotainer. 71

72 Capitolo 2 Nella modalità client/server offerta dagli sviluppatori di Db4o ci possono essere più transizioni concorrenti nello stesso momento. In questa situazione si rende necessario l uso del concetto di isolazione. Con transizioni concorrenti c è la possibilità che un utente provi a leggere o modificare gli oggetti del database durante il ciclo di vita di un altra che sta operando sugli stessi oggetti. La strategia risolutiva va sotto il nome di livello di isolazione, tipica dei concetti introdotti nelle proprietà ACID. Con questa caratteristica il database implementa il livello di isolazione, bloccando gli oggetti in questione Proprietà ACID Il concetto di ACID 32 è stato una delle prime proprietà riconosciute nella teoria dei database. Dall acronimo si intuisce che un database deve rispettare quattro principi. Atomicità: i dati vengono effettivamente salvati sulla base dati solo se una transizione avviene con successo. In caso contrario lo stato del database non può cambiare. Consistenza: un database si trova sempre in uno stato consistente. Ogni transizione lo porta da uno stato consistente ad un altro. Isolazione: non è consentita la modifica di dati se una transizione non è completata. Ad esempio avendo due client che accedono al database operando in maniera concorrente, si opera in due diverse transizioni completamente isolate tra loro. I gradi di isolazione vengono divisi in quattro livelli: Grado zero: una transizione non può modificare i dati utilizzati da un altra transizione. Grado uno: composto dal grado zero, ma non è possibile effettuare una commit di modifica fino alla fine della transizione. Grado due: composta dal primo grado, ma non è possibile leggere dati di altre transizioni. 32 ACID: Atomicity-Consistency-Isolation-Durability 72

73 Capitolo 2 Grado tre: grado due, ma non è possibile leggere dati di un altra transizione prima che è stata effettuata una commit. Durabilità: concetto base nella teoria dei database, il quale afferma che i dati devono essere persistenti al suo interno Relazioni inverse Nella realizzazione di un progetto basato su una base di dati ad oggetti, si possono introdurre le relazioni inverse. Per capire bene il concetto, si propone un esempio basato sulle normali tecniche di programmazione. Supponiamo di avere una classe Persona che implementa una seconda classe Indirizzo. Come si può risalire alla Persona che abita nel particolare Indirizzo? In effetti, usando le tecniche di programmazione ad oggetti, questo non è possibile. Per effettuare la navigazione in entrambe le parti bisogna inserire un nuovo attributo nella classe Indirizzo, aggiungendo così un OID verso la classe Persona. Questa corrispondenza circolare può essere utile nello sviluppo di applicazioni che utilizzano database ad oggetti, ma molte volte, non è altamente performante, quindi è lasciato allo sviluppatore l incarico di scegliere se e come inserire le relazioni inverse Tipologie di relazioni ed Ereditarietà In ambito applicativo, vengono spesso messi in gioco oggetti composti, creando una struttura molto complessa da dover progettare. I vari tipi di relazioni si dividono in: relazioni uno-a-uno, uno-a-molti e molti-a-molti. Sicuramente la tipologia di relazione più semplice da implementare è quella unoa-uno. In questo caso è necessario dichiarare l oggetto secondario all interno di quello principale. Le relazioni uno-a-molti sono realizzate mediante l inclusione di un ArrayList all interno di una classe madre. Anche gli ArrayList sono trattati come oggetti; la lista ed ogni elemento al suo interno hanno un proprio OID. Nei modelli ad oggetti le relazioni molti-a-molti vengono gestite in maniera analoga al caso precedente con l uso di ArrayList. In casi come questi potrebbe essere nec- 73

74 Capitolo 2 Figura 2.5: Esempio di relazione uno-a-molti, per le classi Impiegato e Manager, mediante un ArrayList. 74

75 Capitolo 2 essaria l inclusione delle relazioni inverse, ma questa scelta resta sempre a discapito dello sviluppatore. Un altra soluzione può essere applicata nel caso in cui le relazioni molti-a-molti debbano necessariamente includere metodi o attributi. In questi casi, in analogia con il modello relazionale, si crea una nuova classe intermedia, contenente metodi ed attributi che si desidera implementare. Un ultima nota è da dedicare all ereditarietà 33, la quale è un concetto chiave nella programmazione ad oggetti ed è difficile da implementare in un modello relazionale. Con db4o questa caratteristica è molto semplice da implementare, attraverso la chiave extends. Ancora una volta si fa riferimento alle OID, per tener traccia di oggetti ereditati o implementati Reference cache Per archiviare gli oggetti db4o fa uso una una reference-chace. Si tratta di una tabella che mappa gli oggetti all interno della memoria mediante l identificativo interno (id). Quando si vuole cercare un oggetto, il sistema guarda prima nella reference-cache, se l oggetto non è presente viene caricato nel disco. Di default si fa uso di questa cache, ma questa funzione può essere anche disabilitata. È possibile inoltre rimuovere oggetti da essa manualmente, poichè in automatico vengono eliminati solo i riferimenti nulli Equivalence ed Equality Nella terminologia utilizzata negli oggetti ci sono due diversi concetti che prendono il nome di equivalenza ed uguaglianza. Equivalenza: due oggetti che hanno la stessa OID sono considerati equivalenti. 33 L ereditarietà è uno dei concetti fondamentali nel paradigma di programmazione ad oggetti. Essa consiste in un legame che il linguaggio di programmazione, o il programmatore stesso, stabilisce tra due classi. Nello specifico si ha una classe (classe figlia o derivata) che estende metodi ed attributi di una classe padre (superclasse). 75

76 Capitolo 2 Figura 2.6: Esempio di relazione molti-a-molti, per le classi Impiegato e Progetto, mediante ArrayList e relazioni inverse. 76

77 Capitolo 2 Figura 2.7: Interazione tra la memoria ed i dati persistenti, mediante cache. Uguaglianza: se due oggetti hanno lo stesso stato vengono considerati uguali. Ad esempio se si effettua una query su oggetti di tipo persona si possono avere oggetti non equivalenti ma che si riferiscono allo stesso oggetto Concetto di identità e trasparent persistence Db4o usa il concetto di identità per identificare gli oggetti, in modo che, se si carica un oggetto in maniera e tempo diverso viene restituito sempre lo stesso. In maniera molto semplice, lo stesso oggetto nel database sarà sempre rappresentato dallo stesso oggetto in memoria. Per implementare questo meccanismo, ogni Object Container cerca di fare un mapping tra gli oggetti in memoria e quelli salvati. Quando si caricano gli stessi oggetti attraverso diversi Object Container, essi avranno una diversa entità in memoria. Solo nel caso in cui si utilizza lo stesso Object Container gli oggetti vengono rappresentati dalla medesima entità. Quando si modifica un oggetto vengono salvati solo i cambiamenti avvenuti nello stesso, modificando gli oggetti di livello inferiore, fino ad una certa profondità (impostata per default questa ad uno). Con questa caratteristica solo i cambiamenti 77

78 Capitolo 2 avvenuti nello specifico oggetto sono salvati, mentre le modifiche agli oggetti di livello inferiore sono scartate. Per ovviare al problema è possibile scrivere ogni oggetto individualmente (soluzione utilizzabile per sistemi semplici, ma improponibile per modelli complessi), oppure usare il concetto di trasparent-presistence. Mediante l uso della trasparent persistence (TP) è possibile registrare un oggetto mediante l uso del metodo store() e lasciare al database il compito di gestire modifiche future. Questa tecnica porta diversi benefici: il codice non dipende dal grado di attivazione solo gli oggetti di cui ci interessa visionare i campi sono caricati in memoria nessuna modifica è persa. Per supportare la TP gli oggetti hanno bisogno di implementare l interfaccia Activable. Per utilizzare la precedente ipotesi bisogna inserire un attributo di tipo Activator e due metodi dell interfaccia Activable. Il primo di essi è in grado di legare un Activator allo specifico oggetto, mentre il secondo è chiamato prima di ogni operazione di read o write (nello specifico si deve inserire una chiamate all interno dei metodi setxxx() e getxxx()). La precedente metodologia è molto ripetitiva e sottoposta ad errori; può essere del tutto automatizzata creando build-script oppure utilizzando file per la configurazione. Anche per eliminare un oggetto valgono gli stessi ragionamenti fatti per le modifiche. Utilizzando il metodo delete() solo l oggetto passato al metodo viene eliminato. In casi come questo gli elementi che rimangono in vita hanno riferimento pari a null Concetto di attivazione Il concetto di attivazione, insieme al concetto di persistenza, è caratteristica fondamentale di db4o e dei ODBMS in generale. Ma perchè si rende necessario l uso dell attivazione? Dimostriamolo con un esempio. Nella figura sottostante ci troviamo di fronte ad una struttura ad albero tipica di Db4o. Esiste un solo nodo di root e molti sotto nodi. Nel momento in cui si recupera l oggetto root da una query, tutti i sotto oggetti devono essere creati in 78

79 Capitolo 2 Figura 2.8: Esempio di recupero di un insieme di elementi, senza l utilizzo dell attivazione. memoria comportando un grande spreco di risorse se le strutture ad albero sono molto grandi. Fortunatamente db4o non segue questa strategia. Quando si recuperano oggetti da una query, non si recupera tutta la struttura ma solo la parte del grafo d interesse. Questo avviene grazie al concetto di attivazione, il quale si verifica quando: Si iterano i risultati di una query. Gli oggetti sono attivati esplicitamente con i metodi di attivazione nell Object Container. I membri di una collezione sono attivati automaticamente quando la collezione è attivata. Questa funzione è stata impostata di default dagli sviluppatori ed stato scelto di attivare i nodi fino ad una profondità pari a quattro. L attivazione può essere esplicita attraverso l uso del metodo activate(object, int ), dove il primo parametro è l oggetto di riferimento, mentre il secondo è un intero che specifica il livello di attivazione voluto. Il valore minimo dell intero è può essere 79

80 Capitolo 2 Figura 2.9: Esempio di recupero di un insieme di elementi, con l uso dell attivazione. impostato a 1, il quale ritorna solo oggetti a livello più alto con eventuali attributi primitivi interni alla classe. Come seconda opportunità è possibile disattivare oggetti precedentemente attivati. In questo caso si utilizza il metodo deactivate(object.get(), int), dove il secondo parametro ha lo stesso significato del caso precedente. Se lo si vuole è possibile anche disattivare l attivazione settando il parametro numero due del metodo activate(object, int) a NULL o default. In questo caso verrà caricato tutto il grafo. Per concludere è possibile utilizzare il concetto di attivazione in modo trasparente. Questa modalità è configurabile all interno del database, elimina il problema dei livelli di attivazione e rende questa proprietà trasparente agli sviluppatori Configurazione Db4o offre molte interfacce per gestire le configurazioni inserite nel package com.db4o. config, nelle quali è possibile controllare le operazioni di Db4o ed il suo ObjectContainer. Tutte le configurazioni inserite vengono applicate a partire dal successivo Object- Container creato o alla successiva connessione ad un server Db4o e possono essere applicate a molti oggetti ocntenitori. 80

81 Capitolo 2 Figura 2.10: Esempio di configurazione, utilizzata per diversi ObjectContainer. Per inserire le configurazioni è prima necessario creare un oggetto di tipo Configuration nel seguente modo: Configuration conf = Db4o.Configure() successivamente è possibile effettuare chiamate ad uno dei seguenti metodi, dove si è supposto l esistenza di una classe Persona, cui applicare determinate configurazioni: conf.objectclass(typeof(person)).objectfield(name).indexed(true): che indica la volontà di creare un indice all interno della classe Persona sull attributo name. conf.cbjectclass(typeof(person)).cascadeondelete(): utilizzato per le eliminazioni in cascata degli oggetti a partire da quello principale. L uso di questa opzione può essere molto pericolosa nel caso in cui esistono riferimenti multipli all interno del database. conf.cbjectclass(typeof(person)).cascadeonupdate(): come al caso precedente, ma in questo caso si agisce sugli update delle classi. conf.generateuuids(int32.maxvalue): indica la volontà di generare UUID. Questa configurazione implica l uso di long object ID, i quali sono unici indipendentemente dalla macchina che li genera. Questi ID fanno diminuire le prestazioni del database e sono utilizzati nel DRS (si rimanda allo specifico paragrafo per ulteriori approfondimenti). 81

82 Capitolo 2 conf.generateversionnumbers(int32.maxvalue): in questo caso si salva un numero di versione per ogni oggetto. Utilizzando il parametro -1 si di disabilita questa opzione, con il valore Int32.MaxValue tutte le classi hanno un numero di versione, mentre usando 1 si setta il numero di versione solo per le classi indicate dallo sviluppatore. conf.automaticshutdown(false): questa configurazione impostata per default a true, indica la possibilità di chiusura automatica dell ObjectContainer se il JDK termina o non ha riferimenti al garbadge collector. Inserendo un valore pari a false si forza lo sviluppatore ad inserire il metodo close() per chiudere il container. conf.lockdatabasefile(false): metodo impostato a true per default per la gestione degli accessi concorrenti al database. Impostando il parametro a false nessuna operazione di look viene effettuata. conf.singlethreadedclient(true): configurazione utilizzata nella modalità clientserver. Impostando il parametro a false la gestione dei client avviene su un singolo thread, mentre un parametro impostato a true abilita i client alla modalità multithreaded, la quale è molto performante per lo scambio di messaggi asincroni ma utilizza più risorse. conf.weakreferences(false): metodo che indica l utilizzo di una weak reference (introdotta i precedenza). Questo approccio consuma molta memoria poichè il garbadge collector non può pulire oggetti inutilizzati; è necessario effettuare una chiamata ad ObjectContainer.purge(object) per rimuovere tutti gli oggetti inutilizzati. I successivi esempi di configurazione influenzano il file del database. È possibile con essi cambiare la struttura, il contenuto del database e come nei casi precedenti è necessaria la creazione di un oggetto di tipo Configuration. conf.blocksize(8): questo metodo imposta la grandezza dei blocchi del file relativo al database. Il valore può essere un numero da 1 a 127 ma deve sempre essere multiplo di 8. Il valore di default è 1 e con questo valore il database può 82

83 Capitolo 2 raggiungere i 2GB. Gli sviluppatori raccomandano un valore pari ad 8 in modo da raggiungere i 16GB di grandezza. conf.encrypt(true): db4o può effettuare due algoritmi di crittografia. Il metodo più semplice imposta questo metodo con il parametro true e successivamente si inserisce una password. Questo sistema introduce un livello di sicurezza molto basso, utilizzabile se non ci sono particolari vincoli a riguardo. conf.io(new XteaEncryptionFileAdapter(password)): questa configurazione permette agli sviluppatori di configurare il proprio Adapter I/O; è possibile crearlo o utilizzare uno fornito da Db4o (contenuti nel package com.db4o.io). conf.unicode(false): db4o è in grado di supportare gli Unicode come formato di memorizzazione delle stringhe. Tra i metodi di configurazione ci sono anche opzioni applicabili per un singolo ObjectContainer o ObjectServer. In questo modo è possibile effettuare modifiche della configurazione per particolari ObjectContainer o ObjectServer, mantenendo inalterate le configurazioni globali Client-server mode Un sistema client-server consiste in genere in un numero non definito di client che interagiscono con un unico server. I server forniscono servizi attraverso deamon 34 che ascoltano ed iniziano delle connessioni con i client. Come già affermato, le API di db4o includono la funzione opzionale denominata client-server mode. Questa modalità richiede la creazione di un oggetto ObjectSercer, cui passare il nome del file da aprire e la porta da utilizzare. 34 Un demone (tradotto erroneamente dall inglese, daemon) è un programma che agisce in background, cioè senza che sia sotto il controllo diretto dell utente. In generale hanno la funzione di rispondere a determinate richieste che siano di rete, hardware, etc. La loro caratteristica fondamentale a differenza dei normali programmi è che i demoni sono normalmente in esecuzione per tutta una sessione di lavoro. Il motivo è che devono sempre essere in ascolto per soddisfare eventuali richieste provenienti dall utente o dall esterno. 83

84 Capitolo 2 Figura 2.11: Esempio di di comunicazione tra un server e diversi client. Db4o supporta tre diversi tipi di interazioni tra client e server. La prima modalità è definita networking mode e viene utilizzata quando si lavora con un database remoto. In questo caso i client aprono una connessione TCP/IP per eseguire istruzioni di inserimento, modifica, eliminazione o query da e verso il database. La seconda modalità è definita embedded mode e non coinvolge sistemi distribuiti. Anche in questo caso il client ed il server sono attori ben distinti, ma al contrario del caso precedente essi si trovano nella stessa virtual machine. Questa seconda modalità non è molto diversa dalla precedente, infatti è necessario passare l intero 0 al metodo che apre il server (il quale indica che il server si trova in locale). L ultima modalità è utilizzabile per comunicazioni out-of-band verso il server. In questo caso le informazioni passate non appartengono al protocollo db4o e non consistono in oggetti. È possibile inviare messaggi verso il server tipo: do a defragment, stop yourself, perform a savecopy. Mediante l utilizzo di una delle tre modalità client/server è stato necessario introdurre un sistema di accesso controllato ai dati. È necessario infatti specificare username e password per effettuare il login con il server. Anche nelle modalità viste in questo paragrafo si utilizza una cache per l accesso ai dati persistenti. In questo caso ogni client ha una cache di riferimento, la quale aiuta ad avere buoni tempi di risposta. La presenza della cache comporta tanti problemi quando diversi client lavorano con gli stessi oggetti, ma questi posso essere saltati utilizzando diverse strategie illustrate di seguito. Se gli utenti non lavorano con gli stessi oggetti nello stesso momento non 84

85 Capitolo 2 Figura 2.12: prededentemente trattati. Esempio di una struttura client-server, che racchiude tutti i casi sussiste il problema. Si può fare il refresh ogni volta che un client effettua una operazione di modifica o inserimento, il quale comporta un notevole scambio di dati. Minimizzare la cache dei vecchi oggetti mediante l uso di sessioni separate nel client. In questo modo si crea un nuovo container ed una cache pulita. Comunicazione SSL Per default db4o non effettua una comunicazione criptata, però è possibile la comunicazione SSL 35. Per effettuare una comunicazione di questo tipo si deve semplicemente implementare il SSLSupport Il Secure Sockets Layer(SSL) è uno dei protocolli crittografici che permettono una comunicazione sicura e una integrità dei dati su reti TCP/IP, come ad esempio Internet. SSL cifra la comunicazione dalla sorgente alla destinazione al di sopra del livello di trasporto. 36 Classe utilizzata per la creazione di una connessione SSL in ambito Db4o. Il costruttore di questa classe non necessita di nessun parametro. 85

86 Capitolo DRS. Data Replication System Il concetto di Replication [13] è definito da wikipedia.com nel seguente modo: the provision of redundant resources (software or hardware components) to improve reliability and fault-tolerance. Nel nostro caso si parla di risorse software e più precisamente dei dati salvati nel database. Per effettuare la sincronizzazione si fa uso di un ObjectContainer e un peer 37, rappresentato da un identificatore unico per tenere traccia dell origine degli oggetti. Grazie alla natura dell identificatore, non possono esservi due peer con lo stesso valore. È possibile scegliere di replicare tutti i dati (oppure alcuni) di un peer verso un altro 38. Esso è spesso unidirezionale ma è possibile renderlo bidirezionale. Il DRS è stato disegnato per per avere un altro grado di integrazione tra dispositivi mobili e applicazioni web (o destokop). Casi d uso sono ad esempio l integrazione di apps commerciali sincronizzate con un database sito su di un server. Questo concetto potrebbe anche essere valido quando è impossibile aggiornare i dati di un database remoto ovunque; attraverso il DRS è possibile farlo in un secondo momento. Per utilizzare questo sistema di replicazione è necessario assegnare un UUID 39 ad ogni oggetto e un numero di versione. Queste ipotesi non sono verificate da db4o come default, quindi bisogna configurarle esplicitamente. 37 Con il termine peer si intende dire che ogni nodo può fungere sia da cliente che da servente. Questa terminologia è molto utilizzata in sistemi P2P (peer to peer), dove esisto un numero indefinito di nodi con le precedenti caratteristiche. 38 Operando su dispositivi mobili le risorse sono limitate protrerrebbe essere sbagliato replicare l intero database. In questi casi è possibile replicare solo alcune parti scelte mediante una semplice condizione o con una query più complessa. 39 UUID: Unique universal identifiers. Il formato degli UUID è stato standatdizzato dalla Open Software Foundation. Un UUID è un numero a 128 bit, il quale contiene una firma del database generata da un algoritmo che contiene il nome dell host, l indirizzo, il timestamp corrente e due valori randoom di tipo long. Gli UUID sino salvati come istanze di classe Db4oUUID, i quali contengono una parte per la firma ed una parte contenente l identificatore all oggetto. Oltre i precedenti è necessario l utilizzo di un numero di versione del database. 86

87 Capitolo 2 Figura 2.13: Esempio di Data Replication System, in un possibile contesto reale. 87

Scuola Professionale e Filologica Geom. F.Borgogna Vercelli

Scuola Professionale e Filologica Geom. F.Borgogna Vercelli Scuola Professionale e Filologica Geom. F.Borgogna Vercelli Corsi ANDROID 2013/2014 Benvenuti nel mondo dinamico dello sviluppo di applicazioni per smartphone e tablet Android Corsi ANDROID 2013/2014 L

Dettagli

INTRODUZIONE ALLE PIATTAFORME

INTRODUZIONE ALLE PIATTAFORME INTRODUZIONE ALLE PIATTAFORME Android ios Windows Phone 8 Android 2 Cos è Android? Un moderno open-source sistema operativo Componenti: Linux kernel Java Core applications 3 Perché è stato un successo

Dettagli

ANDROID. Domenico Talia. Università della Calabria. talia@dimes.unical.it

ANDROID. Domenico Talia. Università della Calabria. talia@dimes.unical.it ANDROID Domenico Talia Università della Calabria talia@dimes.unical.it Sistemi Operativi per Mobile! I sistemi operativi per sistemi mobili seguono i principi dei SO classici ma devono gestire risorse

Dettagli

Programmazione in ambiente

Programmazione in ambiente Università Politecnica delle Marche Dipartimento di Ingegneria dell Informazione Programmazione in ambiente Android Laura Montanini - laura.montanini@univpm.it Corso di Tecnologie per le TLC 2013-2014

Dettagli

Android development. Sviluppo di Mobile Apps sul sistema operativo di Google

Android development. Sviluppo di Mobile Apps sul sistema operativo di Google Android development Sviluppo di Mobile Apps sul sistema operativo di Google Agenda Giorni: Gio 14/04/2011 Ven 15/04/2011 Gio 21/04/2011 Ven 22/04/2011 Suddivisione: Mattina: teoria Pomeriggio: pratica

Dettagli

Sistemi Mobili e Wireless Android Introduzione alla piattaforma

Sistemi Mobili e Wireless Android Introduzione alla piattaforma Sistemi Mobili e Wireless Android Introduzione alla piattaforma Stefano Burigat Dipartimento di Matematica e Informatica Università di Udine www.dimi.uniud.it/burigat stefano.burigat@uniud.it Cos'è Android?

Dettagli

MagiCum S.r.l. Progetto Inno-School

MagiCum S.r.l. Progetto Inno-School MagiCum S.r.l. Progetto Inno-School Area Sviluppo Software Autore: Sergio Gandola Revisione: 2 Data: 07/06/13 Titolo: Documentazione Tecnica Diario File:Documentazione Tecnica.pdf Sito: http://inno-school.netsons.org/

Dettagli

Tecniche di progettazione e sviluppo di applicazioni mobile

Tecniche di progettazione e sviluppo di applicazioni mobile Slide del corso FSE Tecniche di progettazione e sviluppo di applicazioni mobile svolto presso AREA Science Park Padriciano - Trieste - Italy diegozabot@yahoo.it Android Introduzione diegozabot@yahoo.it

Dettagli

Linux Day 2015. ANDROID ed i suoi derivati. Pavia, 24 ottobre 2015. Marco Giorgi NUTRIA LUG

Linux Day 2015. ANDROID ed i suoi derivati. Pavia, 24 ottobre 2015. Marco Giorgi NUTRIA LUG Linux Day 2015 NUTRIA LUG Pavia, 24 ottobre 2015 ANDROID ed i suoi derivati Quant'è davvero open un dispositivo Android e come renderlo ancora più libero CHI SONO Membro del team di sviluppo DEFT Linux

Dettagli

Android world. Sviluppare app per Android. Un insieme di software per dispositivi mobili (smartphone, tablet, portatili...)

Android world. Sviluppare app per Android. Un insieme di software per dispositivi mobili (smartphone, tablet, portatili...) Android world Un insieme di software per dispositivi mobili (smartphone, tablet, portatili...) Contiene un Sistema Operativo, software middleware e applicazioni varie Sviluppato da Open Handset Alliance,

Dettagli

L ambiente di sviluppo Android Studio

L ambiente di sviluppo Android Studio L ambiente di sviluppo Android Studio Android Studio è un ambiente di sviluppo integrato (IDE, Integrated Development Environment) per la programmazione di app con Android. È un alternativa all utilizzo

Dettagli

Introduzione ad Android

Introduzione ad Android Capitolo 1 Introduzione ad Android La fine del precedente millennio è stata sicuramente caratterizzata da Internet: una vera e propria rivoluzione non solo tecnologica ma soprattutto culturale. La possibilità

Dettagli

Sviluppo di un applicazione mobile per la gestione degli interventi tecnici tramite geolocalizzazione

Sviluppo di un applicazione mobile per la gestione degli interventi tecnici tramite geolocalizzazione UNIVERSITA DEGLI STUDI DI FERRARA Corso di Laurea in informatica Anno Accademico 2011-2012 Sviluppo di un applicazione mobile per la gestione degli interventi tecnici tramite geolocalizzazione Relatore:

Dettagli

Basi Android. Android si definisce open. Con8ene tecnologie open source. Il codice di Android è open. Licenza Open Source Apache 2.

Basi Android. Android si definisce open. Con8ene tecnologie open source. Il codice di Android è open. Licenza Open Source Apache 2. Basi Android 1 Android Cosa è Android? Android è un insieme di strumen8 e librerie per sviluppare applicazioni mobili è più di un SO Android si definisce open Con8ene tecnologie open source Linux Il codice

Dettagli

Sviluppo su Android. Linux Day Torino 2010

Sviluppo su Android. Linux Day Torino 2010 Sviluppo su Android Linux Day Torino 2010 Francesco Ronchi francesco.ronchi@gmail.com - www.synesthesia.it Cos'è Android Sistema operativo dedicato ai device mobili: cellulari, palmari, tablet, navigatori...

Dettagli

Sistemi Mobili e Wireless Android Primi passi

Sistemi Mobili e Wireless Android Primi passi Sistemi Mobili e Wireless Android Primi passi Stefano Burigat Dipartimento di Matematica e Informatica Università di Udine www.dimi.uniud.it/burigat stefano.burigat@uniud.it Ambiente di sviluppo L'ambiente

Dettagli

Introduzione ad Android

Introduzione ad Android Capitolo 1 Introduzione ad Android La fine del precedente millennio è stata sicuramente caratterizzata da Internet: una vera e propria rivoluzione non solo tecnologica, ma soprattutto culturale. Il fatto

Dettagli

Programmazione Android

Programmazione Android Programmazione Android Giovanni Perbellini, Stefano Cordibella Università di Verona EDALab S.r.l. Agenda Introduzione Android Overview Ambiente di sviluppo Esempi Helloworld Weather 2 1 Cos è Android?

Dettagli

Android. Android. Sviluppo di applicazioni. Dalvik 19/03/2011. A. Ferrari

Android. Android. Sviluppo di applicazioni. Dalvik 19/03/2011. A. Ferrari Android Android A. Ferrari Android è un sistema opera8vo per disposi8vi mobili. Inizialmente sviluppato da Startup Android Inc. acquisita poi nel 2005 da Google Inc. Il cuore di Android è un kernel Linux.

Dettagli

Programmazione Fondi Strutturali 2007/2013 P.O.N. FSE A.S. 2013/2014 SCHEDA PROGETTUALE MODULO. Obiettivo: C Azione: 1 Riferimento interno:

Programmazione Fondi Strutturali 2007/2013 P.O.N. FSE A.S. 2013/2014 SCHEDA PROGETTUALE MODULO. Obiettivo: C Azione: 1 Riferimento interno: ISTITUTO ISTRUZIONE SECONDARIA SUPERIORE GUGLIELMO MARCONI Piazza Poerio 2, 70126 Bari - Tel.080-5534450 Fax.080-5559037 - www.marconibari.it - info@marconibari.it Programmazione Fondi Strutturali 2007/2013

Dettagli

Indice generale. Introduzione...xv. Parte I Per iniziare Capitolo 1 Introduzione allo sviluppo ios con tecnologie web...3

Indice generale. Introduzione...xv. Parte I Per iniziare Capitolo 1 Introduzione allo sviluppo ios con tecnologie web...3 Introduzione...xv A chi si rivolge questo libro...xv Gli argomenti trattati...xv Com è organizzato il libro...xvi Cosa occorre per utilizzare il libro...xvii Convenzioni adottate...xvii Il codice sorgente...xviii

Dettagli

Indice generale. Capitolo 1 Introduzione ad Android... 1

Indice generale. Capitolo 1 Introduzione ad Android... 1 Prefazione Introduzione...xvii...xix Capitolo 1 Introduzione ad Android... 1 Che cos è Android... 2 Un po di storia... 3 Android e Java... 4 Confronto con J2ME... 6 La Dalvik Virtual Machine... 9 L architettura

Dettagli

per favore Android Mobile Programming Prof. R. De Prisco Prof. Roberto De Prisco 29/09/14 e NON RISPONDERE!!!! Slide 3

per favore Android Mobile Programming Prof. R. De Prisco Prof. Roberto De Prisco 29/09/14 e NON RISPONDERE!!!! Slide 3 Prof. Roberto De Prisco 2 per favore 3 o almeno e NON RISPONDERE!!!! Scrivere un app che mehe la vibrazione il lun e gio dalle 16:00 alle 18:00 1 Dress Code 4 Lui Vestito scuro, cravatta, camicia chiara,

Dettagli

Nuova ECDL ONLINE COLLABORATION

Nuova ECDL ONLINE COLLABORATION PATENTE EUROPEA DEL COMPUTER Nuova ECDL ONLINE COLLABORATION CONCETTI FONDAMENTALI USO DI DISPOSITIVI MOBILI APPLICAZIONI SINCRONIZZAZIONE 4. COLLABORAZIONE MOBILE 4.1. Concetti fondamentali 4.1.1 Identificare

Dettagli

Android AppInventor. Argomenti trattati. Introduzione. AppInventor. etc. Google Android Android SDK, Android Market

Android AppInventor. Argomenti trattati. Introduzione. AppInventor. etc. Google Android Android SDK, Android Market Android v. 1.0.1 Argomenti trattati Android AppInventor Introduzione Google Android Android SDK, Android Market AppInventor Architettura Sviluppo di applicazioni etc Storia Introduzione Android Android

Dettagli

Corso Android Corso Online Sviluppo su Cellulari con Android

Corso Android Corso Online Sviluppo su Cellulari con Android Corso Android Corso Online Sviluppo su Cellulari con Android Accademia Futuro info@accademiafuturo.it Programma Generale del Corso di Sviluppo su Cellulari con Android Programma Base Modulo Uno - Programmazione

Dettagli

Internet Architettura del www

Internet Architettura del www Internet Architettura del www Internet è una rete di computer. Il World Wide Web è l insieme di servizi che si basa sull architettura di internet. In una rete, ogni nodo (detto host) è connesso a tutti

Dettagli

Un Sistema Location-based per la mappatura degli Access Point

Un Sistema Location-based per la mappatura degli Access Point 1 Un Sistema Location-based per la mappatura degli Access Point Pasquale Cautela pasquale.cautela@studio.unibo.it Marco Peca marco.peca@studio.unibo.it Rosario Salpietro rosario.salpietro@studio.unibo.it

Dettagli

ELABORAZIONE CONDIVISA DI TESTI CON ANDROID

ELABORAZIONE CONDIVISA DI TESTI CON ANDROID Alma Mater Studiorum Università di Bologna FACOLTÀ DI SCIENZE MATEMATICHE, FISICHE E NATURALI Corso di Laurea in Scienze di Internet ELABORAZIONE CONDIVISA DI TESTI CON ANDROID Tesi di Laurea in Programmazione

Dettagli

Corso Android New Edition Corso Online Programmatore Android New Edition

Corso Android New Edition Corso Online Programmatore Android New Edition Corso Android New Edition Corso Online Programmatore Android New Edition Accademia Domani Via Pietro Blaserna, 101-00146 ROMA (RM) info@accademiadomani.it Programma Generale del Corso di Programmatore

Dettagli

WEB TECHNOLOGY. Il web connette. LE persone. E-book n 2 - Copyright Reserved

WEB TECHNOLOGY. Il web connette. LE persone. E-book n 2 - Copyright Reserved WEB TECHNOLOGY Il web connette LE persone Indice «Il Web non si limita a collegare macchine, ma connette delle persone» Il Www, Client e Web Server pagina 3-4 - 5 CMS e template pagina 6-7-8 Tim Berners-Lee

Dettagli

Introduzione. A chi si rivolge questo libro. Gli argomenti trattati

Introduzione. A chi si rivolge questo libro. Gli argomenti trattati Introduzione Il successo straordinario di iphone e ipad degli ultimi quattro anni ha confermato che gli sviluppatori di applicazioni si trovano al centro di un nuovo mondo di soluzioni mobili, sofisticate

Dettagli

Sviluppo di applicazioni mobili su piattaforma Maemo

Sviluppo di applicazioni mobili su piattaforma Maemo tesi di laurea Anno Accademico 2009/2010 relatore Ch.mo prof. Marcello Cinque candidato Giovanni Fortini Matr. 534/2169 Contesto e contributo Sistemi operativi per dispositivi mobili Sviluppo di un applicazione

Dettagli

Corso Android Corso Online Programmatore Android

Corso Android Corso Online Programmatore Android Corso Android Corso Online Programmatore Android Accademia Domani Via Pietro Blaserna, 101-00146 ROMA (RM) info@accademiadomani.it Programma Generale del Corso Modulo Uno - Programmazione J2ee 1) Programmazione

Dettagli

Corso App modulo Android. Antonio Gallo info@laboratoriolibero.com

Corso App modulo Android. Antonio Gallo info@laboratoriolibero.com Corso App modulo Android Antonio Gallo info@laboratoriolibero.com Strumentazione: PC + smartphone Android + cavo micro USB per connessione Framework Phonegap SDK di Android JDK (Java) Eclipse (opzionale)

Dettagli

Lezione 19 Blackberry. Dr. Paolo Casoto, Ph.D - 2012

Lezione 19 Blackberry. Dr. Paolo Casoto, Ph.D - 2012 + Lezione 19 Blackberry + Credits I lucidi di questa lezione sono stati redatti dal Dr. Paolo Casoto nel 2012. Sono rilasciati con licenza Creative Commons Attribuzione, non commerciale e non opere derivate.

Dettagli

ANDROID 4.2 JELLY BEAN Installazione e configurazione dell ambiente

ANDROID 4.2 JELLY BEAN Installazione e configurazione dell ambiente INTRODUZIONE Per sviluppare applicazioni in grado di girare su sistemi Android servono tre cose: il Java JDK (Java Development Kit), che contiene tutti gli strumenti necessari a sviluppare nel linguaggio

Dettagli

Reti basate sulla stack di protocolli TCP/IP

Reti basate sulla stack di protocolli TCP/IP Reti basate sulla stack di protocolli TCP/IP Classe V sez. E ITC Pacioli Catanzaro lido 1 Stack TCP/IP Modello TCP/IP e modello OSI Il livello internet corrisponde al livello rete del modello OSI, il suo

Dettagli

Corso Programmazione Java Android. Programma

Corso Programmazione Java Android. Programma Corso Programmazione Java Android Programma 1.1 Obiettivo e modalità di fruizione L obiettivo del corso è di fornire le conoscenze tecniche e metodologiche per svolgere la professione di Programmatore

Dettagli

Filippo Druda LO SVILUPPO IN ANDROID

Filippo Druda LO SVILUPPO IN ANDROID 1 Classe 5 A Candidato Filippo Druda LO SVILUPPO IN ANDROID 2 L'EVOLUZIONE TECNOLOGICA NON HA MAI DANNEGGIATO NESSUNO.. ABSTRACT Istituto Tecnico Industriale Don Orione Fano 3 Il progresso tecnologico

Dettagli

Progettazione di Sistemi Interattivi. Gli strati e la rete. Struttura e supporti all implementazione di applicazioni in rete (cenni)

Progettazione di Sistemi Interattivi. Gli strati e la rete. Struttura e supporti all implementazione di applicazioni in rete (cenni) Progettazione di Sistemi Interattivi Struttura e supporti all implementazione di applicazioni in rete (cenni) Docente: Daniela Fogli Gli strati e la rete Stratificazione da un altro punto di vista: i calcolatori

Dettagli

Corso di Web Programming

Corso di Web Programming Corso di Web Programming 1. Introduzione a Internet e al WWW Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea in Informatica

Dettagli

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario Contenuti del Corso Riferimenti Regole del Corso Materiale Didattico Scheduling Esami Strumenti Software 16/01/2013 2 Contenuti

Dettagli

ICT (Information and Communication Technology): ELEMENTI DI TECNOLOGIA

ICT (Information and Communication Technology): ELEMENTI DI TECNOLOGIA ICT (Information and Communication Technology): ELEMENTI DI TECNOLOGIA Obiettivo Richiamare quello che non si può non sapere Fare alcune precisazioni terminologiche IL COMPUTER La struttura, i componenti

Dettagli

IL SISTEMA ANDROID E GLI SMARTPHONE

IL SISTEMA ANDROID E GLI SMARTPHONE IL SISTEMA ANDROID E GLI SMARTPHONE Android è un sistema operativo open source, per dispositivi mobili, basato sul kernel 2.6 di Linux (Il kernel è il nucleo di un sistema operativo e fornisce tutte le

Dettagli

2 Android Market e la commercializzazione delle applicazioni 35

2 Android Market e la commercializzazione delle applicazioni 35 Prefazione Prima di iniziare xiv xxii 1 Introduzione ad Android 31 1.1 Introduzione 32 1.2 Panoramica di Android 34 1.3 Android 2.2 (Froyo) 37 1.4 Android 2.3 (Gingerbread) 40 1.5 Android 3.0 (Honeycomb)

Dettagli

INFORMATICA CORSI DELL'INDIRIZZO TECNICO CLASSI PRIME AMMINISTRAZIONE - FINANZA E MARKETING

INFORMATICA CORSI DELL'INDIRIZZO TECNICO CLASSI PRIME AMMINISTRAZIONE - FINANZA E MARKETING INFORMATICA CORSI DELL'INDIRIZZO TECNICO CLASSI PRIME AMMINISTRAZIONE - FINANZA E MARKETING Modulo propedeutico Le lezioni teoriche sono sviluppate sui seguenti argomenti: Struttura dell elaboratore: CPU,

Dettagli

Lezione 1 Primi passi con Android

Lezione 1 Primi passi con Android A cura di Carlo Pelliccia Android è una piattaforma software per smartphone e tablet realizzata dal consorzio noto come Open Handset Alliance, di cui Google è capofila e maggiore contributore, ed al quale

Dettagli

MA GLI ANDROIDI SOGNANO PINGUINI ELETTRICI? Introduzione ad Android. Il futuro prossimo dei telefoni cellulari.

MA GLI ANDROIDI SOGNANO PINGUINI ELETTRICI? Introduzione ad Android. Il futuro prossimo dei telefoni cellulari. MA GLI ANDROIDI SOGNANO PINGUINI ELETTRICI? Introduzione ad Android. Il futuro prossimo dei telefoni cellulari. 8 aprile 2008 Case delle Culture di Ponziana via Orlandini 38 - Trieste Cos'è Android? Android

Dettagli

Manuale di riferimento di HP Web Jetadmin Database Connector Plug-in

Manuale di riferimento di HP Web Jetadmin Database Connector Plug-in Manuale di riferimento di HP Web Jetadmin Database Connector Plug-in Informazioni sul copyright 2004 Copyright Hewlett-Packard Development Company, L.P. Sono vietati la riproduzione, l'adattamento e la

Dettagli

Lezione 1. Sviluppo di Applicazioni per ios. Panoramica Tecnologica ios e ios SDK Strumenti di sviluppo per ios. Università di Pisa

Lezione 1. Sviluppo di Applicazioni per ios. Panoramica Tecnologica ios e ios SDK Strumenti di sviluppo per ios. Università di Pisa Lezione 1 Sviluppo di Applicazioni per ios Panoramica Tecnologica ios e ios SDK Strumenti di sviluppo per ios Oggi... ios e ios SDK Strumenti di sviluppo Linguaggio Objective C Fondamenti di OOP Dispositivi

Dettagli

Interstudio L INGEGNERE NELLE NUVOLE. App, WEB App e Cloud. ing. Sauro Agostini. Architectural & Engineering Software. venerdì 11 ottobre 13

Interstudio L INGEGNERE NELLE NUVOLE. App, WEB App e Cloud. ing. Sauro Agostini. Architectural & Engineering Software. venerdì 11 ottobre 13 Architectural & Engineering Software L INGEGNERE NELLE NUVOLE App, WEB App e Cloud ing. Sauro Agostini Mitterand 1981 Reagan Battaglin Alice IBM PC 5150 Alonso C ERA UNA VOLTA IL DOS Non è una rivoluzione,

Dettagli

CUSTOMIZZAZIONE DI ANDROID

CUSTOMIZZAZIONE DI ANDROID ALMA MATER STUDORIUM UNIVERSITÀ DI BOLOGNA FACOLTÀ DI SCIENZE MATEMATICHE, FISICHE E NATURALI Corso di Laurea in Informatica CUSTOMIZZAZIONE DI ANDROID Tesi di Laurea in Architettura degli Elaboratori

Dettagli

Corso Programmazione Java ed Android

Corso Programmazione Java ed Android Corso Programmazione Java ed Android Codice: ITAJ0114 Durata: 72 ore Descrizione corso Il corso Programmazione Java ed Android è rivolto agli amanti del mobile che intendono entrare in questo affascinante

Dettagli

corrispondente server Web (l applicazione server) viene inviata una richiesta, alla quale il server normalmente risponde inviando la pagina HTML che

corrispondente server Web (l applicazione server) viene inviata una richiesta, alla quale il server normalmente risponde inviando la pagina HTML che Prefazione In questo volume completiamo l esplorazione del linguaggio Java che abbiamo iniziato in Java Fondamenti di programmazione. I due testi fanno parte di un percorso didattico unitario, come testimoniano

Dettagli

Android. Anatomia di una applicazione

Android. Anatomia di una applicazione Android Anatomia di una applicazione Elementi di base Gli elementi di base per costruire una applicazione Android sono cinque: Activity Intent Broadcast Receiver Service Content Provider 2 Activity (1/3)

Dettagli

Componenti di una applicazione. Un programma applicativo è strutturato come un insieme organizzato di tre componenti funzionali:

Componenti di una applicazione. Un programma applicativo è strutturato come un insieme organizzato di tre componenti funzionali: Componenti di una applicazione Un programma applicativo è strutturato come un insieme organizzato di tre componenti funzionali: Un sottosistema di interfaccia con l utente (IU, user interface o anche presentation

Dettagli

Sviluppo di App per sistema operativo Android

Sviluppo di App per sistema operativo Android Università degli Studi di Padova Dipartimento di Ingegneria dell Informazione Corso di Laurea Triennale in Ingegneria dell Informazione Tesina di laurea triennale Sviluppo di App per sistema operativo

Dettagli

Android per sistemi embedded

Android per sistemi embedded Android per sistemi embedded Valter Minute valter@valterminute.com Vminute By PresenterMedia.com Agenda or Summary Layout A second line of text could go here 1 2 3 4 5 Cos è Android Parenti serpenti Android

Dettagli

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Installazione SOFTWARE JDK ECLIPSE 03/03/2011 2 ALGORITMI E PROGRAMMI PROBLEMA ALGORITMO PROGRAMMA metodo risolutivo linguaggio di

Dettagli

Didit Interactive Solution

Didit Interactive Solution Didit Interactive Solution Didit Interactive Solution Moonway.it Versione Italiana Data: Settembre 2008 Contenuti Introduzione... 3 Componenti Windows Richiesti... 3 Guidelines Generali di Configurazione...

Dettagli

Concetti base. Impianti Informatici. Web application

Concetti base. Impianti Informatici. Web application Concetti base Web application La diffusione del World Wide Web 2 Supporto ai ricercatori Organizzazione documentazione Condivisione informazioni Scambio di informazioni di qualsiasi natura Chat Forum Intranet

Dettagli

Laboratorio di Elaborazione e Trasmissione Video

Laboratorio di Elaborazione e Trasmissione Video + Laboratorio di Elaborazione e Trasmissione Video Prof. Christian Micheloni Dott. Marco Vernier Dipartimento di Matematica e Informatica Università degli studi di Udine Outline Lezione 1 - Il sistema

Dettagli

Linguaggio Java e Android. Il web e Java dal 95 ad oggi Da j2me ad Android Html javascript css Applicazioni web e dispositivi mobili

Linguaggio Java e Android. Il web e Java dal 95 ad oggi Da j2me ad Android Html javascript css Applicazioni web e dispositivi mobili Linguaggio Java e Android Il web e Java dal 95 ad oggi Da j2me ad Android Html javascript css Applicazioni web e dispositivi mobili Linguaggio Java creato da James Gosling nel 1995 Sun microsytem, 2007

Dettagli

Elementi di Informatica e Programmazione

Elementi di Informatica e Programmazione Elementi di Informatica e Programmazione Il Sistema Operativo Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela Fogli Cos

Dettagli

Il Tablet e le app per la didattica

Il Tablet e le app per la didattica Il Tablet e le app per la didattica Il dispositivo mobile Claudia Casapollo Che cosa è un Tablet? E' un computer portatile, ma non può sostituire il computer da tavolo o il notebook. E' molto più sottile

Dettagli

MagiCum S.r.l. Progetto Inno-School

MagiCum S.r.l. Progetto Inno-School MagiCum S.r.l. Progetto Inno-School Area applicazioni Autore: Alessio Salandi Revisione: 1.0 Data: 23/05/2013 Titolo: Documentazione tecnica - Grafica Diario File:Documentazione.pdf Sito: http://inno-school.netsons.org/

Dettagli

Contenuti. Applicazioni di rete e protocolli applicativi

Contenuti. Applicazioni di rete e protocolli applicativi Contenuti Architettura di Internet Principi di interconnessione e trasmissione World Wide Web Posta elettronica Motori di ricerca Tecnologie delle reti di calcolatori Servizi Internet (come funzionano

Dettagli

Indice: Introduzione 1 Strumenti di lavoro 2 Istallare Eclipse e SDK 3 Istallare l ADT in eclipse 4. Powered by: Vincenzo Acinapura

Indice: Introduzione 1 Strumenti di lavoro 2 Istallare Eclipse e SDK 3 Istallare l ADT in eclipse 4. Powered by: Vincenzo Acinapura Indice: Introduzione 1 Strumenti di lavoro 2 Istallare Eclipse e SDK 3 Istallare l ADT in eclipse 4 Introduzione Salve a tuttiù Mi presento mi chiamo Vincenzo Acinapura e studio ingegneria informatica,

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica CL3 - Biotecnologie Orientarsi nel Web Prof. Mauro Giacomini Dott. Josiane Tcheuko Informatica - 2006-2007 1 Obiettivi Internet e WWW Usare ed impostare il browser Navigare in internet

Dettagli

La Login in Prestito!!Disponbilità Tesi. Categorie di Progetti di Ingegneria del Software

La Login in Prestito!!Disponbilità Tesi. Categorie di Progetti di Ingegneria del Software Draft versione 1.1 Categorie di Progetti di Ingegneria del Software Tutti i temi Progettuali proposti rientrano in una delle seguenti categorie. 1. Temi sull'elaborazione di Dati Multimediali Temi su Audio,

Dettagli

Esercitazione 8. Basi di dati e web

Esercitazione 8. Basi di dati e web Esercitazione 8 Basi di dati e web Rev. 1 Basi di dati - prof. Silvio Salza - a.a. 2014-2015 E8-1 Basi di dati e web Una modalità tipica di accesso alle basi di dati è tramite interfacce web Esiste una

Dettagli

Programmazione per Bioinformatica Il Calcolatore e la Programmazione. Dr Damiano Macedonio Università di Verona

Programmazione per Bioinformatica Il Calcolatore e la Programmazione. Dr Damiano Macedonio Università di Verona Programmazione per Bioinformatica Il Calcolatore e la Programmazione Dr Damiano Macedonio Università di Verona Architettura del calcolatore La prima decomposizione di un calcolatore è relativa a due macrocomponenti:

Dettagli

Modulo 3. Ecosistema Android

Modulo 3. Ecosistema Android Modulo 3 Ecosistema Android 3.1 Introduzione ad Android 3.1 Cos'è Android Sistema operativo open-source inizialmente pensato per dispositivi mobili e poi evolutosi. Attualmente leader del mercato...e lo

Dettagli

Laboratorio di Smart Vision and Sensor Networks. Niki Martinel Marco Vernier Dipartimento di Matematica e Informatica Università degli studi di Udine

Laboratorio di Smart Vision and Sensor Networks. Niki Martinel Marco Vernier Dipartimento di Matematica e Informatica Università degli studi di Udine + Laboratorio di Smart Vision and Sensor Networks Niki Martinel Marco Vernier Dipartimento di Matematica e Informatica Università degli studi di Udine Outline Lezione 1 - Il sistema operativo Android Cos

Dettagli

Strutture dei Sistemi Operativi

Strutture dei Sistemi Operativi Strutture dei Sistemi Operativi Componenti di sistema Servizi del sistema operativo Chiamate di sistema Programmi di sistema Struttura del sistema Macchine virtuali Progetto e implementazione di sistemi

Dettagli

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL STRUTTURA DEI SISTEMI OPERATIVI 3.1 Struttura dei Componenti Servizi di un sistema operativo System Call Programmi di sistema Struttura del sistema operativo Macchine virtuali Progettazione e Realizzazione

Dettagli

Informatica Documentale

Informatica Documentale Informatica Documentale Ivan Scagnetto (scagnett@dimi.uniud.it) Stanza 3, Nodo Sud Dipartimento di Matematica e Informatica Via delle Scienze, n. 206 33100 Udine Tel. 0432 558451 Ricevimento: giovedì,

Dettagli

DA DEFINIRE Sede del corso: Presso GI Formazione in Piazza IV novembre 5, Milano Orari dalle 9.00 alle 13.00 e dalle 14.00 alle 18.

DA DEFINIRE Sede del corso: Presso GI Formazione in Piazza IV novembre 5, Milano Orari dalle 9.00 alle 13.00 e dalle 14.00 alle 18. PERIODO : DA DEFINIRE Sede del corso: Presso GI Formazione in Piazza IV novembre 5, Milano Orari dalle 9.00 alle 13.00 e dalle 14.00 alle 18.00 A CHI E RIVOLTO IL CORSO Questo progetto si rivolge a tutti

Dettagli

FileMaker 8. Installazione dei driver client FileMaker 8 ODBC e JDBC

FileMaker 8. Installazione dei driver client FileMaker 8 ODBC e JDBC FileMaker 8 Installazione dei driver client FileMaker 8 ODBC e JDBC 2004-2005 Filemaker, Inc. Tutti i diritti riservati. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker

Dettagli

Manuale istruzioni. Software Vimar By-web per dispositivi mobili Android Manuale per l'uso

Manuale istruzioni. Software Vimar By-web per dispositivi mobili Android Manuale per l'uso Manuale istruzioni Software Vimar By-web per dispositivi mobili Android Manuale per l'uso Contratto di licenza Vimar con l'utente finale VIMAR SPA con sede in Marostica (VI), Viale Vicenza n. 14 (http://www.vimar.com),

Dettagli

UNIVERSITA DEGLI STUDI DI L AQUILAL FACOLTA DI INGEGNERIA Applicazioni per dispositivi mobili: gli strumenti di sviluppo di Flash Lite. Diego Vasarelli Indice degli argomenti trattati. Introduzione agli

Dettagli

Informatica. Prof. A. Longheu. Introduzione a Java

Informatica. Prof. A. Longheu. Introduzione a Java Informatica Prof. A. Longheu Introduzione a Java 1 Code-Name Green Nome del progetto Sun con l obiettivo di fornire intelligent consumer-electronic devices. Il risultato fu Oak Un linguaggio basato su

Dettagli

Corso di HTML. Prerequisiti. Modulo L3. 1-Concetti generali. Browser Rete Internet Client e server. M. Malatesta 1-Concetti generali-12 28/07/2013

Corso di HTML. Prerequisiti. Modulo L3. 1-Concetti generali. Browser Rete Internet Client e server. M. Malatesta 1-Concetti generali-12 28/07/2013 Corso di HTML Modulo L3 1-Concetti generali 1 Prerequisiti Browser Rete Internet Client e server 2 1 Introduzione In questa Unità introduciamo alcuni semplici elementi del linguaggio HTML, con il quale

Dettagli

Capitolo 1 Introduzione a Gambas

Capitolo 1 Introduzione a Gambas Capitolo 1 Introduzione a Gambas Gambas è stato creato inizialmente da Benoit Minisini, un residente della periferia di Parigi. Secondo Benoit, Gambas è un linguaggio Basic con estensioni per la programmazione

Dettagli

Guida per l utente di PrintMe Mobile 3.0

Guida per l utente di PrintMe Mobile 3.0 Guida per l utente di PrintMe Mobile 3.0 Descrizione del contenuto Informazioni su PrintMe Mobile Requisiti del sistema Stampa Soluzione dei problemi Informazioni su PrintMe Mobile PrintMe Mobile è una

Dettagli

Sistemi Operativi per Sistemi di Elaborazione Ubiqui

Sistemi Operativi per Sistemi di Elaborazione Ubiqui Griglie e Sistemi di Elaborazione Ubiqui Sistemi Operativi per Sistemi di Elaborazione Ubiqui Griglie e Sistemi Ubiqui - D. Talia - UNICAL 1 Sistemi Operativi per Ubiquitous Computing Palm OS Symbian OS

Dettagli

Fiery Network Controller per Xerox WorkCentre 7800 Series. Guida introduttiva

Fiery Network Controller per Xerox WorkCentre 7800 Series. Guida introduttiva Fiery Network Controller per Xerox WorkCentre 7800 Series Guida introduttiva 2013 Electronics For Imaging, Inc. Per questo prodotto, il trattamento delle informazioni contenute nella presente pubblicazione

Dettagli

Indice degli argomenti del s.o. Software. Software. Buona lezione a tutti!! SISTEMI OPERATIVI

Indice degli argomenti del s.o. Software. Software. Buona lezione a tutti!! SISTEMI OPERATIVI Buona lezione a tutti!! SISTEMI OPERATIVI Gli appunti sono disponibili per tutti gratis sul sito personale del Prof M. Simone al link: www.ascuoladi.135.it nella pagina web programmazione, sezione classi

Dettagli

1 PRIMI PASSI CON ANDROID

1 PRIMI PASSI CON ANDROID 1 PRIMI PASSI CON ANDROID Il primo passo nella realizzazione di un applicazione Android è l installazione dei tool e dell SDK. Se avete già prodotto una prima applicazione Android, farvi le congratulazioni

Dettagli

Installazione del Software. per lo Sviluppo di Applicazioni Java

Installazione del Software. per lo Sviluppo di Applicazioni Java Installazione del Software per lo Sviluppo di Applicazioni Java Ing. Luca Ferrari ferrari.luca@unimore.it Tel. 0592056142 Installazione del Software per lo Sviluppo di Applicazioni Java 1 Il Compilatore

Dettagli

Ambiente Zebra Link-OS versione 2.0

Ambiente Zebra Link-OS versione 2.0 Ambiente Zebra Link-OS versione 2.0 Per rispondere ad aspettative in costante evoluzione e soddisfare la crescente domanda di dispositivi mobili, intelligenti e connessi al cloud, Zebra Technologies ha

Dettagli

Aggiornamento Software e Firmware nuova release Datalogger

Aggiornamento Software e Firmware nuova release Datalogger Aggiornamento Software e Firmware nuova release Datalogger SISGEO ha recentemente rilasciato una nuova versione del software Smart Manager Suite che viene fornito con la nuova release dei Datalogger portatili

Dettagli

Approccio stratificato

Approccio stratificato Approccio stratificato Il sistema operativo è suddiviso in strati (livelli), ciascuno costruito sopra quelli inferiori. Il livello più basso (strato 0) è l hardware, il più alto (strato N) è l interfaccia

Dettagli

ERP Commercio e Servizi

ERP Commercio e Servizi ERP Commercio e Servizi Sistema informativo: una scelta strategica In questi ultimi anni hanno avuto grande affermazione nel mercato mondiale i cosiddetti sistemi software ERP. Tali sistemi sono in grado

Dettagli

PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE

PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE 1. JAVA 1.1 Introduzione a Java Introduzione Cosa è Java 1.2 Sintassi e programmazione strutturata variabili e metodi tipi di dati, array operatori

Dettagli

CORSO WEB SERVER, DBMS E SERVER FTP

CORSO WEB SERVER, DBMS E SERVER FTP CORSO WEB SERVER, DBMS E SERVER FTP DISPENSA LEZIONE 1 Autore D. Mondello Transazione di dati in una richiesta di sito web Quando viene effettuata la richiesta di un sito Internet su un browser, tramite

Dettagli

Il World Wide Web. Il Web. La nascita del Web. Le idee di base del Web

Il World Wide Web. Il Web. La nascita del Web. Le idee di base del Web Il World Wide Web Il Web Claudio Fornaro ver. 1.3 1 Il World Wide Web (ragnatela di estensione mondiale) o WWW o Web è un sistema di documenti ipertestuali collegati tra loro attraverso Internet Attraverso

Dettagli

LA TUA PRIMA APP CON CORDOVA

LA TUA PRIMA APP CON CORDOVA LA TUA PRIMA APP CON CORDOVA Dedicato a. Gianluca ed Enza, due persone speciali Autore: Gianpiero Fasulo www.gfasulo.it - Pag. 2 COPYRIGHT La tua prima APP con CORDOVA Tutti i diritti riservati. Nessuna

Dettagli