Utilizzo dei parametri Statico e Passing

0

Sto implementando una progettazione a schema di stato in Java per calcolare la posizione corrente di un oggetto seguendo una traiettoria trapezoidale.

Il modello consiste in un contesto, stato e classi di stati.

Attualmente, le variabili (accel, max_vel e target) vengono passate come parametri a ciascun oggetto di stato al momento dell'istanziazione - in effetti, le variabili "gocciolano" in ogni stato indipendentemente dal fatto che siano usate o meno.

Mi è venuto in mente che potrei semplicemente creare tre variabili statiche protette (come gli stati sono classi private) che contengono i valori. In questo modo ogni oggetto non ha bisogno di memorizzare variabili non necessarie.

Qualcuno può vedere un problema con questo?

    
posta M-R 26.09.2016 - 17:03
fonte

2 risposte

4

Dovresti tenerli come parametri.

Non riesco a vedere alcun vantaggio nel renderli statici, performanti o meno. Ad esempio, i parametri vengono solitamente passati nei registri della cpu, mentre le statistiche vivono nella memoria.

Sul lato negativo, l'utilizzo della statica renderà il codice più fragile per le modifiche future, tra cui la creazione di un secondo oggetto di questo tipo e l'utilizzo di più thread. La statica rende i test più difficili, ri: beffardo.

L'intento del codice sarà anche più chiaro con i parametri che con la statistica.

Quindi, con l'unico svantaggio, utilizziamo i parametri così come sono destinati a essere utilizzati, e evitiamo la statica per il passaggio delle informazioni sui parametri agli oggetti.

D'altra parte, sembra che la tua configurazione debba essere estratta nella sua classe, e questo oggetto di configurazione quindi condiviso con le classi di stato (come un singolo oggetto invece di più parametri).

    
risposta data 26.09.2016 - 17:28
fonte
3

La tua domanda è contrassegnata come correlata agli oggetti, quindi penso che sia importante essere chiari sul fatto che l'uso di valori statici in questo modo sia completamente in disaccordo con l'orientamento dell'oggetto. È anche una idea davvero pessima ™ in generale. Quello che stai descrivendo è fondamentalmente lo stesso usando le variabili globali per il passaggio dei messaggi.

In base a ciò che hai descritto, sembra che queste proprietà debbano essere variabili a livello di membro o solo parametri di metodo. Il costo di queste "variabili extra" è così insignificante, non dovrebbe essere considerato. Il compilatore o JIT potrebbe persino eliminarli.

A meno che non si stia costruendo un'applicazione a eliminazione diretta, l'utilizzo di variabili statiche in questo modo sarà sicuramente un problema a lungo termine.

    
risposta data 26.09.2016 - 17:44
fonte

Leggi altre domande sui tag