Passaggio di valore più volte rispetto a Creazione di una variabile di classe pubblica

2

Supponiamo di avere una serie di metodi su classi diverse che utilizzano tutte le stesse cinque variabili fondamentali definite nel mio metodo principale. Potrei collegare queste cinque variabili a catena come argomenti del metodo da un metodo all'altro, oppure potrei semplicemente definire queste cinque variabili come variabili di classe pubblica e fare riferimento al loro percorso ogni volta che voglio usarle.

Che cosa è considerato più leggibile e quali sono i termini di elaborazione più efficienti? Questi valori non cambieranno per tutta la loro durata nel programma e assumeranno la forma di valori booleani, matrici int [] multidimensionali e matrici int [] monodimensionali.

    
posta user3834916 20.11.2014 - 13:07
fonte

2 risposte

3

In questo caso, dovrei dire creare un oggetto che li trattiene - come una classe "Data", che puoi quindi istanziare. Questo fornisce un buon singolo punto di accesso ai dati. Ma, in questo caso, occupa un po 'di spazio in più sull'heap. (Non sono sicuro di quanto dovresti preoccuparti di questo, però java ha una garbage collection automatica)

Un altro vantaggio è che ora i tuoi oggetti devono essere meno informati l'uno dell'altro. Quando si utilizza un oggetto dati per incapsulare i dati, è possibile inviarli al metodo in modo che il mittente non sappia esattamente quale sarà il metodo da utilizzare. Questo è un vantaggio, in quanto è possibile estendere facilmente il metodo in seguito per utilizzare ulteriori informazioni dall'oggetto dati. Immagina che il metodo usi solo i valori booleani e gli array monodimensionali, vuoi davvero che il tuo mittente lo sappia? Direi, basta passare l'oggetto dati e fidarsi del metodo per recuperare i dati di cui ha bisogno ed eseguire le operazioni)

In questo modo, è anche più facile estenderlo. All'improvviso, per una classe, hai bisogno di più dati? Aggiungilo all'oggetto dati. A un certo punto, vuoi verificare che tutti i dati siano corretti? Aggiungi metodi setter all'oggetto dati per proteggerlo dall'input offeso.

Poiché non so come il tuo programma sia progettato esattamente, questo è quello che farei considerando tutte le informazioni che hai fornito, e tenendo presente l'opzione di espandere la tua implementazione in modi imprevisti in seguito.

    
risposta data 20.11.2014 - 15:12
fonte
0

I pensieri di un programmatore multi-lingua / multipiattaforma ...

I metodi in questione sono nella stessa classe di main? In tal caso, possono manipolare i valori indipendentemente dall'accesso dichiarato (pubblico / privato ....). Quindi presumo che la tua domanda si riferisca a metodi che sono definiti in altre classi. L'impatto sulle prestazioni delle varie opzioni sarà irrilevante per il 99,99% dei casi. Non vale la pena spendere cicli cerebrali lì.

Se il mio metodo principale ha bisogno dell'accesso in lettura / scrittura a un gruppo di variabili e un gruppo di metodi in altre classi richiede solo l'accesso in lettura a tali variabili, sono propenso a pensare che le variabili facciano parte del "contesto" di tutti quei calcoli. Definire un "oggetto contesto" nella classe principale - ciò che Dylan chiamava "Dati" - crea un codice sorgente più ordinato, specialmente se le variabili ricevono il loro valore durante l'inizializzazione del contesto e questi valori non vengono mai modificati. La domanda diventa quindi: passo il contesto come argomento quando chiamo i metodi o lo faccio pubblico / protetto / accesso al pacchetto?

La ragione migliore per me per passare esplicitamente il contesto quando chiamo i metodi è che farlo rende palesemente ovvio che i metodi usano le variabili di contesto - un programmatore che legge il mio codice non ha bisogno di esaminare ogni singolo metodo per determinare se dipende dal contesto. In tal caso, dichiarerei esplicitamente il contesto privato se non lo desidero direttamente referenziato da alcuna sottoclasse della classe principale, o protetto se sono disposto a consentire a una sottoclasse di fare direttamente riferimento a esso - perché, ad esempio, la sottoclasse ha bisogno di estendere la logica di inizializzazione per il contesto.

Se decidessi di non preoccuparti di rendere evidente questa dipendenza, potrei dichiarare il contesto come un pacchetto (mi sento un po 'selvaggio e pazzo) o di accesso pubblico (sono completamente alto e prendo cautela nei venti) . Personalmente preferisco diventare pazzo e in alto da qualche parte oltre al mio codice; -)

    
risposta data 20.11.2014 - 20:32
fonte

Leggi altre domande sui tag