# data[].attributes.attachment_link.readable_text
Imparare a programmare in Java significa padroneggiare uno dei linguaggi più diffusi in tutti gli ambiti dell'informatica: dallo sviluppo mobile (Android) alle applicazioni Enterprise, dal desktop al Web, applicando l'approccio di sviluppo e progettazione orientati agli oggetti che ha segnato gli standard industriali degli ultimi venti anni. (Nuova Edizione con Java 8!)

Primo contatto

Tipi e costrutti del linguaggio

Fondamenti di OOP in Java

Generics in Java

Gestione delle date in Java

Multithreading

Mappe e Collezioni

Classi per lo streaming input/output

Gestione File

Creare interfacce grafiche con Java

HashMap, HashTable e TreeMap in Java

JDBC: Java e database relazionali

Java e NoSQL

Interfacce funzionali, metodi e costruttori

Espressioni Lambda e Streams

Parallel programming: Fork/Join framework

Guida Java 6 (edizione precedente)

Edizione precedente (2006)

# data[].attributes.attachment_link.description
Imparare a programmare in Java significa padroneggiare uno dei linguaggi più diffusi in tutti gli ambiti dell'informatica: dallo sviluppo mobile (Android) alle applicazioni Enterprise, dal desktop al Web, applicando l'approccio di sviluppo e progettazione orientati agli oggetti che ha segnato gli standard industriali degli ultimi venti anni. (Nuova Edizione con Java 8!)

# data[].attributes.attachment_link.description
I linguaggi naturali sono ridondanti. Rendere ridondante un'informazione serve a renderla più "robusta". Anche in internet tutto funziona grazie alla ridondanza. Ne parliamo con Alessandro Bogliono....

# data[].attributes.body
Scrivere un programma Java che permette di

determinare la lunghezza di una stringa

estrarre dalla stringa la lettera che occupa una determinata posizione

visualizzare  i caratteri di una stringa che si trovano in posizione dispari e siano diversi dallo spazio

determinare quante volte si ripete un determinato carattere

# data[].attributes.attachment_link.description
In questo caso "Sono una sequenza di caratteri" è un letterale di tipo stringa, che è costituito da una sequenza di caratteri racchiusi da doppi apici. Ogni qualvolta il compilatore trova un letterale di tipo stringa crea un oggetto String con i lsuo valore - in questo caso Sono una sequenza di caratteri.

# data[].attributes.attachment_link.description
Esempio 22, Esempio 23, Esempio 34, Esempio 35 Promemoria Trucco Esercizi da svolgere

# data[].attributes.body
22/04/2018
Scrivere un programma Java che dati tre vettori paralleli contenenti parole corrispondenti in tre lingue, dopo averli ordinati alfabeticamente rispetto ad una lingua, data una parola X la ricerchi nel vettore ordinato e visualizzi la traduzione nelle altre due lingue.

# data[].attributes.body
| 1.    Dichiara e crea (separatamente) 3 vettori contenenti dei numeri interi, dei prezzi e dei nomi    La dichiarazione e la creazione possono essere effettuati contemporaneamente? Come? Fa almeno un esempio

| 4.    Dichiara due vettori e poi, dopo averne caricato uno copia il suo contenuto nell’altro array.
| 5.    Usa i due vettori dichiarati nell’esercizio precedente e copia in ordine inverso il contenuto del primo vettore nel secondo vettore.

# data[].attributes.attachment_link.readable_text
La web app che trovate in questa pagina vi permette di ascoltare il suono e osservare la danza degli algoritmi quotidiani. Sono gli stessi algoritmi che di solito lavorano in silenzio per rispondere ad un nostro click, o che noi stessi applichiamo più o meno consapevolmente nella vita di tutti i giorni. Ora li potete osservare e ascoltare per comprenderli meglio.

Come funziona

Quando lanciate l'applicazione vengono generati 100 numeri casuali, rappresentati da sinistra a destra come tante palline appese a sottili fili, tanto più lunghi quanto più grandi sono i numeri che rappresentano.

Se volete aumentare o diminuire la quantità di palline, potete usare le grandi frecce azzurre e premere il tasto centrale. Se invece volete rimescolarli potete cliccare sulle due frecce rosse incrociate.

Per cercare una pallina appesa ad una certa altezza cliccate due volte sullo schermo (in una posizione in cui non ci siano pulsanti attivi) per indicare l'intervallo di altezze entro cui effettuare la ricerca. Un algoritmo di ricerca individuerà per voi la pallina che cercate, evidenziando in rosso i tentativi di ricerca e in verde la soluzione trovata (se esiste). Se le palline non sono in ordine verrà effettuata una ricerca sequenziale, altrimenti una ricerca dicotomica.

Per mettere le palline in ordine di altezza potete cliccare su uno qualsiasi dei triangoli colorati. Corrispondono ad algoritmi di ordinamento diversi: il tasto blu è il Selection sort, il tasto verde è l' Insertion sort, il tasto giallo è il Bubble sort, il tasto rosso è il Merge sort. Sono tutti equivalenti (producono lo stesso risultato), ma hanno efficienza diversa. Metteteli alla prova.

Se volete mettere le palline in ordine crescente o decrescente di altezza potete cliccare sull'icona nera in basso a destra e rilanciare un qualsiasi algoritmo di ordinamento.

I contatori che appaiono in basso a sinistra mostrano il numero di confronti e il numero di scambi effettuati dall'algoritmo che avete scelto di utilizzare. Osservandoli potete mettere a confronto l'efficienza dei diversi algoritmi.

La danza

Durante l'esecuzione di ogni algoritmo di ricerca o di ordinamento, l'applicazione ne mostra il funzionamento evidenziando in rosso le palline prese in considerazione e aggiornando la rappresentazione ad ogni scambio.

Potete disabilitare (e riabilitare) la visualizzazione dei passaggi intermedi cliccando sull'icona dell'occhio.

Il suono

Per far suonare gli algoritmi ho preso il campionamento del suono emesso da 64 tasti di un pianoforte e li ho associati alle lunghezze dei fili, distribuendoli uniformemente dal più lungo (suono più grave) al più corto (suono più acuto).

L'app emette tutti i suoni associati alle palline prese in considerazione dall'algoritmo.

Potete disabilitare (e riabilitare) la riproduzione dei suoni cliccando sull'icona delle note musicali.

Cosa ci insegna

L'App ci aiuta a comprendere il principio di funzionamento dei 6 algoritmi che implementa e ad apprezzarne i punti di forza e di debolezza:

Vedendoli in funzione possiamo comprendere in che ordine prendono in considerazioni gli elementi e cercare di riconoscere il comportamento ciclico della ricerca sequenziale, il comportamento ricorsivo della ricerca dicotomica e del merge sort, i due cicli nidificati del Selection sort, dell'Insertion sort e del Bubble sort

Ascoltando l'altezza dei suoni emessi e la frequenza con cui vengono riproposte le stesse note possiamo comprendere l'alternanza dei cicli.

Apprezzandone la durata possiamo confrontarne l'efficienza.

Osservando i contatori possiamo misurare accuratamente il numero di passi necessari ad ottenere la soluzione.

Rigenerando l'insieme di palline possiamo verificare la dipendenza del tempo di esecuzione dai dati del problema.

Come è fatta

L'App è stata sviluppata in diretta durante le lezioni 06.03 e 06.04 di Algoritmi quotidiani, programmando in JavaScript nell'ambiente. L'applicazione può essere utilizzata liberamente sia da computer che da smartphone e tablet. Chi vuole può guardare il codice JavaScript e provare a modifcarlo. Spostando il cursore dalla lepre alla tartaruga si può anche rallentare l'esecuzione del codice per seguirla passo-passo.

Qui trovate le video-lezioni e le slide che illustrano le fasi di sviluppo e le modalità di utilizzo:

Per saperne di più

Vi invito a seguire liberamente le lezioni online di Algoritmi quotidiani e gli aggiornamenti nel gruppo Facebook.

# data[].attributes.attachment_link.description
La web app che trovate in questa pagina vi permette di ascoltare il suono e osservare la danza degli algoritmi quotidiani. Sono gli stessi algoritmi che di solito lavorano in silenzio per rispondere ad un nostro click, o che noi stessi applichiamo più o meno consapevolmente nella vita di tutti i giorni.

# data[].attributes.attachment_link.description
CodEra. 580 likes. CODERA for kids è un servizio non-profit dedicato alla crescita dell'educazione della programmazione dei ragazzi e dei bambini.

# data[].attributes.body
Buone vacanze!!!!

# data[].attributes.attachment_link.readable_text
La programmazione orientata agli oggetti rappresenta una tecnica di programmazione molto robusta ma allo stesso tempo particolarmente attenta alle esigenze del programmatore. Il suo successo si deve al fatto che il software realizzato con tale tecnica si è dimostrato molto longevo, grazie alla sua riusabilità garantita dalla presenza degli oggetti.

Nel dare una definizione di oggetto possiamo semplicemente riferirci a una regione di memoria allocata; ma d'altra parte poiché nei linguaggi di programmazione le variabili sono utilizzate per accedere agli oggetti, allora gli oggetti e le variabili si scambiano naturalmente i ruoli. C'è allora da precisare che fin tanto che un'area di memoria non è allocata non sarà possibile parlare di un oggetto.

Possiamo dire quindi che un oggetto è un'istanza di una classe, in quanto unico (caratterizzato da una propria identità) e separato da altri oggetti, con i quali peraltro può comunicare.

Gli oggetti, possono essere formati da altri oggetti, ognuno dei quali individuato quale singolo componente che a sua volta potrebbe essere costituito da ulteriori oggetti; in questa definizione a cascata è necessario però arrivare alla radice della struttura che deve necessariamente essere costituita da oggetti atomici.

La programmazione ad oggetti si basa su concetti totalmente nuovi rispetto a quelli su cui si fonda la programmazione strutturata, e per ottenere i benefici garantiti da tale tecnologia è necessario tenere ben presente alcuni principi.

Molti programmatori, si avvicinano a tale tecnica attraverso un approccio sbagliato, dovuto ai retaggi acquisiti con la programmazione strutturata che li porta ad associare le classiche procedure e funzioni ai metodi della programmazione orientata agli oggetti; cosicché ad esempio le variabili globali diventano le variabili di classe.

Link correlati all'argomento:

Articolo della sezione Java con tag aggiornamento java, applet java, download java, java 7, manuale java, manuale java download, manuale java eclipse italiano, manuale java guida completa, manuale java per android, programmazione ad oggetti in Java, tutorial java on by .

Il bytecode di Java rappresenta quindi una sorta di codice intermedio tra il codice sorgente, che lo sviluppatore realizza utilizzando i costrutti che il linguaggio di programmazione gli mette a disposizione, e il codice macchina, immediatamente interpretabile dalla piattaforma che stiamo utilizzando.

Con il bytecode di Java possiamo realizzare un programma, che piuttosto essere specifico per un sistema, è eseguibile su qualsiasi piattaforma e sistema operativo. La condizione necessaria affinché ciò avvenga è che sia disponibile un interprete opportuno.

La necessità che il bytecode sia eseguibile su piattaforme diverse è fondamentale per il funzionamento delle applet, questo perché i servizi forniti da internet sono indipendenti dalla piattaforma.

Tale tecnologia non è però immune da problemi: il limite maggiore connesso all'utilizzo del bytecode risiede nella sua velocità di esecuzione.

Questo perché mentre un programma specifico per un sistema è eseguito direttamente dall'hardware per il quale è stato compilato, il bytecode Java, deve preventivamente essere elaborato dall'interprete e solo dopo potrà essere eseguito dall'hardware.

Link correlati all'argomento

Articolo della sezione Java con tag aggiornamento java, applet java, bytecode java, download java, java 7, manuale java, manuale java download, manuale java eclipse italiano, manuale java guida completa, manuale java per android, tutorial java on by .

La difficoltà che spesso attanaglia il programmatore risiede nella necessità di realizzare un'applicazione che, nella sua vita, potrà essere eseguita sulle diverse piattaforme software ed hardware disponibili in commercio. Java nasce proprio con tale esigenza che si manifesta nell'impegno di realizzare un ambiente di programmazione che si dimostrasse totalmente indipendente dalla macchina.

Nei linguaggi compilati, il codice sorgente, attraverso l'utilizzo di un particolare software detto appunto compilatore, è trasformato nel corrispondente codice in linguaggio macchina che può essere, così, eseguito dal processore. Tale processo lega l'esecuzione dell'applicazione all'ambiente in cui il codice sorgente è stato compilato.

Nei linguaggi interpretati, invece, il codice sorgente non necessità di un compilatore che lo trasformi in codice eseguibile bensì è l'interprete che si occupa di tradurre le istruzioni in linguaggio macchina. Così un programma destinato a girare su una particolare piattaforma potrà essere eseguito anche su un altro tipo di piattaforma, basterà che in entrambi i casi sia installato l'interprete.

Java si pone a metà strada tra queste due tecniche nel senso che è sia compilato che interpretato; allora il codice sorgente è prima compilato in un formato intermedio che prende il nome di byte code (codice binario), che è quindi interpretato dalla Java Virtual Machine (JVM), che assume il compito di interpretare le istruzioni presenti nel bytecode e di convertirle in istruzioni eseguibili dal processore.

Attraverso l'impiego di tale tecnologia introduciamo la possibilità di controllare eventuali errori del codice sorgente, nella fase di compilazione, ed allo stesso tempo produciamo programmi leggeri, grazie al fatto che il bytecode assume dimensioni ragionevoli. L'ambiente di sviluppo di Java comprende quindi due parti: un compilatore ed un interprete.

La portabilità di Java, si realizza appunto con l'impiego della Java Virtual Machine (JVM). Nel caso delle applet, l'interprete del bytecode è già integrato in qualsiasi browser compatibile con Java (nel caso non fosse presente risulta facilmente scaricabile ed installabile): le applet allora sono eseguite in modo automatico.

Per le altre applicazioni Java, è necessario avere installato l'interprete sul proprio sistema; questo può essere ottenuto come parte di un ambiente di sviluppo, liberamente scaricabile dal sito del produttore ed installabile sulla propria macchina in maniera semplice e veloce.

Articolo della sezione Java con tag aggiornamento java, applet java, download java, java 7, manuale java, manuale java download, manuale java eclipse italiano, manuale java guida completa, manuale java per android, tutorial java on by .

Come già anticipato Java rappresenta un linguaggio di programmazione con il quale si possono scrivere programmi eseguibili da inserire nelle pagine Web, le cosiddette applet, che almeno all'inizio hanno decretato il successo del linguaggio e applicazioni che possono essere eseguiti da sole sotto qualsiasi piattaforma. Da questo punto di vista Java assume delle caratteristiche molto simili ad altri linguaggi compilativi quali il C, C++, Visual Basic, rispetto ai linguaggi interpretativi quali HTML o JavaScript.

La storia di Java inizia nel 1991 quando alla Sun Microsystems parte un progetto di ricerca destinato a sviluppare applicazioni per l'elettronica di consumo, si stabilisce quindi di lavarare alla realizzazione di un nuovo linguaggio di programmazione orientato agli oggetti. Come già detto però, la sua estrema diffusione si deve alla sua semplice integrazione nelle strutture delle pagine Web dell'epoca, risalgono infatti al 1994 i primi esperimenti di utilizzo di tecnologie Java nel browser Netscape, colosso a quei tempi nella gestione degli ipertesti.

Derivato dal linguaggio di programmazione ad oggetti C++, Java è nato con l'obiettivo di realizzare un linguaggio di piccole dimensioni che si dimostrasse semplice da usare ed efficiente nei risultati. La successiva necessità si è poi concentrata sulla portabilità delle applicazioni su diverse piattaforme e sistemi operativi, sia a livello di codice sorgente che a livello del codice binario.

Tutto questo realizzabile tramite l'impiego della Java Virtual Machine (JVM): implementazione software di una CPU progettata per eseguire codice Java compilato, comprendente applicazioni Java stand-alone, così come applet che vengono scaricate ed eseguite in browser Web. La Java Virtual Machine è sviluppata per ogni Sistema Operativo e permette di astrarre la macchina virtuale creata dal SO ad un livello di standardizzazione superiore.

Così con Java possiamo creare delle applet, cioè programmi idonei all'esecuzione all'interno di pagine Web che risultano dinamici ed interattivi, particolarmente adatti per produrre animazioni, moduli interattivi, giochi etc; l'esecuzione delle applet avviene in un comune browser compatibile con la tecnologia Java. Ma allo stesso tempo possiamo creare, sempre con Java, delle comuni applicazioni, di quelle che siamo abituati a utilizzare sul nostro computer quando abbiamo necessità di assolvere ad una determinata esigenza.

Articolo della sezione Java con tag aggiornamento java, applet java, download java, java 7, manuale java, manuale java download, manuale java eclipse italiano, manuale java guida completa, manuale java per android, tutorial java on by .

Il linguaggio Java, deve il suo grande successo e la sua notevole diffusione al fatto che la comunità web lo abbia individuato, da subito, come uno strumento valido per la realizzazione di pagine Web interattive. Benché tale sua caratteristica non sia trascurabile, grazie anche alla possibilità di creare con facilità le cosiddette applet, piccole applicazioni Java facilmente integrabili in pagine html, Java si è nel tempo dimostrato un linguaggio di programmazione completo.

Le sue caratteristiche innovative, non solo lo hanno messo al pari degli altri linguaggi di programmazione, già da tempo utilizzati dalla comunità dei programmatori, ma ne ha dimostrato le sue sorprendenti potenzialità che ne hanno giustificato la sua diffusione.

Il successo di Java si deve sostanzialmente a due caratteristiche essenziali:

estrema semplicità nella realizzazione di procedure anche complesse, grazie all'alto livello di astrazione;

portabilità del codice Java, che gli attribuisce la totale indipendenza dall'hardware.

Java è un linguaggio orientato ad oggetti, quindi diverso dai linguaggi procedurali molto diffusi nel mondo della programmazione ai tempi della sua comparsa nel panorama mondiale. Ricordiamo a tal proposito che un linguaggio orientato ad oggetti possiede una struttura non più basata sul concetto di variabile e di procedura ma sul concetto di oggetti, complessi e manipolabili come entità a se stanti.

L'estrema semplicità e la sua portabilità lo rendono particolarmente adatto come linguaggio per avvicinare i neofiti al mondo della programmazione. Ma la sua semplicità non gli attribuisce delle caratteristiche di banalità, in quanto possiede un alto livello d'astrazione e una notevole rigidità nei controlli.

Oggi Java rappresenta una solida realtà e sono innumerevoli le applicazioni, che nella vita di tutti i giorni utilizziamo, senza sapere che sono state scritte interamente in Java. D'altra parte, come ci ricorda la classifica Tiobe, che si occupa di monitorare in modo permanente l'utilizzo dei più diffusi linguaggi di programmazione, il linguaggio Java sono orami diversi anni che si scambia il vertice con il linguaggio C.

Articolo della sezione Java con tag aggiornamento java, applet java, download java, java 7, manuale java, manuale java download, manuale java eclipse italiano, manuale java guida completa, manuale java per android, tutorial java on by .

# data[].attributes.attachment_link.description
La programmazione orientata agli oggetti rappresenta una tecnica di programmazione molto robusta ma allo stesso tempo particolarmente attenta alle esigenze del programmatore. Il suo successo si deve al fatto che il software realizzato con tale tecnica si è dimostrato molto longevo, grazie alla sua riusabilità garantita dalla presenza degli oggetti.