Gli oggetti in java



Se il C++ fonda gran parte della sua potenza sugli oggetti, il java fa molto di più.
Il java è il linguaggio orientato agli oggetti per eccelenza e soprattutto è il migliore per imparare bene la OOP ( Object Oriented Programming).
Molti hanno difficoltà ad assimilare la filosofia della programmazione ad oggetti, ma con un po' di pratica e un minimo di flessibilità mentale il problema sarà risolto facilmente!
Per capire cosa sia un oggetto userò il classico esempio del contocorrente ( cc ):
Pensate un secondo che cos'è un cc e cosa ci fate con esso! Pensato? Bene:
Un cc è caratterizzato da:
Cosa faccio con un cc?
Bene signori e signore, abbiamo appena descritto un cc in linguaggio diciamo "umano"; la trasposione in java è molto semplice:
Le voci con cui abbiamo CARATTERIZZATO il cc saranno le VARIABILI DI ISTANZA dell'oggetto
mentre le azioni che compio con un cc saranno i METODI con cui maneggerò un oggetto ContoCorrente.
Cominciamo a mettere giù qualche linea di codice:
public class ContoCorrente { private String nome_titolare; private int saldo; private int numero_conto; } Bene abbiamo dichiarato le variabili di istanza che caratterizzano ogni oggeto di tipo ContoCorrente,
cioè ogni volta che creerò un cc verrà riservato dello spazio di memoria (HEAP) per le variabili di istanza di quell'oggetto ( due oggetti diversi hanno due spazi diversi dove risiedono le loro variabili di istanza)

public class ContoCorrente { private String nome_titolare; private double saldo; private int numero_conto; public ContoCorrente(String nome, double saldo_ini, int num) { nome_titolare = nome; saldo = saldo_ini; numero_conto = num; } } Ora ho aggiunto il COSTRUTTORE di un oggetto ContoCorrente.
Quando il costruttore viene invocato è come se aprissimo un nuovo cc in banca.
Deve avere lo stesso nome della classe, non restituisce nulla ma non ci va il void per specificarlo (come invece occorre fare nei metodi normali).
Il costruttore alloca memoria per un oggetto di tipo ContoCorrente ed inizializza le variabili di istanza.
Può avere o no dei parametri espliciti (quelli tra parentesi).
Possiamo scrivere tutti i costruttori che vogliamo a condizione che i parametri espliciti siano diversi (per numero o per tipo).

public class ContoCorrente { private String nome_titolare; private int saldo; private int numero_conto; public ContoCorrente(String nome, double saldo_ini, int num)//il costruttore { nome_titolare = nome; saldo = saldo_ini; numero_conto = num; } public double getSaldo() { return saldo; } } Adesso la nostra classe ha anche il metodo che restituisce il saldo del conto.
Dichiarato public perchè se no non potrei invocarlo dall'esterno, il tipo restituito è, ovviamente, double perchè il saldo è stato dichiarato come double ed è proprio questo il valore che andrò a restituire.
Non ha parametri espliciti (quelli tra parentesi) perchè non servono.
Return saldo; è l'istruzione che ritorna il valore dell'espressione che c'è dopo: in questo caso saldo.
Questo tipo di metodi che non modificano in alcun modo le variabili di istanza dell'oggeto sono detti METODI ACCESSORI

public class ContoCorrente { private String nome_titolare; private int saldo; private int numero_conto; public ContoCorrente(String nome, double saldo_ini, int num)//il costruttore { nome_titolare = nome; saldo = saldo_ini; numero_conto = num; } public double getSaldo() { return saldo; } public void deposita(double valore_depositato) { saldo = saldo + valore_depositato; } public void Preleva(double valore_prelevato) { saldo = saldo - valore_prelevato; } } I due nuovi metodi ( deposita e preleva ) fanno proprio quello che il loro nome fa pensare!
Sono public per lo stesso motivo di prima sono void perchè non restituiscono nulla.
In questo caso hanno dei parametri espliciti: il valore che vogliamo sia depositato o prelevato.
Poichè modificano il valore di una variabile di istanza dell'oggetto sono detti METODI MODIFICATORI
Infatti il saldo viene aumentato (deposita) o diminuito (preleva).

Ok, la classe può finire qui. Salvate come ContoCorrente.java e compilate.
Come si crea un oggetto?

ContoCorrente myConto = new ContoCorrente("Simone",1000,1); Ho creato un nuovo oggetto ContoCorrente che ho chiamato myConto.
Ora le varie variabili di istanza dell'oggetto avranno i seguenti valori:
Poichè ho dichiarato le variabili di istanza come private se provassi a scrivere un'istruzione del tipo:
int a = myConto.saldo; Il compilatore darebbe errore perchè non ha il permesso di accedere a quella variabile.
Devo invece usare i metodi che ho scritto nellla classe ContoCorrente.
Se ad esempio voglio sapere il saldo di myConto cioè il valore di myConto.saldo, userò il metodo getSaldo() in questo modo:
double mySaldo = myConto.getSaldo(); In questo modo la variabile "mySaldo" conterrà proprio il valore di myConto.saldo.


Indietro Avanti Corso di Java Coding center Back to home