Newsgroup: it.comp.java
Titolo: Object reference

Ciao
Scusate non sono un'esperto di programmazione object oriented come java fa'
volevo chiedere se qualcuno puo' dirmi una cosa:
Ho progettato una classe Gateway con metodi put e get e un public array di
Object[][] ..
ora avendola instanziata con new Gateway() come faccio a riferirmi al
suddetto oggetto da altre oggetti ?
Cioè non vorrei ripetere sempre new new altrimenti già java è interpretato
diventerebbe molto lento..
Grazie

Per passare oggetti esistenti ad altri oggetti io di solito uso un apposito metodo "setter" :
Esempio :
Gateway gw = new Gateway() ;
gw.put(...) ;  ecc.
AltroOggetto ao = new AltroOggetto ;
ao.setGateway (gw) ;
Dove AltroOggetto è realizzato ad es. in questo modo :
public class AltroOggetto {
  Gateway myGateway ;
  public void setGateway(Gateway gw) {
    myGateway = gw ;
  }
  public void doSomethingWithMyGateway () {
    myGateway.get(...) ;  ecc.
  }
  public void doSomethingWithNewGateway() {
    Gateway temp = new Gateway() ;
    temp.put(...) ;  ecc.
    temp.get(...) ;  ecc.
  }
}
Al di la delle considerazioni sulla velocita` e sull'occupazione di memoria, la differenza fondamentale tra i due approcci sta nel fatto che facendo un new crei un oggetto "vergine", mentre passando un istanza preesistente questa puo` contenere dei dati. Nel mio esempio i due approcci sono illustrati dai due metodi doSomethingWithMyGateway e doSomethingWithNewGateway.
Ciao, Cris
P.S. I metodi "setter" sono un po' sporchini perche` aggirano l'incapsulamento degli attributi, giusto? Forse una soluzione migliore sarebbe fare uso di interfacce...?

-- 
Cristian Veronesi - CRPA SpA - Reggio Emilia, Italy
"Draw a straight line and follow it" (La Monte Young, Compositions 1961)



In alternativa definisci sul l'oggetto Gateway dei metodi  pubblici statici  che puoi richiamare da ogni altro oggetto con  Gateway.unMetodoStatico() senza bisogno di istanziare un oggetto di classe Gateway.  Tieni presente che dovrai dichiarare static tutte le proprietà di Gateway che dovrai utilizzare all'interno del metodo incriminato e che saranno condivise da tutte
le istanze di Gateway (casomai ce ne fossero più di una).  Generalmente il metodo suggerito da Cristian Veronesi è il migliore mentre quello che ti ho proposto è utile solo in situazioni particolari ad esempio quando l'oggetto Gateway utilizzato è unico per l'applicazione e potenzialmente hai la necessita di accedervi  da ogni parte del codice (altrimenti dovresti
passarlo come parametro a tutte le classi dove lo utilizzi-approccio simile al System.out.println() )
Ciao Angelo

 Grazie
Se Gateway e' una classe di cui vuoi un'istanza unica allora la cosa migliore
e' usare il Singleton Pattern (vedi Design Patterns - GoF)
class Gateway()
{
        private static _instance=null;
        private ...//tutto il resto
        public static Gateway getInstance()
       {
                if(_instance==null)
                            _instance=new Gateway();
                return _instance;
        }
       private Gateway()
        {
                //costruisci ...
        }
}
Nota che il costruttore deve essere privato ...se no perdi l'unicita'
dell'istanza.
Le altri classi accedono attraverso
Gateway.getInstance()
Ciao