Skip to content

1. Introduzione

1.1. Contexte

Il codice PDF del documento è disponibile all'indirizzo |QUI|.

Gli esempi del documento sono disponibili |QUI|.

Questo documento è al tempo stesso un corso e un TD (Esercitazione) universitario. È destinato ai principianti. Si avvale delle seguenti fonti:

Riferimenti:

  1. Introduzione al linguaggio Java (1998);
  2. Lavorare con un database relazionale utilizzando l'ecosistema Spring (2015);

Indicheremo questi riferimenti rispettivamente come [ref1] e [ref2]. La fonte [ref1] è datata (2002) ma sufficiente per questo documento, in cui viene utilizzata solo per la presentazione della sintassi del linguaggio Java e delle sue operazioni di base. Il resto del materiale necessario alla realizzazione di TD è presentato in questo documento nei capitoli intitolati [Cours]. Questi capitoli provengono direttamente da [ref2] (2015) e sono stati in alcuni casi semplificati.

L’obiettivo del documento è insegnare il linguaggio Java in un’ottica professionale. Per questo motivo, ci basiamo in larga misura sul framework Spring [http://spring.io/], ampiamente utilizzato nello sviluppo JEE (Java Enterprise Edition). Logicamente, questo corso dovrebbe essere seguito da un corso JEE. È quanto avviene all’Istia (Università di Angers). JEE rappresenta attualmente (novembre 2015) la principale fonte di occupazione per i giovani sviluppatori con laurea magistrale. Nel mondo JEE esistono molte altre tecnologie oltre a Spring. Spring ha il vantaggio di essere comprensibile e, soprattutto, di fornire buone pratiche di codifica riutilizzabili al di fuori dell’ecosistema Spring. Questo spiega la sua scelta in questa sede.

Questo TD è in uso da oltre 10 anni e si è evoluto di pari passo con le tecnologie. È seguito (al IstiA) da un TD, JEE e [Introduction à Java EE]. Quest’ultimo, il TD, risale al 2012 (siamo nel 2015) e meriterebbe un aggiornamento. Presenta l’ortodossia JEE attraverso il framework web JSF2 (Java Server Faces) e i EJB3 (Enterprise Java Bean). Messi insieme, questi due TD hanno permesso a numerosi studenti di ottenere stage JEE nel settore ESN (aziende di servizi digitali) e di essere assunti subito dopo.

In questo documento non troverete una presentazione formale di tutti gli aspetti di Java. Nel corso degli anni, il modo in cui gli sviluppatori junior affrontano un problema è cambiato notevolmente. Ormai utilizzano quasi sistematicamente Internet per trovare frammenti di codice che, messi insieme, formano un programma. Se viene loro fornito un corso, lo utilizzano piuttosto poco e preferiscono ricorrere nuovamente a Internet. Inizialmente scettico su questo modo di lavorare, sono rimasto comunque sorpreso dai risultati ottenuti. Così, anche gli studenti con difficoltà riuscivano a produrre programmi funzionanti, mentre senza l’aiuto di Internet probabilmente non ci sarebbero riusciti. Ora mi affido a questo modo di lavorare.

I frammenti di codice non offrono una visione d’insieme dell’architettura di una soluzione, ed è proprio uno degli obiettivi di questo documento fornire tale visione. Gli studenti realizzano questo TD come un TP, in autonomia. Non ci sono lezioni frontali. È previsto un programma che indica loro lo stato di avanzamento atteso nel corso delle sessioni. Possono essere in ritardo o in anticipo rispetto a tale programma. Il loro avanzamento viene verificato tramite una serie di valutazioni che devono presentare al docente. Quest’ultimo è presente sia per fornire spiegazioni quando richiesto, sia per valutare il loro lavoro. Ognuno procede al proprio ritmo. Al termine delle 36 ore assegnate a questo TD, alcuni avranno completato il 50% di verifiche in più rispetto ad altri, ma ciascuno, almeno questo è l’obiettivo, avrà compreso ciò che ha svolto in autonomia. Questo TD può essere svolto senza l’accompagnamento di un docente. Ecco perché è disponibile su [https://stahe.github.io].

Questo documento non è adatto a chi è alla ricerca di un corso accademico su Java, ovvero qualcosa in cui Java venga spiegato in modo progressivo e strutturato e in cui ogni dettaglio della sintassi sia illustrato e motivato. Si tratta piuttosto di un approccio sperimentale. È probabile che lo studente non comprenda tutto ciò che gli viene proposto nel documento, ma saprà probabilmente riutilizzarne il contenuto in modo appropriato e la comprensione dei dettagli arriverà con l’esperienza.

Questo documento non è nemmeno un corso di algoritmi. L’algoritmo del TD è elementare e può essere risolto da qualsiasi principiante che stia seguendo i suoi primi corsi di algoritmi. Il documento è incentrato sull’ambiente di sviluppo professionale in Java, con le sue numerose librerie e framework, e sull’architettura del codice. La maggior parte degli studenti che vedo passare presenta delle lacune in materia di algoritmi, che vengono poi confermate dai tutor di tirocinio. Quindi sì, la padronanza degli algoritmi è importante, ma non è l’oggetto di questo corso-TD.

Infine, questo documento (dicembre 2015) non presenta le ultime novità di Java, in particolare gli stream e le funzioni lambda. Tuttavia, vi si utilizzano alcuni elementi dell’ultimo JDK, il JDK 1.8, e i codici che seguono devono essere compilati con questo JDK.

1.2. Contenu

Il capitolo 2 presenta l'argomento TD, ovvero il calcolo dei risultati elettorali. Il problema è semplice. Il capitolo 2 richiede di implementare la soluzione utilizzando due linguaggi, C# e Java, che sono molto simili. L'implementazione avviene senza classi. L'obiettivo è presentare la sintassi di Java, le sue istruzioni di base e l'IDE (Integrated Development Environment) Eclipse, utilizzato per sviluppare progetti Java.

Il capitolo 3 richiede di implementare la soluzione del TD in Java utilizzando le classi. L’obiettivo è presentare i concetti di classi, ereditarietà, interfacce e classi generiche. Viene introdotto il concetto di test unitario JUnit.

Il capitolo 4 introduce i concetti alla base dei capitoli successivi:

  • le architetture a livelli;
  • la programmazione tramite interfacce;
  • l'utilizzo di Spring per implementare i due concetti precedenti;

Image

Il capitolo 5 presenta il framework Spring attraverso quattro progetti.

Il capitolo 6 presenta l'API JDBC, che è un'interfaccia di accesso ai database.

Il capitolo 7 implementa il livello [DAO] (Data Access Object) del TD con il API JDBC e Spring.

Image

Il capitolo 8 implementa il livello [métier] del TD:

Image

Il capitolo 9 implementa il livello [ui] del TD con un'applicazione da console:

Image

Il capitolo 10 implementa il livello [ui] del TD con un'applicazione grafica che utilizza la libreria di componenti Swing:

Image

Image

Il capitolo 11 presenta la gestione dei database con il framework [Spring Data], un ramo dell'ecosistema Spring. Viene introdotta la specifica JPA (Java Persistence API) che consente al livello [DAO] di manipolare oggetti anziché il SQL (Structured Query Language). L’architettura a livelli si evolve come segue:

Image

Il capitolo 12 applica quanto illustrato nel capitolo 11 implementando l’accesso al database del TD tramite [Spring Data].

Il capitolo 13 mostra come esporre un database sul web con [Spring MVC], che rappresenta un altro ramo dell’ecosistema Spring. L’architettura si evolve in un’architettura client/server:

Image

I capitoli 14 e 15 trasformano l’applicazione di TD in un’applicazione client/server:

Image

Il capitolo 16 illustra come proteggere l’accesso a un’applicazione web con [Spring Security], un altro ramo dell’ecosistema Spring.

Image

Il capitolo 17 riprende il TD e rende sicuro il servizio web dedicato alle elezioni.

Il capitolo 18 affronta il problema delle richieste interdominio:

  • in [1], un’applicazione web fornisce pagine HTML / JavaScript;
  • in [2], il browser esegue il Javascript incorporato nelle pagine HTML per interrogare il servizio web protetto [3-4];

Supponiamo che D1=http://machine1:port1 sia il dominio del server [1] e che D4=http://machine4:port4 sia il dominio del server [4]. Se i server [1] e [4] non si trovano nello stesso dominio [D1!=D4], allora le richieste da [3] a [4] sono definite richieste interdominio. A causa delle restrizioni di sicurezza implementate dai browser, la loro configurazione può risultare problematica. Esamineremo una soluzione.

Il capitolo 19 implementa le richieste tra domini diversi utilizzando l’applicazione dedicata alle elezioni.

1.3. Gli strumenti utilizzati

Gli esempi che seguono sono stati testati nel seguente ambiente:

  • computer con Windows 10 Pro a 64 bit;
  • JDK 1.8 (paragrafo 22.1);
  • IDE Spring Tool Suite 3.6.3 (paragrafo 1);
  • NetBeans 8.1 (paragrafo 22.4);
  • browser Chrome (non sono stati utilizzati altri browser);
  • estensione Chrome [Advanced Rest Client] (paragrafo 1);
  • WampServer che include SGBD, MySQL e lo strumento [PhpMyAdmin] per la sua gestione (paragrafo 22.7);

È importante utilizzare una versione 1.8 di JDK. Alcuni esempi utilizzano elementi di questa versione di JDK. La maggior parte degli esempi sono progetti Maven che possono essere aperti indifferentemente con IDE, Eclipse [https://www.eclipse.org/], IntellijIDEA Community Edition, [https://www.jetbrains.com/idea/download/] e NetBeans [https://netbeans.org/]. Di seguito, le schermate provengono da IDE Spring Tool Suite, una variante di Eclipse.

1.4. Supporto

I progetti Eclipse citati in questo documento sono disponibili sul sito [https://tahe.developpez.com/tutoriels-cours/intro-java-spring/serge-tahe-introduction-au-langage-java-et-a-l-ecosysteme-spring/].

Per importare i progetti di un capitolo, procedere con Eclipse come indicato in [1-8]:

La maggior parte dei progetti sono progetti Maven. Se dopo il caricamento presentano degli errori, eseguire [Alt-F5] e seguire la procedura descritta in [9-10]. I progetti Maven selezionati verranno ricompilati.