PDA

Visualizza la versione completa : oggetti Java


Lucked
04-12-2003, 13:45
ciao a tutti, ho questa idea sulla programmazione ad oggetti in java, che non sonoriuscito a realizzare. Ve la illustro: prendiamo 2 o più oggetti creati dalla stessa classe...posso pensare con un metodo di classe di scambiare i valori delle variabili interne?

esempio..dal main richiamo qualcosa del tipo:

oggetto1.scambiaColore(oggetto5);

Ditemi cosa ne pensate..
Saluti
Luca

Xadoom
04-12-2003, 14:16
Beh io creerei dei metodi di tipo public per fare una cosa del genere:


oggetto1.scambiaColore(oggetto2.getColore);

Certo si può fare anche come dici tu.
Non vedo dove sia il problema, basta definire metodi appositi, ad esempio, facendo come vuoi tu nella classe devi definire un metodo:


//All'interno della classe Oggetto
//....
private String colore
//.....

public String getColore(){return colore;}

public void scambiaColore(oggetto ogg){
colore = ogg.getColore();

//.....
}


Beh, non so se sono stato chiaro. :ciauz:

LeleFT
04-12-2003, 14:17
Forse non sono riuscito a capire a fondo la tua idea, se invece l'ho capita credo che sia una cosa piuttosto inutile.

Tu vorresti, tramite un metodo di classe (anche se, a prima vista, dall'esempio che hai riportato si tratterebbe di un metodo d'istanza), far sì che un oggetto 'a' della classe A prenda i valori delle variabili interne di un oggetto 'b' della classe A e viceversa. Cioè creare uno swap di oggetti, tramite lo swap delle loro proprietà.

Si potrebbe fare, ma sarebbe la stessa operazione che si farebbe con una successione di passi alternativi, non avendo a disposizione il metodo. Perchè? Per il semplice fatto che un oggetto (nel modo classico di vedere gli oggetti) non ti dà accesso alle proprietà interne se non attraverso i suoi metodi. Questo significa che all'interno del metodo richiamato avrai un oggetto della stessa classe al quale, però, non puoi "rubare i segreti" nascosti al suo interno, se non attraverso i metodi da esso messi a disposizione. Questa frase è molto contorta, ma vedrò di spiegartela attraverso un esempio. Prendiamo questa classe:


class Oggetto {
private int mioValore1;
private int mioValore2;

public Oggetto() {
mioValore1 = mioValore2 = 0;
}

public void setPrimoValore(int primoValore) {
mioValore2 = primoValore;
}

public void setSecondoValore(int secondoValore) {
mioValore1 = secondoValore;
}

public int getPrimoValore() { return mioValore2; }
public int getSecondoValore() { return mioValore1; }
}

Se a questo codice vogliamo aggiungere un metodo per scambiare i valori interni di due oggetti nel modo in cui hai chiesto tu nell'esempio dovremo aggiungere un metodo scambiaValori():


public void scambiaValori(Oggetto o) {...}

Ora come ci comportiamo dentro al metodo? Come l'interfaccia dell'oggetto ci impone: settiamo i valori dell'oggetto chiamante con i valori dell'oggetto passato come parametro, salvandoli prima in variabili temporanee e poi settiamo i valori dell'oggetto passato come parametro con i valori che c'erano prima nell'oggetto chiamante:


public void scambiaValori(Oggetto o) {
int temp1 = o.getSecondoValore();
int temp2 = o.getPrimoValore();
o.setPrimoValore(mioValore2);
o.setSecondoValore(mioValore1);
mioValore1 = temp1;
mioValore2 = temp2;
}

Ma, come ben si vede, questa sequenza di passi la si poteva fare benissimo anche senza il metodo (il quale risulta un po' inutile).
Da notare che non possiamo accedere direttamente alle proprietà dell'oggetto passato come parametro, a causa (e per fortuna) del fatto che gli oggetti si possono manipolare solo attraverso i propri metodi. Qualcuno potrebbe obiettare: "basta rendere pubbliche le proprietà" e io obietterei subito "E a che ti servono gli oggetti allora? Sono stati inventati apposta per evitare queste cose, per proteggere i dati". E poi sarebbe una modifica di poco valore, perchè non guadagna nulla il metodo appena proposto in termini di utilità.

Se la tua idea fosse diversa, allora non l'ho capita. Se era questa, spero di aver risposto.


Ciao.

Lucked
04-12-2003, 15:01
Per Xadoom...hai capito l'idea. Ti ringrazio della spiegazione.

Per chi non avesse capito:
L'idea è di scambiare il valore di una variabile interna di un oggetto con quella di un altro oggetto. E non dello stesso oggetto.

Per far questo, bisogna dichiarare un metodo con argomento (oggetto nomeOgg), e ovviamente sviluppare il metodo scambia correttamente.

Loading