In risposta alla risposta di Aaronaught alla domanda in:
Non posso semplicemente utilizzare tutti i metodi statici?
La memoria utilizzata non è inferiore a un metodo statico? Ho l'impressione che ogni istanza di un oggetto porta in giro la propria versione eseguibile di una funzione membro non statica.
Indipendentemente da quanto overhead è coinvolto nella chiamata di un metodo statico, a prescindere dalla scarsa progettazione OO e da possibili mal di testa in fondo alla strada, non utilizza meno memoria in fase di runtime?
Ecco un esempio:
Faccio un vettore di oggetti inizializzati a zero. Ogni oggetto contiene un pezzo di dati (un triangolo composto da nove doppie). Ogni oggetto viene popolato in sequenza dai dati letti da un file .stl. È necessario un solo metodo statico. La corretta progettazione OO impone che un metodo che tratta direttamente i dati sia distribuito a ciascun oggetto. Ecco la soluzione OO standard:
foreach(obj in vec) {
obj.readFromFile(fileName);
}
Ogni oggetto contiene il codice compilato readFromFile
accanto ai dati!
La memoria è più un problema che le prestazioni in questo caso, e ci sono molti dati su un sistema vincolato.
Soluzioni:
- Metodo Namespace (ottimo per C ++ ma non possibile in Java)
- Un metodo statico nella classe obj. Il codice eseguibile viene tenuto in un posto in fase di esecuzione. C'è un piccolo overhead per chiamare il metodo.
- Una classe genitore da cui viene derivato obj, che contiene il metodo privato
readFromFile
. Chiama consuper.callPrivateMethod()
che chiamareadFromFile
. Disordinato, e ancora un po 'di memoria in testa in ogni oggetto. - Implementa
readFromFile
all'esterno dell'ambito di obj, quindi nella classe vec o nella classe chiamante. Questo, secondo me, rompe l'incapsulamento dei dati.
Mi rendo conto che per grandi quantità di dati un oggetto esplicito per ogni triangolo non è l'approccio migliore. Questo è solo un esempio.