Si vuole costruire una classe rettangolo avente
attributi: base, altezza
metodi:
- Rettangolo(double b, double h)
- double perimetro();
- double frazioneDiArea();
- void cambiaDimensioni();
i campi verranno realizzati tramite
variabili double. Le variabili utilizzate per istanziare i campi
degli oggetti sono chiamate variabili di ISTANZA. Si dichiarano prima
e fuori dei metodi!
Class Rettangolo{
private double base; // variabili di
istanza
private double altezza;
private double base, altezza;
//posso scrivere le variabili in modo più compatto
//costruttori
}
private (modificatore di accesso)
indica che la variabile/metodo può essere utilizzato solo nella
classe in cui è definito
public indica che la variabile/metodo
può essere usato anche da classi diverse
le variabili di istanza sono
solitamente dichiarate private in modo che non possano essere
modificate da altre classi
le variabili di istanza rappresentano
lo stato di un oggetto. Se creo oggetti diversi di una stessa classe
hanno stati diversi, ogni classe ha le sue variabili di istanza che
ne definisce lo stato
appena eseguito il programma le
variabili di istanza double hanno di default 0.0
il costruttore si occuperà poi di
riempirle con i valori giusti
(posso assegnare il valore di una
variabile di istanza anche fuori dal costruttore ma di solito non si
fa)
costruttore
- Non ha tipo restituito
- ha sempre il nome della classe
- viene invocato una sola volta per oggetto
- è solitamente public
class Rettangolo{
//variabili di istanza
…
//costruttore
public Rettangolo(double b, double a){
}
}
i valori b ed a sono chiamati anche
parametri formali (rappresentano
in modo astratto i valori che verranno inseriti successivamente
dall'utente parametri attuali)
il costruttore si
occuperà poi di mettere i valori di b e a nelle variabili di istanza
base e altezza
new
Rettangolo(10,20); //10 e 20 sono parametri attuali
PASSAGGIO DI
PARAMETRI PER VALORE: all'invocazione di un metodo i parametri
attuali vengono copiati nei parametri formali del metodo.
Il costruttore
public
Rettangolo(double b, double a){
this.base=b;
this.altezza=a;
}
this è una parola
chiave che indica un riferimento all'oggetto su cui è invocato il
metodo.
This.base= prendi
la variabile base di questo oggetto su cui è definito il metodo
(siccome ogni oggetto ha le sue variabili di istanza)
le variabili di
istanza continuano ad esistere finché esiste l'oggetto invece i
parametri formali una volta terminato il costruttore vengono
eliminate (chiamati anche variabili locali). Quindi se voglio salvare
il dato le devo necessariamente copiare all'interno delle variabili
di istanza.
Metodo perimetro()
Public double perimetro(){//variabile locale, muore alla fine del metodo. Una variabile locale non viene inizializzata di default
double p;
//assegnazione del valore del perimetro alla variabile p
p=(this.base+this.altezza)*2;
//l'istruzione return restituisce il valore di p all'esterno, inoltre causa la fine del metodo.
return p;
}
caratteristiche:
non ha parametri formali
non modifica lo stato dell'oggetto (lo legge e basta) → metodo di accesso
public double perimetro(){
return (this.base+this.altezza)*2;
}
Metodo frazioneDiArea(double f)
Public double frazioneDiArea(double f){return (this.base*this.altezza)*f;
}
cambiaDimensioni(double b, double a)
metodo cambiaDimensioni(double b, double a){this.base=b;
this.altezza=a;
}
è un metodo di modifica perchè modifica lo stato dell'oggetto
classificazione delle variabili
Classificazione in base al contenuto:- di riferimento=contengono riferimento ad oggetti
- primitive= contengono dati primitivi
classificazione in base al luogo di definizione:
- di istanza=fuori dai metodi
- locali= all'interno dei metodi
variabili e metodi statici
Variabili statiche= variabili associate alla classe. Ne esiste una copia sola per tutta la classe e non una per ogni singolo oggetto. Si dichiarano come le variabili di istanza ma è preceduta dalla parola chiave staticper sapere quanti rettangoli sono stati creati creo un metodo di classe (statico) → public static int numeroRettangoliCreati()
per saperlo ogni volta che creo un rettangolo dal costruttore devo incrementare una variabile di classe (non posso utilizzare una variabile di istanza all'interno di un metodo di classe)
class Rettangolo{
//variabili di istanza
…
//variabile di classe per contare le istanze create
private static int numIstanze=0;
//costruttore che incrementa di 1 numIstanze ogni volta che crea un oggetto
public Rettangolo(double b, double a){
this.base=b;
this.altezza=a;
Rettangolo.numIstanze++;
}
//metodo per leggere il numero di istanze create
public static int numeroRettangoliCreati(){
retun Rettangolo.numIstanze;
}
}
Commenti
Posta un commento