Java Base Cristiano Bellucci Argomenti • 1- Caratteristiche del linguaggio Java • 2 - Software • 3 - Sintassi 1 – Caratteristiche del linguaggio Java Cos’è java ? Un linguaggio semplice, objectoriented, interpretato, robusto, sicuro, portabile, multithreaded, dinamico. Storia •Un team della Sun guidato da James Gosling •Java nel 1990 si chiamava Oak •Doveva servire come linguaggio di programmazione per device elettronici Java è semplice •Nessuna aritmetica dei puntatori •Garbage collection (memoria) automatica •Molto simile al C Java è object oriented •O.O. è naturale •Supporta l’ereditarietà •Supporta il polimorfismo •Supporta l’incapsulamento (information hiding) •Interfacce •Non supporta la ereditarietà multipla •Tutti gli oggetti sono manipolati per reference Java è distribuito •Disegnato per lavorare in rete •Supporta vari livelli di connettività in rete Java è interpretato •Il compilatore genera il bytecode •Il bytecode è indipendente dall’architettura su cui viene generato •Il bytecode viene poi interpretato Java è robusto •Dimensioni del linguaggio minori di altri linguaggi •Il programmatore non si deve preoccupare della memoria Java è sicuro •Il bytecode è sottoposto ad un processo di verifica •Il bytecode gira nell'ambiente della Java Virtual Machine e non può accedere ad aree protette della memoria. •Security Manager Java è portabile •Il bytecode è indipendente dall’architettura •Write once, run everywhere Java è multithread •Supporto per i thread •Supporto a metodi synchronized Java è dinamico •Dinamicamente carica classi quando ne ha bisogno 2 – Software Java Software Development Kit Le API della piattaforma Java: – Java Standard Edition Ultima versione: JDK 6.0 – Java Enterprise Edition Ultima versione: Java EE 5 SDK – Java Micro Edition Tool di sviluppo •javac compilatore •java interprete •appletviewer visualizzatore di applet •javadoc.exe. Permette di generare documentazione dei programmi java in formato html estraendo tutto ciò che si trova commentato tra i simboli /** ..... */ CLASSPATH E’ la variabile di ambiente che contiene gli identificativi di tutte le directory a partire dalle quali la JVM cerca le classi che le occorrono Esempio per ambiente Windows: set classpath=.;c:\unpathdelleclassi\mieclassi.jar;c:\ilpathdialtr eclassi Esempio per ambiente Unix: export classpath=.:usr/local/unpathdelleclassi/mieclassi.zip:usr/loc al/ilpathdialtreclassi 3 – Sintassi Hello World! /** * The HelloWorldApp class implements an application that * simply prints "Hello World!" to standard output. */ public class HelloWorldApp { /** Creates a new instance of HelloWorldApp */ public HelloWorldApp() { } /** * @param args the command line arguments */ public static void main(String[] args) { System.out.println("Hello World!"); // Display the string. } } La prima cosa che viene eseguita dal computer è: public static void main(String[] args){} Classe public class Bicycle { Dichiariazione variabile: tipo_variabile nome_variabile; // stato = variabili int cadence; int speed = 0; int gear = 1; // comportamento = metodi // metodo per cambiare la frequenza della pedalata void changeCadence(int newValue) { cadence = newValue; } // metodo per cambiare marcia void changeGear(int newValue) { gear = newValue; } Dichiariazione + assegnazione variabile: tipo_variabile nome_variabile = valore; Definizione metodo: tipo_restituito nome_metodo (tipo_parametro parametro){ istruzioni; } // metodo per aumentare la velocità void speedUp(int increment) { speed = speed + increment; } // metodo per diminuire la velocità void applyBrakes(int decrement) { speed = speed - decrement; } // metodo di utilità per stampare lo stato (variabili) void printStates() { System.out.println("cadence:"+cadence+" speed:"+speed+" gear:"+gear); } } Istanza public class BicycleDemo { public static void main(String[] args) { // Crea 2 differenti biciclette Bicycle bike1 = new Bicycle(); Bicycle bike2 = new Bicycle(); // Invoca i metodi di queste classi bike1.changeCadence(50); bike1.speedUp(10); bike1.changeGear(2); bike1.printStates(); bike2.changeCadence(50); bike2.speedUp(10); bike2.changeGear(2); bike2.changeCadence(40); bike2.speedUp(10); bike2.changeGear(3); bike2.printStates(); } } Creazione nuova istanza della classe tipo_varibile nome variabile = new tipo_variabile(); Invocazione metodi di una classe istanza.nome_metodo Costruttore Ha lo stesso nome della classe e public class Bicycle { // stato = variabili non ritorna alcun tipo int cadence = 0; int speed = 0; Se non ce ne sono scritti nella int gear = 1; classe, java comunque da quello di // comportamento = metodi // metodo per cambiare la frequenza della pedalata void changeCadence(int newValue) { default (= a 0 argomenti) cadence = newValue; } Ce ne possono essere in numero // costruttore a 0 argomenti public Bicycle(){ qualsiasi, basta che siano differenti } per numero o tipo di parametri // costruttore a 3 argomenti public Bicycle(int cad, int spe, int ge){ passati cadence = cad; speed = spe; Viene invocato quando si usa new gear = ge; } es.: Bicycle b = new Bycicle(); // metodo per cambiare marcia Bicycle b1 = new Bicycle(25, 30, 2); void changeGear(int newValue) { gear = newValue; } … } Stato = variabili TipoDatoPrimitivo nomeVar = valore; Tipo di dato Vaore di default Dimensione Predefinito byte 0 8-bit Si short 0 16-bit Si int 0 32-bit Si long 0L 64-bit Si float 0.0f 32-bit Si double 0.0d 64-bit Si char '\u0000' 16-bit Si boolean false 1-bit Si String (altri oggetti) Null No Bicycle Null No TipoDatoOggetto nomeVar = new TipoDatoOggetto(parametri); int mioPrimoIntero = 100; double mioPrimoDecimale = 1.23; boolean mioPrimoBoolean = true; String miaPrimaStringa = new String(“Hello”); Bicycle bicycle = new Bicycle(); Operatori Operatori Funzioni Tipo dato a+b +-*/ Aritmetiche Numerico == != (Dis)Uguaglianza Numerico e booleano && AND booleano || OR booleano true || false ! NOT booleano !b = Assegnazione Tutti b == c b != c true && false mioPrimoIntero = 100; Assegnazione public class AssegnazioneDemo { public static void main (String[] args){ int cadence; cadence = 0; int speed; speed = 0; int gear; gear = 1; double d; d = 3.14; boolean b; b = false; b = true; String miaPrimaStringa; miaPrimaStringa = new String(“Hello”); Bycicle b; b = new Bicycle(); } Aritmetiche class ArithmeticDemo { public static void main (String[] args){ int result = 1 + 2; // risultato è 3 System.out.println(result); result = result - 1; // risultato è 2 System.out.println(result); result = result * 2; // risultato è 4 System.out.println(result); result = result / 2; // risultato è 2 System.out.println(result); result = result + 8; // risultato è 10 result = result % 7; // risultato è 3 System.out.println(result); } } Not class UnaryDemo { public static void main(String[] args){ boolean success = false; System.out.println(success); // false System.out.println(!success); // true } } Istruzioni per controllo flusso Istruzione Descrizione if Esegue o no un blocco di codice a seconda del valore restituito da una espressione booleana. if-else Esegue permette di selezionare tra due blocchi di codice quello da eseguire a seconda del valore restituito da una espressione booleana. while Esegue ripetutamente un blocco di codice controllando il valore di una espressione booleana. for Esegue ripetutamente un blocco di codice. if if (espressione_booleana){ [istruzione] } // classe per verificare il ciclo if class IfDemo { public static void main(String[] args) { // variabile di test int x; // assegnazione variabile x = 20; // controllo del valore della variabile if(x>10){ System.out.println(“x è maggiore di 10”); x=0; } System.out.println(“Il valore di x è:” + x); } if - else if (espressione_booleana){ [istruzione] } else { [istruzione] } // classe per verificare il ciclo if - else class IfElseDemo { public static void main(String[] args) { int testscore = 76; char grade; if (testscore >= 60) { grade = 'D'; } else { System.out.println("testscore è minore di 60"); } if (testscore >= 70) { grade = 'C'; } else { System.out.println("testscore è minore di 70"); } if (testscore >= 80) { grade = 'B'; } else { System.out.println("testscore è minore di 80"); } if (testscore >= 90) { grade = 'A'; } System.out.println("Grade = " + grade); } } while while (espressione_booleana){ [istruzione] } // classe per verificare il ciclo while class WhileDemo { public static void main(String[] args){ int count = 1; while (count < 11) { System.out.println("Il valore di Count è: " + count); count++; // equivale a count = count + 1; } } } for for (istruzione; espressione_booleana; iterazione){ [istruzione] } // classe per verificare il ciclo for class ForDemo { public static void main(String[] args){ for(int i=1; i<11; i++){ System.out.println("Il valore di count è: " + i); } } } if && || ! // classe per verificare il ciclo if e le condizioni && || e ! class IfLogicDemo { public static void main(String[] args) { // variabili di test int x; int y; boolean bol; // assegnazione variabili x = 20; y = 30; bol = false; // controllo del valore della variabile if(x>10){ System.out.println(“x è maggiore di 10”); x=2; } if(x>1 && y<50){ System.out.println(“Il valore di y è: ” + y); } if(x>40 || y<50){ System.out.println(“Il valore di y è: ” + y); } if(!bol){ System.out.println(“Il valore di not bol è true ” ); } } Incapsulamento public class Bicycle { private int cadence; private int gear; private int speed; •Si realizza nascondendo le informazioni •private e public public Bicycle(int startCadence, int startSpeed, int startGear) { gear = startGear; cadence = startCadence; speed = startSpeed; } public int getCadence() { return cadence; } public void setCadence(int newValue) { cadence = newValue; } public int getGear() { return gear; } public void setGear(int newValue) { gear = newValue; } public int getSpeed() { return speed; } public void applyBrake(int decrement) { setSpeed(-decrement); } public void speedUp(int increment) { setSpeed(+increment); } private void setSpeed(int spe) { speed = speed + spe; } } Ereditarietà- classe base public class Veicolo { public String nome; public int velocita; //in Km/h public int direzione; private int DRITTO=0; private int SINISTRA = -1; private int DESTRA = 1; public Veicolo(){ velocita=0; direzione = DRITTO; nome = “Veicolo generico”; } public void muovi(){ velocita=1; System.out.println(nome + “ si sta movendo a: ”+ velocita+” Kmh”); } public void ferma(){ velocita=0; System.out.println(nome + “ si è fermato”); } public void sinistra(){ direzione =SINISTRA; System.out.println(nome + “ ha sterzato a sinistra”); } public void destra(){ direzione =DESTRA; System.out.println(nome + “ ha sterzato a destra”); } public void diritto(){ direzione = DRITTO; System.out.println(nome + “ sta procedendo in linea retta”); } } Ereditarietà – classe derivata public class Macchina extends Veicolo{ public Macchina(){ velocita=0; direzione = DRITTO; nome = “Macchina”; } } Ereditarietà - verifica public class Autista{ public static void main(String args[]){ Veicolo v = new Veicolo(); v.muovi(); v.sinistra(); v.diritto(); v.ferma(); Macchina fiat = new Macchina (); fiat.muovi(); fiat.sinistra(); fiat.diritto(); fiat.ferma(); } } Polimorfismo e ereditarietà •Overriding public class MacchinaLenta extends Veicolo{ public MacchinaLenta(){ velocita=0; direzione = DRITTO; nome = “Macchina Lenta”; } public void muovi(){ velocita=0.5; System.out.println(nome + “ si sta movendo a: ”+ velocita+” Kmh”); } } Polimorfismo •Overloading public class Veicolo { public String nome; public int velocita; //in Km/h public int direzione; private int DRITTO=0; private int SINISTRA = -1; private int DESTRA = 1; public Veicolo(){ velocita=0; direzione = DRITTO; nome = “Veicolo generico”; } public void muovi(){ velocita=1; System.out.println(nome + “ si sta movendo a: ”+ velocita+” Kmh”); } public void muovi(int vel){ velocita=vel; System.out.println(nome + “ si sta movendo a: ”+ velocita+” Kmh”); } … } Interazioni (una parte di) – classe chiamante public class Veicolo { String nome; int velocita; //in Km/h int direzione; private int DRITTO=0; private int SINISTRA = -1; private int DESTRA = 1; private Ruota ruota; public Veicolo(){ velocita=0; direzione = DRITTO; nome = “Veicolo generico”; } public void setRuota(Ruota ruo){ Ruota = ruo; } public void muovi(){ velocita=1; System.out.println(nome + “ si sta movendo a: ”+ velocita+” Kmh”); } … } Interazioni (una parte di) – classe chiamata public class Ruota{ private String marca; private int raggio; public void setMarca(String mar){ marca = mar; } public String getMarca(){ return marca; } public void setRaggio(int rag){ raggio = rag; } public int getRaggio(){ return raggio; } } Interazioni (una parte di) – classe test public class Test{ public static void main(String args[]){ // creazione veicolo Veicolo v = new Veicolo(); v.muovi(); v.sinistra(); v.diritto(); v.ferma(); // creazione ruota Ruota r = new Ruota(); r.setMarca(“Pirelli”); r.setRaggio(18); // inserimento ruota nel veicolo v.setRuota(r); System.out.println(“La marca della ruota del veicolo è: ” + v.getRuota().getMarca()); } } GRAZIE