Programmazione Orientata ad Oggetti in JAVA per lo sviluppo di applicazioni GIS
Open Source al servizio di soluzioni stand-alone e Web
Brochure (non disponibile) Modulo di Iscrizione (non disponibile)
Il presente corso si propone l’obiettivo di sviluppare le capacità
di analisi e programmazione necessarie e funzionali allo sviluppo
di applicazioni di tipo spaziale. Attraverso un percorso graduale
ed ambizioso, il corso copre i concetti fondamentali alla base della
programmazione OO (Orientata ad Oggetti),
introducendo ed approfondendo
al contempo la sintassi ed i costrutti di programmazione di JAVA™ nel
contesto dello sviluppo di applicazioni di gestione, visualizzazione
ed interrogazione di dati geografici.
Linguaggio ormai consolidato nello sviluppo di applicazioni distribuite
in ambito Web, anche grazie alla sua naturale vocazione multi-piattaforma
(write once, run anywhere), JAVA™ si colloca infatti nel complesso
panorama dei linguaggi di sviluppo quale candidato ideale per l’apprendimento
delle moderne tecniche di programmazione. Pur condividendo con il
C++ parte della filosofia e della sintassi, JAVA™ si caratterizza però
per una ben più spiccata semplicità; ambiente ideale per l’apprendimento
ed approfondimento dei concetti chiave della programmazione OO, lo
studio di JAVA™ definisce le linee guida di sviluppo utili alla programmazione
con gli altri linguaggi ad oggetti, quali ad esempio Visual Basic
o PHP, e, nel contesto specifico dello sviluppo di applicazioni spaziali,
fornisce una chiave di accesso più matura ad ambienti emergenti quali
VBA/ArcObjects per ESRI ArcGIS 8/9.
Il corso adotta quale testo di riferimento “JAVA™ Programming for Spatial Sciences” di Jo Wood (City University, Londra), condividendone di fatto struttura logica ed obiettivi. Riconoscendo a tale testo chiarezza e finalità didattiche di grande pregio, questa scelta risponde alla esigenza fondamentale di mettere a disposizione dei partecipanti la documentazione irrinunciabile per un efficace approfondimento e consolidamento dei concetti trattati e dei progetti sviluppati.
Al termine del corso i partecipanti avranno acquisito una conoscenza approfondita delle problematiche e delle opportunità offerte dal paradigma di programmazione ad oggetti, della filosofia e della sintassi del linguaggio di programmazione JAVA™ e delle tecniche di sviluppo di applicazioni spaziali. Attraverso un percorso articolato, teorico e pratico, i partecipanti svilupperanno gradualmente le competenze necessarie allo sviluppo autonomo di due distinti progetti di tipo spaziale, focalizzati rispettivamente sulla programmazione evolutiva, funzionale alla modellazione della natura dinamica di molti fenomeni ambientali e sociali, e sull’accesso, interrogazione e visualizzazione di coperture geografiche di tipo vettoriale e raster, sia nell’ambito di applicazioni stand-alone che distribuite in ambiente Web.
Questo corso si colloca nell’ambito di un progetto ambizioso di formazione sui Sistemi Informativi Territoriali. Tali sistemi, anche noti come GIS dall’acronimo inglese Geographical Information Systems, si stanno gradualmente imponendo come strumenti di gestione, visualizzazione, interrogazione ed analisi di dati geografici nei domini professionali più disparati. Tra questi, il settore urbanistico (PRG), quello della pianificazione territoriale, quello del controllo ambientale sono solo alcuni degli esempi più rilevanti. In questo contesto, le esigenze di automazione e di personalizzazione della piattaforma software di base, ovvero di sviluppo di applicazioni stand-alone, sono sempre più rilevanti.
Programma del corso
Il corso verterà sui seguenti punti fondamentali, secondo un percorso teorico/pratico:
Introduzione ai concetti fondamentali della programmazione OO e dell’ingegneria software
- Breve introduzione agli obiettivi ed alla struttura del corso;
- Introduzione alla programmazione procedurale ed OO da un punto di vista storico, punti di forza di JAVA™ e suo ruolo nello sviluppo di applicazioni distribuite in ambiente Web;
- Classi ed oggetti. Definizioni, progettazione , stato e comportamento di una classe, instanziazione di oggetti. JAVA™ ed editor BlueJ: installazione, concetti fondamentali e riferimenti bibliografici;
- Progettazione di applicazioni: ingegneria software, UML e linee guida di best practice nella scrittura del codice;
- Variabili, tipi primitivi e typecasting.
- Classi vs. oggetti, instanziazione di oggetti, ereditarietà, metodi fondamentali (costruttori, accessor e mutator), messaggi e passaggio di parametri, metodi astratti ed interfacce;
- Classi grafiche (AWT e SWING) e sviluppo del classico programma di benvenuto al nuovo ambiente di sviluppo. Progettazione della struttura delle classi, in funzione degli obiettivi di programmazione e delle esigenze di riutilizzabilità, analisi dell’architettura delle relazioni ed implementazione del codice.
- Caso studio A: analisi, progettazione e sviluppo di una gerarchia di classi a partire dall’osservazione ed analisi della dinamica evolutiva di una singola formica in un contesto spaziale ristretto. L’analisi e la soluzione software del problema offrono l’opportunità di introdurre efficacemente e consolidare i concetti di modellazione orientata ad oggetti ed in particolare della ereditarietà, composizione ed implementazione di interfacce. L’esempio offre peraltro la prima opportunità di introdurre alla esigenza ed alla definizione concettuale (lo sviluppo del codice è demandato a fase successiva) di una classe spaziale, che consenta di modellizzare tanto la geografia del luogo che l’ubicazione (dinamica) dell’animale.
- Variabili ed operatori (aritmetici, logici), regole di precedenza, precisione, controlli di flusso per la realizzazione di iterazioni (loops di tipo for, do while e while do), nested loops, arrays monodimensionali e multidimensionali (dichiarazione ed inizializzazione), modello raster quale esempio di array multidimensionale, progettazione e gestione dinamica (laying out) di componenti grafiche (Flow, Border e Grid Layout);
- Caso studio B: analisi, progettazione e sviluppo della GUI (Graphical User Interface) di un programma di visualizzazione di una copertura raster, previa estensione della classe nativa JPanel, analisi dei problemi di trasformazione delle coordinate reali allo spazio video e della palette di colori, e gestione della disposizione degli elementi di interfaccia (display, visualizzazione metadata e comandi utente).
- Istruzioni ed operatori di gestione delle decisioni: if, if-else, nested if, switch, flow-through, break e default, operatori condizionali e linee guida per una corretta progettazione del flusso decisionale. Breve introduzione agli algoritmi di ordinamento (sorting) e cenni a quelli di ricerca (searching). Sviluppo di una classe elementare, basata sull’algoritmo Bubble Sort.
- Caso studio A: sviluppo della classe spaziale (Footprint), al momento limitata alla gestione di geometrie puntuali o rettangolari ed astrazione delle caratteristiche comuni ai modelli raster e vettoriale attraverso la definizione di una interfaccia comune (SpatialModel). In questo contesto introduzione al concetto di variabile di classe e sviluppo di un algoritmo elementare di analisi delle relazioni topologiche (separazione, adiacenza esterna o interna, intersezione, contenimento e coincidenza secondo una classificazione semplificata da Molenaar, 1998), sviluppato grazie all’utilizzo degli operatori di gestione delle decisioni.
- Controllo dello scopo delle variabili (locali, a livello di metodo, di tipo oggetto e classe) ed utilizzo dei modificatori (modifier) private, public e protected per controllarne la visibilità. Documentazione del codice JAVA™ mediante JAVA™doc, navigazione delle librerie (packages) di JAVA™ (awt, swing, event, util, io ed applet). Creazione ed archiviazione di nuovi packages, convenzioni sui nomi per evitare conflitti con librerie esistenti e gestione dei percorsi (classpaths).
- Caso studio A: creazione della GUI mediante utilizzo del package swing, sulla base del modello di delegazione (delegation model of event handling), funzionale ai requisiti di flessibilità dettati dalle eventuali esigenze di estensione ad altri approcci applicativi (quali l’utilizzo di awt ed applets). Nel contesto di un approccio rigorosamente OO, la gestione dell’output grafico è demandata alla responsabilità delle singole classi, focalizzando l’attenzione su che cosa disegnare, dove e quando farlo.
- Modellazione di oggetti spaziali vettoriali utilizzando array. Fondamenti teorici relativi alla creazione di gruppi dinamici, iterators e collections (List, Set, Map ed il loro equivalenti ordinati, SortedSet e SortedMap), TreeMap e HashMap e fondamenti di database connectivity. Sviluppo di un modello vettoriale più efficiente mediante collezioni dinamiche, basato sullo sviluppo delle nuove classi GISVector e VectorMap.
- Caso studio A: integrazione e completamento del modello mediante una programmazione evolutiva che tiene conto della complessità e della dinamica del processo in analisi. Il modello è esteso, attraverso l’aggiunta di cibo, la modellazione della colonia di formiche sotto forma di collezione di oggetti e la gestione del loro comportamento ed evoluzione (es. spostamento, nutrimento, trasporto), nonché l’aggiunta di una regina. Il progetto così completato si ripropone, attraverso l’analisi e la rappresentazione grafica dell’evoluzione di una colonia, capace di interagire con l’ambiente circostante e con le fonti di alimentazione e sviluppare comportamenti complessi, di focalizzare le potenzialità di JAVA™ quale di linguaggio di programmazione evolutiva, utile di fatto in contesti modellistica avanzati.
Controllo di eventi dinamici
- Definizione e gestione degli eventi (JAVA™ Delegated Events), creazione di Threads e loro utilizzo nella implementazione di interfacce grafiche. Analisi dei metodi propri della interfaccia WindowListener e delegated event handling nella gestione delle interazioni con la GUI. Esempi di implementazione funzionali a chiarire le ragioni e le peculiarità della programmazione basata su Threads: caso della classe Timer per il monitoraggio di eventi ad intervalli regolari.
- Caso studio B: ulteriore specializzazione della GUI (Graphical User Interface), funzionale alla visualizzazione sia di cartografia vettoriale che raster ed implementazione di event listeners per mantenere traccia del ridimensionamento delle finestre e gestire operazioni elementari di interrogazione spaziale tramite mouse. Integrazione del modello complessivo con informazioni testuali di documentazione (metadata), implementazione degli algoritmi di trasformazione spaziale da coordinate geografiche a schermo e gestione dell’output vettoriale ad elevata qualità, mediante l’utilizzo delle classi JAVA™2D.
- Streams di input e di output, standard input da tastiera, catching exceptions, apertura, lettura, scrittura e chiusura di files, interazione con il file system dall’interfaccia grafica, analisi di stringhe e object serialization.
- Caso studio B: integrazione della gestione file nell’applicazione spaziale, importazione di files testuali, serializzazione degli oggetti spaziali ed estensione della GUI. In questa sede vengono descritti e supportati due formati ASCII, il raster GRID di ArcInfo ed il vettoriale generico di GRASS, e vengono rese serializzabili e deserializzabili entrambi le classi vettoriali e raster, implementate nell’ambito del progetto.
- JAVA™ Applets, fondamenti di HTML (HyperText Markup Language), integrazione di Applets all’interno di pagine Web, passaggio di parametri, sicurezza e restrizioni proprie dei Browser. Sviluppo di un caso studio finalizzato alla creazione di un applet cartografico, con funzionalità elementari di interrogazione ed inserito (embedded) nel codice HTML.
- Fondamenti di XML (Extensible Markup Language), settaggio di JAVA™ per la gestione del XML, Document Object Model (DOM). Casi studio di conversione delle due applicazioni sviluppate nel corso del progetto all’ambiente Web, evidenziando le peculiarità
Software utilizzati
Suite di Office Automation MsOffice™, RDBMS MsAccess™ (www.microsoft.com), linguaggio di programmazione JAVA™™ (http://java.sun.com) ed ambiente di sviluppo BlueJ™ (www.bluej.org). Sia l’interprete JAVA™ che l’ambiente di sviluppo BlueJ™ sono accessibili gratuitamente e sono pertanto scaricabili ed utilizzabili dagli iscritti al corso.
A chi è indirizzato
Il corso è indirizzato a laureati e laureandi, funzionari, responsabili e dirigenti di enti pubblici e di società private, specialisti nello sviluppo di applicazioni di gestione, analisi e modellazione di dati spaziali, il corso coinvolge i domini professionali più disparati, tra i quali quello urbanistico/architettonico, della pianificazione territoriale e geologico/ambientale sono solo alcuni degli esempi più rilevanti.
E’ richiesta una conoscenza consolidata dell’ambiente PC/MsOffice™, una conoscenza di base delle problematiche GIS ed uno spiccato interesse personale per lo sviluppo di applicazioni; non è richiesta alcuna conoscenza pregressa di programmazione, pur essendo utili esperienze con linguaggi procedurali tradizionali.
La conoscenza ed esperienza applicativa su piattaforme GIS mature, quali la suite ESRI ArcView 3.x™ e/o ArcGIS 8.x/9™, Geomedia™, Grass™ o Idrisi™, possono aiutare nell’analisi degli algoritmi e nello sviluppo delle applicazioni, ma non rappresenta un prerequisito richiesto.
Si richiede invece un genuino interesse per i contenuti del corso ed una disponibilità ed impegno personale ad approfondirne e consolidarne gli obiettivi. Il corso offre in tal senso una forte vocazione didattica, supportata da un testo di assoluta rilevanza tecnica e scientifica e, non meno importante, una formula organizzativa che si ripropone l’obiettivo di garantire i tempi necessari ad un effettivo processo di apprendimento.
Sede e date
Da definire
Iscrizione e modalità di pagamento
Da definire
Attestato di frequenza
Al termine del corso verrà rilasciato un Attestato di Frequenza per ciascun partecipante che avrà frequentato almeno il 70% delle lezioni.
Materiale didattico e riferimenti bibliografici
Il corso adotta e fornisce ai partecipanti un volume, che costituisce un contributo specialistico unico nel panorama dello sviluppo di applicazioni spaziali: Wood J., 2002. JAVA programming for spatial sciences. Taylor & Francis, London, UK.
Esiste peraltro una ricca letteratura sulla programmazione in JAVA™ e molti testi, di grande valore tecnico/scientifico e didattico, contribuiscono in modo determinante nel rendere più agevole la curva di apprendimento del linguaggio e nel supportare il programmatore anche sugli aspetti più avanzati del linguaggio.
Pertanto, al di là della prima tappa obbligata del sito Sun dedicato alla rete di sviluppatori JAVA™ (http://java.sun.com), vogliamo indicare qui di seguito due volumi di grande utilità nel contesto di questo corso:
- Eckel B., 2002. Thinking in JAVA. Prentice-Hall, 3rd Edition, Scaricabile dal sito: http://www.mindview.net/Books/TIJ/
- Barnes D.J. e Kolling M., 2003. Programmare in JAVA con BLUEJ: Introduzione alla programmazione a oggetti. Addison-Wesley. Pearson Education Italia S.r.l., Milano
I partecipanti potranno peraltro trarre grande beneficio da molti altri testi classici dedicati alla programmazione procedurale o orientata ad oggetti. Per quanto riguarda la piattaforma ESRI ArcGIS 8/9™, citiamo qui di seguito i due testi fondamentali:
- Ormsby T., Napoleon E., Burke R., Groessl C. e Feaster L., 2001. Getting to know ArcGIS desktop: basics of ArcView, ArcEditor and ArcInfo. ESRI Press (include CDROM con una copia trial a tempo valida per 180 giorni di ArcGIS)
- Burke R., 2003. Getting to know ArcObjects – Programming ArcGIS with VBA. ESRI Press, Redlands, California (include CDROM con la raccolta completa dei modelli di ArcObjects, dati e risultati degli esercizi)
Informazioni
Per informazioni dettagliate sul programma del corso e sulla docenza, rivolgersi al Presidente dell'Associazione, all'indirizzo Email info@giscience.it o fare riferimento alla sezione contatti del sito Web www.giscience.it .