MARCO AVIDANO. Java. per. Robot. Programmazione di base e applicazioni



Documenti analoghi
Corso Eclipse. Prerequisiti. 1 Introduzione

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

Tale attività non è descritta in questa dispensa

30 giorni di prova gratuiti, entra nel sito scarica e installa subito mypckey

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

SOMMARIO... 3 INTRODUZIONE...

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

IRSplit. Istruzioni d uso 07/10-01 PC

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

GUIDA UTENTE PRIMA NOTA SEMPLICE

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

PORTALE CLIENTI Manuale utente

STUDIUM.UniCT Tutorial per gli studenti

GUIDA UTENTE BILLIARDS COUNTER (Vers )

BMSO1001. Virtual Configurator. Istruzioni d uso 02/10-01 PC

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

Guida alla registrazione on-line di un DataLogger

Dispensa di Informatica I.1

Il calendario di Windows Vista

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

Manuale Operativo per la firma digitale

Appunti di Informatica 1

GUIDA UTENTE MONEY TRANSFER MANAGER

MANUALE UTENTE. Computer Palmare WORKABOUT PRO

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

FPf per Windows 3.1. Guida all uso

SendMedMalattia v Manuale d uso

Manuale Operativo per la firma digitale

Il web server Apache Lezione n. 3. Introduzione

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

Registratori di Cassa

FOXWave Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA

Gui Gu d i a d ra r p a i p d i a V d o a d f a one Int fone In e t r e net rnet Box Key Mini

Gestione delle informazioni necessarie all attività di validazione degli studi di settore. Trasmissione degli esempi da valutare.

Strumenti per la programmazione

Guida all Utilizzo dell Applicazione Centralino

Il Programma... 3 I moduli... 3 Installazione... 3 La finestra di Login... 4 La suite dei programmi... 6 Pannello voci... 10

Invio SMS. DM Board ICS Invio SMS

ATOLLO BACKUP GUIDA INSTALLAZIONE E CONFIGURAZIONE

Sicurezza dei file Le protezioni nei programmi

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

MANUALE PARCELLA FACILE PLUS INDICE

Mon Ami 3000 Varianti articolo Gestione di varianti articoli

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Guida all uso di Java Diagrammi ER

Premessa Le indicazioni seguenti sono parzialmente tratte da Wikipedia ( e da un tutorial di Pierlauro Sciarelli su comefare.

Il sistema C.R.M. / E.R.M.

INDICE. IL CENTRO ATTIVITÀ... 3 I MODULI... 6 IL MY CLOUD ANASTASIS... 8 Il menu IMPORTA... 8 I COMANDI DEL DOCUMENTO...

GUIDA UTENTE WEB PROFILES

Guida rapida Vodafone Internet Box

PowerPoint 2007 Le funzioni

Programmare in Java. Olga Scotti

Il software ideale per la gestione delle prenotazioni GUIDA UTENTE

GESCO MOBILE per ANDROID

Tutor System v 3.0 Guida all installazione ed all uso. Tutor System SVG. Guida all'installazione ed all uso

NAVIGAORA HOTSPOT. Manuale utente per la configurazione

FRANCESCO MARINO - TELECOMUNICAZIONI

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0

(A) CONOSCENZA TERMINOLOGICA (B) CONOSCENZA E COMPETENZA

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica

File, Modifica, Visualizza, Strumenti, Messaggio

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Configurare TPTP in Eclipse e testare un applicazione

MANUALE UTENTE Fiscali Free

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

Visual basic base Lezione 01. L'ambiente di sviluppo

STRUMENTI PER L ACCESSIBILITÀ DEL COMPUTER.

GUIDA DI INSTALLAZIONE E PRIMA CONFIGURAZIONE DI EDILCONNECT PER I CONSULENTI

GUIDA OPERATIVA APPLICAZIONE PER LA VISUALIZZAZIONE DELLE FORNITURE DEI DATI DEI FABBRICATI MAI DICHIARATI CON ACCERTAMENTO CONCLUSO

2.7 La cartella Preparazioni e CD Quiz Casa

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

INSTALLAZIONE PROCEDURA 770/2011

WORD per WINDOWS95. Un word processor e` come una macchina da scrivere ma. con molte più funzioni. Il testo viene battuto sulla tastiera

MODULO STAMPA BOLLETTINO PDF

Printer Driver. Questa guida descrive l installazione dei driver stampante per Windows Vista e Windows XP.

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

I TUTORI. I tutori vanno creati la prima volta seguendo esclusivamente le procedure sotto descritte.

Medici Convenzionati

Manuale NetSupport v Liceo G. Cotta Marco Bolzon

1. Il Client Skype for Business

Laplink FileMover Guida introduttiva

REVISIONI ottobre 2010 RTI Prima stesura

Argo Palm Manuale utente Versione del

DINAMIC: gestione assistenza tecnica

START Easy GO! Il gestionale sempre in tasca! Procedura di aggiornamento. Documentazione utente Pagina 1 di 18

Biblioteca di Cervia NOZIONI BASE DI INFORMATICA

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

ZFIDELITY - ZSE Software & Engineering Pag.1 / 11

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

E possibile modificare la lingua dei testi dell interfaccia utente, se in inglese o in italiano, dal menu [Tools

GRUPPO CAMBIELLI. Posta elettronica (Webmail) Consigli di utilizzo

A T I C _W E B G U I D A AL L A N A V I G A Z I O N E S U L S I T O D E L G R U P P O. Rev. 2.1

Capitolo 3 Guida operativa del programma TQ Sistema

1 -Introduzione MODULO L1

MANUALE EDICOLA 04.05

L ambiente di sviluppo Android Studio

Transcript:

MARCO AVIDANO Java per Robot Programmazione di base e applicazioni

Marco Avidano Java per Robot Programmazione di base e applicazioni EDITORE ULRICO HOEPLI MILANO

UN TESTO PIÙ RICCO E SEMPRE AGGIORNATO Nel sito www.hoepliscuola.it sono disponibili: materiali didattici integrativi; eventuali aggiornamenti dei contenuti del testo. Copyright Ulrico Hoepli Editore S.p.A. 2010 Via Hoepli 5, 20121 Milano (Italy) tel. +39 02 864871 fax +39 02 8052886 e-mail hoepli@hoepli.it www.hoepli.it Tutti i diritti sono riservati a norma di legge e a norma delle convenzioni internazionali

Indice Presentazione 6 Modulo 1 - Introduzione 7 U.D. 1 - Introduzione a Java e alla robotica 8 1.1 Che cos è Java 8 1.2 Che cos è la robotica 8 1.3 Java Virtual Machine 8 1.4 Che cos è la programmazione a oggetti 9 1.5 Principi della programmazione a oggetti 10 1.6 Java sull NXT 11 1.7 Il firmware lejos 11 Esercizi 12 U.D. 2 - Predisposizione dell ambiente di sviluppo 13 2.1 Editor semplice e compilazione manuale 13 2.2 Installazione del Java Development Kit (JDK) 13 2.3 Primo programma Java: Hello world 15 2.4 Eclipse: installazione e configurazione 17 2.5 Primo progetto Eclipse: Hello eclipse 18 2.6 Installare lejos e aggiornare il firmware dell NXT 21 2.7 Ripristino del firmware Lego originale 23 2.8 Strumenti di lejos 24 2.9 Compilazione manuale di un programma Java per NXT 24 2.10 Primo programma Java per NXT: Hello NXT 25 2.11 Plugin lejos per Eclipse 26 2.12 Primo progetto Java su NXT con Eclipse: Hello NXT by Eclipse 27 Esercizi 30 U.D. 3 - Programmare in Java 31 3.1 Struttura di base di un programma Java 31 3.2 Variabili 34 3.3 Tipi di dato semplici 38 3.4 Conversioni tra tipi di dato: casting e promozione 41 3.5 Array 42 3.6 Operatori 45 3.7 Istruzioni di controllo 51 Esercizi 60 Modulo 2 - Fondamenti di Java 63 U.D. 4 - Le classi 64 4.1 Introduzione 64 4.2 Parole chiave della OOP 64 4.3 Definizione di una classe 65 4.4 Creazione di una classe: il puntatore a un istanza 67 4.5 Costruttori 68 4.6 Polimorfismo 71 4.7 Metodi di classe 72 4.8 Classi annidate 76 4.9 Modificatore di accesso static 77 4.10 Parola chiave final 80 4.11 Tipi semplici resi come classi 81 4.12 Parola chiave istanceof 82 Esercizi 83 U.D. 5 - Ereditarietà 85 5.1 Introduzione all ereditarietà 85 5.2 Utilizzo di base dell ereditarietà 85 5.3 Ordine d invocazione dei costruttori 88 5.4 Creazione di una classe base per l autenticazione 89 5.5 Utilizzo della parola chiave super 91 5.6 Utilizzo della parola chiave final 94 5.7 Classi astratte 94 5.8 Estensione di classi standard 96 Esercizi 98 3

Indice U.D. 6 - Interfacce 100 6.1 Introduzione 100 6.2 Definizione e implementazione di un interfaccia 100 6.3 Estensione delle interfacce 103 Esercizi 104 U.D. 7 - Package 105 7.1 Introduzione 105 7.2 Utilizzo delle classi contenute nei package 106 7.3 Creazione di un package in Eclipse 106 7.4 Creazione di un archivio JAR 107 7.5 Inclusione di un archivio JAR in un progetto 109 7.6 Creazione di file JAR avviabili 110 Esercizi 111 U.D. 8 - Eccezioni 112 8.1 Introduzione 112 8.2 Costrutto try-catch 112 8.3 Blocco 115 8.4 Parola chiave throw 116 8.5 Definizione di classi di eccezione personalizzate 116 8.6 Parola chiave throws 118 8.7 Eccezioni concatenate 119 Esercizi 120 U.D. 9 - Thread 121 9.1 Introduzione 121 9.2 Implementazione dei thread in Java 121 9.3 Estensione della classe Thread 122 9.4 Implementazione dell interfaccia Runnable 123 9.5 Priorità dei thread 124 9.6 Stato di esecuzione dei thread 125 9.7 Sincronizzazione dei thread 125 9.8 Comunicazione fra thread 127 9.9 Sospensione, ripresa e termine di un thread 132 9.10 Parola chiave volatile 133 Esercizi 134 U.D. 10 - Operazioni di I/O (Input/Output) 135 10.1 Introduzione 135 10.2 Flussi 135 10.3 Accesso al filesystem: la classe File 137 10.4 Lettura e scrittura di file: gli stream 138 10.5 Scrittura su file: le classi FileWriter e BufferedWriter 139 10.6 Lettura di file: le classi FileReader e BufferedReader 140 10.7 Operazioni di I/O generiche 142 Esercizi 144 U.D. 11 - Cenni di programmazione avanzata 146 11.1 Gestione avanzata delle stringhe 146 11.2 Strutture di dati 147 11.3 Pattern Singleton 147 11.4 Programmazione in rete 147 11.5 Applicazioni con interfaccia grafica 150 11.6 Utilizzo di archivi complessi di tipo zip 151 11.7 Serializzazione delle classi 151 Esercizi 152 Modulo 3 - Programmare l NXT in Java 153 U.D. 12 - Programmazione di un robot Lego NXT 154 12.1 Introduzione 154 12.2 Progetto Eclipse di base 154 12.3 Documentazione 157 Esercizi 158 U.D. 13 - Gestione dei motori 159 13.1 Introduzione 159 13.2 Controllo basilare dei motori 159 13.3 Utilizzo del contagiri 161 13.4 Regolazione automatica della velocità 163 13.5 Controllo dello stato del motore 164 13.6 Esempio pratico: replica dei movimenti di un motore 165 Esercizi 166 U.D. 14 - Utilizzo sincrono di due motori 167 14.1 Introduzione 167 14.2 Classe TachoPilot 167 14.3 Classe SimpleNavigator 171 14.4 Impiego della bussola 173 Esercizi 175 4

Indice U.D. 15 - Utilizzo delle periferiche in dotazione all NXT 176 15.1 Pulsanti di controllo 176 15.2 Caratteristiche del display grafico LCD 177 15.3 Emissione di suoni 180 15.4 Stato di carica della batteria 182 15.5 Sensori 183 Esercizi 188 U.D. 16 - Gestione degli eventi 189 16.1 Introduzione 189 16.2 Interfaccia ButtonListener 189 16.3 Interfaccia SensorPortListener 192 16.4 Utilizzo congiunto delle classi ButtonListener e SensorPortListener 192 Esercizi 194 U.D. 17 - Thread nella programmazione dell NXT 195 17.1 Introduzione 195 17.2 Primo esempio di thread 195 17.3 Priorità dei thread 196 17.4 Stato di esecuzione dei thread 197 17.5 Sincronizzazione dei thread 197 17.6 Comunicazione fra thread 199 17.7 Condivisione dei dati tramite il pattern Singleton 203 Esercizi 206 U.D. 18 - Strutture di dati 207 18.1 Classe ArrayList 207 18.2 Classe BitSet 209 18.3 Classe Vector 212 18.4 Classi Queue e Stack 214 18.5 Classe Hashtable 216 18.6 Interfaccia Enumeration 217 18.7 Interfacce Iterator e ListIterator 217 Esercizi 219 U.D. 19 - Accesso al filesystem 221 19.1 Classe File 221 19.2 Lettura e scrittura di file: gli stream 223 Esercizi 228 U.D. 20 - Le reti di computer e Internet 229 20.1 Console remota 229 20.2 Data logger 231 Esercizi 233 U.D. 21 - Comunicazioni USB e Bluetooth 234 21.1 Librerie e package 234 21.2 Classi NXTConnection, USBConnection e BTConnection 235 21.3 Classe USB 236 21.4 Classe Bluetooth 236 21.5 Sviluppo di applicazioni per PC che comunicano con l NXT 238 21.6 Comunicazione USB tra NXT e PC 239 21.7 Comunicazione su canale Bluetooth con telefoni cellulari 240 21.8 Comunicazione su canale Bluetooth con dispositivi esterni generici 246 Esercizi 248 U.D. 22 - Programmazione dei behaviour 249 22.1 Concetto di behaviour 249 22.2 Controllo dei behaviour: la classe Arbitrator 250 22.3 Tipologie di behaviour 251 22.4 Esempio di programmazione dei behaviour 251 22.5 Particolarità del metodo takecontrol() 253 Esercizi 256 5

Presentazione Java è un linguaggio di programmazione orientato agli oggetti, interpretato e indipendente dalla piattaforma. Progettato da Sun Microsystems, viene rilasciato sotto licenza GNU GPL ed è un linguaggio moderno, flessibile, estremamente portabile, strutturato in modo da essere adatto allo sviluppo di software per quasi ogni apparecchiatura elettronica programmabile: personal computer (indipendentemente dal sistema operativo che li gestisce), palmari, telefoni cellulari e ogni altro dispositivo dotato di microprocessore. Considerando l influenza che ha avuto il C++ nella progettazione di Java, sarà facile studiare questo linguaggio per chi già conosce il C++. Un altro vantaggio è che non sono richiesti investimenti per iniziare a programmare in Java, dato che in rete si trovano gratuitamente ambienti di sviluppo grafici (IDE), per piattaforme sia Linux sia Windows. Il Modulo 1 è introduttivo, e si propone di presentare Eclipse, che è l IDE maggiormente utilizzata dai programmatori per lavorare con Java, e le principali strutture che compongono un programma in Java. Il fatto che Java sia indipendente dalla piattaforma, grazie alla presenza della Java Virtual Machine, ne fa uno dei linguaggio di programmazione del futuro, adattabile a ogni apparecchiatura elettronica programmabile, tra cui i robot. Il Modulo 2 presenta e spiega tutte le principali nozioni necessarie a costruire e gestire un applicazione Java: in questa parte si è dato largo spazio al codice, che costituisce il punto di partenza per mostrare le possibilità offerte dal linguaggio Java ai programmatori. Esistono oggi in commercio diversi kit di robot, impiegati assai utilmente a scopi didattici. Gli stessi studenti possono progettare e realizzare con piccola spesa il loro robot e programmarlo. La possibilità di programmare alcuni robot in Java permette agli studenti di verificare immediatamente la propria comprensione delle strutture del linguaggio e la performance del robot. La parte di programmazione Java specifica per i robot occupa tutto il Modulo 3 del volume, e utilizza come riferimento didattico i robot costruiti con i Lego Mindstorms NXT. Questo tipo di robot didattico può essere programmato con il programma a icone fornito direttamente dalla Lego, chiamato NXT-G, ma Lego ha rilasciato il progetto sotto licenza Open Source, mettendo a disposizione della comunità tutte le specifiche software e hardware del robot: questo ha consentito alla comunità di programmatori Open Source interessata a questo progetto di creare nuovo software e di personalizzare l hardware dell NXT, che nel giro di poco tempo è così diventato uno strumento prezioso per le sperimentazioni in ambito robotico, di fatto un vero banco di prova per realizzare nuove idee in questo campo. La comunità lejos (http://lejos.sourceforge.net/), in particolare, ha sviluppato per NXT una Java Virtual Machine, da installare sul robot: in questo modo è possibile l esecuzione di programmi scritti in linguaggio Java sul robot. Gli esempi contenuti forniscono chiare indicazioni sulle caratteristiche sintattiche del linguaggio; per quanto riguarda le basi teoriche, sono stati messi in rilievo i fondamenti dei cinque argomenti di base per la programmazione: la rappresentazione dei dati, le strutture di controllo utilizzabili nella costruzione di un algoritmo, le principali strutture di dati offerte da Java, la conoscenza della programmazione orientata agli oggetti e della gestione dei file. Marco Avidano 6

Modulo 1 Introduzione Obiettivi Introdurre la terminologia di base della programmazione a oggetti e spiegare l importanza della JVM e di lejos Imparare a installare lejos ed Eclipse Acquisire i fondamenti di programmazione nel linguaggio Java & U.D. 1 Introduzione a Java e alla robotica U.D. 2 Predisposizione dell ambiente di sviluppo U.D. 3 Programmare in Java

1 Unità didattica Introduzione a Java e alla robotica 1.1 Che cos è Java Java è un linguaggio di programmazione orientato agli oggetti, interpretato e indipendente dalla piattaforma. È stato creato dalla Sun Microsystems e, dalla fine del 2006, è rilasciato sotto licenza GNU GPL. Java è un linguaggio moderno, flessibile ed estremamente portabile, la cui struttura lo rende adatto allo sviluppo di software per quasi ogni apparecchiatura elettronica programmabile: personal computer (indipendentemente dal sistema operativo), palmari, telefoni cellulari, praticamente ogni dispositivo dotato di microprocessore. Considerando l influenza che ha avuto il linguaggio C++ nella progettazione del Java, ne risulta semplice lo studio da parte di programmatori esperti in altri linguaggi, mentre grazie alla sua universalità e alla grande disponibilità di documentazione risulta essere una delle migliori scelte per coloro che si accostano al mondo della programmazione per la prima volta. Inoltre non sono richiesti investimenti per iniziare a programmare in Java, in quanto in rete si trovano ambienti di sviluppo (IDE) gratuiti, per piattaforme sia Linux sia Windows. 1.2 Che cos è la robotica Lo scopo della robotica è studiare, progettare e realizzare macchine più o meno intelligenti e autonome, in grado di sostituire l uomo nell esecuzione di lavori complessi, pericolosi, o semplicemente noiosi e alienanti. Mentre i primi robot erano puramente meccanici, oggi alla parte meccanica che svolge fisicamente il lavoro è affiancato un software che, attraverso trasduttori, sensori e attuatori, comanda e controlla le parti meccaniche al fine di raggiungere lo scopo desiderato eseguendo una serie di passaggi preordinati. Con l evoluzione della scienza informatica e l aumento della potenza di calcolo e dell affidabilità dei microprocessori i software che controllano i robot diventano ogni giorno più complessi e sofisticati, rendendo nel contempo più affidabili e autonome le macchine. Essendo la maggior parte dei robot apparecchiature elettroniche dotate di microprocessore, se previsto dai progettisti la loro programmazione può avvenire anche in linguaggio Java. 1.3 Java Virtual Machine Ciò che può lasciare perplessi coloro che già conoscono la programmazione multipiattaforma è come sia possibile che un programma scritto in Java possa essere eseguito su ogni piattaforma allo stesso identico modo, senza la necessità di una compilazione dedicata. Ciò è reso possibile dalla natura del linguaggio Java: il risultato della compilazione di un programma scritto in Java, infatti, non è un vero e proprio programma eseguibile, ma un file scritto in un linguaggio intermedio tra il Java e il linguaggio macchina, detto bytecode. Il codice bytecode non verrà eseguito direttamente dal microprocessore, ma sarà interpretato da un software che ha lo scopo di tradurre il bytecode Java nel linguaggio macchina specifico per l architettura su cui il programma è in esecuzione. Tale software interprete è noto come Java Virtual Machine (JVM): è la JVM che rende pos- 8

Unità didattica 1 - Introduzione a Java e alla robotica sibile l esecuzione di uno stesso bytecode sia su apparecchiature apparentemente diverse, come un PC o un telefono cellulare, sia su dispositivi simili nel design ma diversi nel funzionamento, come possono essere un PC basato sul sistema operativo Linux e un PC Windows o Macintosh. A tale proposito sono state sviluppate Java Virtual Machine specifiche per ogni tipo di macchina in grado di eseguire programmi scritti in linguaggio Java: in questo modo il programmatore non dovrà preoccuparsi delle specifiche particolari del sistema su cui il software viene eseguito, ma potrà dedicarsi esclusivamente alle direttive Java, dato che sarà compito della JVM eseguire correttamente le chiamate di sistema. Il compito del programmatore risulta notevolmente agevolato, e il numero dei potenziali utilizzatori del software non risulta essere limitato dall architettura dei sistemi utilizzati. Va precisato che le JVM sviluppate per dispositivi come palmari e telefoni cellulari sono spesso versioni limitate e personalizzate di quelle più complete sviluppate per i PC. Questo è dovuto al fatto che l hardware è sostanzialmente diverso da quello dei PC e perciò porzioni della JVM non avrebbero ragione di esistere su dispositivi limitati; a ciò si deve aggiungere che tali dispositivi possono essere dotati di periferiche hardware non presenti sui PC, quindi possono richiedere funzionalità aggiuntive personalizzate. Come si vedrà più avanti, il cuore di Java, cioè i package contenenti le funzionalità di base del linguaggio, rimarrà invariato, mentre a seconda delle apparecchiature potranno essere aggiunte, escluse o modificate tutte le altre parti: dopo aver imparato i fondamenti della programmazione in Java, risulterà comunque molto semplice adattarsi alle specifiche delle apparecchiature da programmare. 1.4 Che cos è la programmazione a oggetti Come detto più sopra, Java è un linguaggio di programmazione orientato agli oggetti. A differenza di linguaggi come il C++, in cui la programmazione a oggetti è opzionale, in Java ogni programma deve obbligatoriamente essere scritto seguendo le regole della OOP (Object Oriented Programming). Considerando ciò, è chiaro che i concetti base della programmazione a oggetti devono essere ben chiari, prima di iniziare a scrivere il primo programma. L elemento base della programmazione a oggetti è la classe: nel momento in cui una classe viene istanziata, diventa un oggetto. Per comprendere il significato di istanziazione di una classe occorre tenere ben presenti i concetti riportati di seguito. Una classe è un qualcosa di astratto, una sorta di definizione di qualcosa. Un oggetto è l elemento concreto su cui si può operare. La classe è come la ricetta, mentre la torta è una istanza della classe ricetta. A partire da una stessa ricetta si possono preparare più torte identiche, ma separate e indipendenti: analogamente, data la definizione di una classe possono essere istanziati più oggetti identici e indipendenti tra loro. L utilità fondamentale delle classi consiste nel consentire un alto livello di astrazione e di semplificazione delle difficoltà da superare: il problema che si deve risolvere con il programma può, grazie alla programmazione a oggetti, essere suddiviso in problemi di minore entità, rendendo l approccio alla soluzione più semplice e meno soggetto a errori di progettazione. Per poter istanziare una classe è necessario conoscere solo il modo in cui deve essere chiamata e quali risultati darà, senza dover tenere conto del modo in cui funziona (cioè del codice che ne costituisce lo sviluppo). Ecco un esempio per chiarire questo concetto: chiunque sia in possesso della patente sa guidare un auto, tuttavia saper guidare un auto non significa conoscere nel dettaglio il funzionamento di ogni sua parte. L auto è infatti dotata di interfacce (acceleratore, freno, frizione, volante, cambio ecc.) che consentono al conducente di utilizzarla: a chi guida è sufficiente sapere come far funzionare queste interfacce in modo da ottenere il risultato desiderato, ma chi guida non sa e non è tenuto a sapere i dettagli della meccanica dell automobile. Inoltre, indipendentemente dal modello o dalla marca dell auto, queste interfacce produrranno gli stessi identici risultati, sebbene siano realizzate in modi differenti dal punto di vista progettuale. 9

Modulo 1 - Introduzione Nella programmazione a oggetti i concetti descritti nell esempio precedente sono validi allo stesso identico modo: ogni classe ha una determinata funzione e mette a disposizione del programmatore i metodi che consentono di utilizzarla, ma i dettagli implementativi di come la classe elabora i dati per produrre il risultato possono anche non essere noti al programmatore che la utilizza. Questa caratteristica facilita lo sviluppo del software in team, in quanto consente agevolmente di suddividere lo sviluppo delle singole classi tra più squadre, ognuna con un determinato obiettivo da raggiungere: al termine, basterà includere le varie classi progettate nel software principale del programma. Un linguaggio, per essere definito orientato agli oggetti, deve implementare tre meccanismi: l incapsulamento, l ereditarietà e il polimorfismo. 1.5 Principi della programmazione a oggetti I meccanismi che un linguaggio deve implementare per essere orientato agli oggetti sono, come detto in precedenza, tre: incapsulamento, ereditarietà e polimorfismo. L incapsulamento è il meccanismo su cui la classe basa la sua esistenza e robustezza. Attraverso l incapsulamento, ogni classe risulta essere rispetto al resto del codice un entità ben definita e distinta: i metodi e i dati al suo interno sono separati da quelli delle altre classi, quindi non possono subire interferenze né possono a loro volta interferire in parti esterne alla classe non di loro competenza. Tornando all esempio precedente dell auto, l incapsulamento garantisce che agendo su un interfaccia non si modifichi lo stato delle altre: per esempio, che accendendo la radio non si azioni il tergicristallo o l aria condizionata. Dati e metodi di una classe possono avere diversi livelli di accessibilità: potranno essere privati, protetti o pubblici, consentendo una loro minore o maggiore protezione dall interazione con il resto del programma. Il significato preciso di questi concetti verrà trattato successivamente. L ereditarietà permette a una classe di acquisire le proprietà di un altra classe. In questo modo è possibile creare classi con una gerarchia ben precisa e sviluppare agevolmente codice riutilizzabile. L utilità dell ereditarietà è data dal fatto che diverse entità possono essere raggruppate in base alle loro caratteristiche simili, avendo alcune proprietà identiche. Attraverso l ereditarietà è possibile creare una classe superiore che descrive le proprietà comuni a più oggetti simili, mentre le proprietà diverse saranno definite in sottoclassi derivate da questa classe superiore. Un esempio: Cane, Gatto e Coniglio possono essere tre classi che descrivono il comportamento dell animale corrispondente al loro nome. Ognuna di queste classi avrà in comune diverse parti, in quanto ognuno di questi animali sviluppa comportamenti simili in risposta a determinate situazioni. Metodi e dati in comune possono essere integrati in una classe superiore chiamata, per esempio, Animale: le classi Cane, Gatto e Coniglio, tramite il meccanismo dell ereditarietà, acquisiranno tali proprietà e non sarà necessario riscriverne il codice, quindi sarà sufficiente scrivere il codice delle proprietà che le differenzia. Ognuna di queste classi potrà a sua volta essere ereditata da altre sottoclassi, che specificheranno ulteriori differenze: per esempio la classe Gatto potrà essere ereditata dalle sottoclassi Siamese e Certosino, che acquisiranno tutte le proprietà definite nelle classi Animale e Gatto e definiranno quindi le differenze tra due specie di animali di tipo gatto. Infine: Il polimorfismo è quella proprietà che consente di riscrivere uno stesso metodo in modo che possa lavorare con dati di tipo diverso. Al momento non si hanno ancora elementi sufficienti per poter capire con chiarezza il significato e l utilità di questa proprietà, quindi se ne rimanda la trattazione più avanti nel testo. 10

Unità didattica 1 - Introduzione a Java e alla robotica 1.6 Java sull NXT Il robot Lego Mindstorms NXT è nato per essere programmato con il software di programmazione visuale, fornito direttamente dalla Lego, chiamato NXT-G. Lego tuttavia ha rilasciato il progetto sotto licenza Open Source, mettendo a disposizione della comunità informatica tutte le specifiche software e hardware del robot. In questo modo, ognuno può creare software e hardware personalizzati per l NXT. La comunità lejos (lego Java Operating System, http://lejos.sourceforge.net/) ha sviluppato per l NXT una Java Virtual Machine, da installare sul robot: in questo modo si è resa possibile l esecuzione sul robot di programmi scritti in linguaggio Java. Rispetto a una JVM per PC, quella per l NXT può essere considerata una Virtual Machine ristretta : ciò significa che non tutte le funzioni disponibili su PC saranno attive sul robot, ma solo una parte di esse. Ciò, d altra parte, è ben comprensibile: a nulla servirebbero le classi per la gestione del monitor, del mouse o della stampante. Inoltre, le capacità di calcolo e le risorse hardware (memoria, periferiche ecc.) dell NXT sono decisamente ridotte rispetto a quelle di un PC: la JVM per PC non avrebbe neppure modo di funzionare sul robot NXT. La sintassi e la logica di programmazione rimangono invece invariate: un programma scritto per l NXT è a tutti gli effetti un programma Java. 1.7 Il firmware lejos La Java Virtual Machine per l NXT risiede nel firmware del robot. Il firmware è il software che lavora a diretto contatto con l hardware del robot e ne consente il funzionamento. La comunità lejos ha sviluppato un firmware alternativo rispetto a quello fornito da Lego, in grado di eseguire programmi scritti in Java e tramite i quali si possono comandare i motori e i sensori del robot. Il firmware deve essere installato al posto di quello originale: una volta eseguita questa operazione i programmi sviluppati con il software originale Lego NXT-G non saranno più funzionanti sul robot, ma potranno essere eseguiti solo programmi scritti in Java. Per riportare il robot alla configurazione originale occorrerà ripristinare il firmware originale Lego. La procedura da seguire per aggiornare il firmware del robot sarà spiegata nella prossima Unità didattica. 11

Modulo 1 - Introduzione Esercizi di applicazione Unità didattica 1 Descrivere le caratteristiche principali di Java e della Virtual Machine. Spiegare che cosa si intende per programmazione a oggetti. Illustrare i principi della programmazione a oggetti. Spiegare come utilizzare Java per programmare il robot Lego NXT. Stabilire se le seguenti affermazioni sul linguaggio Java sono vere o false. È un linguaggio di programmazione orientato agli oggetti... Può essere utilizzato per sviluppare software esclusivamente per PC con sistema operativo Windows... È rilasciato sotto licenza GNU GPL... Quando è stato sviluppato non ha subito influenze da parte di altri linguaggi di programmazione... Stabilire se le seguenti affermazioni sulla robotica sono vere o false. Ha come unico obiettivo la creazione di robot antropomorfi... Si occupa esclusivamente di apparecchiature dotate di microprocessore... Ha come obiettivo sollevare l uomo dai lavori degradanti... Stabilire se le seguenti affermazioni sulla Java Virtual Machine sono vere o false. È identica per ogni dispositivo su cui possono essere eseguiti programmi Java... Ha il compito di tradurre il bytecode in linguaggio macchina... Implementa sempre le funzioni di gestione del mouse... Descrivere la differenza tra classe e oggetto. Spuntare i meccanismi propri della programmazione a oggetti: espandibilità ereditarietà polimorfismo interfacciamento incapsulamento sequenzialità Stabilire se le seguenti affermazioni sulla programmazione a oggetti in Java sono vere o false. È opzionale... È implementata in modo identico al C++... Semplifica lo sviluppo di codice in team... Illustrare i concetti di ereditarietà e polimorfismo:......... Il firmware è......... 12

2 Unità didattica Predisposizione dell ambiente di sviluppo 2.1 Editor semplice e compilazione manuale Per sviluppare un programma in Java è necessario aver installato sul proprio PC il Java Development Kit (JDK), scaricabile gratuitamente dal sito http://java.sun.com. I sorgenti dei programmi possono essere scritti con un qualunque editor di testo, per esempio con Blocco note di Windows, oppure vi, pico o emacs che, nati per i sistemi Unix e Linux, sono oggi supportati anche da Windows. La modalità di sviluppo testuale, pur essendo sempre valida, viene ormai usata molto raramente e per piccolissimi progetti: infatti, programmando in questo modo occorre digitare manualmente tutte le operazioni da eseguire, mentre utilizzando un ambiente di sviluppo integrato (come Eclipse o Net- Beans) gran parte delle operazioni relative alla compilazione e alla gestione del progetto sono automatizzate (senza contare le agevolazioni introdotte dall utilizzo di un editor avanzato e dedicato alla scrittura di codice Java, come il controllo della sintassi e l autocompletamento dei nomi delle classi e dei metodi). L utilizzo degli editor visuali rende la scrittura di codice Java molto più rapida e semplificata, pur lasciando al programmatore il completo controllo sull intero progetto. Tuttavia, per poter capire fino in fondo come funzionano le cose e avere la consapevolezza di quello che si sta facendo, è opportuno avere una minima conoscenza di quello che avviene nel momento in cui si preme il pulsante che avvia la compilazione dei sorgenti. Come abbiamo detto, per compilare manualmente i programmi è necessario installare sul proprio PC il JDK, scaricandolo dal sito http://java.sun.com. Utilizzando l ambiente di sviluppo Eclipse ciò non sarà necessario, non perché superfluo ma in quanto il JDK è già compreso nell installazione di Eclipse. Nel caso in cui non si intenda sviluppare codice compilandolo manualmente, si potrà saltare il testo che segue, passando direttamente al paragrafo 2.4 relativo all installazione dell ambiente di sviluppo Eclipse sul proprio sistema operativo (sia esso Windows o Linux). 2.2 Installazione del Java Development Kit (JDK) Il Java Development Kit può essere scaricato dal sito http://java.sun.com, aprendo la sezione Downloads in alto e selezionando la voce di menu See All. 13

Modulo 1 - Introduzione Tra l elenco dei software disponibili occorre espandere il nodo denominato Java SE e selezionare la voce Java SE (JDK) 6. Nella schermata che appare occorre individuare il software da scaricare, che nel nostro caso è quello dell ultima versione del JDK (JDK 6 Update 16, nel riquadro Java SE Development Kit (JDK)), e si deve fare clic sul pulsante Download a destra. Si accede alla pagina di selezione del sistema operativo e, dopo aver spuntato la casella per l accettazione della licenza GNU, si potrà iniziare lo scaricamento del file. Al termine del download si dovrà installare il pacchetto: a seconda del sistema operativo le operazioni da compiere (differenti) sono riportate di seguito. Su un sistema Windows occorre fare doppio clic sul file eseguibile scaricato, per avviare il processo: in pochi passi sarà completata l installazione, al termine della quale è consigliabile riavviare il PC. In ambiente Linux esistono diverse modalità, a seconda della distribuzione utilizzata. In alcuni casi sono disponibili sistemi di gestione dei pacchetti: per esempio, su Debian è possibile digitare dalla console a linea di comando quanto segue: user@localhost:~$ apt-cache search jdk [lista dei pacchetti] user@localhost:~$ apt-get install sun-java6-jdk 14

Unità didattica 2 - Predisposizione dell ambiente di sviluppo Il primo comando eseguirà una ricerca nel database dei pacchetti disponibili e, dopo aver identificato il pacchetto corretto, con il comando successivo se ne potrà effettuare l installazione. Nell esempio precedente il nome sun-java6-jdk è puramente indicativo. Su Ubuntu è invece possibile selezionare il pacchetto dal gestore grafico dell installazione (accessibile dalla voce di menu Sistema/amministrazione/Gestore di Pacchetti). Eseguendo una ricerca tra i pacchetti presenti sotto la voce jdk si potrà identificare quello corretto e quindi installarlo. Il processo sarà completamente automatico. A ogni modo sarà sempre possibile eseguire l installazione manualmente, scaricando il pacchetto dal sito http://java.sun.com ed eseguendo il file: anche in questo caso in pochi semplici passaggi l installazione sarà completata. Ora che sul PC è installato il JDK si può passare a proporre il primo esempio di programma Java. Negli esempi successivi, alcuni comandi dovranno essere impartiti da shell (o prompt dei comandi, come viene definito su Windows). Per aprire una finestra di shell su Linux Ubuntu occorre selezionare la voce di menu Applicazioni/Accessori/Terminale. In generale il cosiddetto emulatore del prompt dei comandi viene solitamente chiamato Terminale, Shell, Console, Xterm, quindi si potrà cercare uno di questi termini nel menu proprio della distribuzione di Linux utilizzata. Su Windows si deve selezionare la voce di menu Start/Programmi/Accessori/Prompt dei comandi. 2.3 Primo programma Java: Hello world In questo primo esempio di programma Java incontreremo concetti ancora non trattati: l esecuzione di questo semplice programma è tuttavia necessaria per verificare il corretto funzionamento dell ambiente di sviluppo e per avere un punto di partenza su cui lavorare successivamente. Apriamo un editor di testo e scriviamo il seguente codice: class Test1 { public static void main(string[] args) { System.out.println( Hello world! ); } } Il metodo main() Il metodo main()è il punto di ingresso di ogni programma Java. Quando un programma viene lanciato tramite il comando java, la JVM cerca il metodo main() nella classe principale (che è quella specificata come argomento del comando java): ogni programma Java dovrà quindi contenere obbligatoriamente un metodo main(). La definizione di tale metodo sarà oltretutto fissa e sempre identica: public static void main(string[] args) { //codice } All interno del metodo main() si troverà scritto il codice del programma. Salviamo il testo in un file chiamato Test1.java. Come si può notare, il nome della classe e quello del file in cui è contenuta è identico: questa è una convenzione che è bene mantenere sempre, onde evitare confusione. Infatti, la compilazione del codice precedente produce un file denominato Test1.class: Test1 è derivato dal nome della classe indicata nel codice. In questo modo si avrà sempre la corrispondenza tra il file della classe compilata e il file contenente il codice sorgente. È bene anche mantenere la corrispondenza tra lettere maiuscole e minuscole, in quanto Java fa differenza tra di esse (si dice che Java è un linguaggio case sensitive ). 15

Modulo 1 - Introduzione Dopo aver salvato il file è possibile compilarlo, seguendo modalità diverse a seconda del sistema operativo. Di seguito sono riportate alcune procedure di compilazione. In Windows si deve aprire il Prompt dei comandi (solitamente accessibile selezionando la voce di menu Start/Accessori/Prompt dei comandi) e digitare quanto indicato di seguito. C:\> javac Test1.java In ambiente Linux si apre una shell e si digita quanto segue. user@localhost:~$ javac Test1.java In entrambi i casi il risultato è la creazione di un file chiamato Test1.class, che contiene il bytecode Java eseguibile dalla Java Virtual Machine. Il prodotto della compilazione è un file (o più file, se sono presenti più classi nel progetto) avente estensione.class. L esecuzione di tali file può avvenire su qualunque sistema operativo, indipendentemente da quello usato per la generazione: ciò significa che un file compilato su Windows potrà essere eseguito su Linux e viceversa. Se il comando di compilazione produce un errore si dovrà controllare di avere scritto correttamente il codice del file sorgente. Se l errore rilevato indica che il comando o il file javac non è stato trovato, questo significa che l installazione del JDK non è avvenuta correttamente: occorrerà quindi tornare al paragrafo precedente e accertare che l esecuzione di ogni passo della procedura di installazione sia avvenuta correttamente. Se la compilazione è andata a buon fine si può eseguire il programma. Sempre dalla linea di comando digitiamo quanto riportato di seguito. Per il sistema operativo Windows: C:\> java Test1 Hello world! C:\> Per Linux: user@localhost:~$ java Test1 Hello world! user@localhost:~$ Il risultato dell esecuzione è la stampa a video della stringa Hello world!. Se eseguendo i comandi java e javac si ottiene un messaggio di errore di tipo file non trovato, è probabile che il percorso del file eseguibile non sia inserito nella variabile di ambiente PATH. In questo caso si può procedere in 3 differenti modi: eseguendo il comando dalla directory bin in cui è stato installato il JDK, specificando il percorso completo del comando, oppure inserendo il percorso della directory bin nella variabile di ambiente PATH. Impostazione delle variabili d ambiente L impostazione delle variabili d ambiente è un operazione specifica differente per ogni sistema operativo. Le variabili di ambiente Linux possono essere impostate in uno dei file /etc/profile, /etc/environment o (preferibilmente) ~/.bashrc (il carattere ~ indica la directory home dell utente), utilizzando un qualsiasi editor di testo. La variabile da creare/modificare dovrà essere specificata utilizzando la seguente sintassi: PATH=/percorso_della_directory:$PATH 16

Unità didattica 2 - Predisposizione dell ambiente di sviluppo Nell esempio la variabile d ambiente da modificare è stata chiamata PATH: in ogni caso, i nomi delle variabili d ambiente sono convenzionalmente scritti in maiuscolo. Nel caso di variabili come PATH è possibile specificare più valori, separandoli con il carattere : (due punti). La specifica :$PATH fa in modo che il contenuto della variabile non venga sovrascritto dalla corrente modifica, ma che il nuovo percorso venga aggiunto a eventuali percorsi già specificati. Su Windows, per accedere alla gestione delle variabili d ambiente si deve selezionare la voce proprietà nel menu contestuale che appare facendo clic con il tasto destro del mouse su Risorse del computer. Nella finestra che si apre si deve selezionare la scheda Avanzate e qui fare clic sul pulsante Variabili d ambiente. A questo punto vengono visualizzate tutte le variabili d ambiente, e sarà possibile aggiungerne di nuove o modificare quelle già registrate. Passiamo ora ai dettagli dell installazione e della configurazione dell ambiente di sviluppo Eclipse. 2.4 Eclipse: installazione e configurazione Nei paragrafi che seguono si illustrano le procedure da seguire per installare Eclipse, che sono leggermente differenti in base al tipo di macchina che si utilizza. 2.4.1 Eclipse su Windows Eclipse per Windows può essere scaricato dal sito www.eclipse.org, nella sezione Downloads. Dall elenco dei package disponibili si dovrà fare clic sul link Eclipse IDE for Java Developers : la versione per Windows prevede lo scaricamento di un file compresso in formato.zip. Terminato il download, basterà scompattare il file: non è richiesta una vera e propria installazione tradizionale dell applicazione, poiché per utilizzare il programma sarà sufficiente fare doppio clic sul file eclipse.exe contenuto nella directory. Sarà possibile creare manualmente un collegamento all applicazione sul Desktop o nel menu Start, a seconda delle esigenze personali. 2.4.2 Eclipse su Linux L installazione di Eclipse su Linux può avvenire manualmente o utilizzando il gestore dell installazione specifico della distribuzione utilizzata. Per eseguire l installazione manuale si deve scaricare dalla sezione Downloads del sito www.eclipse.org la versione per Linux del file Eclipse IDE for Java Developers. Si otterrà un file compresso in formato.tar.gz, scompattato il quale il programma è già utilizzabile: per avviare l IDE di Eclipse sarà sufficiente eseguire il file eclipse o fare doppio clic sulla sua icona. L installazione tramite il gestore di pacchetti di Ubuntu è altrettanto semplice: si dovrà avviare il Gestore dei Pacchetti ed eseguire una ricerca tra i pacchetti disponibili per il nome eclipse : dopo aver identificato il pacchetto, selezionarlo per l installazione. Al termine del processo, nel menu delle applicazioni apparirà il link per avviare l ambiente di sviluppo Eclipse. 17

Modulo 1 - Introduzione Il workspace di Eclipse Al primo avvio di Eclipse verrà chiesto quale workspace utilizzare: il workspace altro non è che una sorta di directory principale in cui verranno create le singole directory dei vari progetti. È anche possibile creare più workspace: per passare da un workspace all altro si deve selezionare la voce di menu File/Switch Workspace, quindi indicare il workspace da attivare. Ogni volta che si crea un nuovo progetto viene creata una directory a esso dedicata all interno del workspace attivo, tuttavia è sempre possibile specificare una directory personalizzata esterna al workspace. 2.5 Primo progetto Eclipse: Hello eclipse Dopo aver installato Eclipse non vi saranno più differenze in base al sistema operativo, per quanto riguarda lo sviluppo di applicazioni Java o per l NXT, quindi la trattazione che segue sarà valida sia su Windows sia su Linux. L ultima differenza tra i sistemi operativi apparirà al momento del primo collegamento del robot al PC, ma di questo parleremo nel seguito della trattazione. Vediamo ora come creare un progetto Java su Eclipse. Dal menu File selezioniamo la voce New, quindi Java Project. Apparirà una finestra in cui si dovranno specificare alcune proprietà del nuovo progetto: per avviare un progetto standard è sufficiente specificarne il nome. Per questo esempio, nella casella Project name digiteremo TestEclipse, quindi faremo clic sul pulsante Finish. 18