Beruflich Dokumente
Kultur Dokumente
Programmazione Java
Risorse su Java
Ambienti integrati
Esempi di programmazione base Java
Robotica Industriale
Cenni sulla programmazione JAVA
Raffaele Grandi
em@il:raffaele.grandi@unibo.it
www −lar .deis.unibo.it/people/rgrandi
D.E.I.
Outline
Panoramica generale
Caratteristiche principali e strutturali
Risorse su Java
Ambienti di sviluppo integrati
Esempi di programmazione base
Introduzione alla programmazione ad oggetti ed esempi
Considerazioni sintattiche e semantiche del linguaggio
Introduzione ai tre pilastri fondamentali della programmazione Java
Classi astratte e polimorfismo
Programmazione concorrente
Eccezioni
Javadoc
Raffaele Grandi Robotica Industriale 2 / 60
Outline
Programmazione Java
Risorse su Java Teoria
Ambienti integrati
Esempi di programmazione base Java
Cenni di Java
Standard Edition : panoramica generale
In dettaglio:
1 sintassi simile al C++
2 indipendenza dalla piattaforma ( JVM )
codice interpretato: ByteCode (Architecture Neutral)
” Write once, run everywhere ”
3 codice suddiviso in classi e packages
4 linguaggio orientato agli oggetti (in Java tutto è un oggetto)
ogni oggetto ha proprietà e metodi
astrazione tramite Interfacce e Classi Astratte
ereditarietà e polimorfismo
Librerie e API
Java fornisce al programmatore un vasto insieme di procedure
(metodi), raggruppate a formare un set di strumenti specifici per
l’esecuzione di compiti che coprono (come abbiamo visto) quasi
tutti i settori dell’informatica.
In Java questi set di strumenti sono implementati all’interno di
classi apposite, suddivise per funzionalità e racchiuse all’interno di
pacchetti (le librerie)
Ogni classe può essere vista come una “scatola chiusa” e un
programma può utilizzare una o più classi ausiliarie.
L’insieme delle operazioni che espletano tali classi, assieme alle
variabili elaborate in ingresso e in uscita viene denominato
Interfaccia di Programmazione di un’ Applicazione (API -
Application Programming Interface)
La documentazione completa di tutte le API fornite dal core di Java
é disponibile presso il sito della Oracle
Raffaele Grandi Robotica Industriale 9 / 60
Outline
Programmazione Java
Risorse su Java
Ambienti integrati
Esempi di programmazione base Java
Risorse su Java
Libri
1 Bruce Eckel
http://www.mindviewinc.com/Index.php
1 Think in Java - vol.1 - Fondamenti
2 Think in Java - vol.2 - Tecniche
avanzate
2 Deitel&Deitel http://www.deitel.com/
1 Java: Fondamenti di
programmazione
2 Java: Tecniche avanzate
Risorse su Java
Internet
Google
Sito Internet Oracle:
http://docs.oracle.com/javase/7/docs/
http://www.oracle.com/technetwork/java/javase/documentation/index.html
NetBeans
ambiente di sviluppo multi-linguaggio scritto interamente in Java (Swing)
nato nel giugno 2000.
scelto dalla Sun Microsystems (Oracle) come IDE ufficiale
plug-in oriented
Eclipse
ambiente di sviluppo multi-linguaggio scritto in Java (SWT)
progetto opensource sviluppato da una vasta comunità sotto la tutela
della Eclipse Foundation
plug-in oriented
Eclipse
Risorse per la programmazione
Eclipse
L’ambiente di lavoro
Risorse su Eclipse
Da dove imparare
1 Google ;-)
2 Eclipse Community :
http://www.eclipse.org/community/
3 Libro:
1 Eclipse for Dummies
Un problema di rappresentazione
Un problema di rappresentazione
Vantaggi:
1 fornisce un supporto naturale alla modellazione software degli
oggetti del mondo reale o del modello astratto da riprodurre.
2 permette una più facile gestione e manutenzione di progetti di
grandi dimensioni.
3 l’organizzazione del codice sotto forma di classi ne favorisce la
modularità e il riuso.
Svantaggi:
1 alcuni meccanismi inclusi nella gestione degli oggetti possono
causare overhead in termini di tempo e memoria.
2 maggiore complessità strutturale rispetto ai linguaggi procedurali.
Un oggetto nell’oggetto
Esempio pratico: la maniglia (della porta)
Ereditarietà
Ereditarietà
Un nuovo tipo di porta
Classe vs Oggetto
La fase di istanziazione
In realtà ciò che fino ad ora abbiamo chiamato “oggetto”, in Java viene
definito come una Classe (di oggetti).
Questo perché, riferendoci all’esempio di porta, possono essere costruite
più porte tutte uguali, ognuna con le stesse caratteristiche strutturali e
comportamentali dell’altra ma con attributi differenti.
La classe in Java deve essere vista come la descrizione delle
caratteristiche strutturali e funzionali di un oggetto che si vuole
costruire e appartenente a tale classe.
Una volta che sia stata definita una classe di oggetti, con proprietà e
metodi propri, è possibile creare, attraverso la fase di istanziazione, un
oggetto con le caratteristiche della classe.
Vedremo che in un programma Java l’istanza di un oggetto viene creata
attraverso l’utilizzo dell’operatore new.
Programmazione strutturata
Programmazione strutturata
Esempio 1/4 : ProgramES01 - “Hello world”
package esercitazioni.ex01;
“Hello world”
public class ProgES01 { Il più classico degli
Programmazione strutturata
Esempio 1/4 : ProgramES01 - descrizione
Programmazione strutturata
Note sintattiche del linguaggio
1 La sintassi del linguaggio ci “limita” ad usare, come nome del file sorgente
che contiene il codice, un nome identico a quello della classe, quindi nel
caso precedente il codice sarà contenuto in un file dal nome
ProgES01.java all’interno della cartella ex01, sottocartella di
esercitazioni (esercitazioni/ex01)
2 Nel linguaggio Java i nomi delle classi iniziano con la lettera maiuscola
mentre quelli dei metodi con la lettera minuscola
3 I commenti al codice possono essere effettuati tramite l’utilizzo della
doppia barra // per commenti che rimangono su una riga e dal una
scrittura del tipo barra asterisco /* per aprire un commento multilinea e
asterisco-barra per chiudere il commento */
Programmazione strutturata
Esempio 2/4 : ProgramES01b
package esercitazioni.ex01;
Variabili
public class ProgES01b {
Java ha molti tipi di
static String stringa01 = ”Scrivi qualcosa sullo schermo”;
static String stringa02 = new String(”Ho già scritto qualcosa”); variabili. La Stringa
int x = 30; //minuti che eravate disposti ad ascoltare prima di iniziare
double y = 45.5678; //secondi che effettivamente siete stati attenti può essere trattata
boolean max interest = false; //situazione attuale
come una variabile
public static void main(String[] args) {
System.out.println(stringa01); comune. In realtà è un
System.out.println(stringa02);
System.out.println( oggetto che può essere
”InterestData x:”+x+”;y:”+y+”;MI:”+max interest
); manipolato in modo
} //end main
molto complesso
}//end class
Programmazione strutturata
Esempio 3/4 : ProgramES01e
package esercitazioni.ex01;
Complicazioni...
public class ProgES01e {
Introducendo cicli,
static int var01 = 35;
variabili e metodi la
public static void main(String[] args) {
for (int i = 0; i < var01; i++){ versatilità del codice
stampaStringa(”Prova di stampa n° ”+i);
} aumenta. Il prossimo
}
lucido ne è un
public static void stampaStringa(String str){
System.out.println(str); esempio.
}//end stampaStringa
}//end class
Programmazione strutturata
Esempio 4/4 : ProgramES01s - Bubble Sort p1
package esercitazioni.ex01;
public class ProgES01s { BubbleSort versione
artigianale.
static int numElements01 = 50, numElements02 = 20, rangeVals = 100;
Nel main vediamo la
public static void main(String[] args) {
int[] unsortedArray01 = new int[numElements01]; chiamata a 3 funzioni
int[] unsortedArray02 = new int[numElements02];
initArray(unsortedArray01); initArray(unsortedArray02); o metodi (initArray,
System.out.println(”\nStampo vettori non ordinati”);
printArray(unsortedArray01); printArray(unsortedArray02); bubbleSort,
System.out.println(”\nEseguo fase di ordinamento”);
bubbleSort(unsortedArray01); bubbleSort(unsortedArray02); printArray), una
System.out.println(”\nStampo vettori ordinati”);
printArray(unsortedArray01); printArray(unsortedArray02); chiamata di sistema e
}//main la creazione di 2
... oggetti
Programmazione strutturata
Esempio 4/4 : ProgramES01s - Bubble Sort p2
Programmazione strutturata
Esempio 4/4 : ProgramES01s - Bubble Sort p3
Compilazione ed esecuzione
via terminale: tipi di file parte 1/2
Compilazione ed esecuzione
via terminale: tipi di file parte 2/2
In casi particolari è possibile dover lavorare con file .jar : i file jar
sono archivi compressi di programmi java. Vengono utilizzati
generalmente per distribuire librerie e pacchetti software.
All’interno è presente generalmente tutta l’applicazione,
perfettamente corredata della sua gerarchia di packages. Aprendo
un file jar (come se fosse un file .zip) è possibile vedere l’albero dei
packeges contenente le classi dell’applicazione. A volte vengono
inseriti anche i file .java dei sorgenti
Compilazione ed esecuzione
via terminale: comandi da console 1/3
Compilazione ed esecuzione
via terminale: comandi da console 2/3
Procedura:
1 Configurare i percorsi di ricerca all’interno delle variabili di sistema in modo che
includano la cartella della JVM
2 Aprire una console di comando e spostarsi all’interno della cartella contenente il
package esercitazioni (ad esempio cd nomecartella)
3 Digitare il comando javac esercitazioni/ex01/ProgES01s.java per la
compilazione del sorgente.
1 Se non ci sono errori di compilazione viene creato all’interno della cartella
esercitazioni/ex01/ un file dal nome ProgES01s.class
2 Altrimenti viene segnalato attraverso una serie di errori in cascata quali
sono le difficoltà incontrate nella compilazione e dove viene rilevato l’errore
4 In caso che la compilazione sia andata a buon fine è possibile procedere
all’esecuzione del programma digitando il comando java
esercitazioni/ex01/ProgES01s (ricorda: senza estensione)
Compilazione ed esecuzione
via terminale : comandi da console 3/3
Compilazione ed esecuzione
via Eclipse - step 1 : creazione di un nuovo progetto
Compilazione ed esecuzione
via Eclipse - step 1b : il primo utilizzo
Dopo aver installato Java SDK ed Eclipse, al primo avvio di Eclipse ci si ritrova
di fronte ad una schermata di assistenza con delle icone circolari. Quella che
interessa e sulla destra denominata workbench.
Cliccandola si accede all’interfaccia di lavoro.
Compilazione ed esecuzione
via Eclipse - step 1c : l’inizio della procedura
Procedura:
Aprire l’interfaccia
di Eclipse (a fianco)
Cliccare sul
pulsante Nuovo in
alto a sinistra
oppure andare sulla
voce del Menù File
sotto menù Nuovo,
voce Progetto
Raffaele Grandi
Figura: Eclipse workbench
Robotica Industriale 44 / 60
Esempio 1
Outline
Esempio 2
Programmazione Java
Esempio 3
Risorse su Java
Esempio 4
Ambienti integrati
Introduzione alla programmazione pratica
Esempi di programmazione base Java
Esercizio 1
Compilazione ed esecuzione
via Eclipse - step 1 : creazione di un nuovo progetto
Compilazione ed esecuzione
via Eclipse - step 2
Compilazione ed esecuzione
via Eclipse - step 3 : creazione di un package
Compilazione ed esecuzione
via Eclipse : note varie
Compilazione ed esecuzione
via Eclipse - step 4 - creazione della classe principale
Compilazione ed esecuzione
Esempio 1 - via Eclipse - step 5
Compilazione ed esecuzione
Esempio 1 - via Eclipse - step 6
Compilazione ed esecuzione
Esempio 1 - via Eclipse - step 6
Programmazione Strutturata
Esercizio : ShrinkMatrix
Programmazione Strutturata
Esercizio: Soluzione 2
package esercitazioni.ex01;
public class ShrinkMatrix { ShrinkMatrix
...
Programmazione Strutturata
Esercizio: Soluzione 2
... ShrinkMatrix
static private void initArray(int[][] matrixData){ I metodi funzionali del
int row = matrixData.length; //le variabili vengono ridefinite in locale
int col = matrixData[0].length; //le variabili vengono ridefinite in locale main assomigliano
for (int i=0; i < row; i++ ){
for(int j=0; j < col; j++ ){ molto (o sono identici)
matrixData[i][j] = (int) (Math.random() * rangeVals);
} a quelli già visti, se
}
}//initArray fosse possibile
riscrivere il codice...
Programmazione Strutturata
Esercizio: Soluzione 2
... ShrinkMatrix
static private void bubbleSort(int[] tempArray){ Il metodo della classe che
if (tempArray.length >= 2){ // controllo
boolean ordinato; fornisce la funzionalità
do{
ordinato = true; dell’ordinamento di un
int k = 0;
while(k < tempArray.length-1){ vettore, identico a prima. Se
if (tempArray[k] > tempArray[k+1]){
ordinato = false; avessimo avuto un oggetto
int box = tempArray[k];
tempArray[k] = tempArray[k+1]; che forniva la funzionalità...
tempArray[k+1] = box;
}//endif
k++;
}//endwhile
}while(!ordinato);
}//endif
}// bubbleSort
...
Programmazione Strutturata
Esercizio: Soluzione 2
... ShrinkMatrix
Programmazione Strutturata
Esercizio: Soluzione 2
... ShrinkMatrix
static private int[] mergeVectors(int[] vector1, int[] vector2){ Il primo dei due nuovi
int[] tVec = new int[vector1.length+vector2.length];
int m = vector1.length; metodi aggiunti
int n = vector2.length;
int i=0, j=0, k=0; produce la fusione di
while (i < m && j < n) {
if (vector1[i] <= vector2[j]) { tVec[k] = vector1[i]; i++;} due vettori ordinati
else{ tVec[k] = vector2[j]; j++; }
k++;
}//while
if (i < m) { for (int p = i; p < m; p++) { tVec[k] = vector1[p]; k++; } }
else { for (int p = j; p < n; p++) { tVec[k] = vector2[p]; k++; } }
return tVec;
}//mergeVectors
...
Programmazione Strutturata
Esercizio: Soluzione 2
... ShrinkMatrix
}//end class
Programmazione Strutturata
Esercizio: Note