1. ITIS Max Planck di Lancenigo di Villorba
A.S. 2012-2013
Java per elettronici ed elettrotecnici
Prima lezione: dal C al Java
Prof. PAOLO TOSATO
Quest' opera è distribuita con
licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported.
2. Paolo Tosato Java per elettronici ed elettrotecnici
Indice
• Java: con chi abbiamo a che fare?
• Un linguaggio in un main
• Programmazione strutturata: i principali costrutti del
linguaggio Java
• Gestire la complessità: programmazione orientata agli
oggetti
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 2
3. Paolo Tosato Java per elettronici ed elettrotecnici
Java: con chi abbiamo a che fare
Java è un linguaggio di programmazione Object Oriented con una sintassi simile a
quella del C++ (e questo non gli giova!), cross-platform, e con una libreria di classi
standard che lo rende uno strumento con cui realizzare “semplicemente” imprese
altrimenti ardue
Attenzione all’uso degli slogan:
• Java è semplice!
• La programmazione Object Oriented è la migliore!
• Tutto il software deve essere scritto in Java!
Ma anche no!
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 3
4. Paolo Tosato Java per elettronici ed elettrotecnici
Java: con chi abbiamo a che fare
Un programma scritto in C viene tradotto in un linguaggio che è eseguibile
da una particolare macchina fisica
Codice compilatore Codice
sorgente linker eseguibile
testo intelligibile traduttore linguaggio macchina
Java è cross-platform in quanto (e non è un’idea di Java!) il compilatore
NON produce codice per una macchina fisica, ma per una macchina
virtuale: Java Virtual Machine (JVM)
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 4
5. Paolo Tosato Java per elettronici ed elettrotecnici
Java: con chi abbiamo a che fare
Un compilatore Java produce pseudo-codice (pCode – bytecode) eseguibile
da qualsiasi Java Virtual Machine.
Codice
sorgente pCode
compilatore
Java
linker
testo traduttore linguaggio
intelligibile per la JVM JVM per PC con
Windows Windows
N.B. Alcuni browser Internet SONO delle JVM
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 5
6. Paolo Tosato Java per elettronici ed elettrotecnici
Java: con chi abbiamo a che fare
Software
http://www.oracle.com/technetwork/java/javase/downloads/index.html
API
http://www.oracle.com/technetwork/java/api-141528.html
JRE: Java Runtime Environment (java platform 7)
JDK: Java Development Kit (java platform 7)
IDE: Integrated Development Environment (NetBeans, Eclipse)
API: Application Programming Interface
Java è stato creato dalla Sun Microsystem e ha fatto la sua apparizione ufficiale nel 1995.
Nel 2010 la Sun è stata acquistata dalla Oracle.
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 6
7. Paolo Tosato Java per elettronici ed elettrotecnici
Un linguaggio in un main
import java.io.*;
public class <nome classe>
{
public static void main (String args[]) {
// dichiarazioni di variabili
…
// istruzioni
…
}
}
public: metodo pubblico (private / protected / default)
static: metodo associato alla classe e non può essere richiamato dai singoli oggetti
Come salvare il codice?
Ogni classe pubblica deve essere salvata in un file con lo stesso nome
<nome classe>.java
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 7
8. Paolo Tosato Java per elettronici ed elettrotecnici
I principali costrutti del linguaggio Java
Tipi di dati
• Primitivi: numerici (interi, virgola mobile), carattere, booleani
• Riferimento: array e le classi
Tipi primitivi
• Interi: Byte (8 bit), Short (16 bit), int (32 bit), long (64 bit)
• Virgola mobile: Float (32 bit), Double (64 bit)
• Carattere: char (UNICODE. Java non utilizza la codifica ASCII)
• Booleano: boolean (true/false);
Costanti
final int MAX = 10;
Stringhe (tipo riferimento: classe)
String nome = “Gianpaolo”;
String abbreviazione = nome.substring(0,4);
int lunghezza = nome.length();
Char inizio = nome.charAt(0);
If (nome.equals(“Gianpaolo”)) { … }
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 8
9. Paolo Tosato Java per elettronici ed elettrotecnici
I principali costrutti del linguaggio Java
Gestione output
System.out.println(“Hello World”);
System.out.print(“Risultato = “ + risultato);
Gestione input
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader tastiera = new BufferedReader(input);
String nome;
Nome = tastiera.readLine();
String leggiNumero;
int num;
…
try {
leggiNumero = tastiera.readLine();
num = Integer.valueOf(leggiNumero).intValue();
} catch(Exception e) {
System.out.println(“nNumero non corretto!”);
return;
}
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 9
10. Paolo Tosato Java per elettronici ed elettrotecnici
I principali costrutti del linguaggio Java
Per le strutture di controllo
vedi C / C++
Attenzione ai dettagli (scope delle variabili)
for (int i=0; i<10; i++) {
System.out.println(i);
}
Numeri casuali
Math.random() genera numeri double nel range [0.0, 1.0)
Per generare numeri nell’intervallo [min, max]
int numero = (int) (Math.random() * (max – min + 1) + min;
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 10
11. Paolo Tosato Java per elettronici ed elettrotecnici
I principali costrutti del linguaggio Java
Array statici e dinamici
int vett[];
vett = new int[5];
String nomi[] = new String[10];
int vett[] = {45, 12, 3, 10, 2000};
vett.length restituisce la dimensione del vettore
int matrice[][];
matrice = new int[3][4];
Per chi desidera qualcosa di dinamico
Vector vett = new Vector();
vett.addElement(<oggetto>); // accetta in input solo oggetti
Persona p = (Persona) vett.elementAt(3); // restituisce un tipo Object che va castomizzato
vett.removeElementAt(4); // comprime in automatico il vettore
int dimensione = vett.size();
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 11
12. Paolo Tosato Java per elettronici ed elettrotecnici
Programmazione orientata agli oggetti
Paradigma imperativo: computazione portata avanti attraverso una sequenza
ordinata di passi
• Istruzione di assegnamento
• Ordine di esecuzione
• Vicini al modo in cui funziona l’elaboratore
• Strutture di controllo
• Programmazione strutturata
Paradigma orientato agli oggetti: analizza il problema individuando gli oggetti che
lo compongono e le relazioni esistenti tra di essi
• Metodologia di programmazione OOP (Object Oriented Programming)
• Classe
• Incapsulamento
• Ereditarietà
• Polimorfismo
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 12
13. Paolo Tosato Java per elettronici ed elettrotecnici
Programmazione orientata agli oggetti
Classe
• Struttura di un oggetto che ne descrive le caratteristiche e i suoi comportamenti
• Descrizione astratta di un oggetto attraverso attributi e metodi
Oggetto: istanza di una classe
Persona p = new Persona(“Mario”, “Rossi”);
String nome = p.getNome();
class Persona {
String nome; // Attributi
String cognome;
Persona (String nome, String cognome) { // Metodo costruttore
this.nome = nome;
this.cognome = cognome;
}
public String getNome() { // Metodo pubblico
return nome + “ “ + cognome;
}
}
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 13
14. Paolo Tosato Java per elettronici ed elettrotecnici
Programmazione orientata agli oggetti
Incapsulamento
Proprietà degli oggetti di incorporare al loro interno sia gli attributi che i metodi, cioè le
caratteristiche e i comportamenti dell’oggetto.
A volte si desidera un po’ di privacy: Information Hiding
class Persona {
private String nome;
private String cognome;
Persona (String nome, String cognome) {
this.nome = nome;
this.cognome = cognome;
}
public String getNome() {
return nome + “ “ + cognome;
}
}
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 14
15. Paolo Tosato Java per elettronici ed elettrotecnici
Programmazione orientata agli oggetti
Ereditarietà
Possibilità di creare nuove classi a partire da una classe già esistente (ereditarietà singola)
La classe derivata da un’altra prende il nome di sottoclasse.
La classe generatrice di una sottoclasse si chiama superclasse o sopraclasse
Come “sterilizzare” una classe?
final class Persona { … } // non possono essere generate sottoclassi da Persona
public final void getNome() { … } // non può essere sovrascritto all’interno delle sottoclassi
class Docente extends Persona { // attenzione: attributi private, elementi static e
// costruttori non vengono ereditati
private String materia;
Docente (String nome, String cognome, String materia) {
super(nome, cognome);
this.materia = materia;
}
…
}
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 15
16. Paolo Tosato Java per elettronici ed elettrotecnici
Programmazione orientata agli oggetti
Polimorfismo
Possibilità per i metodi di assumere implementazioni diverse all’interno della gerarchia delle
classi.
• Overriding dei metodi: ridefinire un metodo ereditato
• Overloading dei metodi: lo stesso nome per compiere operazioni diverse (metodi
con lo stesso nome in una classe, ma con numero e tipo diverso di parametri)
class Docente extends Persona {
private String materia;
Docente (String nome, String cognome, String materia) {
super(nome, cognome);
this.materia = materia;
}
public String getNome() { // OVERRIDING
return “Nome: ” + nome + “ “ + cognome + “ Materia: ” + materia;
}
}
Quest' opera è distribuita con
07/04/2013 licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Unported. 16