• Non ci sono risultati.

Usare gli Oggetti Usare gli Oggetti

N/A
N/A
Protected

Academic year: 2021

Condividi "Usare gli Oggetti Usare gli Oggetti"

Copied!
55
0
0

Testo completo

(1)

Usare gli Oggetti Usare gli Oggetti

C. Horstmann C. Horstmann

Fondamenti di programmazione e Java 2 Fondamenti di programmazione e Java 2

3^ edizione Apogeo 3^ edizione Apogeo trad. Nicola Fanizzi trad. Nicola Fanizzi

corso di Programmazione, CdS: Informatica TPS corso di Programmazione, CdS: Informatica TPS Dip. di Informatica, Università degli studi di Bari Dip. di Informatica, Università degli studi di Bari

(2)

2 2

Obiettivi Obiettivi

Imparare la nozione di variabile Imparare la nozione di variabile

Capire i concetti di classe e oggetto Capire i concetti di classe e oggetto

Saper invocare i metodi Saper invocare i metodi

Saper scorrere la documentazione delle API Saper scorrere la documentazione delle API

Comprendere la differenza tra gli oggetti e i loro Comprendere la differenza tra gli oggetti e i loro riferimenti

riferimenti

(3)

3 3

Tipi e Variabili Tipi e Variabili

Ogni valore ha un tipo Ogni valore ha un tipo

Esempi di dichiarazioni di variabili: Esempi di dichiarazioni di variabili:

Variabili Variabili

Immagazzinano Immagazzinano valorivalori

Possono essere usate in vece degli oggetti che Possono essere usate in vece degli oggetti che immagazzinano

immagazzinano

String greeting = "Hello, World!";

String greeting = "Hello, World!";

PrintStream printer = System.out;

PrintStream printer = System.out;

int luckyNumber = 13;

int luckyNumber = 13;

(4)

4 4

Sintassi 2.1:

Sintassi 2.1:

Def. di Variabile Def. di Variabile

nomeTipo nomeVariabile = valore;

nomeTipo nomeVariabile = valore;

oppure oppure

nomeTipo nomeVariabile;

nomeTipo nomeVariabile;

Esempio:

Esempio:

  String greeting = "Hello, Dave!";   String greeting = "Hello, Dave!";

Scopo:

Scopo: Definire una nuova variabile di un particolare Definire una nuova variabile di un particolare

tipo e opzionalmente fornire anche un valore iniziale

tipo e opzionalmente fornire anche un valore iniziale

(5)

5 5

Identificatori Identificatori

Identificatore: nome di una variabile, metodo o Identificatore: nome di una variabile, metodo o classe

classe

Regole per identificatori in Java: Regole per identificatori in Java:

Composti da lettere cifre e caratteri underscore _Composti da lettere cifre e caratteri underscore _

Non possono iniziare con una cifra Non possono iniziare con una cifra

Non si possono usare altri caratteri come ? o % Non si possono usare altri caratteri come ? o %

Gli spazi non sono permessi negli identificatori Gli spazi non sono permessi negli identificatori

Non si possono utilizzare parole riservate Non si possono utilizzare parole riservate

Sono case sensitiveSono case sensitive

Continua…

Continua…

(6)

6 6

Identificatori Identificatori

Per convenzione: Per convenzione: i nomi di variabile cominciano con i nomi di variabile cominciano con una lettera minuscola

una lettera minuscola

Per convenzione: Per convenzione: i nomi di classe cominciano con i nomi di classe cominciano con una maiuscola

una maiuscola

(7)

7 7

Operatore di Assegnazione Operatore di Assegnazione

Operatore Operatore = =

Da non usarsi come test di uguaglianza Da non usarsi come test di uguaglianza

Cambia il valore di una variabile Cambia il valore di una variabile

int luckyNumber = 13;

int luckyNumber = 13;

luckyNumber = 12;

luckyNumber = 12;

Figura 1

Figura 1: assegnare un nuovo : assegnare un nuovo valore ad una variabile

valore ad una variabile

(8)

8 8

Variabili non Inizializzate Variabili non Inizializzate

Errore: Errore:

Figure 2:

Figure 2: una variabile oggetto non inizializzata una variabile oggetto non inizializzata

int luckyNumber;

int luckyNumber;

System.out.println(luckyNumber);

System.out.println(luckyNumber);

   // ERRORE – variabile non inizializzata    // ERRORE – variabile non inizializzata

(9)

9 9

Sintassi 2.2: Assegnazione Sintassi 2.2: Assegnazione

• nomeVar nomeVar = = valore valore ; ;

Example: Example:

•     luckyNumber = 12; luckyNumber = 12;

Scopo: Scopo: assegnare un nuovo valore ad una variabile assegnare un nuovo valore ad una variabile precedentemente definita

precedentemente definita

(10)

10 10

Oggetti e Classi Oggetti e Classi

Oggetto: Oggetto: (astrazione di) (astrazione di) un'entità che si può

un'entità che si può manipolare nei

manipolare nei programmi

programmi

Ogni oggetto appartiene Ogni oggetto appartiene ad una classe.

ad una classe.

Ad esempio, Ad esempio,

System.out System.out

appartiene alla classe appartiene alla classe

PrintStream

PrintStream

Figura 3Figura 3: Rappresentazione : Rappresentazione

(11)

11 11

Metodi Metodi

Metodo Metodo : sequenza di istruzioni che accede : sequenza di istruzioni che accede

direttamente ai dati relativi (stato) di un oggetto direttamente ai dati relativi (stato) di un oggetto

Si può manipolare un oggetto chiamando i suoi metodiSi può manipolare un oggetto chiamando i suoi metodi

Classe Classe : Insieme di oggetti con lo stesso : Insieme di oggetti con lo stesso comportamento

comportamento

La classe determina i metodi leciti per un oggettoLa classe determina i metodi leciti per un oggetto

Continua Continua…

String greeting = "Hello";

String greeting = "Hello";

greeting.println() // Errore greeting.println() // Errore greeting.length() // OK

greeting.length() // OK

(12)

12 12

Metodi Metodi

Interfaccia pubblica Interfaccia pubblica : specifica cosa si può fare : specifica cosa si può fare con gli oggetti della data classe

con gli oggetti della data classe

Si usa la parola chiave Si usa la parola chiave public public

(13)

13 13

Rappresentazione di Rappresentazione di

due oggetti String due oggetti String

Figura 4

Figura 4: Rappresentazione di due oggetti : Rappresentazione di due oggetti di tipo String

di tipo String

(14)

14 14

Metodi della classe

Metodi della classe String String

length length

Metodo che conta il numero di caratteri della stringa Metodo che conta il numero di caratteri della stringa

Continua…

Continua…

String greeting = "Hello, World!";

String greeting = "Hello, World!";

int n = greeting.length(); // setta n a 13 int n = greeting.length(); // setta n a 13

(15)

15 15

Metodi della classe

Metodi della classe String String

toUpperCase toUpperCase : crea un altro oggetto : crea un altro oggetto String String contenente i caratteri della stringa originaria con le contenente i caratteri della stringa originaria con le

lettere minuscole convertire in maiuscole lettere minuscole convertire in maiuscole

Continua…

Continua…

String river = "Mississippi";String river = "Mississippi";

String bigRiver = river.toUpperCase();

String bigRiver = river.toUpperCase();

// sets bigRiver to "MISSISSIPPI"

// sets bigRiver to "MISSISSIPPI"

(16)

16 16

Metodi della classe

Metodi della classe String String

Applicando un metodo ad un oggetto assicurarsi che Applicando un metodo ad un oggetto assicurarsi che il metodo sia definito nella classe appropriata

il metodo sia definito nella classe appropriata

System.out.length();

System.out.length();

// Questa chiamata è erronea // Questa chiamata è erronea

(17)

17 17

Parametri Impliciti ed Espliciti Parametri Impliciti ed Espliciti

Parametro Parametro (esplicito): Dati passati al metodo (esplicito): Dati passati al metodo

Non tutti i metodi ne hannoNon tutti i metodi ne hanno

Parametro Parametro (implicito): oggetto del quale si invoca un (implicito): oggetto del quale si invoca un metodo

metodo

Continua…

Continua…

System.out.println(

System.out.println(greetinggreeting) )

greeting.length() // non ha parametri espliciti greeting.length() // non ha parametri espliciti

System.out.println(greeting) System.out.println(greeting)

(18)

18 18

Parametri Impliciti ed Espliciti Parametri Impliciti ed Espliciti

Figura 5:

Figura 5: passaggio di parametro al metodo passaggio di parametro al metodo printlnprintln

(19)

19 19

Valori di Ritorno Valori di Ritorno

Valore di ritorno: Un risultato calcolato dal metodo Valore di ritorno: Un risultato calcolato dal metodo ad uso della sezione di codice che lo ha chiamato ad uso della sezione di codice che lo ha chiamato

Continua…

Continua…

int n = greeting.length();

int n = greeting.length();

// return value stored in n // return value stored in n

(20)

20 20

Valori di Ritorno Valori di Ritorno

Figura 6

Figura 6: Invocare il metodo length su un oggetto stringa: Invocare il metodo length su un oggetto stringa

(21)

21 21

Passare i Valori di Ritorno Passare i Valori di Ritorno

Si può anche usare il valore di ritorno come Si può anche usare il valore di ritorno come parametro nella chiamata di un altro metodo:

parametro nella chiamata di un altro metodo:

Non tutti i metodi ritornano valori. Esempio: Non tutti i metodi ritornano valori. Esempio:

Continua…

Continua…

System.out.println(greeting.length());

System.out.println(greeting.length());

println println

(22)

22 22

Passare i Valori di Ritorno Passare i Valori di Ritorno

Figura 7 Figura 7::

Passeaggio del risultato della chiamata di un metodo ad un'altra chiamata Passeaggio del risultato della chiamata di un metodo ad un'altra chiamata

(23)

23 23

Una Chiamata più complessa Una Chiamata più complessa

metodo metodo replace replace compie operazioni compie operazioni ricerca-e-sostituisci

ricerca-e-sostituisci

Come mostrato in Figura 8, tale chiamata ha Come mostrato in Figura 8, tale chiamata ha

Un solo parametro implicito: la stringa "Mississippi" Un solo parametro implicito: la stringa "Mississippi"

Due parametri impliciti: le stringhe "issipp" e "our" Due parametri impliciti: le stringhe "issipp" e "our"

Un valore di ritorno: la stringa "Missouri" Un valore di ritorno: la stringa "Missouri"

Continua…

Continua…

river.replace("issipp", "our") river.replace("issipp", "our")

// costruisce una nuova stringa ("Missouri")// costruisce una nuova stringa ("Missouri")

(24)

24 24

Una Chiamata più complessa Una Chiamata più complessa

Figura 8

Figura 8: Chiamata del metodo : Chiamata del metodo replacereplace

(25)

25 25

Definizione di Metodi Definizione di Metodi

La definizione di un metodo specifica i tipi dei La definizione di un metodo specifica i tipi dei parametri espliciti e del valore di ritorno

parametri espliciti e del valore di ritorno

Tipo del parametro implicito Tipo del parametro implicito

= =

Classe corrente Classe corrente

Non menzionato nella definizione del metodoNon menzionato nella definizione del metodo

(26)

26 26

Definizione di Metodi Definizione di Metodi

Esempio: Esempio: Class String Class String definisce definisce

public int length() public int length()

// tipo di ritorno: int // tipo di ritorno: int

// nessun parametro esplicito // nessun parametro esplicito

public String replace(String target, String replacement) public String replace(String target, String replacement) // tipo di ritorno: String;

// tipo di ritorno: String;

// due parametri espliciti di tipo String // due parametri espliciti di tipo String

(27)

27 27

Definizione di Metodi Definizione di Metodi

Se il metodo non restituisce alcun valore, Se il metodo non restituisce alcun valore, il tipo di ritorno viene dichiarato come

il tipo di ritorno viene dichiarato come void void

Il nome di un metodo è sovraccaricato ( Il nome di un metodo è sovraccaricato ( overloaded overloaded ) ) se una classe ha più di un metodo con lo stesso

se una classe ha più di un metodo con lo stesso nome (ma diversi tipi/numero di parametri)

nome (ma diversi tipi/numero di parametri)

public void println(String output) public void println(String output)

// nella classe PrintStream // nella classe PrintStream

public void println(String output) public void println(String output)

public void println(int output) public void println(int output)

(28)

28 28

Tipi Tipi Numerici Numerici

Interi Interi : : short short , , int int , , long long

EsempiEsempi 1313

Numeri in virgola mobile: Numeri in virgola mobile: float float , , double double

EsempiEsempi:: 1.31.3

0.00013 0.00013

(29)

29 29

Tipi Tipi Numerici Numerici

Quando un numero in virgola mobile viene Quando un numero in virgola mobile viene

moltiplicato o diviso per 10, cambia solo la posizione moltiplicato o diviso per 10, cambia solo la posizione

del punto dei decimali; esso "si muove"

del punto dei decimali; esso "si muove"

Rappresentazione collegata alla notazione scientifica Rappresentazione collegata alla notazione scientifica

es.: 1.3 × 10-4 es.: 1.3 × 10-4

I numeri I numeri non non sono oggetti sono oggetti

I tipi numerici sono I tipi numerici sono primitivi primitivi

1.3E-4       // 1.3 × 10-4 scritto in Java 1.3E-4       // 1.3 × 10-4 scritto in Java

(30)

30 30

Operatori Aritmetici Operatori Aritmetici

Operatori: Operatori: + - * + - *

Come in matematica Come in matematica l'operatore

l'operatore * * lega più dell'operatore lega più dell'operatore + +

10 + n 10 + n n - 1 n - 1

10 * n       // 10 × n 10 * n       // 10 × n

x + y * 2    // la somma di x e y * 2 x + y * 2    // la somma di x e y * 2

(x + y) * 2  // moltiplica la somma di x e y con 2 (x + y) * 2  // moltiplica la somma di x e y con 2

(31)

31 31

Figure Rettangolari Figure Rettangolari ed Oggetti Rettangolo ed Oggetti Rettangolo

Oggetti di tipo Oggetti di tipo Rectangle Rectangle descrivono figure descrivono figure rettangolari

rettangolari

Figura 9 Figura 9::

Figure rettangolari Figure rettangolari

(32)

32 32

Figure Rettangolari Figure Rettangolari ed Oggetti Rettangolo ed Oggetti Rettangolo

Un Un Rectangle Rectangle non è una figura rettangolare non è una figura rettangolare

bensì un oggetto che contiene un insieme di numeri bensì un oggetto che contiene un insieme di numeri

che descrivono un rettangolo

che descrivono un rettangolo

(33)

33 33

Costruire Oggetti Costruire Oggetti

Dettaglio: Dettaglio:

1)1) L'operatore L'operatore newnew costruisce un oggetto costruisce un oggetto RectangleRectangle 2)2) Usa parametri per inizializzare i dati dell'oggettoUsa parametri per inizializzare i dati dell'oggetto

(in tal caso:

(in tal caso: 55, , 1010, , 2020, e 30, e 30)) 3)3) Restituisce un oggettoRestituisce un oggetto

di solito l'output dell'operatore

di solito l'output dell'operatore newnew viene viene immagazzinato in una variabile

immagazzinato in una variabile

Rectangle box = new Rectangle(5, 10, 20, 30);

Rectangle box = new Rectangle(5, 10, 20, 30);

new Rectangle(5, 10, 20, 30) new Rectangle(5, 10, 20, 30)

(34)

34 34

Costruire Oggetti Costruire Oggetti

Il processo di creazione di un nuovo oggetto si Il processo di creazione di un nuovo oggetto si chiama costruzione

chiama costruzione

I quattro valori I quattro valori 5 5 , , 10 10 , , 20 20 , e , e 30 30 sono chiamati sono chiamati parametri di costruzione

parametri di costruzione

Alcune classi fanno costruire i loro oggetti in molti Alcune classi fanno costruire i loro oggetti in molti modi:

modi:

new Rectangle() new Rectangle()

// costruisce un rettangolo angolo in alto a sin.

// costruisce un rettangolo angolo in alto a sin.

// nell'origine (0, 0), larghezza 0, e altezza 0 // nell'origine (0, 0), larghezza 0, e altezza 0

(35)

35 35

Sintassi 2.3:

Sintassi 2.3: Costruire Oggetti Costruire Oggetti

new  new  ClassName ClassName ( ( parameters parameters ) ) Esempio

Esempio : :

new Rectangle(5, 10, 20, 30) new Rectangle(5, 10, 20, 30) new Rectangle()

new Rectangle()

Scopo Scopo : :

Costruire un nuovo oggetto inizializzandolo secondo Costruire un nuovo oggetto inizializzandolo secondo

i parametri passati e restituire un riferimento i parametri passati e restituire un riferimento

all'oggetto costruito

all'oggetto costruito

(36)

36 36

Metodi d'Accesso e Mutatori Metodi d'Accesso e Mutatori

Metodo d'accesso: Metodo d'accesso:

non cambia lo stato del suo parametro implicito non cambia lo stato del suo parametro implicito

Metodo Mutatore Metodo Mutatore : :

cambia lo stato del parametro implicito cambia lo stato del parametro implicito

double width = box.getWidth();

double width = box.getWidth();

box.translate(15, 25);

box.translate(15, 25);

(37)

37 37

Metodi d'Accesso e Mutatori

Metodi d'Accesso e Mutatori

(38)

38 38

Implementare un Programma Implementare un Programma

Fornire una nuova classe Fornire una nuova classe

Fornire un metodo Fornire un metodo main main

Nel metodo Nel metodo main main costruire uno o più oggetti costruire uno o più oggetti

Applicare i metodi agli oggetti Applicare i metodi agli oggetti

Mostrare i risultati delle chiamate Mostrare i risultati delle chiamate

(39)

39 39

Importare le Librerie Importare le Librerie

Non si dimentichi di includere le librerie del caso: Non si dimentichi di includere le librerie del caso:

Le classi Java possono essere raggruppate in package Le classi Java possono essere raggruppate in package

Importare le classi di libreria specificando il package e il Importare le classi di libreria specificando il package e il nome della classe:

nome della classe:

Non occorre importare classi dal package java.langNon occorre importare classi dal package java.lang come ad esempio

come ad esempio StringString e e SystemSystem

import java.awt.Rectangle;

import java.awt.Rectangle;

(40)

40 40

Sintassi 2.4: Importare una Sintassi 2.4: Importare una

Classe da un Package Classe da un Package

import

import packageName packageName . . ClassName ClassName ; ;

Example: Example:

    import java.awt.Rectangle; import java.awt.Rectangle;

Purpose Purpose : Importare una classe da un package per : Importare una classe da un package per usarlo in un programma

usarlo in un programma

(41)

41 41

File

File MoveTester.java MoveTester.java

01: import java.awt.Rectangle;

01: import java.awt.Rectangle;

02: 02:

03: public class MoveTester 03: public class MoveTester 04: {

04: {

05: public static void main(String[] args) 05: public static void main(String[] args) 06: {

06: {

07: Rectangle box = new Rectangle(5, 10, 20, 30);

07: Rectangle box = new Rectangle(5, 10, 20, 30);

08: 08:

09: // Move the rectangle 09: // Move the rectangle 10: box.translate(15, 25);

10: box.translate(15, 25);

11: 11:

12: // Print information about the moved rectangle 12: // Print information about the moved rectangle 13: System.out.println("After moving, the top-left 13: System.out.println("After moving, the top-left

corner is:"); corner is:");

14: System.out.println(box.getX());

14: System.out.println(box.getX());

15: System.out.println(box.getY());

15: System.out.println(box.getY());

16: } 16: } 17: } 17: }

(42)

42 42

Testare Classi in una IDE

Testare Classi in una IDE

(43)

43 43

La Documentazione delle API La Documentazione delle API

API: Application Programming Interface API: Application Programming Interface

Elenca le classi e i metodi nella libreria Java Elenca le classi e i metodi nella libreria Java

http://java.sun.com/j2se/1.5/docs/api/index.html http://java.sun.com/j2se/1.5/docs/api/index.html

(44)

44 44

L'API Documentation della L'API Documentation della

Libreria Standard di Java

Libreria Standard di Java

(45)

45 45

L'API Documentation L'API Documentation per la Classe

per la Classe Rectangle Rectangle

(46)

46 46

Sommario dei Metodi con Sommario dei Metodi con

Javadoc

Javadoc

(47)

47 47

translate

translate

Documentazione dei Metodi

Documentazione dei Metodi

(48)

48 48

Riferimenti a Oggetti Riferimenti a Oggetti

Descrivono la posizione degli oggetti in memoria Descrivono la posizione degli oggetti in memoria

L'operatore L'operatore new new restituisce un riferimento ad un restituisce un riferimento ad un nuovo oggetto

nuovo oggetto

Variabili (riferimenti) oggetto diverse possono riferirsi Variabili (riferimenti) oggetto diverse possono riferirsi allo steso oggetto

allo steso oggetto

Rectangle box = new Rectangle(5, 10, 20, 30);

Rectangle box = new Rectangle(5, 10, 20, 30);

Rectangle box2 = box;

Rectangle box2 = box;

box2.translate(15, 25);

box2.translate(15, 25);

Rectangle box = new Rectangle();

Rectangle box = new Rectangle();

(49)

49 49

Riferimenti a Oggetti Riferimenti a Oggetti

Variabili di tipi primitivi ≠ variabili-oggetto Variabili di tipi primitivi ≠ variabili-oggetto

(50)

50 50

Variabili Oggetto

Variabili Oggetto

e Variabili Numeriche

e Variabili Numeriche

(51)

51 51

Variabili Oggetto

Variabili Oggetto

e Variabili Numeriche

e Variabili Numeriche

(52)

52 52

Variabili Oggetto

Variabili Oggetto

e Variabili Numeriche

e Variabili Numeriche

(53)

53 53

Copiare Numeri Copiare Numeri

int luckyNumber = 13;

int luckyNumber = 13;

int luckyNumber2 = luckyNumber;

int luckyNumber2 = luckyNumber;

luckyNumber2 = 12;

luckyNumber2 = 12;

(54)

54 54

Copiare Riferimenti ad Oggetti Copiare Riferimenti ad Oggetti

Rectangle box = new Rectangle(5, 10, 20, 30);Rectangle box = new Rectangle(5, 10, 20, 30);

Rectangle box2 = box;

Rectangle box2 = box;

box2.translate(15, 25);

box2.translate(15, 25);

(55)

55 55

Copiare Riferimenti ad Oggetti

Copiare Riferimenti ad Oggetti

Riferimenti

Documenti correlati

[r]

I poliziotti uando anno/hanno visto il ladro si sono messi a correre e.

[r]

Il secondo pulsante da sinistra controlla l’invio del vostro video: se e’ rosso nella riunione non si vede quello che inquadrate con la telecamera del cellulare.. Nel caso in cui

Spostiamo la freccia sull’icona (l’immagine) del “Cestino” e clicchiamo il tasto destro del mouse. Si apre un menu che dice tutto quello che possiamo fare con il cestino. Se

Usare funzione

Attribuzione - Condividi allo stesso modo 3.0 Italia (CC BY-SA 3.0 IT) http://creativecommons.org/licenses/by-sa/3.0/deed.it.

 «Il digitale è anche uno strumento potentissimo di ascolto della voce del cliente e di partecipazione del cliente allo sviluppo dei nostri prodotti, servizi ed esperienze: oltre