Classi e Oggetti Indice Classi, oggetti, metodi



Scaricare 1.49 Mb.
22.05.2018
Dimensione del file1.49 Mb.


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


Operatore di assegnamento

  • =

  • Modifica il valore delle variabili

  • int luckyNumber = 13; luckyNumber = 12;



Variabili non inizializzate

  • Sono un errore:



Domanda

  • L’espressione 12 = 12 è sensata?



Risposta

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



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



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



Metodi

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

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



Due oggetti di tipo String



Metodi della classe String



Metodi della classe String

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



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



Domande

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

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

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



Risposte

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



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



Parametri espliciti e impliciti



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"



Parametri espliciti e impliciti



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



Definizione di metodi

  • Esempio: la classe String definisce



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


Domande

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

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

  • Come è definito il metodo toUpperCase nella classe String?



Risposte

  • "Missississi"

  • 12

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



Tipi aritmetici e booleani

  • Interi: short, int, long 13

  • Virgola mobile: float, double 1.3 0.00013

  • Booleani: true, false

  • Non sono oggetti: sono tipi primitivi



Oggetti e forme Geometriche

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

  • Oggetti di tipo Rectangle descrivono forme rettangolari



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



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



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



Sintassi: new



Domande

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

  • Cosa stampa la seguente istruzione?



Risposte

  • 0



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”



Metodi e side-effects



Domande

  • Il metodo toUpperCase della classe string String è un mutator?

  • 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)?



Answers



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



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


Syntax 2.4: Importing a Class from a Package



File MoveTester.java



Self Check

  • 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?

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



Answers

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

  • Because the translate method doesn't modify the shape of the rectangle



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



Documentazione sulle API



La API della classe Rectangle



Javadoc Method Summary



Documentazione del metodo translate



Self Check

  • 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!"?

  • 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.)



Answers

  • toLowerCase

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



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 riferimento



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



Variabili di tipo primitivo



Variabili di tipo oggetto



Assegnamento su tipi primitivi



Assegnamento su tipi oggetto



Assegnamento su tipi oggetto



Self Check

  • What is the effect of the assignment greeting2 = greeting?

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



Answers

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

  • 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.





Condividi con i tuoi amici:


©astratto.info 2019
invia messaggio

    Pagina principale