Programmazione in Java - Dipartimento di Informatica e Automazione

Corso di Laurea Ingegneria Informatica
Fondamenti di Informatica
Dispensa 06
Programmazione Java
Alfonso Miola
Ottobre 2012
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
1
Contenuti
q  Il linguaggio Java
q  Applicazioni Java e il metodo main
q  Esempi di applicazioni
§  Scrittore sullo schermo
§  Radice quadrata
q  Esempi di classi e oggetti Java
§  Gli oggetti String, i loro metodi e le possibili
applicazioni
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
2
Prerequisiti
Questo capitolo presuppone la conoscenza
degli argomenti già trattati nelle
precedenti lezioni di questo corso e
riportati nelle rispettive dispense, con
particolare riferimento al capitolo 1 e al
capitolo 2 del libro di testo
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
3
Il linguaggio di programmazione Java
q Java è
§  un linguaggio di programmazione
•  un linguaggio di programmazione orientato agli oggetti
§  indipendente dalla piattaforma
•  realizzato per tipi diversi di calcolatori
– write once, run everywhere
§  realizzato per le reti di calcolatori
•  supportato dai principali browser Web
•  sviluppato dalla Sun Microsystems, e rilasciato nel 1995
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
4
Java è un linguaggio di programmazione
q Ogni linguaggio di programmazione, e quindi anche
Java, è caratterizzato da:
§  la sintassi - l’insieme delle regole grammaticali
per scrivere i programmi con quel linguaggio
§  la semantica - l’insieme delle regole che
stabiliscono il significato dei programmi, ovvero
il modo in cui i programmi devono essere
interpretati ed eseguiti dal calcolatore
Una successiva dispensa tratterà
questi argomenti in dettaglio
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
5
Java è orientato agli oggetti . . .
q Nel paradigma di programmazione orientato
agli oggetti
§  l’esecuzione di un programma consiste nella
cooperazione di un insieme di oggetti
§  un programma è la descrizione di un insieme di
oggetti
q Il progetto (la descrizione) di un oggetto è
definito da una classe
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
6
. . . Java è orientato agli oggetti
q In Java, l’unità fondamentale di
programmazione è la classe
§  Java permette di definire classi
§  una classe può essere il progetto di un singolo
oggetto (un oggetto classe) o di oggetti (oggetti
istanza) di una certa tipologia
§  una classe implementa il comportamento e lo stato
di una certa tipologia di oggetti
•  le operazioni sono implementate da metodi
•  le proprietà sono rappresentate da variabili
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
7
Programmi Java
q In Java, ogni programma è un oggetto:
esistono due tipi di programmi Java
§  applicazioni Java
•  un programma a sé stante, che viene eseguito da un
interprete Java, chiamato macchina virtuale Java (o JVM,
Java Virtual Machine)
§  applet Java
•  un programma immerso in una pagina web, che viene
eseguito dalla JVM di un browser web
q Un programma Java consiste nella definizione
di un insieme di classi
§  una classe che modella il programma (applicazione)
§  una classe per ciascuna tipologia di oggetti
necessari per l’esecuzione del programma
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
8
Applicazioni Java
q Una applicazione è una classe applicazione
§  che definisce un oggetto classe e che sa eseguire
esclusivamente l’operazione speciale main
q In una applicazione Java
§  l’applicazione è rappresentata da un oggetto classe
§  l’utente dell’applicazione può interagire solo con alcuni
degli oggetti coinvolti dall’applicazione
§  l’utente dell’applicazione può sicuramente interagire con
l’oggetto classe che rappresenta l’applicazione
§  l’utente dell’applicazione può richiedere all’oggetto classe
che rappresenta l’applicazione solo di eseguire l’operazione
speciale main
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
9
API di Java . . .
q L’ambiente di sviluppo per Java è corredato
da un numeroso insieme di classi e oggetti
predefiniti - le API (Application Programming
Interface) di Java
§  le API sono in insieme di elementi standard di
programmazione per la gestione di aspetti
applicativi di carattere generale — input-output,
stringhe, grafica, ...
•  le classi delle API sono raggruppate in “librerie” —
chiamate package
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
10
. . . API di Java
q Le API rappresentano quindi un supporto al
programmatore che gli permettono di
concentrarsi sullo sviluppo di classi e oggetti
relativi alle applicazioni di interesse
q Gli oggetti e le classi delle API di Java
possono essere utilizzati conoscendone
l’interfaccia
§  l’interfaccia degli elementi delle API di Java è
documentata da un insieme di pagine web
disponibile al programmatore
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
11
Programmazione in Java . . .
q La programmazione in Java coinvolge i
seguenti aspetti
§  conoscenza del linguaggio Java
•  ovvero, conoscenza della sintassi e della semantica di
Java
§  uso di oggetti e classi predefiniti (ad esempio,
definiti nelle API di Java o in altri package a
disposizione) di cui si conoscano le interfacce
§  definizione di nuove classi Java
•  per implementare programmi, oggetti classe o tipologie di
oggetti istanza necessari alla soluzione del problema
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
12
. . . Programmazione in Java
q Viene ora mostrata una panoramica sulla
programmazione in Java
q Come nell’apprendimento dei linguaggi
naturali anche qui si incomincia imparando a
“leggere”
§  viene mostrato come leggere alcuni programmi
Java, di complessità via via crescente
q Solo successivamente impareremo a
“scrivere” e quindi a . . . “parlare Java”
§  alla progettazione e scrittura di programmi Java
sono dedicati molti dei successivi capitoli
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
13
Scrittore sullo schermo
q Si vuole scrivere una applicazione Java che
visualizza sullo schermo le seguenti frasi
Questo corso
introduce i concetti di
base dell'informatica
q Più precisamente, si vuole definire una classe
che è il progetto di un oggetto classe che
§  è una classe applicazione
§  sa eseguire una operazione il cui effetto è quello di
visualizzare quelle tre frasi sullo schermo
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
14
System.out
q L’applicazione ha bisogno di visualizzare una
frase sullo schermo
§  l’applicazione può utilizzare l’oggetto System.out
System.out
• println(String frase)
§  System.out è un oggetto definito dalle API di Java
§  System.out modella lo schermo del calcolatore
§  System.out sa eseguire una operazione println
che visualizza una frase (che è il parametro
dell’operazione)
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
15
L’applicazione ScrittoreSulloSchermo
/* Applicazione che visualizza una frase
sullo schermo. */
class ScrittoreSulloSchermo {
public static void main(String[] args) {
System.out.println("Questo corso");
System.out.println("introduce i concetti di");
System.out.println(“base dell'informatica");
}
}
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
16
ScrittoreSulloSchermo è una classe
/* Applicazione che visualizza una frase
sullo schermo. */
class ScrittoreSulloSchermo {
public static void main(String[] args) {
System.out.println("Questo corso");
System.out.println("introduce i concetti di");
System.out.println(“base dell'informatica");
}
}
q La definizione di una classe
•  è introdotta dalla parola class
•  è seguita dal nome della classe — ScrittoreSulloSchermo
q La classe ScrittoreSulloSchermo è una classe
applicazione e quindi è una classe statica
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
17
Commenti
/* Applicazione che visualizza una frase
sullo schermo. */
class ScrittoreSulloSchermo {
public static void main(String[] args) {
System.out.println("Questo corso");
System.out.println("introduce i concetti di");
System.out.println(“base dell'informatica");
}
}
q La frase delimitata da /* e */ è un commento
§  i commenti non sono operazioni e quindi non hanno nessuna
influenza sul significato dei programmi - ma sono molto utili per
documentare i programmi – quindi più ce ne sono e meglio è !
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
18
Definizione di una classe
/* Applicazione che visualizza una frase
sullo schermo. */
class ScrittoreSulloSchermo {
public static void main(String[] args) {
System.out.println("Questo corso");
System.out.println("introduce i concetti di");
System.out.println(“base dell'informatica");
}
}
q I dettagli della definizione di una classe sono chiamati
il corpo della classe
§  il corpo della classe è delimitato da parentesi graffe { e } ed è
scritto dopo il nome della classe
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
19
Corpo della classe
/* Applicazione che visualizza una frase sullo schermo. */
class ScrittoreSulloSchermo {
public static void main(String[] args) {
System.out.println("Questo corso");
System.out.println("introduce i concetti di");
System.out.println("base dell'informatica");
}
}
q Il corpo della definizione di una classe contiene, tra le
altre cose, i metodi della classe per implementare le
operazioni
q La classe ScrittoreSulloSchermo definisce un unico
metodo - di nome main - che è un metodo speciale : è
l’unica operazione la cui esecuzione può essere
richiesta dall’utente di una classe applicazione
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
20
Il metodo main . . .
/* Applicazione che visualizza una frase sullo schermo. */
class ScrittoreSulloSchermo {
public static void main(String[] args) {
System.out.println("Questo corso");
System.out.println("introduce i concetti di");
System.out.println("base dell'informatica");
}
}
q Nella definizione di un metodo
§  c’è il nome del metodo — main
§  ci sono alcune parole (misteriose, per ora) che precedono e
che seguono il nome del metodo
•  ad esempio, la parola static indica che il metodo è un metodo di classe
§  i dettagli della definizione di un metodo sono chiamati il corpo
del metodo e sono delimitati da parentesi graffe { e }
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
21
. . . Il metodo main
/* Applicazione che visualizza una frase sullo schermo. */
class ScrittoreSulloSchermo {
public static void main(String[] args) {
System.out.println("Questo corso");
System.out.println("introduce i concetti di");
System.out.println("base dell'informatica");
}
}
q Il corpo del metodo main
§  è composto da un blocco che è una sequenza di istruzioni,
separate da punto e virgola ; e delimitata da parentesi graffe
{e}
§  ciascuna istruzione del metodo specifica una azione che
l’oggetto ScrittoreSulloSchermo deve svolgere
§  quando l’oggetto ScrittoreSulloSchermo riceve il messaggio
main(...), deve eseguire il metodo main, ovvero deve eseguire
le istruzioni scritte nel corpo del metodo main
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
22
Istruzioni
System.out.println("Questo corso");
System.out.println("introduce i concetti di");
System.out.println("base dell'informatica");
q Le tre istruzioni nel corpo del metodo main hanno una
struttura simile
§  ad esempio, nella prima istruzione
•  System.out è il nome dell’oggetto (predefinito) che modella lo
schermo del calcolatore
•  println("Questo corso") è il messaggio che si vuole inviare a
System.out
•  il punto, il punto e virgola, le parentesi e le virgolette hanno il
ruolo di separare le varie parti dell’istruzione
§  ciascuna di queste tre istruzioni è una istruzione di invio di
un messaggio a un oggetto (o invocazione di metodo)
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
23
Esecuzione di istruzioni e azioni
System.out.println("Questo corso");
. . .
q L’esecuzione di una istruzione consiste nello
svolgimento di una o più azioni da parte dell’oggetto
che esegue l’istruzione
§  ad esempio, l’esecuzione della prima istruzione consiste
nell’invio del messaggio println("Questo corso")
dall’oggetto che esegue l’istruzione (ScrittoreSulloSchermo)
all’oggetto System.out
§  in corrispondenza della ricezione di questo messaggio,
l’oggetto System.out (lo schermo) visualizza la frase Questo
corso su se stesso
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
24
Esecuzione di un metodo
q L’esecuzione di un metodo consiste
nell’esecuzione delle istruzioni scritte nel corpo
del metodo, una alla volta e in sequenza
q Quindi, l’esecuzione del metodo main consiste
nell’invio, all’oggetto System.out, di tre
messaggi, in sequenza
§  in corrispondenza alla ricezione dei tre messaggi, lo
schermo System.out visualizzerà successivamente
su se stesso le tre frasi
Questo corso
introduce i concetti di
base dell’informatica
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
25
Interazione fra oggetti
«applicazione»
ScrittoreSulloSchermo
• println(String frase)
• main(...)
1: main(...)
System.out
1.1: println("Questo corso")
1.2: println("introduce i concetti di")
1.3: println("base dell'informatica")
questa icona rappresenta
l’utente del programma
q Questo “Diagramma di collaborazione”, nel
linguaggio UML, descrive i messaggi scambiati
quando un utente richiede al calcolatore di eseguire
l’applicazione ScrittoreSulloSchermo
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
26
Esercizio
q Commentare la definizione della seguente
classe
/* Applicazione che visualizza sullo schermo
* la poesia Mattino di Giuseppe Ungaretti. */
class Mattino {
public static void main(String[] args) {
System.out.println("M'illumino");
System.out.println("d'immenso");
}
}
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
27
Esercizio
q Ora che abbiamo imparato a leggere proviamo anche
a “scrivere” in Java !
q Una lunga tradizione vuole che il primo programma
scritto da un programmatore sia quello che visualizza
sullo schermo la frase Hello, world (che significa
“Ciao, mondo”)
q Definire l’applicazione Java CiaoMondo che
visualizza sullo schermo la frase Hello, world
Ovviamente possiamo anche scrivere altro a piacere
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
28
Errori di programmazione
q Durante la scrittura di classi è possibile commettere
degli errori di programmazione – ad esempio
§  la frase scritta non è corretta nel linguaggio di
programmazione (errori grammaticali)
§  la frase scritta è corretta nel linguaggio di programmazione,
ma il suo significato è diverso da quanto ci si era prefissi
(errori non grammaticali)
q Va inoltre osservato che
§  l’individuazione degli errori grammaticali è solitamente
supportata dagli strumenti di programmazione (in particolare,
dal compilatore)
§  viceversa, l’individuazione degli errori non grammaticali non
è supportata dagli strumenti di programmazione, ed è quindi
necessario ricorrere a opportune metodologie
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
29
Esempi di errori possibili
/* Applicazione che visualizza sullo
* schermo la poesia Mattino
* di Giuseppe Ungaretti. */
Class Mattino {
public static viod Main(String[] args)
{
System.out.println("M'illumino“];
System.out.Println("di mmenso");
}
}
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
30
Errori comuni
q Alcuni possibili errori di programmazione
•  omissione o uso errato della punteggiatura
–  ad esempio, omettere i punti e virgola — sono solitamente errori
grammaticali, ma non sempre
•  uso errato delle parentesi
–  ad esempio, dimenticare di chiudere una parentesi graffa
•  uso errato delle lettere maiuscole e minuscole
–  ad esempio, scrivere Class anziché class (errore grammaticale) —
oppure Main anziché main (errore non grammaticale)
•  errori di battitura
–  ad esempio, scrivere viod anziché void
•  dimenticare parole
•  inserire spazi erronei
–  ad esempio, scrivere Scrittore Sullo Schermo
•  invertire l’ordine delle parole o delle istruzioni
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
31
Calcolo di una radice quadrata
q Si vuole scrivere una applicazione Java che
calcola e visualizza la radice quadrata di 144
§  l’esecuzione di questo programma dovrà
visualizzare sullo schermo il numero 12
q L’applicazione farà uso della classe Math, per
calcolare la radice quadrata e della classe
System.out per la visualizzazione del risultato
q Math, come System.out e altre classi e
oggetti, è un oggetto predefinito nelle API
(Application Programming Interface) di Java
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
32
L’applicazione RadiceQuadrata
/* Applicazione che calcola e
* visualizza sullo schermo
* la radice quadrata di 144. */
class RadiceQuadrata {
public static void main(String[] args) {
double radice;
radice = Math.sqrt(144);
System.out.println(radice);
}
}
Commentare questa applicazione
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
33
Diagramma di collaborazione
per RadiceQuadrata
1.1: radice = sqrt(144)
1: main(…)
«applicazione»
RadiceQuadrata
Math
double sqrt(double n)
main(...)
1.2: println(radice)
System.out
println(double x)
Commentare questo diagramma
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
34
Stringhe e oggetti String
q Una stringa è una sequenza finita di caratteri
§  le stringhe sono un tipo di dati di uso molto
comune – consentono di rappresentare
informazioni testuali e descrittive
q Java supporta la gestione di stringhe
attraverso la classe String del package
java.lang
§  un oggetto String rappresenta una sequenza finita
di caratteri dell’alfabeto Unicode
§  gli oggetti String sanno eseguire operazioni utili
per la loro gestione facenti parte dell’interfaccia
della classe
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
35
Stringhe e oggetti String
q Il valore (o contenuto) di un oggetto String è
la stringa rappresentata da quell’oggetto
§  ad esempio, il letterale "calcolatore" è un nome,
cioè denota un oggetto String, il cui valore (stato) è
la stringa calcolatore
"calcolatore" : String
calcolatore
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
36
Letterali stringa
q Un letterale String è una stringa racchiusa tra
doppi apici " e "
§  ad esempio, "calcolatore"
§  il valore di un letterale String è la stringa racchiusa
tra apici (apici esclusi)
§  l’uso di un letterale String è equivalente alla
creazione di un oggetto di tipo String
§  un letterale String è una espressione di tipo String
•  vedremo che ogni letterale e ogni espressione ha un tipo
così come tutte le altre componenti linguistiche Java
§  ad esempio, "calcolatore" è il nome, cioè il
riferimento, di un oggetto di tipo String che ha
come valore la stringa calcolatore
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
37
Variabili e tipi
q Come già detto ad ogni variabile deve essere associato
un tipo con una apposita istruzione
§  Ad esempio per assegnare il tipo dei numeri reali ad una
variabile di nome radice si usa la seguente espressione
double radice
q Il tipo double è uno dei tipi primitivi di Java
§  esso è già predefinito in Java
§  una variabile di tipo primitivo memorizza un valore
§  una variabile di tipo double memorizza un valore numero reale
q Esistono anche i tipi riferimento
§  ogni classe definisce un tipo riferimento
§  una variabile può essere di tipo riferimento e non memorizza un
valore ma un riferimento ad un oggetto della classe
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
38
Uso di variabili riferimento
q Essendo String il nome di una classe, è
possibile dichiarare variabili di tipo String
§  si tratta di variabili riferimento cioè di variabili che
permettono di memorizzare il riferimento a un
oggetto ma non il valore dell’oggetto – che è
memorizzato in un’altra area di memoria
String stagione;
stagione = "estate";
System.out.println(stagione); // visualizza estate
stagione
"estate" : String
String
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
39
Variabili riferimento e assegnazioni
q Se a una variabile riferimento (che referenzia
già un oggetto A) viene assegnato il
riferimento a un altro oggetto B
•  il riferimento all’oggetto A memorizzato dalla variabile
viene sostituito dal riferimento all’oggetto B e l’oggetto A
continua ad esistere
String stagione;
stagione = "estate";
stagione = "inverno";
stagione
"estate" : String
String
"inverno" : String
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
40
Un oggetto può essere
referenziato da più variabili
q È possibile che un oggetto sia
contemporaneamente referenziato da più
variabili
String s, t;
s = "estate";
t = s; // copia in t il riferimento memorizzato da s
s
"estate" : String
String
t
String
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
41
Le variabili sono indipendenti
q Le variabili sono indipendenti
§  una assegnazione a una variabile modifica il valore
di una sola variabile
String s, t;
s = "estate";
t = s; // copia in t il riferimento memorizzato da s
t = "inverno";
s
"estate" : String
String
t
"inverno" : String
String
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
42
Gli oggetti String sono immutabili
q Un oggetto String rappresenta una stringa
costante, immutabile
§  dopo la creazione, il valore di un oggetto String
non può essere modificato
§  l’unico modo di interagire con un oggetto String è
mediante i metodi della classe String
§  nessun metodo della classe String modifica
l’oggetto su cui il metodo viene invocato
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
43
Uso di oggetti String
q Che cosa è un oggetto String?
§  dal punto di vista del contenuto informativo, un
oggetto String rappresenta una stringa
§  dal punto di vista comportamentale, un oggetto
String è un oggetto che sa eseguire un certo
numero di operazioni per la manipolazione di se
stesso
q La classe String è usata per rappresentare il
tipo delle stringhe
•  un insieme di elementi — le stringhe
•  un insieme di operazioni, per la manipolazione degli
elementi di un tale insieme
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
44
Il metodo int length()
q Il metodo int length() della classe String
§  calcola la lunghezza della stringa
§  la lunghezza di una stringa è il numero di caratteri
della sequenza che costituisce la stringa
q Ad esempio, l’espressione
"automobile".length() vale 10
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
45
La stringa vuota
q Una stringa vuota è una sequenza vuota di
caratteri
§  la stringa vuota è un oggetto String di lunghezza
zero
§  la stringa vuota è denotata dal letterale "“
§  l’espressione "".length() vale 0
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
46
Il metodo String concat(String x)
q La concatenazione è l’operazione che a
partire da due stringhe S e T calcola una
nuova stringa il cui valore è dato dalla
sequenza di caratteri di S seguita dalla
sequenza di caratteri di T
§  il metodo String concat(String x) della classe
String implementa l’operazione di concatenazione
di stringhe
§  crea e restituisce un nuovo oggetto String
composto dai caratteri della stringa su cui il
metodo viene invocato seguiti dai caratteri della
stringa argomento x
q Ad esempio . . .
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
47
Concatenazione di stringhe
String s, t, u;
s = "auto";
t = "mobile";
s
"auto" : String
String
t
"mobile" : String
String
u
String
u = s.concat(t); // u vale (referenzia) "automobile"
u
"automobile" : String
String
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
48
Posizione dei caratteri in una stringa
q Le posizioni dei caratteri di una stringa sono
numerate da sinistra verso destra
§  il carattere più a sinistra (il primo) ha posizione 0
§  in una stringa composta da N caratteri, il carattere
più a destra (l’ultimo) ha posizione N – 1
a u t o m o b i l e
0 1 2 3 4 5 6 7 8 9
§  in generale, l’i-esimo carattere di una stringa
occupa la posizione i–1
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
49
Il metodo
String substring(int inizio, int fine)
q Il metodo String substring(int inizio, int fine)
della classe String
§  (crea e) restituisce un nuovo oggetto String
composto dai caratteri della stringa su cui il
metodo è stato invocato che occupano le posizioni
tra inizio (inclusa) e fine (esclusa)
•  detto in altro modo, la stringa restituita comprende i
caratteri tra le posizioni inizio e fine–1 (estremi inclusi)
•  ad esempio
String s, t;
s = "automobile";
t = s.substring(2,6); // t vale "tomo"
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
50
Il metodo String substring(int inizio)
q Il metodo String substring(int inizio) della
classe String
§  (crea e) restituisce un nuovo oggetto String che
consiste dei caratteri della stringa su cui il metodo
viene invocato compresi tra quello di posizione
inizio e l’ultimo carattere della stringa (incluso)
§  ad esempio
String s, t;
s = "automobile";
t = s.substring(4); // t vale "mobile"
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
51
Pre-condizioni delle operazioni
substring
q I metodi substring sono soggetti alle seguenti
pre-condizioni
•  inizio deve essere maggiore o uguale a zero e minore o
uguale alla lunghezza della stringa
•  fine deve essere minore o uguale alla lunghezza della
stringa
•  inizio deve essere minore o uguale a fine
q In caso di violazione delle pre-condizioni
viene generato un errore al tempo di
esecuzione di tipo
§  IndexOutOfBoundsException
•  ovvero di tipo indice fuori dai limiti
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
52
Esercizio
Cosa visualizza questa applivazione ?
public class JFK {
public static void main(String[] args) {
String first = "John";
String middle = "Fitzgerald";
String last = "Kennedy";
String initials;
String firstInit, middleInit, lastInit;
firstInit = first.substring(0,1);
middleInit = middle.substring(0,1);
lastInit = last.substring(0,1);
initials = firstInit.concat(middleInit);
initials = initials.concat(lastInit);
System.out.println(initials);
}
}
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
53
Altri metodi della classe String
q La classe String ha molti metodi,
consideriamone ora alcuni altri, altri ancora
ne vedremo più avanti
§  String toUpperCase()
•  per convertire tutti i caratteri di una stringa in
MAIUSCOLE
•  ad esempio "Java".toUpperCase() costruisce la
stringa di valore JAVA
§  String toLowerCase()
•  per convertire tutti i caratteri di una stringa in minuscole
•  ad esempio "Java".toLowerCase() costruisce la
stringa di valore java
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
54
Esempio: MaiuscoleMinuscole
public class UpperLowerCase {
public static void main(String[] args) {
String s, upper, lower;
s = "Hello";
upper = s.toUpperCase();
lower = s.toLowerCase();
System.out.println(s);
System.out.print("upper = ");
System.out.println(upper);
System.out.print("lower = ");
System.out.println(lower);
}
}
Questo programma costruisce 3 stringhe distinte (che non vengono
più modificate): la stringa "Hello" iniziale, la stringa "HELLO"
denotata attraverso upper, e la stringa "hello" denotata da lower
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
55
Riepilogo della dispensa
q Cosa è un programma Java
q Cosa è una applicazione Java
q Cosa è il metodo main
q Alcuni primi esempi di applicazioni Java
§  Scrittore sullo schermo
§  Radice quadrata
q Alcuni primi esempi di classi e oggetti
§  Gli oggetti String con alcuni metodi e le loro possibili
applicazioni
Le successive diapositive sintetizzano quanto visto
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
56
Programmi Java
q In Java, ogni programma è un oggetto:
esistono due tipi di programmi Java
§  applicazioni Java
•  un programma a sé stante, che viene eseguito da un
interprete Java, chiamato macchina virtuale Java (o JVM,
Java Virtual Machine)
§  applet Java
•  un programma immerso in una pagina web, che viene
eseguito dalla JVM di un browser web
q Un programma Java consiste nella definizione
di un insieme di classi
§  una classe che modella il programma (applicazione)
§  una classe per ciascuna tipologia di oggetti
necessari per l’esecuzione del programma
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
57
Applicazioni Java
q Una applicazione è una classe applicazione
§  che definisce un oggetto classe e che sa eseguire
esclusivamente l’operazione speciale main
q In una applicazione Java
§  l’applicazione è rappresentata da un oggetto classe
§  l’utente dell’applicazione può interagire solo con alcuni
degli oggetti coinvolti dall’applicazione
§  l’utente dell’applicazione può sicuramente interagire con
l’oggetto classe che rappresenta l’applicazione
§  l’utente dell’applicazione può richiedere all’oggetto classe
che rappresenta l’applicazione solo di eseguire l’operazione
speciale main
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
58
L’applicazione ScrittoreSulloSchermo
/* Applicazione che visualizza una frase
sullo schermo. */
class ScrittoreSulloSchermo {
public static void main(String[] args) {
System.out.println("Questo corso");
System.out.println("introduce i concetti di");
System.out.println(“base dell'informatica");
}
}
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
59
Il metodo main
/* Applicazione che visualizza una frase sullo schermo. */
class ScrittoreSulloSchermo {
public static void main(String[] args) {
System.out.println("Questo corso");
System.out.println("introduce i concetti di");
System.out.println("base dell'informatica");
}
}
q Il corpo della definizione di una classe contiene, tra le
altre cose, i metodi della classe per implementare le
operazioni
q La classe ScrittoreSulloSchermo definisce un unico
metodo - di nome main - che è un metodo speciale : è
l’unica operazione la cui esecuzione può essere
richiesta dall’utente di una classe applicazione
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
60
L’applicazione RadiceQuadrata
/* Applicazione che calcola e
* visualizza sullo schermo
* la radice quadrata di 144. */
class RadiceQuadrata {
public static void main(String[] args) {
double radice;
radice = Math.sqrt(144);
System.out.println(radice);
}
}
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
61
Stringhe e oggetti String
q Una stringa è una sequenza finita di caratteri
§  le stringhe sono un tipo di dati di uso molto
comune – consentono di rappresentare
informazioni testuali e descrittive
q Java supporta la gestione di stringhe
attraverso la classe String del package
java.lang
§  un oggetto String rappresenta una sequenza finita
di caratteri dell’alfabeto Unicode
§  gli oggetti String sanno eseguire operazioni utili
per la loro gestione facenti parte dell’interfaccia
della classe
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
62
Metodi della classe String
q La classe String ha, tra gli altri, i seguenti
metodi
§  int length()
§  String concat(String x)
§  String substring(int inizio, int fine)
§  String substring(int inizio)
§  String toUpperCase()
§  String toLowerCase()
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
63
Riferimenti al libro di testo
q Per lo studio di questi argomenti si fa riferimento al
libro di testo, e in particolare ai capitoli
§ 
§ 
§ 
§ 
3 su Oggetti e Java
7 su Leggibilità
9 su Variabili e assegnazione
12 sulle Stringhe
q In questa lezione abbiamo omesso gli argomenti
trattati nei seguenti paragrafi
§ 
§ 
§ 
§ 
3.2.3 – Perimetro di un triangolo
3.2.4 – Lettura e somma di due numeri interi
3.2.6 – Una classe per istanziare oggetti
Dal 12.5 al 12.10
•  Li vedremo tutti più avanti
§  3.2.5 – Robot in un labirinto
•  Che invece non farà parte del programma d’esame
http://www.dia.uniroma3.it/~java/fondinf/
Programmazione Java
64