Sei sulla pagina 1di 167

Capitolo 2

Protocolli e contratti


c 2005-2010 Pearson Education Italia Capitolo 2 - 1 / 59
Sommario: Protocolli e contratti
1 Nozioni base della programmazione OO
La programmazione ad oggetti
Protocolli e contratti
Classi
2 Primi esempi di classi e oggetti
La classe ConsoleOutputManager
Creazione degli oggetti
Invocazione di un metodo
La classe ConsoleInputManager
3 Prototipi e segnature
4 La classe String
5 Variabili e tipi
Dichiarazione e definizione di variabili
Tipi primitivi e tipi riferimento


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 2 / 59
Paradigma di programmazione

Paradigma
...un insieme di teorie, standard e metodi che rappresentano un modo di
organizzare la conoscenza, cioè un modo di guardare il mondo.
T. Kuhn, La struttura delle rivoluzioni scientifiche, 1970


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 3 / 59
Paradigma di programmazione

Paradigma
...un insieme di teorie, standard e metodi che rappresentano un modo di
organizzare la conoscenza, cioè un modo di guardare il mondo.
T. Kuhn, La struttura delle rivoluzioni scientifiche, 1970

Un paradigma di programmazione fornisce un metodo per:


concettualizzare il processo di computazione


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 3 / 59
Paradigma di programmazione

Paradigma
...un insieme di teorie, standard e metodi che rappresentano un modo di
organizzare la conoscenza, cioè un modo di guardare il mondo.
T. Kuhn, La struttura delle rivoluzioni scientifiche, 1970

Un paradigma di programmazione fornisce un metodo per:


concettualizzare il processo di computazione
organizzare e strutturare i compiti che un calcolatore deve svolgere


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 3 / 59
Paradigma di programmazione

Paradigma
...un insieme di teorie, standard e metodi che rappresentano un modo di
organizzare la conoscenza, cioè un modo di guardare il mondo.
T. Kuhn, La struttura delle rivoluzioni scientifiche, 1970

Un paradigma di programmazione fornisce un metodo per:


concettualizzare il processo di computazione
organizzare e strutturare i compiti che un calcolatore deve svolgere

OOP è un paradigma contrapposto a quelli tradizionali:


imperativo (Pascal, C, . . . )
funzionale (LISP, FP, . . . )
logico (Prolog)


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 3 / 59
Esempio: Acquisti su Internet

INTERNET
BOOKSHOP

BANCA BANCA
D’APPOGGIO UTENTE

UTENTE


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 4 / 59
Programmazione a oggetti

Quali sono le entità rilevanti per la soluzione del problema?


Come posso rappresentarle?

00
11 000
111
00
11 000
111
00
11 000
111
00
11 000
111
00
11 000 000
111 111
00
11 000
111
00
11 000
111 000
111
00
11 000
111 000
111
00
11 000
111 000
111
00
11 000
111
00
11 000
111
00
11

DOMINIO DEL PROBLEMA DOMINIO DELLA SOLUZIONE


(OGGETTI SW INTERAGENTI)


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 5 / 59
Esempio: PinoPasticcino

Vogliamo ordinare una torta per una festa di compleanno.


Come agiamo ?


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 6 / 59
Esempio: PinoPasticcino

Vogliamo ordinare una torta per una festa di compleanno.


Come agiamo ?

Andiamo dal nostro pasticcere di fiducia (PinoPasticcino)


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 6 / 59
Esempio: PinoPasticcino

Vogliamo ordinare una torta per una festa di compleanno.


Come agiamo ?

Andiamo dal nostro pasticcere di fiducia (PinoPasticcino)

Gli comunichiamo il tipo della torta e il giorno in cui passeremo a


ritirarla


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 6 / 59
Esempio: PinoPasticcino

Vogliamo ordinare una torta per una festa di compleanno.


Come agiamo ?

Andiamo dal nostro pasticcere di fiducia (PinoPasticcino)

Gli comunichiamo il tipo della torta e il giorno in cui passeremo a


ritirarla

Astraendo dai dettagli: inviamo un messaggio al commesso della


pasticceria


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 6 / 59
Esempio: PinoPasticcino

Per risolvere il problema abbiamo:


individuato un agente appropriato
inviato a tale agente un messaggio contenente la nostra richiesta


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 7 / 59
Esempio: PinoPasticcino

Per risolvere il problema abbiamo:


individuato un agente appropriato
inviato a tale agente un messaggio contenente la nostra richiesta

Osserviamo che PinoPasticcino


si assume la responsabilità di soddisfare la nostra richiesta


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 7 / 59
Esempio: PinoPasticcino

Per risolvere il problema abbiamo:


individuato un agente appropriato
inviato a tale agente un messaggio contenente la nostra richiesta

Osserviamo che PinoPasticcino


si assume la responsabilità di soddisfare la nostra richiesta

utilizzerà un qualche metodo (algoritmo) per soddisfarla


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 7 / 59
Oggetti
Gli oggetti sono caratterizzati da stato e comportamento.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 8 / 59
Oggetti
Gli oggetti sono caratterizzati da stato e comportamento.

Stato
Insieme delle proprietà che caratterizzano l’oggetto in un determinato
istante.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 8 / 59
Oggetti
Gli oggetti sono caratterizzati da stato e comportamento.

Stato
Insieme delle proprietà che caratterizzano l’oggetto in un determinato
istante.

cane: nome, colore, razza, età,. . .


auto: colore, potenza, livello carburante, velocità,. . .


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 8 / 59
Oggetti
Gli oggetti sono caratterizzati da stato e comportamento.

Stato
Insieme delle proprietà che caratterizzano l’oggetto in un determinato
istante.

cane: nome, colore, razza, età,. . .


auto: colore, potenza, livello carburante, velocità,. . .

Comportamento
Insieme delle azioni che l’oggetto può eseguire.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 8 / 59
Oggetti
Gli oggetti sono caratterizzati da stato e comportamento.

Stato
Insieme delle proprietà che caratterizzano l’oggetto in un determinato
istante.

cane: nome, colore, razza, età,. . .


auto: colore, potenza, livello carburante, velocità,. . .

Comportamento
Insieme delle azioni che l’oggetto può eseguire.

cane: abbaiare, scodinzolare, mangiare,. . .


auto: accelerare, consumare, sterzare,. . .

c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 8 / 59
Messaggi e oggetti

Nella programmazione ad oggetti un’azione viene iniziata inviando un


messaggio ad un agente (un oggetto) responsabile di svolgerla.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 9 / 59
Messaggi e oggetti

Nella programmazione ad oggetti un’azione viene iniziata inviando un


messaggio ad un agente (un oggetto) responsabile di svolgerla.

Il messaggio codifica la richiesta di un’azione ed è corredato con


l’informazione necessaria (argomenti) a soddisfarla


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 9 / 59
Messaggi e oggetti

Nella programmazione ad oggetti un’azione viene iniziata inviando un


messaggio ad un agente (un oggetto) responsabile di svolgerla.

Il messaggio codifica la richiesta di un’azione ed è corredato con


l’informazione necessaria (argomenti) a soddisfarla

ordinaTorta(torta,data)


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 9 / 59
Messaggi e oggetti

Nella programmazione ad oggetti un’azione viene iniziata inviando un


messaggio ad un agente (un oggetto) responsabile di svolgerla.

Il messaggio codifica la richiesta di un’azione ed è corredato con


l’informazione necessaria (argomenti) a soddisfarla

ordinaTorta(torta,data)

Il ricevente, se accetta il messaggio, si assume la responsabilità di


portare a compimento la relativa azione


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 9 / 59
Messaggi e oggetti

Nella programmazione ad oggetti un’azione viene iniziata inviando un


messaggio ad un agente (un oggetto) responsabile di svolgerla.

Il messaggio codifica la richiesta di un’azione ed è corredato con


l’informazione necessaria (argomenti) a soddisfarla

ordinaTorta(torta,data)

Il ricevente, se accetta il messaggio, si assume la responsabilità di


portare a compimento la relativa azione

In risposta al messaggio il ricevente eseguirà il metodo indicato dal


messaggio per soddisfare la richiesta


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 9 / 59
Protocolli e contratti

Protocollo (interfaccia)
Definisce le regole di comunicazione con l’oggetto, ovvero:
l’insieme dei messaggi
il formato dei messaggi
che l’oggetto può riconoscere.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 10 / 59
Protocolli e contratti

Protocollo (interfaccia)
Definisce le regole di comunicazione con l’oggetto, ovvero:
l’insieme dei messaggi
il formato dei messaggi
che l’oggetto può riconoscere.

Contratto
Associato ad ogni messaggio
Descrive il modo in cui l’oggetto garantisce di rispondere al messaggio


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 10 / 59
PinoPasticcino è un Pasticcere

E se fossi entrato in una pasticceria a caso?


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 11 / 59
PinoPasticcino è un Pasticcere

E se fossi entrato in una pasticceria a caso?

In realtà avrei potuto risolvere il mio problema entrando in una


qualunque pasticceria


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 11 / 59
PinoPasticcino è un Pasticcere

E se fossi entrato in una pasticceria a caso?

In realtà avrei potuto risolvere il mio problema entrando in una


qualunque pasticceria

Infatti, in base alla mia esperienza, ogni Pasticceria è in grado di


“rispondere” al messaggio

ordinaTorta(torta,data)

per il solo fatto di appartenere alla categoria dei pasticceri.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 11 / 59
PinoPasticcino è un Pasticcere

E se fossi entrato in una pasticceria a caso?

In realtà avrei potuto risolvere il mio problema entrando in una


qualunque pasticceria

Infatti, in base alla mia esperienza, ogni Pasticceria è in grado di


“rispondere” al messaggio

ordinaTorta(torta,data)

per il solo fatto di appartenere alla categoria dei pasticceri.

Una categoria di agenti che condividono il medesimo comportamento


prende il nome di classe


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 11 / 59
Classi in Java

Classe
Una classe è un modello che specifica lo stato e il comportamento di tutte
le sue istanze (oggetti).


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 12 / 59
Classi in Java

Classe
Una classe è un modello che specifica lo stato e il comportamento di tutte
le sue istanze (oggetti).

Tutti gli oggetti sono istanze di una classe


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 12 / 59
Classi in Java

Classe
Una classe è un modello che specifica lo stato e il comportamento di tutte
le sue istanze (oggetti).

Tutti gli oggetti sono istanze di una classe

Il metodo utilizzato da un oggetto per rispondere a un messaggio è


determinato dalla classe da cui è stato istanziato


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 12 / 59
Classi in Java

Classe
Una classe è un modello che specifica lo stato e il comportamento di tutte
le sue istanze (oggetti).

Tutti gli oggetti sono istanze di una classe

Il metodo utilizzato da un oggetto per rispondere a un messaggio è


determinato dalla classe da cui è stato istanziato

Tutti gli oggetti ottenuti istanziando una medesima classe rispondono


ad un certo messaggio mediante il medesimo metodo


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 12 / 59
Esempio: la classe Pasticceria


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 13 / 59
Riassunto

Metodo: porzione di codice che viene eseguita da un oggetto in


risposta ad un messaggio


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 14 / 59
Riassunto

Metodo: porzione di codice che viene eseguita da un oggetto in


risposta ad un messaggio

stato (variabili interne)
Oggetto =
comportamento (metodi)


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 14 / 59
Riassunto

Metodo: porzione di codice che viene eseguita da un oggetto in


risposta ad un messaggio

stato (variabili interne)
Oggetto =
comportamento (metodi)
Il comportamento di un oggetto è definito da:
1 Interfaccia: formato dei messaggi accettati dall’oggetto
2 Contratto: descrizione delle operazioni eseguite da un metodo


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 14 / 59
Riassunto

Metodo: porzione di codice che viene eseguita da un oggetto in


risposta ad un messaggio

stato (variabili interne)
Oggetto =
comportamento (metodi)
Il comportamento di un oggetto è definito da:
1 Interfaccia: formato dei messaggi accettati dall’oggetto
2 Contratto: descrizione delle operazioni eseguite da un metodo

Classe:
ogni oggetto è istanza di una qualche classe
la classe definisce i metodi eseguibili dalle proprie istanze
tutti gli oggetti di una classe rispondono ai messaggi nello stesso modo


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 14 / 59
Sommario: Protocolli e contratti
1 Nozioni base della programmazione OO
La programmazione ad oggetti
Protocolli e contratti
Classi
2 Primi esempi di classi e oggetti
La classe ConsoleOutputManager
Creazione degli oggetti
Invocazione di un metodo
La classe ConsoleInputManager
3 Prototipi e segnature
4 La classe String
5 Variabili e tipi
Dichiarazione e definizione di variabili
Tipi primitivi e tipi riferimento


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 15 / 59
Programmi Java

Un programma è costituito da un insieme di oggetti che cooperano per


realizzare un obiettivo


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 16 / 59
Programmi Java

Un programma è costituito da un insieme di oggetti che cooperano per


realizzare un obiettivo
Per realizzare un programma dovremo:


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 16 / 59
Programmi Java

Un programma è costituito da un insieme di oggetti che cooperano per


realizzare un obiettivo
Per realizzare un programma dovremo:
conoscere le classi (fondamentali) che abbiamo a disposizione


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 16 / 59
Programmi Java

Un programma è costituito da un insieme di oggetti che cooperano per


realizzare un obiettivo
Per realizzare un programma dovremo:
conoscere le classi (fondamentali) che abbiamo a disposizione

costruire e memorizzare gli oggetti che ci servono per realizzare un


compito


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 16 / 59
Programmi Java

Un programma è costituito da un insieme di oggetti che cooperano per


realizzare un obiettivo
Per realizzare un programma dovremo:
conoscere le classi (fondamentali) che abbiamo a disposizione

costruire e memorizzare gli oggetti che ci servono per realizzare un


compito

inviare messaggi agli oggetti


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 16 / 59
ConsoleOutputManager (prog.io)

Contratto: ConsoleOutputManager
Le sue istanze realizzano canali di comunicazione con il dispositivo di
output standard, cioè con il video.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 17 / 59
ConsoleOutputManager (prog.io)

Contratto: ConsoleOutputManager
Le sue istanze realizzano canali di comunicazione con il dispositivo di
output standard, cioè con il video.

La classe mette a disposizione metodi che consentono di visualizzare a


video vari tipi di dati


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 17 / 59
ConsoleOutputManager (prog.io)

Contratto: ConsoleOutputManager
Le sue istanze realizzano canali di comunicazione con il dispositivo di
output standard, cioè con il video.

La classe mette a disposizione metodi che consentono di visualizzare a


video vari tipi di dati
Ad un’istanza di questa classe possiamo inviare il messaggio

println("Ecco il mio primo programma")

che ha l’effetto di visualizzare sul video la stringa (sequenza di


caratteri Unicode)

Ecco il mio primo programma


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 17 / 59
Costruzione degli oggetti
Utilizziamo un metodo speciale detto costruttore


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 18 / 59
Costruzione degli oggetti
Utilizziamo un metodo speciale detto costruttore
Espressione di creazione
new nome del costruttore(lista argomenti)


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 18 / 59
Costruzione degli oggetti
Utilizziamo un metodo speciale detto costruttore
Espressione di creazione
new nome del costruttore(lista argomenti)

new: operatore unario prefisso


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 18 / 59
Costruzione degli oggetti
Utilizziamo un metodo speciale detto costruttore
Espressione di creazione
new nome del costruttore(lista argomenti)

new: operatore unario prefisso


nome del costruttore(lista argomenti): operando


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 18 / 59
Costruzione degli oggetti
Utilizziamo un metodo speciale detto costruttore
Espressione di creazione
new nome del costruttore(lista argomenti)

new: operatore unario prefisso


nome del costruttore(lista argomenti): operando
nome del costruttore: coincide con il nome della classe
lista argomenti: dipende dai costruttori che la classe mette a
disposizione; possono servire per inizializzare lo stato dell’oggetto


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 18 / 59
Costruzione degli oggetti
Utilizziamo un metodo speciale detto costruttore
Espressione di creazione
new nome del costruttore(lista argomenti)

new: operatore unario prefisso


nome del costruttore(lista argomenti): operando
nome del costruttore: coincide con il nome della classe
lista argomenti: dipende dai costruttori che la classe mette a
disposizione; possono servire per inizializzare lo stato dell’oggetto

Il risultato dell’espressione è un riferimento all’oggetto costruito


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 18 / 59
Costruzione degli oggetti
Utilizziamo un metodo speciale detto costruttore
Espressione di creazione
new nome del costruttore(lista argomenti)

new: operatore unario prefisso


nome del costruttore(lista argomenti): operando
nome del costruttore: coincide con il nome della classe
lista argomenti: dipende dai costruttori che la classe mette a
disposizione; possono servire per inizializzare lo stato dell’oggetto

Il risultato dell’espressione è un riferimento all’oggetto costruito

new ConsoleOutputManager()


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 18 / 59
Memorizzazione del riferimento

Dobbiamo:
dichiarare una variabile del tipo opportuno


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 19 / 59
Memorizzazione del riferimento

Dobbiamo:
dichiarare una variabile del tipo opportuno
assegnarle il valore restituito dall’espressione di creazione


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 19 / 59
Memorizzazione del riferimento

Dobbiamo:
dichiarare una variabile del tipo opportuno
assegnarle il valore restituito dall’espressione di creazione

ConsoleOutputManager video;
video = new ConsoleOutputManager();


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 19 / 59
Memorizzazione del riferimento

Dobbiamo:
dichiarare una variabile del tipo opportuno
assegnarle il valore restituito dall’espressione di creazione

ConsoleOutputManager video;
video = new ConsoleOutputManager();

Oppure

ConsoleOutputManager video = new ConsoleOutputManager();


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 19 / 59
Situazione in memoria

ConsoleOutputManager video = new ConsoleOutputManager();


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 20 / 59
Situazione in memoria

ConsoleOutputManager video = new ConsoleOutputManager();

video è una variabile che contiene come valore un riferimento a un


oggetto


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 20 / 59
Situazione in memoria

ConsoleOutputManager video = new ConsoleOutputManager();

video è una variabile che contiene come valore un riferimento a un


oggetto

l’oggetto contiene
le informazioni che ne caratterizzano lo stato
le informazioni che servono alla JVM per la gestione
dell’oggetto

c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 20 / 59
Espressioni

Le espressioni sono sequenze di operatori e di operandi costruite secondo le


regole sintattiche del linguaggio.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 21 / 59
Espressioni

Le espressioni sono sequenze di operatori e di operandi costruite secondo le


regole sintattiche del linguaggio.

Hanno un tipo complessivo determinato dagli operatori e dal tipo


degli operandi


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 21 / 59
Espressioni

Le espressioni sono sequenze di operatori e di operandi costruite secondo le


regole sintattiche del linguaggio.

Hanno un tipo complessivo determinato dagli operatori e dal tipo


degli operandi

Danno luogo, in fase di esecuzione, a un valore


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 21 / 59
Espressione di creazione

Espressione di creazione
new nome del costruttore(lista argomenti)

Tipo la classe dell’oggetto costruito


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 22 / 59
Espressione di creazione

Espressione di creazione
new nome del costruttore(lista argomenti)

Tipo la classe dell’oggetto costruito

Valore il riferimento a un oggetto della classe specificata dal


costruttore


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 22 / 59
Espressione di creazione

Espressione di creazione
new nome del costruttore(lista argomenti)

Tipo la classe dell’oggetto costruito

Valore il riferimento a un oggetto della classe specificata dal


costruttore

Esempio
new ConsoleOutputManager()

Tipo ConsoleOutputManager


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 22 / 59
Espressione di creazione

Espressione di creazione
new nome del costruttore(lista argomenti)

Tipo la classe dell’oggetto costruito

Valore il riferimento a un oggetto della classe specificata dal


costruttore

Esempio
new ConsoleOutputManager()

Tipo ConsoleOutputManager

Valore riferimento ad un oggetto di tipo ConsoleOutputManager


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 22 / 59
Invocazione di un metodo

È l’operazione che ci permette di mandare un messaggio ad un oggetto


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 23 / 59
Invocazione di un metodo

È l’operazione che ci permette di mandare un messaggio ad un oggetto


Invocazione di metodo
riferimento a oggetto.nome metodo(lista argomenti)


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 23 / 59
Invocazione di un metodo

È l’operazione che ci permette di mandare un messaggio ad un oggetto


Invocazione di metodo
riferimento a oggetto.nome metodo(lista argomenti)

Esempio
ConsoleOutputManager video = new ConsoleOutputManager();
video.println("Ecco il mio primo programma");


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 23 / 59
L’applicazione

import prog.io.ConsoleOutputManager;

class PrimoProgramma {

public static void main(String[] args) {


ConsoleOutputManager video = new ConsoleOutputManager();

video.println("Ecco il mio primo programma!");


}


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 24 / 59
Direttive di importazione

import prog.io.ConsoleOutputManager;

Non sono istruzioni, e per questo devono stare al di fuori della classe


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 25 / 59
Direttive di importazione

import prog.io.ConsoleOutputManager;

Non sono istruzioni, e per questo devono stare al di fuori della classe
La direttiva qui sopra informa il compilatore che verranno usati tipi e
metodi della classe ConsoleOutputManager


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 25 / 59
Direttive di importazione

import prog.io.ConsoleOutputManager;

Non sono istruzioni, e per questo devono stare al di fuori della classe
La direttiva qui sopra informa il compilatore che verranno usati tipi e
metodi della classe ConsoleOutputManager
Il linker si occuperà di trovare il file ConsoleOutputManager.class
contenente il bytecode della classe, incluso il codice per eseguire i
metodi


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 25 / 59
Direttive di importazione

import prog.io.ConsoleOutputManager;

Non sono istruzioni, e per questo devono stare al di fuori della classe
La direttiva qui sopra informa il compilatore che verranno usati tipi e
metodi della classe ConsoleOutputManager
Il linker si occuperà di trovare il file ConsoleOutputManager.class
contenente il bytecode della classe, incluso il codice per eseguire i
metodi
Come alternativa a import posso usare

prog.io.ConsoleOutputManager video;
video = new prog.io.ConsoleOutputManager();


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 25 / 59
Compilazione ed esecuzione

Compilazione
> javac PrimoProgramma.java


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 26 / 59
Compilazione ed esecuzione

Compilazione
> javac PrimoProgramma.java

Viene generato il file PrimoProgramma.class contenente il bytecode


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 26 / 59
Compilazione ed esecuzione

Compilazione
> javac PrimoProgramma.java

Viene generato il file PrimoProgramma.class contenente il bytecode

Esecuzione
> java PrimoProgramma
Ecco il mio primo programma!

PrimoProgramma.java


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 26 / 59
ConsoleInputManager (prog.io)

Contratto: ConsoleInputManager
Le sue istanze realizzano canali di comunicazione con il dispositivo di input
standard, cioè la tastiera.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 27 / 59
ConsoleInputManager (prog.io)

Contratto: ConsoleInputManager
Le sue istanze realizzano canali di comunicazione con il dispositivo di input
standard, cioè la tastiera.

Metodi
readLine legge una riga di testo


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 27 / 59
ConsoleInputManager (prog.io)

Contratto: ConsoleInputManager
Le sue istanze realizzano canali di comunicazione con il dispositivo di input
standard, cioè la tastiera.

Metodi
readLine legge una riga di testo

readInt legge un numero intero

...


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 27 / 59
Esempio
import prog.io.ConsoleOutputManager;
import prog.io.ConsoleInputManager;

class Pappagallo {
public static void main(String[] args) {
//predisposizione dei canali di comunicazione
ConsoleInputManager tastiera = new ConsoleInputManager();
ConsoleOutputManager video = new ConsoleOutputManager();

//lettura e comunicazione
String messaggio = tastiera.readLine();
video.println(messaggio);
}
}

Pappagallo.java

c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 28 / 59
Sommario: Protocolli e contratti
1 Nozioni base della programmazione OO
La programmazione ad oggetti
Protocolli e contratti
Classi
2 Primi esempi di classi e oggetti
La classe ConsoleOutputManager
Creazione degli oggetti
Invocazione di un metodo
La classe ConsoleInputManager
3 Prototipi e segnature
4 La classe String
5 Variabili e tipi
Dichiarazione e definizione di variabili
Tipi primitivi e tipi riferimento


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 29 / 59
Segnature e prototipi

Segnatura di un metodo
È costituita da:
nome del metodo
lista degli argomenti con il relativo tipo


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 30 / 59
Segnature e prototipi

Segnatura di un metodo
È costituita da:
nome del metodo
lista degli argomenti con il relativo tipo

Esempio
println(String s)

nome lista argomenti


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 30 / 59
Segnature e prototipi
Prototipo di un metodo
È costituito da:
tipo del valore restituito dal metodo
nome del metodo
lista degli argomenti con il relativo tipo


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 31 / 59
Segnature e prototipi
Prototipo di un metodo
È costituito da:
tipo del valore restituito dal metodo
nome del metodo
lista degli argomenti con il relativo tipo

prototipo = tipo restituito + segnatura


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 31 / 59
Segnature e prototipi
Prototipo di un metodo
È costituito da:
tipo del valore restituito dal metodo
nome del metodo
lista degli argomenti con il relativo tipo

prototipo = tipo restituito + segnatura

Esempio
String readline()

tipo restituito nome lista argomenti (vuota)


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 31 / 59
Alcuni metodi di ConsoleOutputManager

tipo restituito nome del metodo argomenti


void print int
void print riferimento a String
void println nessuno
void println int
void println riferimento a String

void
È una parola chiave

Indica che il metodo non restituisce nulla


Saluto.java


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 32 / 59
Alcuni metodi di ConsoleOutputManager

tipo restituito nome del metodo argomenti


void print int
void print riferimento a String
void println nessuno
void println int
void println riferimento a String

Overloading (“sovraccaricamento”)
Possibilità di avere metodi con lo stesso nome ma segnatura diversa

Il compilatore è in grado di capire quale metodo intendiamo invocare


in base al modo in cui lo invochiamo (alla lista degli argomenti che
forniamo)
Somma.java


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 32 / 59
Sommario: Protocolli e contratti
1 Nozioni base della programmazione OO
La programmazione ad oggetti
Protocolli e contratti
Classi
2 Primi esempi di classi e oggetti
La classe ConsoleOutputManager
Creazione degli oggetti
Invocazione di un metodo
La classe ConsoleInputManager
3 Prototipi e segnature
4 La classe String
5 Variabili e tipi
Dichiarazione e definizione di variabili
Tipi primitivi e tipi riferimento


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 33 / 59
La classe String

Contratto: String
Le istanze della classe String modellano stringhe, cioè sequenze arbitrarie
di caratteri Unicode


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 34 / 59
La classe String

Contratto: String
Le istanze della classe String modellano stringhe, cioè sequenze arbitrarie
di caratteri Unicode

Appartiene al package java.lang che non è necessario importare


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 34 / 59
La classe String

Contratto: String
Le istanze della classe String modellano stringhe, cioè sequenze arbitrarie
di caratteri Unicode

Appartiene al package java.lang che non è necessario importare


Mette a disposizione (fra gli altri) un costruttore che riceve come
argomento una sequenza di caratteri compresa fra doppi apici


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 34 / 59
La classe String

Contratto: String
Le istanze della classe String modellano stringhe, cioè sequenze arbitrarie
di caratteri Unicode

Appartiene al package java.lang che non è necessario importare


Mette a disposizione (fra gli altri) un costruttore che riceve come
argomento una sequenza di caratteri compresa fra doppi apici

String s = new String("Java");


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 34 / 59
La classe String

Contratto: String
Le istanze della classe String modellano stringhe, cioè sequenze arbitrarie
di caratteri Unicode

Appartiene al package java.lang che non è necessario importare


Mette a disposizione (fra gli altri) un costruttore che riceve come
argomento una sequenza di caratteri compresa fra doppi apici

String s = new String("Java");

Stato: La stringa rappresentata dall’oggetto


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 34 / 59
La classe String

Contratto: String
Le istanze della classe String modellano stringhe, cioè sequenze arbitrarie
di caratteri Unicode

Appartiene al package java.lang che non è necessario importare


Mette a disposizione (fra gli altri) un costruttore che riceve come
argomento una sequenza di caratteri compresa fra doppi apici

String s = new String("Java");

Stato: La stringa rappresentata dall’oggetto


Comportamento: Vari metodi per manipolare stringhe


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 34 / 59
Situazione in memoria

s
String

"Java"


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 35 / 59
Letterali di tipo String
Letterali
Rappresentano i valori di un tipo all’interno di un programma Java

int x = 3;


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 36 / 59
Letterali di tipo String
Letterali
Rappresentano i valori di un tipo all’interno di un programma Java

int x = 3;

Un letterale di tipo String è una sequenza di caratteri compresi fra


doppi apici
Il linguaggio fornisce un meccanismo implicito per creare oggetti di
tipo String ricorrendo semplicemente al letterale


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 36 / 59
Letterali di tipo String
Letterali
Rappresentano i valori di un tipo all’interno di un programma Java

int x = 3;

Un letterale di tipo String è una sequenza di caratteri compresi fra


doppi apici
Il linguaggio fornisce un meccanismo implicito per creare oggetti di
tipo String ricorrendo semplicemente al letterale

String s = "Java";

è equivalente a

String s = new String("Java");


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 36 / 59
Sequenze di escape: notazione esadecimale

La sequenza di escape ’\uXXXX’ rappresenta un carattere Unicode


(due byte) in notazione esadecimale


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 37 / 59
Sequenze di escape: notazione esadecimale

La sequenza di escape ’\uXXXX’ rappresenta un carattere Unicode


(due byte) in notazione esadecimale

X ∈ {0, 1, . . . , 9, A, B, C , D, E , F }


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 37 / 59
Sequenze di escape: notazione esadecimale

La sequenza di escape ’\uXXXX’ rappresenta un carattere Unicode


(due byte) in notazione esadecimale

X ∈ {0, 1, . . . , 9, A, B, C , D, E , F }

(X3 X2 X1 X0 )16 = X3 × 163 + X2 × 162 + X1 × 161 + X0


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 37 / 59
Sequenze di escape: notazione esadecimale

La sequenza di escape ’\uXXXX’ rappresenta un carattere Unicode


(due byte) in notazione esadecimale

X ∈ {0, 1, . . . , 9, A, B, C , D, E , F }

(X3 X2 X1 X0 )16 = X3 × 163 + X2 × 162 + X1 × 161 + X0

(FFFF )16 = 164 − 1 = 65535


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 37 / 59
Sequenze di escape

Alcuni caratteri che hanno un significato particolare possono essere


rappresentati mediante sequenze di escape:

Sequenza di escape Unicode Significato


\b \u0008 backspace BS
\t \u0009 horizontal tab HT
\n \u000a linefeed LF
\f \u000c form feed FF
\r \u000d carriage return CR
\" \u0022 double quote
\’ \u0027 single quote ’
\\ \u005c backslash

Escape.java


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 38 / 59
Differenza Unicode e sequenze di escape

I letterali del tipo \uXXXX nel file sorgente vengono subito rimpiazzati dal
compilatore con i caratteri Unicode corrispondenti


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 39 / 59
Differenza Unicode e sequenze di escape

I letterali del tipo \uXXXX nel file sorgente vengono subito rimpiazzati dal
compilatore con i caratteri Unicode corrispondenti

L’invocazione di metodo
video.println("Un doppio apice: \" ");

stampa a video

Un doppio apice: "


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 39 / 59
Differenza Unicode e sequenze di escape

I letterali del tipo \uXXXX nel file sorgente vengono subito rimpiazzati dal
compilatore con i caratteri Unicode corrispondenti

L’invocazione di metodo
video.println("Un doppio apice: \" ");

stampa a video

Un doppio apice: "

L’invocazione di metodo
println("Un doppio apice: \u0022 ")

produce un errore in compilazione



c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 39 / 59
public String toUpperCase()

tipo restituito nome del metodo argomenti


riferimento a String toUpperCase nessuno


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 40 / 59
public String toUpperCase()

tipo restituito nome del metodo argomenti


riferimento a String toUpperCase nessuno

Contratto
Restituisce come risultato il riferimento a una nuova stringa costituita dagli
stessi caratteri della stringa che esegue il metodo, con l’eccezione delle
lettere minuscole, che sono trasformate nelle maiuscole corrispondenti.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 40 / 59
public String toUpperCase()

tipo restituito nome del metodo argomenti


riferimento a String toUpperCase nessuno

Contratto
Restituisce come risultato il riferimento a una nuova stringa costituita dagli
stessi caratteri della stringa che esegue il metodo, con l’eccezione delle
lettere minuscole, che sono trasformate nelle maiuscole corrispondenti.

Esempi
(1) String s1 = "Ciao";
String s2 = s1.toUpperCase();


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 40 / 59
public String toUpperCase()

tipo restituito nome del metodo argomenti


riferimento a String toUpperCase nessuno

Contratto
Restituisce come risultato il riferimento a una nuova stringa costituita dagli
stessi caratteri della stringa che esegue il metodo, con l’eccezione delle
lettere minuscole, che sono trasformate nelle maiuscole corrispondenti.

Esempi
(1) String s1 = "Ciao";
String s2 = s1.toUpperCase();

(2) String s2 = "Ciao".toUpperCase();

Pappagallo2.java

c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 40 / 59
Osservazione

...
String messaggio = tastiera.readLine();
String risposta = messaggio.toUpperCase();
...

String
messaggio
"Ciao"

risposta

String

"CIAO"


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 41 / 59
Osservazione

...
String messaggio = tastiera.readLine();
String risposta = messaggio.toUpperCase();
...

String
messaggio
"Ciao"

risposta

String

"CIAO"

Le stringhe sono oggetti immutabili


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 41 / 59
public String toLowerCase()

tipo restituito nome del metodo argomenti


riferimento a String toLowerCase nessuno


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 42 / 59
public String toLowerCase()

tipo restituito nome del metodo argomenti


riferimento a String toLowerCase nessuno

Contratto
Restituisce come risultato il riferimento a una nuova stringa costituita dagli
stessi caratteri della stringa che esegue il metodo, con l’eccezione delle
lettere maiuscole, che sono trasformate nelle minuscole corrispondenti.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 42 / 59
public String toLowerCase()

tipo restituito nome del metodo argomenti


riferimento a String toLowerCase nessuno

Contratto
Restituisce come risultato il riferimento a una nuova stringa costituita dagli
stessi caratteri della stringa che esegue il metodo, con l’eccezione delle
lettere maiuscole, che sono trasformate nelle minuscole corrispondenti.

Esempi
(1) String s1 = "CIAO";
String s2 = s1.toLowerCase();


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 42 / 59
public String toLowerCase()

tipo restituito nome del metodo argomenti


riferimento a String toLowerCase nessuno

Contratto
Restituisce come risultato il riferimento a una nuova stringa costituita dagli
stessi caratteri della stringa che esegue il metodo, con l’eccezione delle
lettere maiuscole, che sono trasformate nelle minuscole corrispondenti.

Esempi
(1) String s1 = "CIAO";
String s2 = s1.toLowerCase();

(2) String s2 = "CIAO".toLowerCase();


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 42 / 59
public int length()

tipo restituito nome del metodo argomenti


int length nessuno


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 43 / 59
public int length()

tipo restituito nome del metodo argomenti


int length nessuno

Contratto
Restituisce un valore di tipo int, cioè un numero intero, uguale alla
lunghezza della stringa rappresentata dall’oggetto che esegue il metodo.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 43 / 59
public int length()

tipo restituito nome del metodo argomenti


int length nessuno

Contratto
Restituisce un valore di tipo int, cioè un numero intero, uguale alla
lunghezza della stringa rappresentata dall’oggetto che esegue il metodo.

(1) "Ciao".length() restituisce 4


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 43 / 59
public int length()

tipo restituito nome del metodo argomenti


int length nessuno

Contratto
Restituisce un valore di tipo int, cioè un numero intero, uguale alla
lunghezza della stringa rappresentata dall’oggetto che esegue il metodo.

(1) "Ciao".length() restituisce 4

(2) "".length() restituisce 0


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 43 / 59
public int length()

tipo restituito nome del metodo argomenti


int length nessuno

Contratto
Restituisce un valore di tipo int, cioè un numero intero, uguale alla
lunghezza della stringa rappresentata dall’oggetto che esegue il metodo.

(1) "Ciao".length() restituisce 4

(2) "".length() restituisce 0

Il letterale "" rappresenta la stringa vuota


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 43 / 59
public String concat(String str)

tipo restituito nome del metodo argomenti


riferimento a String concat riferimento a String


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 44 / 59
public String concat(String str)

tipo restituito nome del metodo argomenti


riferimento a String concat riferimento a String

Contratto
Restituisce un riferimento alla stringa ottenuta concatenando alla stringa
che esegue il metodo la stringa fornita come argomento.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 44 / 59
public String concat(String str)

tipo restituito nome del metodo argomenti


riferimento a String concat riferimento a String

Contratto
Restituisce un riferimento alla stringa ottenuta concatenando alla stringa
che esegue il metodo la stringa fornita come argomento.

String nome = "Pippo";


String risposta1 = ("Buongiorno ".concat(nome)).concat("!");


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 44 / 59
public String concat(String str)

tipo restituito nome del metodo argomenti


riferimento a String concat riferimento a String

Contratto
Restituisce un riferimento alla stringa ottenuta concatenando alla stringa
che esegue il metodo la stringa fornita come argomento.

String nome = "Pippo";


String risposta1 = ("Buongiorno ".concat(nome)).concat("!");

String risposta3 = "Buongiorno ".concat(nome.concat("!"));


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 44 / 59
public String concat(String str)

tipo restituito nome del metodo argomenti


riferimento a String concat riferimento a String

Contratto
Restituisce un riferimento alla stringa ottenuta concatenando alla stringa
che esegue il metodo la stringa fornita come argomento.

String nome = "Pippo";


String risposta1 = ("Buongiorno ".concat(nome)).concat("!");

String risposta3 = "Buongiorno ".concat(nome.concat("!"));

String risposta2 = "Buongiorno ".concat(nome).concat("!");

La prima invocazione equivale alla terza in quanto l’operatore . è


associativo a sinistra

c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 44 / 59
L’operatore + su stringhe

Fornisce un’abbreviazione per la concatenazione di stringhe:


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 45 / 59
L’operatore + su stringhe

Fornisce un’abbreviazione per la concatenazione di stringhe:

String nome = "Pippo";


String risposta = "Buongiorno ".concat(nome).concat("!");

è equivalente a

String risposta = "Buongiorno " + nome + "!";

Esempio di overloading su operatore (+ denota anche la somma fra interi)


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 45 / 59
Spezzare le righe

Non è possibile scrivere letterali di tipo String che occupino più di una
riga

String mess = "Questo è un messaggio particolarmente


lungo che dobbiamo spezzare in più
righe";

non viene accettata dal compilatore


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 46 / 59
Spezzare le righe

Non è possibile scrivere letterali di tipo String che occupino più di una
riga

String mess = "Questo è un messaggio particolarmente


lungo che dobbiamo spezzare in più
righe";

non viene accettata dal compilatore

String mes = "Questo è un messaggio particolarmente " +


"lungo che dobbiamo spezzare in più " +
"righe";


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 46 / 59
public String substring(int begin, int end)

tipo restituito nome del metodo argomenti


riferimento a String substring due int


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 47 / 59
public String substring(int begin, int end)

tipo restituito nome del metodo argomenti


riferimento a String substring due int

Contratto
Restituisce il riferimento a una stringa formata dai caratteri che vanno
dalla posizione begin fino alla posizione end - 1 della stringa che esegue
il metodo. Le posizioni di una stringa lunga n vanno da 0 a n − 1.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 47 / 59
public String substring(int begin, int end)

tipo restituito nome del metodo argomenti


riferimento a String substring due int

Contratto
Restituisce il riferimento a una stringa formata dai caratteri che vanno
dalla posizione begin fino alla posizione end - 1 della stringa che esegue
il metodo. Le posizioni di una stringa lunga n vanno da 0 a n − 1.

Esempi
(1) "distruggere"
ha 11 caratteri, d è in posizione 0, la ultima e in posizione 10


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 47 / 59
public String substring(int begin, int end)

tipo restituito nome del metodo argomenti


riferimento a String substring due int

Contratto
Restituisce il riferimento a una stringa formata dai caratteri che vanno
dalla posizione begin fino alla posizione end - 1 della stringa che esegue
il metodo. Le posizioni di una stringa lunga n vanno da 0 a n − 1.

Esempi
(1) "distruggere"
ha 11 caratteri, d è in posizione 0, la ultima e in posizione 10

(2) "distruggere".substring(2, 9)
fornisce come risultato un riferimento alla stringa "strugge"

c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 47 / 59
public String substring(int begin)

tipo restituito nome del metodo argomenti


riferimento a String substring un int


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 48 / 59
public String substring(int begin)

tipo restituito nome del metodo argomenti


riferimento a String substring un int

Contratto
Restituisce un riferimento a una stringa formata da tutti i caratteri della
stringa che esegue il metodo che si trovano tra la posizione specificata
nell’argomento e la fine della stringa.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 48 / 59
public String substring(int begin)

tipo restituito nome del metodo argomenti


riferimento a String substring un int

Contratto
Restituisce un riferimento a una stringa formata da tutti i caratteri della
stringa che esegue il metodo che si trovano tra la posizione specificata
nell’argomento e la fine della stringa.

Esempi
"distruggere".substring(8)

restituisce un riferimento alla stringa "ere".


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 48 / 59
Sommario: Protocolli e contratti
1 Nozioni base della programmazione OO
La programmazione ad oggetti
Protocolli e contratti
Classi
2 Primi esempi di classi e oggetti
La classe ConsoleOutputManager
Creazione degli oggetti
Invocazione di un metodo
La classe ConsoleInputManager
3 Prototipi e segnature
4 La classe String
5 Variabili e tipi
Dichiarazione e definizione di variabili
Tipi primitivi e tipi riferimento


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 49 / 59
Java: linguaggio fortemente tipato

Il tipo di ogni variabile e di ogni espressione che appare in un programma


può essere identificato leggendo il testo del programma e, dunque, è noto
al momento della compilazione.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 50 / 59
Java: linguaggio fortemente tipato

Il tipo di ogni variabile e di ogni espressione che appare in un programma


può essere identificato leggendo il testo del programma e, dunque, è noto
al momento della compilazione.

Durante la compilazione sono effettuati tutti i controlli relativi alla


compatibilità dei tipi e sono stabilite eventuali conversioni implicite

Le nozioni di variabile, tipo ed espressione, sono fondamentali in tutti


i linguaggi di programmazione


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 50 / 59
Espressioni e tipi

Esempio
Il significato dell’espressione x + y dipende dai tipi delle variabili x e y.

int x;
int y;

operatore + denota una somma tra numeri interi


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 51 / 59
Espressioni e tipi

Esempio
Il significato dell’espressione x + y dipende dai tipi delle variabili x e y.

int x;
int y;

operatore + denota una somma tra numeri interi

risultato è di tipo int


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 51 / 59
Espressioni e tipi

Esempio
Il significato dell’espressione x + y dipende dai tipi delle variabili x e y.

int x;
int y;

operatore + denota una somma tra numeri interi

risultato è di tipo int

valutazione viene fatta sommando i valori contenuti nelle due variabili


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 51 / 59
Espressioni e tipi

Esempio
Il significato dell’espressione x + y dipende dai tipi delle variabili x e y.

String x;
String y;

operatore + denota una concatenazione tra stringhe


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 52 / 59
Espressioni e tipi

Esempio
Il significato dell’espressione x + y dipende dai tipi delle variabili x e y.

String x;
String y;

operatore + denota una concatenazione tra stringhe

risultato è un riferimento a un oggetto di tipo String


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 52 / 59
Espressioni e tipi

Esempio
Il significato dell’espressione x + y dipende dai tipi delle variabili x e y.

String x;
String y;

operatore + denota una concatenazione tra stringhe

risultato è un riferimento a un oggetto di tipo String

valutazione viene costruita la stringa costituita dalla concatenazione di


quella a cui fa riferimento x con quella a cui fa riferimento y


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 52 / 59
Espressioni e tipi

Esempio
Il significato dell’espressione x + y dipende dai tipi delle variabili x e y.

String x;
int y;

operatore + denota una concatenazione tra stringhe


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 53 / 59
Espressioni e tipi

Esempio
Il significato dell’espressione x + y dipende dai tipi delle variabili x e y.

String x;
int y;

operatore + denota una concatenazione tra stringhe

risultato è un riferimento a un oggetto di tipo String


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 53 / 59
Espressioni e tipi

Esempio
Il significato dell’espressione x + y dipende dai tipi delle variabili x e y.

String x;
int y;

operatore + denota una concatenazione tra stringhe

risultato è un riferimento a un oggetto di tipo String

valutazione viene costruita la stringa costituita dalla concatenazione di


quella a cui fa riferimento x con quella che rappresenta il
valore memorizzato in y (conversione implicita)

LaSommaVale.java

c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 53 / 59
Dichiarazione e definizione di variabili

Dichiarazione di variabili
Tipo var1, var2, . . . ;

Definizione di variabili (dichiarazione più assegnamento)


Tipo var1 = espr1, var2 = espr2, . . . ;

Esempio
// dichiarazione
int x, y;
String s;

// definizione
int i = 4, j = 3;
String nome = "pippo";

Una variabile non definita non può essere valutata in un’espressione



c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 54 / 59
Tipi primitivi e tipi riferimento

Tipi primitivi (come int)


Una variabile di tipo primitivo può essere immaginata come una
scatola in grado di contenere direttamente un valore


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 55 / 59
Tipi primitivi e tipi riferimento

Tipi primitivi (come int)


Una variabile di tipo primitivo può essere immaginata come una
scatola in grado di contenere direttamente un valore

Tipi riferimento (come String)


Una variabile di un tipo riferimento contiene il riferimento che
permette di accedere all’oggetto riferito.


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 55 / 59
Tipi primitivi e tipi riferimento

Tipi primitivi (come int)


Una variabile di tipo primitivo può essere immaginata come una
scatola in grado di contenere direttamente un valore

Tipi riferimento (come String)


Una variabile di un tipo riferimento contiene il riferimento che
permette di accedere all’oggetto riferito.

Esempio
i

int i = 10; 10

String s = pippo; String


s
"pippo"


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 55 / 59
Tipi primitivi e tipi riferimento

Tipi primitivi
byte short int long
char
boolean
float double


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 56 / 59
Tipi primitivi e tipi riferimento

Tipi primitivi
byte short int long
char
boolean
float double

Tipi riferimento
classi
interfacce
array


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 56 / 59
Assegnamento fra variabili di tipo primitivo

int x = 10, y;
y = x;

x x

10 10

y = x
y y

10


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 57 / 59
Assegnamento fra variabili di tipo riferimento

String x = "pippo", y;
y = x;

x x

String String

"pippo" y = x "pippo"
y y


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 58 / 59
Il letterale null

Rappresenta un valore assegnabile a tutte le variabili di tipo


riferimento


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 59 / 59
Il letterale null

Rappresenta un valore assegnabile a tutte le variabili di tipo


riferimento

Indica convenzionalmente che la variabile non fa riferimento ad alcun


oggetto


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 59 / 59
Il letterale null

Rappresenta un valore assegnabile a tutte le variabili di tipo


riferimento

Indica convenzionalmente che la variabile non fa riferimento ad alcun


oggetto

Il tentativo di accedere a un oggetto tramite un riferimento null


provoca un errore di esecuzione (si richiede un servizio ad un oggetto
inesistente)


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 59 / 59
Il letterale null

Rappresenta un valore assegnabile a tutte le variabili di tipo


riferimento

Indica convenzionalmente che la variabile non fa riferimento ad alcun


oggetto

Il tentativo di accedere a un oggetto tramite un riferimento null


provoca un errore di esecuzione (si richiede un servizio ad un oggetto
inesistente)

Esempio
String s;
s = null;
int x = s.length(); //ERRORE IN FASE DI ESECUZIONE


c 2005-2010 Pearson Education Italia Capitolo 2 - Protocolli e contratti 59 / 59

Potrebbero piacerti anche