programmazione ad oggetti java – parte iicoronato.a/slides oo/6 - java... · 2008-10-22 ·...
TRANSCRIPT
1
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Programmazione ad Oggetti
Java – Parte II
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Overview
• Caratteristiche lessicali
• Il primo programma Java
2
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Commenti
• /* Commento tradizionale, eventualmente su più linee, non nidificato */
• // Commento su di una sola linea
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Identificatori
• Sono composti da “lettere Java” e “cifre Java”, e devono iniziare con una “lettera Java”
• Possono essere di qualsiasi lunghezza
• Attenzione: – sono lettere e cifre Unicode!
– _ e $ sono considerate lettere
– caratteri con codifica diversa (es. maiuscole e minuscole) sono considerati diversi (anche se hanno la stessa rappresentazio-ne)�
3
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Parole Chiave
Le seguenti keywords non possono essere usate come identificatori:
abstract double int superboolean else interface switchbreak extends long synchronizedbyte final native thiscase finally new throwcatch float package throwschar for private transient class (goto) protected try(const) if public voidcontinue implements return volatiledefault import short whiledo instanceof static
Note: - const e goto sono riservate, ma non usate
- anche i letterali null, true, false sono riservati
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Keywords Java e C
struct union enum
signed unsigned
extern
auto register
sizeof typedef
char int short
long float double
void
if else for while do
switch case default
break continue
return goto°°
volatile
static const°°
byte boolean
final
try catch finally throw
throws
private public protected
transient synchronized
native abstract
import class extends
instanceof implements
interface package
this super new
true°false°null°
C
Java
° letterali, non keywords
°° riservate ma non usate in Java
4
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Tipi
TIPI KEYWORD NOTE
boolean:
Primitivi
Reference
Null
boolean true, false
numerici interi
floating-point
classi
interfacce
array
class
interface
float
double
byte
short
int
long
char
8 bit int. in compl. a 2
16 bit
32 bit
64 bit
16 bit Unicode
32 bit IEEE 754
64 bit
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
• Dichiarazioni: int i, float f;
• Inizializzazioni:double d = 3.14;
• Espressioni: i + 5
j = i++
Nota:byte e short vengono sempre promossi a intprima di essere valutati
• Assegnamenti: i = j + 5;
Esempi di Tipi Primitivi
5
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Inizializzazione delle variabili
• Inizializzazione alla dichiarazione– Es. int giorni_settimana = 7;
• Valore assegnato dalla JVM– Es. int altezza;
Inizializzato dalprogrammatore
Inizializzato a 0dalla JVM
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Costanti
• Java non supporta la dichiarazione esplicita di costanti
• Si utilizza il modificatore final– Es. final int altezza = 10; Il valore della
variabile altezza
NON può esserepiù modificato
6
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Operatori
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Operatori Aritmetici
• Risultato numerico
7
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Shortcuts
• Equivalenze con le forme estese
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Shortcuts (2) �
• Operatori di assegnamento shortcut
8
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Operatori Logici
• Risultati booleani
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Operatori Relazionali
• Risultati booleani
9
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Funzioni Booleane
• Funzioni di variabili booleane
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Operatori di shift
10
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Operatori logichi bit a bit e funzioni
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Dichiarazione di classi
• Sintassi– Il costrutto class
11
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Esempio di dichiarazione
Dichiarazione di classe:
class Automobile {<campi><metodi>
}
Dichiarazione di oggetto:Automobile a;
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Creazione ed utilizzo di oggetti
dichiarazione di classe:
class Automobile {<campi><metodi>
}
dichiarazione di oggetto:
Automobile a;
creazione di oggetto:
a = new Automobile();
uso dell’oggetto:
… a.campo … … a.metodo(…) ...
12
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Variabili e variabili reference
dichiarazione di variabili:
int base = 12;
int altezza ;
dichiarazione di oggetto:
Automobile a;
creazione di oggetto:
a = new Automobile();
a nul
a
heap
I campi vengono inizializzati
base 12
altezza 0
Variabile Reference
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Sviluppo di un’Applicazione
13
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Utilizzo del JDK
• Installare il Java Development Kit (JDK)
• Scrivere il codice in un file Example.java
• Compilare da linea di comando– javac Example.java Example.class
• Eseguire da linea di comando– java Example.class
class Example {
public static void main (){
System.out.println(“Hello World!”);
}
}
Example.java
Il “programma” é
costituito da una classe
che implementa un
metodo main
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Utilizzo di un Ambiente Visuale
14
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Struttura di un’Applicazione
• Affinchè un sistema a oggetti “parta”, devo avere una classe con un metodo statico e pubblico di nome main
a
b
c
d
gf
e
main
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
L’Applicazione Example: Considerazioni
public static void main (String args [])– void indica che main non ritorna nulla, il che è necessario per
superare il type-checking del compilatore
– args[] sono gli argomenti passati a main dalla shell quando si digita: java Hello arg1 arg2 ... argn
– String dice che gli argomenti sono di classe String
– public rende il metodo main visibile alle altre classi - e al comando java (interprete)
– static associa main alla classe Hello, e non alle sue istanze
System.out.println("HelloWorld!")– invoca il metodo println dell’oggetto out del package System,
che stampa la stringa sul file stdout
15
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Packages
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Packages
• Più classi o interfacce interrelate possono essere riunite in un package, dotato di nome
Esempio:
c
e
b
d
a
MyPackage
classe o
interfaccia
16
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Nomi di Classi
• Il nome di una classe (o di una interfaccia) va sempre qualificato con il nome del package a cui appartiene, tranne quando viene usato all’interno dello stesso package
Esempio:
aaa.bbb.ccc.MyClass
all’interno di aaa.bbb.ccc basta questo
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Nomi di Package
• Il nome di un package può essere composto da piùidentificatori separati da “.”:
roberto.utilities.internet
• Per evitare che package di produttori diversi abbiano lo stesso nome, si suggerisce di far iniziare il nome del package con il dominio Internet del produttore(invertito, e con il nome di più alto livello tutto maiuscolo)
it.unimi.dsi.roberto.utilities.internet
nome di dominio
17
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Packages Standard
java.lang classi base del linguaggio(Object, Thread, Throwable, System, String,Math, wrapper classes, …)
java.io classi di I/O(FileInputStream, FileOutputStream, )
java.util classi di utilità(Date, Random, …)
java.net classi di supporto alle applicazioni direte (socket, URL, …)
java.applet classe Applet, …
java.awt Abstract Windowing Toolkit
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Lo Statement package
• Specifica che le classi che seguono apparten-gono a un certo package
• Deve apparire (una sola volta) all’inizio di una unità di compilazione
Esempio:
class a {..
class b {...
class c {..
a.java
package p; le classi a,b,c appartengono
al package p
Se lo statement è omesso,
la classe appartiene al
package anonimo
18
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Lo Statement import
• Per evitare di usare sempre nomi completi di classi, si può usare lo statement import
Esempio: import java.util.Date;
class MyClass { class MyClass {
java.util.Date today; Date today;… ...
} }
Note: • import java.util.* importa tutte le classi del package java.util
• java.lang.* è sempre importato implicitamente
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Package e Directory
• Molti ambienti Java mappano i nomi dei package sui pathname del file system (compilatore e class loader)
Esempio:
aaa.bbb.ccc.MyClass aaa/bbb/ccc/MyClass
package classe directories file
pathname
19
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Visibilità
Classi e interfacce
• sono visibili all’interno del package in cui sono dichiarate; sono visibili all’esterno del package solo se dichiarate public
public class a { …
public interface b { …
Membri (campi e metodi)
• sono visibili quando:– la loro classe è visibile e– il loro modificatore li rende visibili
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Visibilità di Campi e Metodi
Modificatore Visibilitàprivate solo nella classe in cui è definitonessuno (default) solo nelle classi del package
protected classi nel package e sottoclassi (stesso package o altri package)
public tutte le classi
NB: I membri di una interfaccia sono sempre pubblici
più
vis
ibil
e
20
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
class a {...
package pac
Esempio
class b {private int i;
private void m( ) {…}
int j;
void n( ) {…}
public int k;
public p( ){…}
protected int i;
protected void m( ){…}
class d extends b {...
class c {...
class e extends d {...
class d extends b {...
visibile
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Progettare la Visibilità
Quando progettiamo una classe dobbiamo pensare a due tipi di utenti:
• quelli che utilizzeranno la classe per realizzare delle applicazioni
• quelli che estenderanno la classe per realizzare sottoclassi
• I primi useranno i membri public; i secondi anche i membri protected
• Le interfacce public e protected vanno progettate con cura
21
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Unità di Compilazione
• Il sorgente di un’applicazione consiste di uno o più file (“unità di compilazione”)
• Ogni file contiene una o più dichiarazioni di classi (o di interfacce), di cui al più una dichiarata public
• Il nome del file deve essere uguale a quello della sua classe public , con estensione .java:
public class a {...
class b {...
class c {..
file
a.javastesso nome
Corso di Programmazione ad Oggetti
Seconda Università di Napoli
Ing. Antonio Coronato
ICAR - CNR
Packages: Riassunto
I packages:
• Permettono di creare gruppi di classi e interfacce fra loro in relazione
• Definiscono uno spazio di nomi locale per classi e interfacce evitando conflitti con classi e inter-facce di altri packages
• Permettono di avere classi, interfacce e membri (campi e metodi) non visibili all’esterno del package
• Possono essere organizzati gerarchicamente
• Si compone di più unità di compilazione