2011-09-10 16 views
7

Estoy jugando con algunos programas básicos en Android usando Eclipse. Actualmente estoy mirando un libro y jugando con un código de muestra que está escrito en el libro.programación orientada a objetos android

He notado que en este libro en particular, todos los ejemplos hasta el momento toman ritmo en la actividad principal. No creo que sea una buena práctica de programación orientada a objetos, ya que procedo de un entorno Java tradicional.

¿Es esta la práctica común para plataformas móviles? ¿No deberían todas las clases estar contenidas en sus propios archivos?

+0

¿Puede publicar algunos ejemplos para ilustrar mejor su pregunta? – elevine

+1

OOP no siempre es la mejor práctica; y dividir en miles de archivos no siempre produce un buen programa OOP. –

Respuesta

6

¿Las clases no deberían estar todas contenidas en sus propios archivos?

No necesariamente como Android Activity es una clase de "caso especial". Si no lo ha hecho ya, te recomiendo que leas Application Fundamentals y en particular la sección 'Actividades' bajo Application components ...

Una actividad representa una única pantalla con una interfaz de usuario. Por ejemplo, una aplicación de correo electrónico puede tener una actividad que muestre una lista de correos electrónicos nuevos, otra actividad para redactar un correo electrónico y otra actividad para leer correos electrónicos. Aunque las actividades trabajan juntas para formar una experiencia de usuario coherente en la aplicación de correo electrónico, cada una es independiente de las demás. Como tal, una aplicación diferente puede iniciar cualquiera de estas actividades (si la aplicación de correo electrónico lo permite). Por ejemplo, una aplicación de cámara puede iniciar la actividad en la aplicación de correo electrónico que compone el correo nuevo, para que el usuario pueda compartir una imagen.

Tenga en cuenta la sección de texto que he resaltado en negrita. El punto es que un Activity en sí mismo no es la aplicación completa y, si se permite, cualquier aplicación de terceros puede invocar un Activity en una de sus aplicaciones. Como tal, es común hacer un Activity tan autónomo como sea posible. Un ejemplo particular es el uso de algo así como un AsyncTask que proporciona métodos para ejecutar un hilo de fondo, así como manipular la IU - anidar una clase privada que se extiende AsyncTask es bastante común y simplifica el código. Las clases de anidación que extienden BroadcastReceiver también son comunes por la misma razón.

Dicho esto, no hay nada de malo en utilizar archivos de clase Java separados para las clases de ayuda de POJO, por ejemplo, se reduce a la complejidad de su aplicación, pero puede significar tener especial consideración de cómo funcionan ciertas clases de Android: AsyncTask class siendo uno en particular si está definido en un archivo de clase separado, pruébalo y verás a qué me refiero. :-)

+3

El hecho de que la Actividad sea casi una aplicación en sí misma debería implicar algo completamente opuesto a lo que está completamente contenido en una clase grande. Cualquier aplicación es más o menos "autónoma", esto no significa que todo el código debe estar en una sola clase. Como ha citado, * "las actividades trabajan juntas para formar una experiencia de usuario coherente en (una) aplicación" *, en realidad se espera que partes de la interfaz de usuario y la funcionalidad se compartan entre actividades. – Groo

+1

@Groo: "El hecho de que Activity es casi una aplicación en sí misma ..." - no, esto es exactamente lo que muchas personas nuevas en Android creen, es decir, piensan que 'Activity' es sinónimo de 'app'. En realidad, una aplicación puede tener docenas de componentes (Actividades, Servicios, BroadcastReceivers, Proveedores de contenido). No estoy sugiriendo que todas las actividades contengan todo: mi punto es que las actividades suelen ser simples interfaces de usuario de 'página' que realizan una acción muy simple y, como tales, a menudo pueden contener todo lo que necesitan. Si hay una necesidad de código compartido, entonces se pueden usar clases de ayuda. – Squonk

+0

+1 Ok, creo que leí la publicación demasiado superficial, ahora la entiendo: se refirió a una "Actividad" "autónoma" como parte de una aplicación completa. Es cierto que no necesita dividir cada parte de su aplicación en varios archivos (o clases), pero cuando se hace la programación TDD, a menudo es bueno poder probar cada componente más pequeño por separado, por lo que tiendo a entrar esa dirección la mayor parte del tiempo. Pero, de nuevo, TDD tampoco es una bala de plata. Y sí uso clases privadas para descomponer partes complejas de la funcionalidad de una clase, y luego refactorizarlas cuando (y si) es necesario. – Groo

5

OO se trata de poner funcionalidad en las clases. La forma en que escribe esas clases define si es bueno OO o no (aunque esto es discutible). Si todas estas clases están en un solo archivo o en unos pocos, o cada clase tiene su propio archivo, es una cuestión de gusto y no es directamente un problema de OO.

Dado que este es un libro con (creo) pequeñas muestras, puede ser tan fácil de leer como es, que cuando todas las clases están en archivos separados.

0

Si usa el OOP correcto, puede crear aplicaciones basadas en plantillas mucho más rápidamente & de manera eficiente.

Debe esforzarse por hacer esto, por ejemplo, si tiene una aplicación de base de datos genérica y se pueden usar múltiples bases de datos con cambios menores.

Cuestiones relacionadas