Anteprima
Vedrai una selezione di 3 pagine su 8
Definire classi e creare oggetti Pag. 1 Definire classi e creare oggetti Pag. 2
Anteprima di 3 pagg. su 8.
Scarica il documento per vederlo tutto.
Definire classi e creare oggetti Pag. 6
1 su 8
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

MODIFICATORI D'ACCESSO E METODI GET E SET

Si ricorda intanto la necessità di mettere a inizio di ogni hiding

L'information è una pratica che consente

metodo un commento contenente le precondizioni e le di progettare un metodo che possa essere usato

postcondizioni. senza alcun bisogno di comprendere i dettagli del

**/ codice che lo implementa. Il termine enfatizza il

*PRE: descrive le condizioni che devono sussistere fatto che il programmatore agisce come se il

prima che il metodo sia invocato;

*POST: descrive gli effetti prodotti dall'invocazione corpo del metodo fosse nascosto.

del metodo; indica cosa varrà dopo che un metodo è

stato eseguito.

*/

MODIFICATORI D'ACCESSO PUBLIC E PRIVATE

public private

Le parole chiave e sono dette modificatori d'accesso o visibilità.

public

Come visto in precedenza, il modificatore indica che qualsiasi altra classe può usare

 direttamente quella classe, metodo o variabile di istanza attraverso il suo nome.

Sebbene sia normale avere metodi e classi pubblici, non è

considerata buona abitudine quella di rendere pubbliche le variabili

tutte le variabili di istanza dovrebbero essere private!

di istanza:

private,

Quando una variabile di istanza è il suo nome non è accessibile al di fuori della definizione

 della sua classe. La variabile può però essere usata all'interno di un o qualsiasi dei metodi definiti

nella sua stessa classe.

Es. public class SpeciePrimaProva {

private String nome;

public int popolazione;

public double tassoCrescita; //non più valida!

Allora: specieDelMese.nome= "...."

specieDelMese.popolazione=3750;

...

Quindi se sono tutte e tre private:

SpecieSecondaProva specieSegreta = new SpecieSecondaProva ();

specieSegreta.leggiInput(); //non più valida!

specieSegreta.nome = "..." //non più valida!

System.out.println (specieSegreta.popolazione); //non più valida!

System.out.println (specieSegreta.tassoCrescita);

Tuttavia, l'invocazione del metodo leggiInput è valida. Questo vuol dire che esiste ancora un modo per

assegnare un valore alle variabili di istanza di un oggetto.

Infatti all'interno della definizione del metodo leggiInput sono definite le istruzioni d'assegnamento

attraverso la classe scanner.

rendere privata una variabile non vuol dire che non se ne può modificare il valore.

Di conseguenza,

Significa invece che non è possibile utilizzare il nome della variabile di istanza per far riferimento

direttamente alla variabile al di fuori della classe.

N.B.: i modificatori d'accesso specificano in quali classi è possibile utilizzare una classe, una variabile di

istanza o un metodo. Se una variabile di istanza è privata, il suo nome non può essere usato epr accedere al

suo valore al di fuori della definizione della classe. Tuttavia può essere usato dai metodi definiti nella classe

di appartenenza. Se una variabile di istanza è pubblica, il suo nome può essere utilizzato ovunque senza

limiti.

METODI GET E SET

Rendere private tutte le variabili di istanza di una classe permette di avere un controllo totale su di esse. A

volte per accedere a tali variabili di istanza è necessario fornire dei metodi di accesso:

get:

Metodo è semplicemente un metodo che permette di osservare quali sono i dati contenuti in una

 variabile di istanza. Per convenzione si chiamano getVariabileIst.

set:

Metodo di modifica o permettono di modificare i dati memorizzati nelle variabili di istanza

 private. Per convenzione si chiamano setVaribileIstanza.

Definire metodi set e get sembrerebbe annullare lo scopo per cui le variabili sono date private; in realtà però

sono caratterizzati da controllo: per esempio il metodo set può infatti verificare se un cambiamento è

appropriato e notificare l'utente in caso di problemi.

Il this applicato alle variabili di istanza

Come visto all'inizio, in un blocco non dovrebbero coesistere due variabili che hanno lo stesso nome;

tuttavia, se una delle due è una variabile di istanza, ciò è possibile:

sia Persona una classe avente eta come variabile d'istanza;

public class Persona {

private int eta;

public void setEta (int eta){

eta=eta;

}

}

Il set funziona, perché assume che il primo eta sia la variabile d'istanza dell'oggetto di tipo Persona; esso

equivale a: public void setEta (int eta){

this.eta=eta;

}

Metodi dentro i metodi

Come visto in precedenza nel main, è possibile richiamare un metodo all'interno di un altro; si noti che se il

metodo invocato è nella stessa classe, l'invocazione viene effettuata senza scrivere il nome dell'oggetto.

Si consideri l'invocazione di un metodo rispondi all'interno di un altro metodo parla. Si noti che il metodo

rispondi non è preceduto dal nome oggetto e dal punto. Questo vuol dire che il metodo rispondi viene

chiamato sullo stesso oggetto che viene chiamato su parla.

incapsulamento

N.B. il termine viene usato spesso per descrivere le tecniche di programmazione moderne

che vogliono "nascondere" tutti i dettagli relativi a come un componente software opera fornendo al

programmatore che userà il componente solo le informazioni necessarie al suo corretto utilizzo.

I termini information hiding, ADT, incapsulamento riguardano tutti lo stesso concetto di base. L'idea è quella

di fare in modo che il programmatore che sfrutta la classe non debba preoccuparsi del modo in cui è stata

implementata. OGGETTI E RIFERIMENTI

Le variabili di tipo classe, come una variabile di tipo String, si comportano in maniera molto diversa rispetto

alle variabili di tipo primitivo. Infatti questi sono nomi di oggetti e gli oggetti sono i valori delle variabili di

tipo classe.

Le variabili di tipo classe forniscono un nome agli oggetti; ciascuna variabile, sia essa di tipo primitivo o di

tipo classe, è implementata come un'area di memoria:

• primitivo,

Se la variabile è di tipo il suo valore è immagazzinato nell'area di memoria destinata alla

variabile al momento della sua dichiarazione; necessita sempre di una stessa quantità di memoria.

• classe

Una variabile di tipo contiene invece l'indirizzo di memoria dell'oggetto a cui fa riferimento la

riferimento all'oggetto

variabile; è detta l'area di memoria in cui è memorizzato l'oggetto; possono

avere dimensione qualsiasi, vedesi un oggetto di tipo String.

Ciascun oggetto è memorizzato in qualche area di memoria del computer e ha un indirizzo. Dato che le

variabili di tipo classe memorizzano l'indirizzo di memoria degli oggetti e non gli oggetti stessi, l'istruzione

di assegnamento che vuole assegnare ad un oggetto gli stessi valori di un altro come segue:

specieTerrestre = specieKlingon;

finisce per dare due diversi nomi allo stesso indirizzo di memoria.

Operatori nelle classi

Come abbiamo già visto, dati due oggetti di una stessa classe, il simbolo = assegna al primo la stessa cella di

memoria del secondo, dando quindi a una stessa cella di memoria due nomi.

Alla stessa maniera, == controlla se due oggetti hanno lo stesso indirizzo.

Per verificare l'uguaglianza dei valori delle variabili d'istanza dei diversi oggetti, si dovrebbe definire un

metodo che, ad ogni variabile d'istanza del primo oggetto, confronta la stessa nel secondo oggetto.

Nel caso dei cani di cui all'inizio:

public boolean uguali (Cane a, Cane b){

return (a.nome == b.nome);

return (a.razza == b.razza);

return (a.eta==b.eta);

}

Altrimenti posso definire un metodo equals, che dato un oggetto, ritorna se un qualsiasi altro oggetto ha gli

stessi valori attribuiti alle variabili di istanza:

public boolean equals (Cane b){

return (this.nome.equalsIgnoreCase(b.nome));

return (this.razza.equalsIgnoreCase(b.razza));

return (this.eta==b.eta); N.B. con equalsIgnoreCase, confronto le stringhe

indipendentemente da maiuscole e minuscole

parametri formali di tipo classe:

N.B.: un parametro formale di tipo classe è una variabile locale che

contiene l'indirizzo di memoria di un oggetto del tipo classe specificato dal parametro. Quando viene

invocato il metodo il parametro viene inizializzato con l'indirizzo di memoria dell'argomento nell'invocazione

di metodo. ALCUNI APPROFONDIMENTI

1) COSTRUTTORI

Un costruttore è un particolare metodo invocato quando si utilizza l'operazione new per creare un nuovo

oggetto: Specie specieTerrestre = new Specie;

La variabile si riferisce a un oggetto di tipo specie creazione dell'oggetto

Nei costruttori visti fin ora, agli oggetti creati venivano forniti alle variabili d'istanza valori di default.

Ogni costruttore porta il nome della classe in cui nasce; inoltre, Java dispone di un costruttore di default che

inizializza i valori a "0" o "null" fintantoché non venga inizializzato un nuovo costruttore nella classe. Una

volta definito un costruttore, se si volesse usufruire di un costruttore di default sarebbe necessario ridefinirlo

(è sempre consigliabile avere in una classe un costruttore di default per qualsiasi esigenza futura).

Diversamente da un metodo set, un costruttore inizializza tutte le variabili d'istanza di un oggetto anche

qualora non venissero forniti i dati. Se il costruttore ottiene in imput solo i dati relativi ad un certo valore da

attribuire ad una sola variabile di istanza, non definendo quindi i valori delle altre, esso crea un oggetto e

inizializza a valori di default queste date variabili.

Es. riprendendo sempre la classe cane: //inizializza tutte le variabili

public Cane (String name, String specie, int anni){

this.nome=name;

this.eta = anni;

this.razza=tipo;

}

public Cane (String name){

this.nome=name;

//default

this.eta = 0; //default

this.razza= null;

} //costruttore di default

public Cane (){

this.nome=null;

this.eta = 0;

this.razza= null;

}

Quando si crea un oggetto utilizzando l'operatore new, occorre sempre includere l'invocazione a uno dei

metodi costruttori della classe; bisogna indicare la lista degli argomenti tra parentesi dopo il nome del

costruttore che, si ricorda, ha lo stesso nome della classe.

Ricordiamo che un'invocazione a un metodo costruttore assegna ad un oggetto un indirizzo di memoria; se io

scrivo: Cane mioAnimale = new Cane();

creo un oggetto di default. Una volta che l'oggetto è creato, non posso usare l'oggetto giù esistente per

set

posso modificarlo solo col

invocare un costruttore, ; perciò non vale:

mioAnimale.Cane("Balto", "Border Collie", 3);

N.B.: l'omissione del costruttore di default vuol dire che

Dettagli
Publisher
A.A. 2014-2015
8 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher ivyB di informazioni apprese con la frequenza delle lezioni di Programmazione e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Verona o del prof Solitro Ugo.