+ All Categories
Home > Documents > Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Date post: 01-May-2015
Category:
Upload: rosina-cozzi
View: 250 times
Download: 0 times
Share this document with a friend
59
Classi e Oggetti
Transcript
Page 1: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Classi e Oggetti

Page 2: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Indice

• Classi, oggetti, metodi

• Documentazione e API

• Oggetti e riferimenti

Page 3: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Tipi e variabili

• Ogni valore nel linguaggio ha un tipo

• Ogni variabile deve essere dichiarata ed associata ad un tipo:

• Le variabili Memorizzano valori Possono essere utilizzate per rappresentare i valori

che memorizzano

String greeting = "Hello, World!";PrintStream printer = System.out;int luckyNumber = 13;

Page 4: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Operatore di assegnamento

• =

• Modifica il valore delle variabili

int luckyNumber = 13; luckyNumber = 12;

Page 5: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Variabili non inizializzate

• Sono un errore:

int luckyNumber;System.out.println(luckyNumber);   // ERROR - uninitialized variable

Page 6: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Domanda

1. L’espressione 12 = 12 è sensata?

Page 7: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Risposta

1. No, il lato sinistro deve essere una variabile (o più in generale, denotare una locazione)

Page 8: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Classi e oggetti

• Oggetto: una entità manipolabile all’interno di un programma (mediante i suoi metodi)

• Ogni oggetto appartiene (è generato da) una classe. Ad esempio System.out appartiene alla classe PrintStream

Page 9: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Metodi• Metodo: codice che permette di accedere ai

dati di un oggetto

• I dati (lo stato) di un oggetto sono accessibili solo attraverso i metodi dell’oggetto

• Classe: definisce un insieme di oggetti con lo stesso comportamento

• La classe definisce i metodi dei suoi oggetti

• La classe fornisce costruttori per creare oggetti

Continua…

Page 10: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Metodi

• Interfaccia pubblica: specifica quali sono i metodi invocabili sugli oggetti della classe

• println non è parte dell’interfaccia pubblica della classe string

String greeting = "Hello";greeting.println()// Errore:greeting.length() // OK

Page 11: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Due oggetti di tipo String

Page 12: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Metodi della classe String

• length: conta il numero di caratteri della stringa

Continua…

String greeting = "Hello, World!"; int n = greeting.length(); // n = 13

Page 13: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Metodi della classe String

• toUpperCase: crea un altro oggetto di tipo String che contiene i caratteri della stringa originaria, ma convertiti in maiuscolo

Continua…

String fiume = "Mississippi"; String ucFiume = fiume.toUpperCase(); // ucFiume = "MISSISSIPPI"

Page 14: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Metodi della classe String

• L’invocazione di un metodo su un oggetto è legale solo se il metodo è parte dell’interfaccia pubblica della classe a cui l’oggetto appartiene

System.out.length(); // ERRORE

Page 15: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Domande

2. Quale è la sequenza di istruzioni per calcolare la lunghezza della stringa “Arcobaleno”?

3. Quale è la sequenza di istruzioni per stampare la versione uppercase della stringa "Hello, World!"?

4. È legale l’invocazione fiume.println()? Perché o perché no?

Page 16: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Risposte

2.

3.

4. Non è legale: la variabile fiume ha tipo String e la classe String non definisce il metodo il metodo println

“Arcobaleno".length()

System.out.println(“Hello World”.toUpperCase());

Page 17: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Parametri espliciti e impliciti

• Un parametro (esplicito) rappresenta un dato di input per il metodo

• Non tutti i metodi hanno parametri (espliciti)

• Tutti i metodi hanno un parametro implicito: l’oggetto su cui il metodo viene invocato

Continua…

System.out.println(greeting) greeting.length() // no parametri espliciti

System.out.println(greeting)

Page 18: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Parametri espliciti e impliciti

“Hello, World” è un parametro passato al metodo println

Page 19: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Parametri espliciti e impliciti

• Il metodo replace esegue una operazione di ricerca e modifica

• Questa chiamata ha: Un parametro implicito: "Mississippi" Due parametri espliciti: "issipp" e "our"

• Restituisce la stringa "Missouri"

Continua…

fiume.replace("issipp", "our") // restituisce la nuova stringa ("Missouri")

Page 20: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Parametri espliciti e impliciti

Page 21: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Definizione di metodi

• La definizione di un metodo specifica solo i parametri espliciti con i loro (ed il tipo del risultato)

• Il tipo del parametro implicito è la classe in di cui la definizione di metodo fa parte

Continua…

Page 22: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Definizione di metodi

• Esempio: la classe String definisce public int length() // return type: int // nessun parametro public String replace(String target, String replacement) // return type: String; // due parametri di tipo String

Page 23: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Definizione di metodi

• I metodi che non hanno valori risultato sono dichiarati void

• Overloading: Un nome di metodi si può usare in più definizione Se le definizioni sono nella stessa classe diciamo che

il nome è overloaded Le versioni di un metodo overloaded devono avere

parametri diversi

public void println(String output) // classe PrintStream

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

Page 24: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Domande

5. Quale è il risultato della chiamata fiume.replace("p", "s")?

6. Quale è il risultato della chiamata greeting.replace("World","Dave").length()

7. Come è definito il metodo toUpperCase nella classe String?

Page 25: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Risposte

5. "Missississi"

6. 12

7. public String toUpperCase(), ovvero senza parametri e con tipo risultato

String.

Page 26: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Tipi aritmetici e booleani

• Interi: short, int, long13

• Virgola mobile: float, double 1.30.00013

• Booleani: true, false

• Non sono oggetti: sono tipi primitivi

Page 27: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Oggetti e forme Geometriche

• Java ha una ricca libreria di classi per descrivere forme geometriche

• Oggetti di tipo Rectangle descrivono forme rettangolari

Page 28: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Rectangle

• Un oggetto di tipo Rectangle contiene un insieme di valori che rappresentano e descrivono una forma rettangolare

• Tre oggetti, ciascuno con i suoi dati che definiscono il proprio stato

Page 29: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Costruttori

• Il costrutto new costruisce un nuovo oggetto di tipo rettangolo

• Usa i parametri (5, 10, 20, e 30) per inizializzare I dati dell’oggetto

• Restituisce un riferimento all’oggetto

• Tipicamente il risultato viene assegnato ad una variabile

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

new Rectangle(5, 10, 20, 30)

Page 30: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Costruttori

• Come nel caso dei metodi, il nome del costruttore può essere overloaded all’interno della stessa classe per fornire diversi modalità di creazione di oggetti

new Rectangle() // costruisce un rettangolo con origine (0,0) // larghezza 0, e altezza zero 0

Page 31: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Sintassi: new

new ClassName(parameters)

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

Effetto nella chiamata ad un costrottureCostruisce un nuovo oggetto, inizializzandone lo stato con i parametri, e restituisce un riferimento all’oggetto costruito.

Page 32: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Domande

8. Come si costruisce un quadrato con centro (100, 100) e lato 20?

9. Cosa stampa la seguente istruzione?

System.out.println(new Rectangle().getWidth());

Page 33: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Risposte

8.

9. 0

new Rectangle(90, 90, 20, 20)

Page 34: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Metodi e side-effects

• In molti casi l’effetto dell’invocazione di un metodo è la modifica dello stato dell’oggetto su cui il metodo è invocato (il parametro implicito

• Metodi con side-effects vengono detti “mutators”

box.translate(15, 25);

Page 35: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Metodi e side-effects

box.translate(15, 25);

Page 36: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Domande

10. Il metodo toUpperCase della classe string String è un mutator?

11. Quale chiamata al metodo translate dobbiamo effettuare per spostare il rettangolo box in modo da posizionare il suo angolo alto-sx alle coordinate (0, 0)?

Page 37: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Answers

10.No, non modifica la stringa originale, restituisce una nuova stringa uppercase letters

11. box.translate(-5, -10)

Page 38: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Implementing a Test Program

• Provide a new class

• Supply a main method

• Inside the main method, construct one or more objects

• Apply methods to the objects

• Display the results of the method calls

Page 39: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Importing Packages

Don't forget to include appropriate packages:

Java classes are grouped into packages

Import library classes by specifying the package and class name:

You don't need to import classes in the java.lang package such as String and System

import java.awt.Rectangle;

Page 40: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Syntax 2.4: Importing a Class from a Package

 import packageName.ClassName;

Example: import java.awt.Rectangle;

Purpose:To import a class from a package for use in a program.

Page 41: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

File MoveTester.java 01: import java.awt.Rectangle; 02: 03: public class MoveTester04: {05: public static void main(String[] args)06: {07: Rectangle box = new Rectangle(5, 10, 20, 30);08: 09: // Move the rectangle10: box.translate(15, 25);11: 12: // Print information about the moved rectangle13: System.out.println("After moving, the top-left corner is:"); 14: System.out.println(box.getX()); 15: System.out.println(box.getY()); 16: }17: }

Page 42: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Self Check

20. The Random class is defined in the java.util package. What do you need to do in order to use that class in your program?

21. Why doesn't the MoveTester program print the width and height of the rectangle?

Page 43: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Answers

20. Add the statement import java.util.Random; at the top of your program

21. Because the translate method doesn't modify the shape of the rectangle

Page 44: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Documentazione sulle API

• API: Application Programming Interface

• Include la descrizione delle classi e dei relativi metodi della (fornitissima!) libreria Java

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

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

Page 45: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Documentazione sulle API

Page 46: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

La API della classe Rectangle

Page 47: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Javadoc Method Summary

Page 48: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Documentazione del metodo translate

Page 49: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Self Check

22. Look at the API documentation of the String class. Which method would you use to obtain the string "hello, world!" from the string "Hello, World!"?

23. In the API documentation of the String class, look at the description of the trim method. What is the result of applying trim to the string " Hello, Space ! "? (Note the spaces in the string.)

Page 50: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Answers

22. toLowerCase

23. "Hello, Space !"–only the leading and trailing spaces are trimmed

Page 51: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Oggetti e riferimenti

• Un riferimento è una astrazione del puntatore ad un oggetto

• L’operatore new restituice un riferimento ad un nuovo oggetto

• Diverse variabili di tipo oggetto possono condividere lo stesso riferimentoRectangle box = new Rectangle(5, 10, 20, 30);Rectangle box2 = box;box2.translate(15, 25);

Rectangle box = new Rectangle();

Continua…

Page 52: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Riferimenti ad oggetti

• Il comportamento delle variabili varia rispetto al loro tipo.

• In particolare le variabili di tipo primitivo si comportano in modo diverso rispetto alle variabili di tipo oggetto

Page 53: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Variabili di tipo primitivo

Contengono valori del loro tipo

Page 54: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Variabili di tipo oggetto

Contengono riferimenti ad oggetti, non oggetti

Page 55: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Assegnamento su tipi primitivi• int luckyNumber = 13;

int luckyNumber2 = luckyNumber;luckyNumber2 = 12;

Due variabili, due valori distinti

Page 56: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Assegnamento su tipi oggetto• Rectangle box = new Rectangle(5, 10, 20, 30);

Rectangle box2 = box;box2.translate(15, 25);

Continua…

Page 57: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Assegnamento su tipi oggetto

Due variabili, stesso riferimento

Page 58: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Self Check

24. What is the effect of the assignment greeting2 = greeting?

25. After calling greeting2.toUpperCase(), what are the contents of greeting and greeting2?

Page 59: Classi e Oggetti. Indice Classi, oggetti, metodi Documentazione e API Oggetti e riferimenti.

Answers

24. Now greeting and greeting2 both refer to the same String object.

25. Both variables still refer to the same string, and the string has not been modified. Recall that the toUpperCase method constructs a new string that contains uppercase characters, leaving the original string unchanged.


Recommended