Lo sviluppo basato su dispositivi mobili (Android) beneficia della programmazione orientata agli oggetti?

3

Il mio sviluppo su Android si basa su programmi scientifici e mentre sto costruendo la maggior parte del codice è in una o due lunghe classi. Quando vengo a distribuire questi programmi, cerco di scomporre tutto e utilizzare classi e oggetti come farei su un'applicazione desktop Java.

Tuttavia, la guida alla lettura Progettazione per prestazioni | Sviluppatori Android su Internal Getter / Setter sembra che OO non sia un buon approccio.

La mia domanda è quale sia l'approccio migliore quando si progettano applicazioni Android, dovrei comunque utilizzare molte classi con getter / setter e molti oggetti che passano in giro. Questo sembra pensare in modo contro-intuitivo all'architettura di Android, ma non sembra giusto avere molto codice in lunghe classi.

Ho esaminato i codici sorgente di altri progetti e questi sembrano seguire l'approccio OO.

Le mie applicazioni comportano un'elaborazione dell'immagine intensa e il tempo e le prestazioni sono importanti.

Sono più un ricercatore scientifico che un programmatore, quindi grazie in anticipo per qualsiasi aiuto.

    
posta James Burnstone 23.07.2012 - 15:38
fonte

3 risposte

10

Scrivi codice stupido

"Spesso, il modo di scrivere codice veloce nelle applicazioni Java è scrivere codice stupido - codice che è diretto, pulito e che segue i più ovvi principi orientati agli oggetti." - Brian Goetz

Non fraintendermi - c'è una possibilità che la progettazione di un oggetto particolare possa avere un impatto sostanziale sulle prestazioni in alcuni casi particolari su specifici percorsi di esecuzione in alcune applicazioni su alcuni dispositivi - perché no, tutto è possibile data la varietà di dispositivi Android . Sai cosa? c'è anche una possibilità che abbia un impatto opposto su qualche altro dispositivo, perché no.

Se ciò accade ( if ), se ( if ) otterrai in qualche modo una giustificazione chiara, solida, testata e comprovata dell'impatto specifico sulle prestazioni - quindi (< strong> quindi ), vai avanti, implementa i trucchi necessari per raggiungere le prestazioni richieste, indipendentemente da quanto possano essere perversi ( BTDTGTTS ). Fino ad allora, però, elimina ogni supposizione infondata che ti potrebbe venire in mente.

Fino ad allora ... Solo. Far cadere. Si.

Developers love to optimize code and with good reason. It is so satisfying and fun. But knowing when to optimize is far more important. Unfortunately, developers generally have horrible intuition about where the performance problems in an application will actually be... Most performance tuning reminds me of the old joke about the guy who's looking for his keys in the kitchen even though he lost them in the street, because the light's better in the kitchen... (Brian Goetz)

    
risposta data 23.07.2012 - 16:03
fonte
3

Scrivi in C ++ e fallo come faresti per qualsiasi altra piattaforma.

Lo sviluppo per Android può essere fatto in C ++ (cerca Native Development Kit (NDK) ) e se hai bisogno di prestazioni grezze, ti consiglio senz'altro di dargli un'occhiata, ma dipende da quali lingue e librerie conosci bene.

La macchina virtuale Dalvik è molto meno ottimizzata di Oracle JVM o IBM HotSpot e anche queste JVM ben sintonizzate richiedono generalmente molta più memoria del corrispondente programma in C ++. Infatti, Java (o qualsiasi altra lingua che si occupa di JVM) in genere ha bisogno di molta più memoria rispetto all'equivalente C # o persino applicazione Python o Ruby. Se hai intenzione di eseguire l'elaborazione delle immagini, l'efficienza della memoria è un vantaggio.

Puoi anche iniziare a scrivere codice in Java e riscrivere i bit più critici in C ++ quando trovi, testando un prototipo, quali sono (vedi la risposta di gnat, è buono).

    
risposta data 23.07.2012 - 16:17
fonte
1

Questa è una sciocchezza. Se, ad esempio, si desidera una prestazione migliore del 10-15%, andare su NDK o eliminare i principi di progettazione OO. Ma se vuoi un codice facile da scrivere, manutenibile e facile da capire, allora ignora l'hype delle prestazioni.

La linea di fondo è che il perfezionamento delle prestazioni è un lavoro svolto dopo la creazione di un'app, non durante. Il Droid è in genere abbastanza veloce da usare lo SKD standard così com'è.

    
risposta data 25.07.2012 - 22:01
fonte