Swagger: Documentare un Web Services Rest

Swagger è un progetto open source utilizzato per generare la documentazione per microservizi. Fornisce un’interfaccia utente per accedere ai nostri servizi web RESTful tramite browser. Per abilitare Swagger nell’applicazione Spring Boot, è necessario aggiungere le seguenti dipendenze nel pom.xml

<!-- SWAGGER 2 -->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.9.2</version>
		</dependency>
		<dependency>h
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.9.2</version>
		</dependency>
Continua a leggere

Test Su Classi Avanzato

1. Si vuole rappresentare un insieme di studenti tramite il tipo di dato astratto StudentSet. Un contenitore di tipo StudentSet conterr`a oggetti di tipo Student, dove la classe Student rappresenta le informazioni
relative ad un singolo studente (numero di matricola, cognome, nome).
Il candidato ha a disposizione il file StudentSetTester.java, il quale contiene classi ed interfacce
da utilizzare e/o completare secondo quanto qui indicato:
• StudentSet. Interfaccia che rappresenta il tipo di dati astratto “insieme di studenti”. Contiene
firme e specifiche di funzionamento dei metodi. Non modificare.
• Student. Classe che rappresenta le informazioni relative ad un singolo studente. La classe realizza
l’interfaccia Comparable, dove l’ordinamento di oggetti di tipo Student `e quello indotto dai numeri
di matricola. Inoltre la classe sovrascrive il metodo toString. Non modificare.
• ArrayStudentset. Classe che implementa l’interfaccia StudentSet. Completare la classe
scrivendone la parte privata e realizzandone i metodi pubblici. Verranno considerate ottime le
soluzioni per cui il metodo contains ha prestazioni O(log n) e il metodo intersection ha prestazioni
O(n log n). La classe deve inoltre sovrascrivere il metodo toString, che restituisca una stringa
contenente gli elementi dell’insieme di studenti secondo il seguente formato: (1) i dati di ogni elemento Student vengono scritti ciascuno su una riga diversa, e (2) all’interno di ogni riga i campi
“matricola”, “cognome” e “nome” sono separati da uno spazio.
• StudentSetTester. Classe che collauda l’insieme di studenti. Completare la classe in modo
che il suo metodo main realizzi il seguente comportamento:
– Due nomi di file di testo, file1 e file2 (scritti nello stesso formato specificato sopra per il metodo
toString di ArrayStudentSet), vengono passati come argomenti sulla riga di comando.
– Vengono creati due esemplari della classe ArrayStudentSet. Nel primo vengono inseriti
elementi letti dal file file1 (contenente gli studenti che frequentano il corso di Fond. di Informatica 1); nel secondo vengono inseriti gli elementi letti dal file file2 (contenente gli studenti
che frequentano il corso di Matematica A)
– Viene calcolato, tramite invocazione del metodo intersection, l’insieme degli studenti che frequentano entrambi i corsi, e l’elenco di tali studenti viene visualizzato sull’output standard.
Nello svolgimento si possono usare, se ritenute utili, solo le seguenti classi della libreria standard:
• tutte le classi dei package java.lang e java.io;
• le classi Scanner, StringTokenizer e NoSuchElementException del package java.util.

2. Gestionale per officina. Ogni officina è riconoscibile da un nome e una sede.
In ognuno di essa ci possono essere vari mezzi, auto e camion.
Per ogni auto, ci interessa sapere marca, modello, colore, targa, tipo di problema, costo riparazione.
Per ogni camion, ci interessa sapere marca, modello, colore, targa, presenza rimorchio, tipo di problema, costo riparazione.
Ci interessa avere uno storico con tutti i mezzi che sono stati riparati, con tutte le relative informazioni.

3. Progettare una applicazione per la gestione di squadre e giocatori di un campionato di calcio. I giocatori sono caratterizzati da un nome (una stringa) ed un anno di nascita (un intero). Le squadre sono caratterizzate da un nome (una stringa). In una squadra giocano almeno 15 giocatori. Tra i giocatori che giocano in una squadra uno gioca nel ruolo di capitano. Le squadre si incontrano tra di loro in partite, di cui interessa conoscere quale squadra gioca in casa e quale in trasferta, ed il risultato (due interi: uno per la squadra di casa ed uno per la squadra in trasferta). Data una squadra si vuole conoscere le squadre con cui si è incontrata, sia in casa che in trasferta.

4. Si vuole fornire una parziale realizzazione di una agenda elettronica, che consenta di memorizzare un insieme
di impegni. Gli impegni memorizzati nell’agenda saranno coppie di tipo “chiave valore”, dove il campo chiave
`e un numero in formato int che specifica il livello di priorit`a di un impegno mentre il campo valore `e una
stringa contenente un promemoria dell’impegno. Si assume di utilizzare quattro livelli di priorit`a, da 0 a 3
estremi inclusi, dove il livello 0 significa “massima priorit`a” ed il livello 3 significa “minima priorit`a”.
Il candidato ha a disposizione il file AgendaTester.java, il quale contiene classi e interfacce da utilizzare
e/o completare secondo quanto qui indicato:
• PriorityQueue. Interfaccia che definisce il tipo di dati astratto “coda di priorit`a”. Leggere con
attenzione i commenti all’interfaccia ed ai suoi metodi. Non modificare.
• EmptyQueueException. Eccezione che segnala che la coda di priorit`a `e vuota. Non modificare.
• Agenda. Classe che implementa l’interfaccia PriorityQueue. Completare la classe scrivendone
la parte privata e realizzandone i metodi pubblici. L’agenda conterr`a coppie di tipo “chiave valore”
appartenenti alla classe Impegno, realizzata come classe interna di Agenda e il cui codice non va
modificato. Si richiede inoltre di realizzare un metodo toString per la classe Agenda, che
restituisca una stringa contenente gli elementi secondo il seguente formato: (1) ogni coppia viene
scritta su una riga diversa, e (2) all’interno di ogni riga la coppia viene scritta seguendo il formato
specificato dal metodo toString della classe Impegno (si veda il corpo di tale metodo).
• AgendaTester. Classe che collauda l’agenda. Completare la classe in modo che il suo metodo
main realizzi il seguente comportamento:
– Crea un oggetto di tipo Agenda, vuoto.
– Accetta ripetutamente comandi dall’utente, introdotti da tastiera, finch`e l’utente non introduce
il comando di terminazione del programma. I comandi disponibili sono:
Comando Significato
“I” Inserisce un impegno. In questo caso il programma chiede di inserire da tastiera una riga
di testo nel formato “chiave valore”, ed inserisce l’impegno nell’agenda (ad es. la riga
“0 Studiare polimorfismo!” inserisce un impegno con priorit`a 0 e promemoria “Studiare
polimorfismo!”).
“R” Rimuove il primo impegno di priorit`a massima (ovvero chiave=0). In questo caso il
programma rimuove l’impegno dall’agenda e ne stampa il promemoria a standard output.
“L” Legge il primo impegno di priorit`a massima. In questo caso il programma stampa il
promemoria dell’impegno a standard output (senza rimuovere l’impegno dall’agenda).
“Q” Termina (Quit) il programma.
– Dopo ognuna delle operazioni sopra elencate stampa il contenuto aggiornato dell’agenda.
Nello svolgimento si possono usare, se ritenute utili, solo le seguenti classi della libreria standard:
• tutte le classi dei package java.lang e java.io;
• le classi Scanner, StringTokenizer e NoSuchElementException del package java.util

5. Gestionale per shopping online. Si deve poter gestire i prodotti, con le quantità disponibili, i clienti, gli ordini. Ogni ordine può essere in stato da completare, completato e pagato.

6. Creare un gestionale per gli impiegati ed i progetti di una azienda.
Degli impiegati interessa il codice fiscale, il nome, il cognome, i dipartimenti a cui appartengono, ed i progetti ai quali partecipano.
Un impiegato può appartenere a uno, o a più dipartimenti. Dei progetti interessa il nome, il budget, e la città (se stabilita) in cui vengono realizzati.
Il nome di un progetto non può essere cambiato.
Dei dipartimenti interessa il nome, il numero di telefono, l’impiegato che li dirige (se presente), e la città dove è localizzata la sede.
Delle città interessa il nome e la regione (una stringa).
Creare tutte le operazioni necessarie per il corretto utilizzo del gestionale, quindi tutti i CRUD per impiegato, progetto, dipartimento, con le ricerche che si ritiene opportune

7. Si scriva un programma in Java per la gestione di un magazzino. Il programma deve leggere da un
file di testo stock.txt i prodotti da immagazzinare. I prodotti possono essere di due tipi: tablet e
smartphone. Il file stock.txt ha un prodotto per riga: il primo carattere è t per indicare un tablet e s
per smartphone. Dopo il primo carattere ci sono uno o più spazi e poi le informazioni sui prodotti.
Per i tablet, il primo carattere è seguito dal nome del modello (stringa priva di spazi), il produttore
(stringa priva di spazi), la dimensione dello schermo in pollici (double), il peso in grammi (intero) e
un codice identificativo (intero).
Per gli smartphone, il primo carattere è seguito dal nome del modello (stringa priva di spazi), il
produttore (stringa priva di spazi), la dimensione dello schermo in pollici (double), la generazione
(3G o 4G) e un codice identificativo (intero).
1. Il programma magazzino deve leggere il seguente file stock.txt:
t Galaxy-tab Samsung 10.0 200 1231314
s Galaxy-S-4 Samsung 4.5 4G 5326354
t IPadAir Apple 9.3 120 6365464
s IPhone5 Apple 4.5 3G 9845344
s IPhone6 Apple 5.0 4G 3242342
s IPhone6 Apple 5.0 4G 6456546
t Galaxy-tab Samsung 10.0 200 6456457
s Galaxy-S-4 Samsung 4.5 4G 6547512
e memorizzare i prodotti.
2. Il programma deve inoltre stampare a video il contenuto del magazzino in una tabella con
queste intestazioni:
Codice Marca Modello Schermo Peso Generazione
Per gli attributi che non si applicano ad un prodotto (Peso per gli smartphone e Generazione
per i tablet) si stampi “-” .
3. Il programma deve inoltre stampare a video l’elenco dei modelli presenti in magazzino e,
per ogni modello, il numero di pezzi presenti.
Il programma deve sfruttare incapsulamento e astrazione al massimo grado.
Il programma deve avere una interfaccia testuale che usi la console.

8. Si vuole realizzare un “codificatore”, ovvero un dizionario che contiene coppie di tipo “parola codice” in
cui il campo “parola” `e una stringa che ha la funzione di chiave per il dizionario ed il campo “codice” `e
anch’esso una stringa che rappresenta una parola cifrata associata alla parola di partenza. Si assume che
entrambe le stringhe, parola e codice, non contengano caratteri delimitatori.
Un codificatore pu`o essere usato per cifrare un messaggio tramite la seguente procedura:
1. le parole del messaggio che sono contenute nel codificatore vengono sostituite dai relativi codici;
2. le parole che non sono contenute nel codificatore vengono lasciate inalterate.
Inoltre un codificatore pu`o essere invertito, ovvero `e possibile creare un decodificatore (codificatore inverso)
ad esso associato, tramite cui un messaggio cifrato pu`o essere decifrato, ovvero riconvertito nell’originale.
Esempio: dato un codificatore che contiene le due coppie (007 bimbo), (missione gita), e dato il
messaggio “Inviare 007 in missione”, allora il messaggio cifrato `e “Inviare bimbo in gita”.
Il candidato ha a disposizione il file CodificatoreTester.java, il quale contiene classi e interfacce da
utilizzare e/o completare secondo quanto qui indicato:
• InvertibleDictionary. Interfaccia che rappresenta il tipo di dato astratto “dizionario invertibile”.
Leggere con attenzione i commenti all’interfaccia ed ai suoi metodi. Non modificare.
• DictionaryItemNotFoundException. Eccezione lanciata in caso di mancato ritrovamento di una
coppia nel dizionario. Non modificare.
• Codificatore. Classe che implementa l’interfaccia InvertibleDictionary. Completare la classe
scrivendone la parte privata e realizzandone i metodi pubblici. Un codificatore conterr`a coppie di tipo
“parola codice” appartenenti alla classe StringPair, realizzata come classe interna di Codificatore
e il cui codice non va modificato. Si richiede inoltre di realizzare un metodo toString per
la classe, che restituisca una stringa contenente gli elementi secondo il seguente formato: (1) ogni
coppia viene scritta su una riga diversa, e (2) all’interno di ogni riga la coppia viene scritta seguendo
il formato specificato dal metodo toString della classe StringPair (si veda il corpo di tale metodo).
• CodificatoreTester. Completare la classe in modo che il suo metodo main realizzi il seguente
comportamento:
– riceve un nome di file di testo, file1, come argomento sulla riga di comando;
– crea un oggetto c1 di tipo Codificatore e vi inserisce coppie lette dal file file1 (scritto nello
stesso formato specificato pi`u sopra per il metodo toString di Codificatore);
– legge un messaggio m1 (scritto su una singola riga) dallo standard input, crea un messaggio
cifrato m2 tramite l’oggetto codificatore appena creato, e visualizza m2 a standard output;
– crea il codificatore inverso c2 di c1, usando il metodo invert della classe Codificatore;
– crea un messaggio decifrato m3, ottenuto cifrando m2 tramite il codificatore inverso, e visualizza
m3 a standard output (affinch´e l’esecuzione sia corretta m3 deve coincidere con m1).
Nello svolgimento si possono usare, se ritenute utili, solo le seguenti classi della libreria standard:
• tutte le classi dei package java.lang e java.io;
• le classi Scanner, StringTokenizer e NoSuchElementException del package java.util.

9. L’applicazione da realizzare riguarda la gestione di gare ciclistiche.
Ogni gara è caratterizzata dal nome (stringa) e dalla distanza partenza-traguardo, misurata in chilometri, e dalla data di svolgimento.
Ad una gara partecipano almeno due ciclisti, ciascuno caratterizzato dal proprio nome.
Un ciclista può partecipare solo ad una gara per volta.
Per ogni gara e per ciascun ciclista che vi partecipa, si deve sapere quanti chilometri il ciclista ha percorso nella gara. Tra i ciclisti che partecipano ad una gara, alcuni sono vincitori. Ogni gara ha almeno un vincitore.

10. Si vuole gestire un elenco di studenti realizzando un dizionario che contiene coppie di tipo “matricola
nome”. Il campo “matricola” `e un numero intero in formato long che ha la funzione di chiave per il
dizionario (non possono esistere due matricole uguali), mentre il campo “nome” `e una stringa composta
da una o pi`u parole che rappresenta il nome dello studente associato a ciascuna matricola.
Il candidato ha a disposizione il file StudentiTester.java, il quale contiene classi e interfacce da
utilizzare e/o completare secondo quanto qui indicato:
• Dictionary. Interfaccia che rappresenta il tipo di dati astratto dizionario, contiene le firme dei
metodi e le specifiche del loro funzionamento. Non modificare.
• DictionaryItemNotFoundException. Eccezione lanciata in caso di mancato ritrovamento di
una coppia nel dizionario. Non modificare.
• Studenti. Classe che implementa l’interfaccia Dictionary. Completare la classe scrivendone
la parte privata e realizzandone i metodi pubblici. La classe Studenti conterr`a coppie di tipo
“matricola nome” appartenenti alla classe Pair, realizzata come classe interna alla classe Studenti
e il cui codice non va modificato. Si richiede che il metodo find() abbia prestazioni O(log
n). Si richiede inoltre di realizzare un metodo toString per la classe Studenti, che restituisca
una stringa contenente gli elementi secondo il seguente formato: (1) ogni coppia “matricola nome”
viene scritta su una riga diversa, e (2) all’interno di ogni riga la coppia viene scritta seguendo il
formato specificato dal metodo toString della classe Pair (si veda il corpo di tale metodo).
• StudentiTester. Classe di collaudo. Completare la classe in modo che il suo metodo main
realizzi il seguente comportamento:
– Due nomi di file di testo, file1 e file2, vengono passati come argomenti sulla riga di comando.
– Vengono creati due oggetti di tipo Studenti. Nel primo si inseriscono elementi letti dal file
file1 (scritto nello stesso formato specificato sopra per il metodo toString di Studenti).
– Viene richiesta l’immisione di un numero di matricola da input standard. Il numero immesso
viene cercato nel primo elenco di studenti e la corrispondente coppia “matricola nome” viene
(se trovata) spostata dal primo al secondo elenco di studenti (ovvero rimossa dal primo e
inserita nel secondo elenco).
– L’operazione descritta al punto precedente pu`o essere ripetuta un numero non prefissato di
volte. Il ciclo viene terminato tramite inserimento del carattere “Q” da input standard.
– Al termine delle ricerche effettuate dall’utente, il contenuto del secondo elenco viene stampato
sul file file2 (nello stesso formato specificato sopra per il metodo toString di Studenti).
Nello svolgimento si possono usare, se ritenute utili, solo le seguenti classi della libreria standard:
• tutte le classi dei package java.lang e java.io;
• le classi Scanner, StringTokenizer e NoSuchElementException del package java.util.


Question 1 of 10

Spring Boot Application Properties File

I file di properties vengono utilizzati per dichiarare le proprietà dell’applicazione. In Spring Boot, il file usato per questo scopo è application.properties, si trova nella directory src / main / resources:

Di default è vuoto. Possiamo ad esempio inserire le seguenti proprietà:

server.port = 8085
spring.application.name = helloworldservice
Continua a leggere

Introduzione Spring Boot e Microservizi

Introduzione a Spring Boot e Microservizi

L’architettura a microservizi consiste nel dividere un’unica applicazione monolitica in tante piccole mini applicazioni, appunto detti microservizi.

Ogni microservizio deve saper svolgere un solo compito, o una serie di piccoli compiti inerenti ad esso.
La collaborazione tra questi microservizi genera il servizio finale che diamo all’utente.

Questo semplice principio scatena una serie di corollari, alcuni vantaggiosi, altri un po’ meno. Per esempio:

Continua a leggere

Amplificatori Operazionali in 5 minuti

Amplificatori Operazionali

Gli amplificatori operazionali sono dispositivi elettronici il cui nome deriva dal fatto che, inizialmente, questi componenti venivano usati per svolgere operazioni matematiche come addizioni, sottrazioni, moltiplicazioni, derivate e integrali.

Dal punto di vista funzionale, può essere definito come un amplificatore di tensione differenziale, ossia un dispositivo in grado di fornire, in uscita, una tensione proporzionale (amplificata o attenuata) alla differenza di tensione fornita ai due terminali di ingresso.

Il simbolo circuitale è:

Amplificatore Operazionale

​V+ è detto ingresso non invertente, V- ingresso invertente.

Questo perché, se applichiamo una tensione maggiore all’ingresso -,  la tensione di uscita, Vo, avrà il verso  contrario a  V-.

Viceversa, applicando una tensione maggiore all’ingresso +, Vo avrà lo stesso verso di V+.

Continua a leggere

Tutorial Java-Pratico

Download EBOOK Java Pratico GRATIS

Breve guida adatta a chi si sta avvicinando al mondo della programmazione.
FREE DOWNLOAD

Send download link to: