Definizione di classi - lezione 8-3-12


Si vuole costruire una classe rettangolo avente
attributi: base, altezza
metodi:
  1. Rettangolo(double b, double h)
  2. double perimetro();
  3. double frazioneDiArea();
  4. 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 static



per 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