Professional Documents
Culture Documents
Java
un moderno linguaggio orientato agli oggetti pensato per lo sviluppo di applicazioni che devono essere eseguite in un ambiente eterogeneo connesso in rete Caratteristiche principali
Semplice Robusto Architecture neutral Linking dinamico delle classi Sicuro Multithreaded
-2-
Ciclo di sviluppo
Librerie principali
Interfacce grafiche Connessione a DB
JDBC AWT e SWING (JFC)
sorgente
nome.java
Multimedia
Java 2D, Java 3D Java Advanced Imaging
Input/Output Networking
socket, datagrammi http, JavaMail oggetti distribuiti: RMI e CORBA Java IDL
Security
Java Cryptography Extension
...
http://java.sun.com/products/index.html
-3-4-
Gli applet
server HTTP
-5-
-6-
Politecnico di Milano
I costrutti di base
-8-
Commenti
// commento fino a fine linea /* commento che pu occupare pi linee */ /** commento su pi linee che viene estratto dallo strumento che genera automaticamente la documentazione*/
- 10 -
Tipi primitivi
non sono rappresentati da classi (efficienza) sono allocati staticamente hanno dimensione fissata dalla specifica del linguaggio (portabilit)
boolean char byte 1 16 8 short int long 16 32 64 float double 32 64
Tipi primitivi
no conversione implicita di tipo nei casi in cui ci sia perdita di informazione
int intero; double reale=3.14159; intero=reale; int intero; double reale=3.14159; intero=(int)reale;
NO
talvolta pu servire vedere i valori dei tipi primitivi come oggetti: per ogni tipo esiste una classe (detta wrapper)
Boolean, Character, Byte, Short, Integer...
- 11 -
- 12 -
Costanti
parola chiave final
{ final double pi=3.14159; pi+=5; }
funzioni (metodi)
i metodi possono restituire un valore oppure no (in tal caso il tipo di ritorno void) il passaggio dei parametri avviene per valore
NO
- 13 -
- 14 -
Politecnico di Milano
typedef - in Java si usano le classi struct - in Java si usano le classi union enum - in Java si usano le classi funzioni isolate - in Java ci sono solo metodi goto metodi con numero variabile di parametri puntatori conversione automatica di tipo
- 15 -
Classi ed Oggetti
String s1, s2; s1=new String("abc"); s2=s1; System.out.println(s1); System.out.println(s2); f(s2); System.out.println(s2);
- 17 -
- 20 -
nome1 nome2
- 21 -
- 22 -
Visibilit
classi
public package (non specificato)
/* Punto piano */ public class Punto { private float x,y; // coord. cartesiane public Punto(float coordX, float coordY){ x=coordX; y=coordY; } public void sposta(float dx, float dy){ x+=dx; y+=dy; } public String descrizione(){ return "Punto (" +x+ ", " +y+ ")"; } }
- 25 -
Costruttore
possono essere definiti pi costruttori che si differenziano per tipo e/o numero di parametri per i costruttori non si specifica il tipo del risultato si possono creare oggetti solo se esiste almeno un costruttore loperatore new deve essere invocato con parametri che concordano con quelli specificati da un costruttore se e solo se non viene specificato alcun costruttore il compilatore ne fornisce uno di default (vuoto con nessun parametro) un costruttore pu chiamarne un altro
- 26 -
public class Punto { private float x,y; public Punto() { x=y=0; } public Punto(float coordX, float coordY) { x=coordX; y=coordY; } public Punto(float xy) { this(xy,xy); } }
metodi ed attributi
public private protected package (non specificato)
Overloading
pi metodi possono avere lo stesso nome ma parametri in numero e/o tipo diversi
public class Punto { private float x,y; // coord. cartesiane public void sposta(float dx, float dy){ x+=dx; y+=dy; } public void sposta(float dxy){ sposta(dxy, dxy); } }
- 28 -
Array (1)
come per gli oggetti, dichiarazione e creazione sono fasi divise la dimensione non pu essere modificata dopo la creazione indici come in C
Array (2)
creare un array di un tipo riferimento non significa creare gli oggetti corrispondenti persone Gigi:Persona Leo:Persona Luca:Persona
Persona[] persone=new Persona[4];
int[] elementi; elementi=new int[10]; for(int i=0; i<10; i++) elementi[i]=i; for(int i=0; i<10; i++){ System.out.println(elementi[i]); }
matrice
matrice[4][4]
0 0 0 0 0 0 1 2 3 4 0 2 4 6 8 0 0 3 4 6 8 9 12 12 16
matrice=new int[5][7];
- 31 -
Inizializzazione array
possono essere creati ed inizializzati al momento della dichiarazione:
int[] vettore ={ 1, 2, 3, 4}; int[][] matrice = { {10, 11, 12, 13}, {14, 15, 16, 17}, {18, 19} };
- 33 -
String (1)
le stringhe sono oggetti, istanze della classe String, e NON array di caratteri (come in C)
String (2)
le costanti letterali stringa sono trasformate dal compilatore in oggetti di classe String
System.out.println("Verdi".length()); String nome="Carlo", cognome; cognome=Rossi;
char caratteri[] = {'C', 'a', 'r', 'l', 'o'}; String nome=new String(caratteri); System.out.println(nome); System.out.println(nome.length());
le stringhe si possono concatenare con loperatore + ed il risultato un nuovo oggetto di classe String
String nome="Carlo"; String cognome="Rossi"; String completo; completo=nome+" "+cognome;
- 36 -
Carlo 5
- 35 -
String (3)
la classe String non esporta alcun metodo per modificare i caratteri che compongono la stringa:
Metodi static
Metodi associati alla classe e non allistanza quando sono pubblici possono essere invocati senza creare prima una istanza Esempi:
main per inizializzare attributi statici o per fornirne il valore metodi di conversione da tipi base a stringa (in String)
public static String valueOf(double d)
ordine di valutazione
System.out.println
System una classe out un attributo statico della classe System di tipo PrintStream e rappresenta lo standard output PrintStream esporta i metodi per scrivere sullo standard output, tra cui:
print(int) print(long) print(Object) print(String) println(String)
Autoriferimento
il codice che implementa i metodi di una classe quando eseguito si riferisce implicitamente alloggetto su cui il metodo stato invocato (oggetto corrente) il codice pu riferirsi esplicitamente alloggetto corrente attraverso la variabile implicita this
public class Persona { public String nome; public int anni; public String codiceFiscale; public Persona(String nomePersona){ this.nome=nomePersona; } }
- 43 -
- 44 -
Politecnico di Milano
Ereditariet
per controllare se un parametro corrisponde alloggetto corrente in un costruttore per richiamare un altro dei costruttori delloggetto - 45 -
Ereditariet Si dichiara una classe come sottoclasse di unaltra mediante la parola chiave "extends" In mancanza di indicazioni specifiche, il compilatore assume che la classe derivi direttamente da Object Ereditariet multipla
non permessa tra classi realizzata tramite interfacce
- 47 -
Inizializzazione
I costruttori non vengono ereditati Il costruttore di una sottoclasse deve chiamare quello della superclasse tramite il metodo super
la chiamata a super deve essere la prima istruzione del costruttore
class Furgone extends Autoveicolo { int portata; String datiTecnici() { return " portata = " + portata + " potenza = " + potenza + " velocit = " + velocitaMassima; } }
Se la superclasse non ha un costruttore senza parametri, obbligatorio definire un costruttore nella sottoclasse
- 49 -
- 50 -
Costruttori
class MezzoDiTrasporto { int velocitaMassima; int numeroPasseggeri; MezzoDiTrasporto (int velocitaMassima, int numeroPasseggeri) { this.velocitaMassima = velocitaMassima; this.numeroPasseggeri = numeroPasseggeri; } }
Costruttori
class Autovettura extends MezzoDiTrasporto { String tipoDiMotore; int potenza; Autovettura (int velocitaMassima, int numeroPasseggeri, int potenza) { super(velocitaMassima, numeroPasseggeri); this.potenza = potenza; } }
- 52 -
- 51 -
Costruttori
class Furgone extends Autovettura { int portata; Furgone (int velocitaMassima, int potenza, int portata) { super (velocitaMassima, 2, potenza); this.portata = portata; } } 2 1 3
- 53 -
- 55 -
- 56 -
area()
class GestioneFigure { public static void stampaArea(Figura fig) { System.out.println(" area = " + fig.area() ); } public static void main (String args[ ]) { Cerchio cerc = new Cerchio("Giallo", 5); stampaArea(cerc); Rettangolo rett = new Rettangolo("Giallo", 4, 8); stampaArea(rett); } }
- 57 -
- 58 -
Clausola final
I metodi final non possono essere ridefiniti in una sottoclasse Le classi final non possono essere pi essere estese La clausola final per i metodi e per le classi serve per limitare lereditariet NB: le propriet final sono delle costanti
abstract class Figura{ private String colore; Figura(String col) { colore = col; } final String mioColore() { return colore; } abstract void stampati(); }
final class Quadrato extends Rettangolo { Quadrato(String col, double lato) { super(col, lato, lato); } }
- 59 -
- 60 -
Politecnico di Milano
Interfacce
class MezzoDiTrasporto { protected int velocitaMassima; protected int numeroPasseggeri;} class Autoveicolo extends MezzoDiTrasporto { protected String tipoDiMotore; protected int potenza; public String toString() { System.out.println(velocita massima: +velocitaMassima); System.out.println(potenza: +potenza);} NB: molto meglio definire un toString opportuno in MezzoDiTrasporto - 61 e usarlo in Autoveicolo
Interfacce
Uninterfaccia una collezione di metodi - privi di implementazione - e di costanti
E` come una classe in cui tutti i metodi sono astratti
}
Interfacce: un esempio
interface strumenti { String descrizione = "strumento musicale"; // valore implicitamente static e final void suona() ; // notare lassenza della implementazione
Se una classe implementa una data interfaccia, il compilatore verifica che nella classe esistano le definizioni per tutti metodi definiti nellinterfaccia
class flauto implements strumenti { public void suona() { System.out.println(" fiuuuuuuu "); } public String descrizione() { return descrizione + flauto"; }
- 63 -
- 64 -
<<implements>> Pianoforte
<<implements>>
- 65 -