Sie sind auf Seite 1von 60

Outline

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.

Raffaele Grandi Robotica Industriale 1 / 60


Outline
Programmazione Java
Risorse su Java
Ambienti integrati
Esempi di programmazione base Java

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

Java è un linguaggio di programmazione ad oggetti particolarmente


potente e versatile sviluppato dalla Sun Microsystem nei primi anni
’90
A fine aprile del 2009 Oracle ha comprato Sun Microsystems per 7,4
miliardi di dollari.
Java Platform Standard Edition Development Kit 7
tradotto in breve JDK-SE-7
contiene tutto il necessario per lo sviluppo del software java (JVM)
scaricabile da
http://www.oracle.com/technetwork/java/javase/downloads/index.html
anche da http://www.java.com

Raffaele Grandi Robotica Industriale 3 / 60


Outline
Programmazione Java
Risorse su Java Teoria
Ambienti integrati
Esempi di programmazione base Java

Caratteristiche principali 1/3

programmazione ”classica” (cicli, operatori logici, gestione delle


variabili) proveniente dal C/C++
gestione avanzata delle “ADT (Abstract Data Type)”
Vector, List, ArrayList, Hashtable...
programmazione concorrente (Threads e Sincronizzazione)
gestioni dei flussi di dati locali e remoti (File e Socket)

Raffaele Grandi Robotica Industriale 4 / 60


Outline
Programmazione Java
Risorse su Java Teoria
Ambienti integrati
Esempi di programmazione base Java

Caratteristiche principali 2/3

forte integrazione coi Design Patterns (DP)


definizione grossolana dei DP: Soluzioni testate per problemi
ricorrenti
porta alla definizione e costruzione di componenti software
interfacce grafiche (librerie Heavy Weight e Light Weight)
1 AWT: Abstract Window Toolkit (di tipo HW)
2 SWING (di tipo LW)
3 SWT: Standard Widget Toolkit (di tipo HW)
tecnologie web lato client e server (Applet, Servlet)
gestione dei flussi audio e video (JMF)

Raffaele Grandi Robotica Industriale 5 / 60


Outline
Programmazione Java
Risorse su Java Teoria
Ambienti integrati
Esempi di programmazione base Java

Caratteristiche principali 3/3

buon interfacciamento e integrazione con dispositivi HW e


applicazioni SW:
porte seriali: seriali fisiche e virtuali (Bluetooth)
Librerie: JCOMM, BLUECOVE, JNI
molto software commerciale ha un qualche tipo di integrazione con
Java (es Matlab)
manipolazione dei documenti XML
integrazione con i database
integrazione con piattaforme CORBA
sviluppo di middleware distribuiti
gestione dei contenuti multimediali internet-oriented (JavaFX)

Raffaele Grandi Robotica Industriale 6 / 60


Outline
Programmazione Java
Risorse su Java Teoria
Ambienti integrati
Esempi di programmazione base Java

Caratteristiche strutturali 1/2

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

Raffaele Grandi Robotica Industriale 7 / 60


Outline
Programmazione Java
Risorse su Java Teoria
Ambienti integrati
Esempi di programmazione base Java

Caratteristiche strutturali 2/2

La grande versatilità di Java purtroppo si paga in termini computazionali:


codice interpretato e multipiattaforma
” Write once, run everywhere ” diventa ” Write once, DEBUG anywhere ”
lentezza nell’esecuzione dovuta al
bytecode
struttura multilivello della JVM (es: Garbage Collector level)
soluzione parziale: le recenti JVM incorporano un compilatore just-in-time
(JIT compiler) che provvede alla traduzione dinamica del codice:
il bytecode viene precompilato dalla JVM e in seguito viene tradotta solo
la parte in esecuzione mentre prima la fase di compilazione e traduzione
avveniva in un’unica fase

Raffaele Grandi Robotica Industriale 8 / 60


Outline
Programmazione Java
Risorse su Java Teoria
Ambienti integrati
Esempi di programmazione base Java

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

Schede di riferimento su www.ibs.it

Raffaele Grandi Robotica Industriale 10 / 60


Outline
Programmazione Java
Risorse su Java
Ambienti integrati
Esempi di programmazione base Java

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

Application Programming Interface (API) ufficiali:


http://docs.oracle.com/javase/7/docs/api/
buona norma: mantenere aperte le API durante la programmazione
www.html.it
approfondimenti:
www.mokabyte.it
www.captain.at

Raffaele Grandi Robotica Industriale 11 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Integrated Development Environment


IDE: Ambienti integrati per lo sviluppo del software

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

Noi utilizzeremo Eclipse, maggiormente versatile e si integra meglio con


LeJOS (plug-in specifico)
è possibile usare altri IDE o nessuno, lavorando tramite linea di comando.

Raffaele Grandi Robotica Industriale 12 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Eclipse
Risorse per la programmazione

Eclipse è un ambiente di sviluppo


multipiattaforma
(Linux - Windows e Mac)
Lo si scarica gratuitamente da
www.eclipse.org/downloads
La versione a cui siamo interessati è
Eclipse Classic 3.7.1 (173 MB)
installazione di tutto
l’ambiente di sviluppo, JVM
compresa
Figura: Eclipse Downloads site
su Ubuntu è disponibile anche
nel repository ufficiale

Raffaele Grandi Robotica Industriale 13 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Eclipse
L’ambiente di lavoro

Una volta installato Eclipse e ca-


ricato, l’interfaccia appare come
nella figura a fianco:
Area di lavoro
Gerarchia dello spazio di
lavoro contenente i
packages e le classi
Console di output

Menù per la gestione delle


opzioni

Figura: Eclipse Interface

Raffaele Grandi Robotica Industriale 14 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Risorse su Eclipse
Da dove imparare

1 Google ;-)
2 Eclipse Community :
http://www.eclipse.org/community/
3 Libro:
1 Eclipse for Dummies

Raffaele Grandi Robotica Industriale 15 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Un problema di rappresentazione

Chi ha sempre programmato in modo strutturato


(procedurale), ha sempre costruito il codice utilizzando una
lunga sequenza di istruzioni, intervallate da chiamate a
funzioni specifiche (o sottoprogrammi).
Può aver utilizzato anche una modalità che comprende
l’unione di blocchi differenti attraverso dei salti logici
all’interno del codice.
In entrambe i casi l’esecuzione avviene in un unico flusso
operativo.
Esempi: COBOL, C, PASCAL, BASIC
Anche in Java è possibile programmare usando un approccio
procedurale ma noi vogliamo pensare diverso...
Raffaele Grandi Robotica Industriale 16 / 60
Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Un problema di rappresentazione

Attraverso gli strumenti che andremo ad analizzare vedremo :


1 come strutturare meglio le idee che ci aiutano a risolvere un
dato problema
2 come passare da un codice prettamente procedurale ad un
codice orientato agli oggetti
Per fare questo è necessario, prima di tutto, cambiare il modo
di pensare ai problemi e alle soluzioni, cambiare cioè il
paradigma di rappresentazione e programmazione

Raffaele Grandi Robotica Industriale 17 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Paradigma di programmazione 1/3


Definizione

Da Wikipedia: “... Un insieme di strumenti concettuali


forniti da un linguaggio di programmazione per la stesura di
programmi, e definisce/determina il modo in cui il
programmatore concepisce e percepisce il programma. Diversi
paradigmi si differenziano per i concetti e le astrazioni usate
per rappresentare gli elementi di un programma (come ad
esempio le funzioni, gli oggetti, le variabili, vincoli, ecc) e per i
procedimenti usati per l’esecuzione delle procedure di
elaborazione dei dati (assegnazione, calcolo, iterazione, data
flow, ecc).

Raffaele Grandi Robotica Industriale 18 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Paradigma di programmazione 2/3

Java introduce un paradigma fortemente orientato agli oggetti


un programma è costituito da oggetti software interagiscono
tra loro attraverso lo scambio di messaggi
Il concetto produce conseguentemente una programmazione
orientata alla costruzione e alla progettazione di “componenti”
software
Introduzione di test automatici per la validazione e la
manipolazione del codice
Astrazione di altissimo livello (Pattern di programmazione e
ingegneria del software)

Raffaele Grandi Robotica Industriale 19 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Paradigma di programmazione 3/3

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.

Raffaele Grandi Robotica Industriale 20 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Gli oggetti software

Da un punto di vista concettuale gli oggetti software modellano il


comportamento e/o le proprietà che hanno o possono avere gli oggetti
reali:
1 dati strutturali
2 metodi di comportamento
3 ereditarietà di metodi, strutture e comportamenti provenienti da
oggetti pre-esistenti

Raffaele Grandi Robotica Industriale 21 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Gli oggetti software


Esempio pratico: una porta

Caratteristiche strutturali (variabili di un oggetto):


altezza, larghezza, spessore, materiale, colore, maniglia ...
Caratteristiche funzionali (metodi di un oggetto):
apri/chiudi porta

Raffaele Grandi Robotica Industriale 22 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Un oggetto nell’oggetto
Esempio pratico: la maniglia (della porta)

Caratteristiche strutturali (variabili di un oggetto):


lunghezza, grandezza, forma, materiale, senso di rotazione,
gradi di apertura ...
Caratteristiche funzionali (metodi di un oggetto):
ruota in senso orario/antiorario

Raffaele Grandi Robotica Industriale 23 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Interazione tra oggetti


Porta - Maniglia

1 Nell’interazione tra la porta la maniglia, ad esempio, avremo che


all’interno del metodo apri/chiudi verrà utilizzato il metodo ruota in senso
orario/antiorario di maniglia che a sua volta cambierà il valore della
variabile gradi in accordo al senso di rotazione specificato, ammesso che il
senso di rotazione proprio della maniglia lo consenta.
2 Spesso nella definizione di un oggetto non vengono solamente definite le
operazioni che l’oggetto può fare ma anche quelle che non deve fare, in
modo da poter caratterizzare in toto il suo comportamento e individuare
più facilmente i problemi durante la programmazione.
3 Spesso non è possibile prevedere tutti i comportamenti ammessi e non di
un oggetto. Sono quindi previste da Java l’implementazione e la gestione
delle eccezioni (Exceptions).

Raffaele Grandi Robotica Industriale 24 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Ereditarietà

Una delle caratteristiche più potenti di Java è la capacità di ereditare le


proprietà di una classe di oggetti (variabili e metodi) da una classe “padre”
pre-esistente
La nuova classe ha la possibilità non solo si avere accesso alle strutture
della classe padre ma anche di crearne nuove
l’ereditarietà è one-way (padre -> figlio) e unica: una classe eredita
solamente da un’ unica classe
in Java si dice che una classe ne estende un’altra e viene utilizzata
la parola riservata extends

Raffaele Grandi Robotica Industriale 25 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

Ereditarietà
Un nuovo tipo di porta

Recuperando l’esempio precedente si potrebbe progettare una nuova classe di


porte che eredita da quella precedente tutte le caratteristiche ma in più
implementa caratteristiche nuove:
caratteristiche strutturali:
old: altezza, larghezza, spessore, materiale, colore, possiede una
maniglia ...
new: forma, possiede “spioncino”, spostabile
caratteristiche comportamentali:
old: apri/chiudi porta
new: apri/chiudi spioncino, solleva porta, tira porta, dipingi

Raffaele Grandi Robotica Industriale 26 / 60


Outline
Eclipse
Programmazione Java
Java e la rappresentazione del codice
Risorse su Java
Paradigma di programmazione
Ambienti integrati
Introduzione concettuale agli oggetti software
Esempi di programmazione base Java

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.

Raffaele Grandi Robotica Industriale 27 / 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

Programmazione strutturata

I piccoli esempi pratici che verrranno proposti, saranno utili a


capire come passare gradualmente da una programmazione
strutturata ad una programmazione ad oggetti

Raffaele Grandi Robotica Industriale 28 / 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

Programmazione strutturata
Esempio 1/4 : ProgramES01 - “Hello world”

package esercitazioni.ex01;
“Hello world”
public class ProgES01 { Il più classico degli

/** * @param args */ esempi, introduce già il

public static void main(String[] args) { concetto di package, di


System.out.println(”Benvenuti al corso di robotica”); oggetto e di punto di
}//end main
ingresso
}//end class

Raffaele Grandi Robotica Industriale 29 / 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

Programmazione strutturata
Esempio 1/4 : ProgramES01 - descrizione

Fasi iniziali di scrittura di un programma Java


1 Creazione di un package
da un punto di vista concettuale è un contenitore di classi di oggetti
che hanno una stessa finalità operativa
in pratica è una cartella sul sistema
una cartella diventa effettivamente un package nel momento in cui
all’interno dei sorgenti viene rispettata la gerarchia dei direttori
la gerarchina dei package è sia logica che fisica
2 Creazione di un punto di accesso al flusso esecutivo: il metodo main

Il “concetto di oggetto” e quindi di classe è rappresentato dalla parola class


Quindi ogni programma è un oggetto stand-alone in grado di essere
eseguito contemporaneamente anche in più istanze ognuno con le
stesse caratteristiche e lo stesso punto di ingresso

Raffaele Grandi Robotica Industriale 30 / 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

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 */

Raffaele Grandi Robotica Industriale 31 / 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

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

Raffaele Grandi Robotica Industriale 32 / 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

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

Raffaele Grandi Robotica Industriale 33 / 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

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

Raffaele Grandi Robotica Industriale 34 / 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

Programmazione strutturata
Esempio 4/4 : ProgramES01s - Bubble Sort p2

... Metodi di utilità


static private void initArray(int[] toInitArr){ Spesso all’interno dei
for (int i=0; i < toInitArr.length; i++ ){
toInitArr[i] = (int) (Math.random() * rangeVals); programmi si
}
}//initArray impiegano metodi di
static private void printArray(int[] tempArray){ utilità. In questo caso
System.out.println(”\nPrinting array with ”+tempArray.length+” elements”);
for (int i=0; i < tempArray.length; i++ ){ initArray e printArray
System.out.println(”Array element ”+i+”: ”+tempArray[i]);
} di struttura e compito
}//printArray
concettualmente
... identici >> pattern

Raffaele Grandi Robotica Industriale 35 / 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

Programmazione strutturata
Esempio 4/4 : ProgramES01s - Bubble Sort p3

... Metodo bSort


static private void bubbleSort(int[] tempArray){ Il cuore del
if (tempArray.length >= 2){ // controllo
boolean ordinato; programma.
do{
ordinato = true;
int k = 0;
while(k < tempArray.length-1){
if (tempArray[k] > tempArray[k+1]){
ordinato = false;
int box = tempArray[k];
tempArray[k] = tempArray[k+1];
tempArray[k+1] = box;
}//endif
k++;
}//endwhile
}while(!ordinato);
}//endif
}//bubbleSort
}// end class

Raffaele Grandi Robotica Industriale 36 / 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 terminale: tipi di file parte 1/2

In Java si programma principalmente utilizzano due tipi di file:


1 File con estensione .java contenente il codice sorgente delle
classi che scriviamo. Un file di testo puro e semplice
2 File con estensione .class contenente il bytecode generato
dalla compilazione del precedente file usando il comando javac
Il file .class, ottenuto dalla compilazione del file .java, può
essere eseguito utilizzando da una console il comando java
nomefile (privo dell’estensione .class).
La JVM si incaricherà (in modo trasparente al
programmatore) di leggere il bytecode ed eseguire le istruzioni.

Raffaele Grandi Robotica Industriale 37 / 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 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

Raffaele Grandi Robotica Industriale 38 / 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 terminale: comandi da console 1/3

Prima di procedere oltre vediamo come eventualmente compilare il programma


java appena visto, via terminale.
Come anticipato, abbiamo messo il codice sorgente del programma all’interno
di un file che si chiama ProgES01s.java (dal nome della classe) che sul disco di
sistema risiede in una cartella (package) dal percorso esercitazioni/ex01.
Notiamo questa cosa anche dall’intestazione del pacchetto all’interno del file
principale.

Raffaele Grandi Robotica Industriale 39 / 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 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)

Raffaele Grandi Robotica Industriale 40 / 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 terminale : comandi da console 3/3

Figura: Parte dell’output di esecuzione


Raffaele Grandi Robotica Industriale 41 / 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

Utilizzando Eclipse vediamo come creare, compilare ed eseguire un programma.


Sembra più complicato rispetto alla versione via terminale ma con l’aumentare
delle classi e lo svilupparsi della gerarchia dei packages risulta particolarmente
semplice e utile, soprattutto integrando delle librerie esterne (packages).
Eclipse utilizza una cartella radice di nome workspace (cambiabile a piacere)
dove archiviare i dati dell’utente.

Raffaele Grandi Robotica Industriale 42 / 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 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.

Raffaele Grandi Robotica Industriale 43 / 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 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

Figura: Eclipse - schermata - nuovo progetto


Raffaele Grandi Robotica Industriale 45 / 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 2

Selezionare Progetto Java e cliccare sul pulsante Avanti


Immettere un nome del progetto nella finestra che compare (ad esempio
LegoMS-NXT ma può essere un nome “qualunque”), all’interno del
campo relativo
Cliccare sul pulsante Fine a meno di non voler cambiare le impostazioni di
default
A questo punto in all’interno del workspace viene creato il nuovo progetto
vuoto, visibile all’interno dell’area di esplorazione dei pacchetti, sulla
sinistra
All’interno del progetto potreste avere la cartella src

Raffaele Grandi Robotica Industriale 46 / 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 3 : creazione di un package

Il progetto appena creato sembra vuoto ma all’interno è presente il package di


default che andremo a sostituire con il nostro package base
Analogamente a come si è proceduto per la creazione di un nuovo progetto
ripetiamo le stesse operazioni preliminari per la creazione del package:
Dalla schermata della figura di pagina 45 selezionare Java > pacchetto
Immettere il nome del pacchetto (ad esempio esercitazioni). Il nome del
pacchetto deve servire, non solo all’utente ma soprattutto al
programmatore, per identificare dall’esterno ciò che si trova all’interno
Cliccare su pulsante Fine per la creazione del pacchetto.
A questo punto si può vedere il pacchetto nell’area esplora pacchetti sotto
la cartella del progetto

Raffaele Grandi Robotica Industriale 47 / 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 : note varie

La procedura guidata di Eclipse vi aiuterà a creare le risorse necessarie senza


troppe difficoltà ma se volete velocizzare alcune cose il menù contestuale che si
ottiene col tasto di destra sugli oggetti (ad esempio il progetto nell’area
pacchetti) consente di avere le voci più utilizzate. Il numero di pacchetti e di
classi che si possono creare all’interno del progetto non ha limitazioni, anche se
è sempre bene ricordare che più si riesce a rendere modulare il codice migliore
sarà la gestibilità del progetto. Ad esempio all’interno del pacchetto
esercitazioni appena creato è stato creato il sottopacchetto ex01 per
identificare i programmi delle varie fasi del corso. Ulteriori sottopacchetti si
possono creare seguendo semplicemente le voci del menù contestuale che
appare cliccando col pulsante di destra sul pacchetto esercitazioni

Raffaele Grandi Robotica Industriale 48 / 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 4 - creazione della classe principale

Per iniziare la programmazione è necessario creare la classe principale.


Seguendo le procedure precedenti creiamo una nuova classe all’interno del
package ex01:
Selezionare col tasto di destra sul package ex01 nuova classe (oppure
tramite l’apposita voce all’interno del menù File)
Immettere il nome della classe (ad esempio ProgES01s) nel campo di
testo relativo all’interno della finestra che compare
Prima di proseguire spuntiamo la casella per la creazione di una classe
contenente il metodo main
In questo modo Eclipse crea in automatico il punto di ingresso del
flusso di elaborazione
Volendo è possibile anche farlo manualmente
Procedere con la creazione della classe cliccando sul pulsante Fine

Raffaele Grandi Robotica Industriale 49 / 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
Esempio 1 - via Eclipse - step 5

Scrivere la classe come presentato nei lucidi precedenti relativi al


programma ProgES01s
per il momento un copia incolla sarà sufficiente
Salvare il file.

Raffaele Grandi Robotica Industriale 50 / 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
Esempio 1 - via Eclipse - step 6

L’esecuzione del programma avviene premendo il tasto destro del mouse


sulla classe contenente il main, in questo caso ProgES01s e selezionando
1 Esegui come...
2 Applicazione Java
L’output del programma viene presentato nell’area Console in basso

Raffaele Grandi Robotica Industriale 51 / 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
Esempio 1 - via Eclipse - step 6

Figura: Esecuzione programma

Raffaele Grandi Robotica Industriale 52 / 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

Programmazione Strutturata
Esercizio : ShrinkMatrix

Testo: Si vuole costruire una matrice di interi di dimensione


r=3 x c=30 i cui valori siano casuali e appartenenti
all’intervallo [0 -100[ In seguito si vuole stampare un vettore
unico che contenga tutti gli elementi della matrice non
ripetuti e disposti in ordine crescente.
Soluzione1: copiare gli elementi in un vettore di dimensione
rxc, applicare bSort ed eliminare i doppioni. Stampare
Soluzione2: ...

Raffaele Grandi Robotica Industriale 53 / 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

Programmazione Strutturata
Esercizio: Soluzione 2

package esercitazioni.ex01;
public class ShrinkMatrix { ShrinkMatrix

static int row = 3; Rimanendo ancora


static int col = 30;
static int rangeVals = 100 ; legati al concetto di
static int[][] data;
programmazione
public static void main(String[] args) {
data = new int[row][col]; strutturata vediamo un
initArray(data);
System.out.println(”\nMatrix rows:”); esempio più articolato
printArray(data[0]); printArray(data[1]); printArray(data[2]);
bubbleSort(data[0]);
bubbleSort(data[1]);
bubbleSort(data[2]);
int[] mergedVector = mergeVectors(mergeVectors(data[0],data[1]),data[2]);
printArray(mergedVector);
printArray(vectorFilter(mergedVector));
}//main

...

Raffaele Grandi Robotica Industriale 54 / 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

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

... riutilizzarli senza

riscrivere il codice...

Raffaele Grandi Robotica Industriale 55 / 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

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

...

Raffaele Grandi Robotica Industriale 56 / 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

Programmazione Strutturata
Esercizio: Soluzione 2

... ShrinkMatrix

static private void printArray(int[] tempArray){ Il metodo della classe che


System.out.println(”\nPrinting array with ”+tempArray.length+”elemen-
ts”); fornisce la funzionalità di
for (int i=0; i < tempArray.length; i++ ){
System.out.println(”Array element ”+i+”: ”+tempArray[i]); stampa di un vettore,
}
}//printArray identico a prima. Se

avessimo avuto un oggetto


...
che forniva la funzionalità...

Raffaele Grandi Robotica Industriale 57 / 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

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

...

Raffaele Grandi Robotica Industriale 58 / 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

Programmazione Strutturata
Esercizio: Soluzione 2

... ShrinkMatrix

static private int[] vectorFilter(int[] mergedArray){ Il secondo dei due


int[] filteredVector = new int[mergedArray.length];
int j=0; nuovi metodi elimina i
for(int i=0; i<mergedArray.length-1;i++){
if (mergedArray[i]!=mergedArray[i+1]){ duplicati dei numeri,
filteredVector[j]=mergedArray[i];
j++; conservandone una
}
}//for sola istanza.
int[] retVector = new int[j];
for(int i = 0; i<j; i++)
retVector[i]=filteredVector[i];
return retVector;
}//vectorFilter

}//end class

Raffaele Grandi Robotica Industriale 59 / 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

Programmazione Strutturata
Esercizio: Note

Come è possibile vedere dal codice esistono due procedure


identiche a quelle dell’esempio 4 (ProgES01s) e una procedura
molto simile e che svolge la stessa funzione della precedente. Se
avessimo avuto a disposizione un oggetto con questi metodi
implementati al suo interno avremmo potuto ereditare i metodi
dall’oggetto padre, modificare il metodo initArray tramite
”sovraccarico” e mettere a disposizione i due nuovi metodi creati
per l’utilizzo nel main. Nel seguito delle slide vedremo come
eseguire una procedura di questo genere.

Raffaele Grandi Robotica Industriale 60 / 60

Das könnte Ihnen auch gefallen