Autore Topic: Aggiornamento variabile classe da altra classe  (Letto 2010 volte)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Aggiornamento variabile classe da altra classe
« il: 19 Giugno 2011, 19:43:51 CEST »
0
Scusate mi sembrava una cavolata ma proprio non riesco ad arrivarci, forse perchè sono stanco....praticamente ho una classe Pippo con il codice
Codice (Java): [Seleziona]
public int errore = 0;
Pluto seconda_classe = new Pluto();
seconda_classe.cambia_var(this);
 


ora dal metodo cambia_var della classe Pluto vorreisettare la variabile errore della classe Pippo ad 1 ma come cavolo si fa ?  :-\

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:Aggiornamento variabile classe da altra classe
« Risposta #1 il: 20 Giugno 2011, 08:22:30 CEST »
0
Ciao,
ma come hai definito il metodo cambia_var nella classe Pluto? Dovrebbe essere ad esempio:

Codice: [Seleziona]
public void cambia_var(Pippo classe) {
    classe.errore = 1;
}
 

denper

« Ultima modifica: 20 Giugno 2011, 08:25:57 CEST da denper »
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Aggiornamento variabile classe da altra classe
« Risposta #2 il: 20 Giugno 2011, 08:53:54 CEST »
0
Si però il fatto è che Pippo è una classe che esiste anche in altre classi cioè io per più classi ho sempre Pippo che però fa cose diverse (forse ho sbagliato a dare lo stesso nome?) :
Codice (Java): [Seleziona]
public class Minnie extends Activity{
    public class Pippo{
       ...
       ...
    }
}

quindi se io faccio
Codice (Java): [Seleziona]
public class Pluto{
   public void cambia_var(Minnie.Pippo classe){
       classe.errore = 1;
   }
}
funziona però io lo devo fare generico in modo da poter passare Minnie.Pippo e Topolino.Pippo, etc

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Aggiornamento variabile classe da altra classe
« Risposta #3 il: 20 Giugno 2011, 09:34:13 CEST »
0
Se dici che vuoi cambiare una variabile in una classe, immagino che tu faccia riferimento ad una variabile di tipo statico, per cui le modifiche le fai a livello di classe proprio, e le vedi senza istanziare la stessa classe.
In questo modo, non c'è motivo di passare la classe al metodo, poiché è accessibile direttamente; ma da quello che vedo, stai cercando di cambiare un valore in una classe (non ho capito se è un'istanza o meno) dichiarata all'interno dio un'altra.
Per fare questo, il metodo migliore sarebbe quello di esporre un metodo su Minnie, che permetta di cambiare il valore di Pippo.errore, e quindi non di accedere direttamente alla sottoclasse. Nella programmazione ad oggetti, questo si chiama incapsulamento:

Cito da wikipedia:
Citazione
L'incapsulamento è la proprietà per cui un oggetto contiene ("incapsula") al suo interno gli attributi (dati). Lo scopo principale dell'incapsulamento è appunto dare accesso ai dati incapsulati solo attraverso i metodi accessibili dall'esterno. Gestito opportunamente, l'incapsulamento permette di vedere l'oggetto come una black-box, cioè una scatola nera di cui, attraverso l'interfaccia, è noto cosa fa e come interagisce con l'esterno ma non come lo fa.

Ad ogni modo, per non dar adito a disguidi, sarebbe bene che esponessi ciò che vuoi fare, e magari discutiamo un po' sul modo di farlo.
Senza pretese, ovviamente.

7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Aggiornamento variabile classe da altra classe
« Risposta #4 il: 20 Giugno 2011, 09:52:04 CEST »
0
Ciao 7h38ugg3r. In pratica ho una classe (Classe1) che contiene un'altra classe (Classe1.1) nella quale c'è la variabile public int errore  = 0. Dalla Classe1.1 richiamo il metodo cambia_var che si trova in una classe esterna (Classe2) . Quello che vorrei fare è cambiare il valore di Classe1.1.errore dal metodo Classe2.cambia_var. Per fare questo io faccio così :

DALLA CLASSE1
Codice (Java): [Seleziona]
Classe1.1 c11 = new Classe1.1();
DALLA CLASSE1.1
Codice (Java): [Seleziona]
Classe2 c2 = new Classe2();
c2.cambia_var(c11);

E DA CAMBIA_VAR
Codice (Java): [Seleziona]
public void cambia_var(Classe1.Classe1.1 classe){
   classe.errore = 1;
}

discutiamo prima sulla sobrietà di questo codice (che funziona però è giusto fare così ?) e poi ti espongo il secondo nonchè vero problema...

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Aggiornamento variabile classe da altra classe
« Risposta #5 il: 20 Giugno 2011, 10:05:39 CEST »
0
forse non hai ben chiare alcune cose.
Quello che stai facendo tu, è tipico della programmazione funzionale, in cui passi un argomento ad una funzione.
In questo caso l'argomento è la tua classe e la funzione deve fare delle modifiche alla tua classe.

In generale, devi fare in modo che la tua classe c2 veda c11.

L'istanza della classe c2, vede l'istanza di c11?

Se così non fosse, dovresti trovare un modo per rendere l'una visibile all'altra.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Aggiornamento variabile classe da altra classe
« Risposta #6 il: 20 Giugno 2011, 10:13:15 CEST »
0
Scusa, posso chiederti quale sarebbe il modo corretto di agire per cambiare la variabile errore della classe 1.1 dal metodo cambia_var della classe2 ?? Crearmi un metodo public in classe1 che cambi il valore di errore di classe1.1 ?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Aggiornamento variabile classe da altra classe
« Risposta #7 il: 20 Giugno 2011, 10:14:59 CEST »
0
l'ideale sarebbe quello di creare un metodo public per prenderti l'istanza di 1.1 dalla 1.
Successivamente, sulla 1.1 dovresti creare un metodo public per poter modificare tale valore.

Quello che ti dicevo prima riguardo all'incapsulamento.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Aggiornamento variabile classe da altra classe
« Risposta #8 il: 20 Giugno 2011, 10:24:02 CEST »
0
quindi se ho ben capito il codice di prima andrebbe però dovrei trasformare così cambia_var :
Codice (Java): [Seleziona]
public void cambia_var(Classe1.Classe1.1 classe){
   classe.cambia_var_errore(1);
}

ed in Classe1.1 dovrei crearmi il metodo :
Codice (Java): [Seleziona]
public void cambia_var_errore(int i){
  errore = i;
}
ho capito bene ?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Aggiornamento variabile classe da altra classe
« Risposta #9 il: 20 Giugno 2011, 11:35:27 CEST »
+1
no.

allora:
classe1 contiene classe1_1.
su classe1 implementi un metodo getClasse1_1, che "espone", di fatto, classe1_1 e permette agli altri di vederla.
su classe1_1, implementi i metodi getErrore/setErrore che servono a settare e leggere la property errore.

Quindi, da classe2, tu farai: classe1.getClasse1_1().setErrore(1);
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Aggiornamento variabile classe da altra classe
« Risposta #10 il: 20 Giugno 2011, 12:36:48 CEST »
0
Ah ok capito, grazie tante !! Rep+ ;)

PS: Qualora in altre classi tipo Classe3 e Classe4 avessi sempre Classe1.1 (che si chiama alla stessa maniera ma fa altre cose), ci sarebbe un modo dinamico per richiamarla da public void cambia_var(Classe1.Classe1.1 classe) oppure è poco ortodosso chiamare delle classi nidificate alla stessa maniera ?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Aggiornamento variabile classe da altra classe
« Risposta #11 il: 20 Giugno 2011, 12:43:51 CEST »
0
Ogni classe chiamala in maniera differente.
Se poi hanno una logica comune, accomunale oppure crea un'interfaccia che ognuna di loro deve implementare: in questo modo avranno gli stessi metodi (avrai uno standard), ma saranno delle specializzazioni.
Inoltre, se non sai a quale di questi pippo andrai incontro, puoi castare la classe all'interfaccia ((PippoI) Pippo) e richiamare il metodo che sai che avrà sicuramente.

Spero di essere stato chiaro.
^_^
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Aggiornamento variabile classe da altra classe
« Risposta #12 il: 20 Giugno 2011, 12:45:10 CEST »
0
Chiarisssimo!!! grazie tante! ;)