miércoles, 31 de julio de 2013

Introducción a la Programación Orientada a Objetos

Hola a todos!

En esta entrada vamos a empezar a hablar de programación en sí empezando por lo más básico, de hecho vamos a olvidarnos del AS que no tengo instalado aún. ¿Qué es Java? Java es un lenguaje de programación orientado a objetos. ¿Y qué significa esto?  Vamos por partes.

Para entenderlo vamos a compararlo con otro lenguaje más antiguo, que va a representar todo lo contrario, y por comodidad vamos a coger Fortran, por conocido y por arcaico.

Como el movimiento se demuestra andando vamos a ir ejemplificando todo esto con un programita que va a simular una carrera de f1. Está escrito desde Eclipse ya que el AS no me tira, pero vale para ver lo que es Java.

Al escribir un programa de Fortran lo primero creábamos una función main, definíamos nuestras variables e íbamos implementando el algoritmo paso por paso, si había algo un poco engorroso que se repitiera pues nos creábamos una función si nos veíamos con ganas y poco más. Simple y directo, al menos eso parece al principio.

Vamos con el ejemplo para orientarnos: pongamos que tenemos 10 coches de diferentes escuderías, cada coche tiene varios estados como son su velocidad base, su ritmo de carrera, su posición y su gasolina restante. Estas serían las variables a tener en cuenta y habría que tener cuidado de no mezclar una con otras.
Sin embargo en la programación orientada a Objetos existen dos mundos separados: las clases y los objetos.

Las clases son definiciones de un tipo de elementos que se repiten y que tienen en común varios elementos, en este caso la clase seria el coche y sus estados comunes la velocidad, el ritmo, la gasolina y  su posición ya que un coche en la carrera está definido por ellos.

Los objetos son como las realidades de cada clase, instancias se les llama, un objeto debe pertenecer a una clase y una clase puede tener muchos objetos diferentes que sean diferentes instancias de la misma. Esto nos permitiría agrupar todas variables de un solo coche bajo un mismo grupo y a la vez indicar que los coches son similares y mantenerlos separados.

Por ejemplo la clase coche y sus variables en Java:


Float es el tipo de variable que indica que es real no entera, el Real de Fortran y public es un modificador de acceso, en este caso permite que cualquiera pueda acceder a la clase e iniciar un objeto.
En Fortran ahora tocaría definir las funciones que marcan la evolución de los coches cada vuelta, estas podrían ser: calcular el tiempo de la vuelta, el gasto de gasolina, comprobar si debe ir a boxes y decidir que ritmo debe marcar en la siguiente vuelta por ejemplo.
 Esto podría suponer un problema  porque cualquier línea del código puede llamar a una función específica que solo deberían usar los coches,  por ejemplo código relacionado con la carrera podría intentar  comprobar si tiene que ir a boxes produciendo un error en el programa. En Java estas funciones que afectan solo a un tipo de objetos se implementan dentro de cada clase y se las denomina métodos. De esta forma se asegura la estanqueidad del código. Omitiendo el código de cada función, tendría una forma como la siguiente:


Como se puede observar cada método es idéntico a una función, tiene un nombre, un argumento de salida, void es salida nula, y unos argumentos de entrada, que en la mayoría de los casos están vacíos, aunque parezca extraño una función sin argumentos de entrada ni de salida puede ser útil.  Se puede ver además como el compilador avisa de que no he puesto un valor de retorno en el método tiempoVuelta() y sin embargo he indicado que devuelve un float.
Además de los que he mencionado anteriormente hay un método extraño, el método coche, este es el constructor, se trata de un método que pertenece a la clase y no a las instancia y al que se llama para inicializar una nueva instancia de coche. Esto veremos lo veremos más adelante.
Una de las ventajas de la programación con objetos es que las clases son muy versátiles se pueden derivar o incluir en otra. Es decir se puede definir una clase derivada de otra que sería su superclase, esto implementaría  automáticamente todas las variables y métodos de la superclase y nos permite añadir características peculiares de un subgrupo, aquí por ejemplo vamos a utilizarlo para crear una subclase que sea el equipo redBull y que tenga un método extra que se llame turbo y les permita ser mas rápidos, el código seria el siguiente:

Aquí tenemos un caso de una función que no tiene argumento de entada ni de salida, es void, pero sin embargo tiene efecto. Esto se debe a que los métodos pueden modificar las variables de la clase de forma natural. De hecho es común que las variables de la clase se declaren como privadas y que la única forma de cambiarlas sea con su método correspondiente evitando así que se pueda cambiar por error. Aquí tenemos un ejemplo:

De forma que al definir var como privada no se puede acceder a ella desde fuera de la clase y la única forma de cambiarla es mediante el método cambiarValor.
Por ultimo por hoy, del mismo modo que se definen variables para una clase se pueden definir objetos de otra clase que actúen como variable, ahora vamos a crear una clase llamada carrera que tenga como variables diferentes instancias de coches, y que dos de ellos sean RedBull:

Finalmente tenemos un método muy importante, el main, este señala el punto de inicio de ejecución del programa, que en este caso hace lo siguiente:
Crea una instancia de carrera que llama carrera1.
Hace que pase una vuelta de la carrera1.
El redBull1 usa el turbo para ir más rápido.
Pasa otra vuelta de la carrera.

Al no haber más código se detiene la ejecución.
Aquí hay un par de cosas nuevas, como ya avisamos la clase carrera contiene 10 coches, 2 de los cuales son redBull, tenemos un método main que inicia el código crea una carrera y ejecuta los métodos de la clase, para acceder a un método se accede mediante objeto.metodo y del mismo modo para una variable desde fuera de la ejecución de sus métodos, carrera.RedBull.usarTurbo() es un ejemplo de todo, y se aprecia como esta referencia puede ser recursiva ya que el objeto llama a su vez a un método propio.

Por hoy vamos a dejarlo aquí, esto es solo el principio de Java y aunque puede parecer complicado eso es culpa mía que no se me explicar, aunque al principio si cuesta un poco cogerlo ya que es otra forma de pensar.

Si queréis más información o seguramente como Dios manda la tenéis accesible en Internet en http://docs.oracle.com/javase/tutorial/java/index.html donde el propio propietario tiene unos tutoriales extensísimos y completísimos, eso sí, en Ingles.
El próxima día os traeré el programa completo de forma que aunque no este explicado nos podamos ir familiarizando con la forma de programar y para que os vaya sonando todo.


Hasta la próxima!

martes, 30 de julio de 2013

Primeros pasos con Android Studio

Nuestra "primera aplicación"

¡Hola a todos! Hoy quiero contaros lo que he aprendido sobre fundamentos de las app y aplicarlo a construir nuestra "primera aplicación", y lo digo entrecomillado porque nosotros no vamos a hacer nada; solo vamos a aprender a configurar el Android Studio antes de ponernos a machacar las teclas con el código. Lo demás lo hará todo AS.

En esto vamos a ser muy tradicionales: nuestra primera aplicación será un Hello World de los de toda la vida, lo primero que se suele hacer en cualquier lenguaje de programación o cuando se empieza a utilizar una IDE. Pero claro, primero tenemos que enterarnos bien que diferencia hay entre algunos términos entre los que no queremos meter la pata. Y voy a buscar todas las comparaciones posibles con lo que ya sabemos (Fortran y Matlab) para que vayamos pasito a pasito. 
  •  Application, (App): Esto es el "proyecto", para que nos entendamos. Es más una cuestión de diseño. Le ponemos un nombre bonito, más que descriptivo, y a rodar. Es el conjunto de lo que buscamos al final, lo que te descargas de la Play Store. Es el "título" de nuestra App.
  • Modulo: Este la verdad es que no le veo yo demasiada diferencia con la App. Supongo que habrá algún matiz técnico que lo cambie absolutamente todo, pero según leo; a nosotros nos da lo mismo. 
  • Paquete: Esto si es importante. Es la forma en la que vamos a denominar la App, pero no en cuestiones de diseño, si no en concreto. Me explico: Puede haber dos aplicaciones con el mismo nombre (Application Name) en la Play Store, pero no con el mismo nombre de paquete (Package Name). Es, por así decirlo, el nombre del archivo de la aplicación. Y todos sabemos que no puede haber dos archivos con el mismo nombre en la misma carpeta ;). Dicen los desarrolladores en Internet que lo normal es incluir el nombre de tu dominio en el Package Name, para evitar conflictos con otras Apps al probarlo en el teléfono. Pues eso vamos a hacer. Luego os pongo un ejemplo
  • Activity: Esto ES la app. Aquí está el Java, caballeros (y señoritas). Es un archivo Java, en Java, programado en Java, compilado en Java. Es el alma de nuestra App... o no. Porque podemos incluir varios (tantos como queramos, en principio), en nuestro proyecto. Por ejemplo, si queremos hacer un login, se hace con una Activity. El menú de Configuración de la App, es otra Activity. Y si, también la página de presentación de los datos (el tiempo para mañana, por ejemplo), es una Activity. Es decir, es cada partición Java que hagamos de nuestra aplicación. Seguimos.
  • Layout: Es la interfaz gráfica de cada Activity. Son archivos .xml (como algunas webs), y es lo que va a ver el usuario de nuestra aplicación. Aquí es donde la IDE de Google se hace fuerte. Puede definirnos la interfaz gráfica completa sin meter ni una sola línea de código.

Crear un proyecto nuevo

Lo primero va a ser crear un proyecto. Para esto os recomiendo que creéis una carpeta en vuestro ordenador para guardar exclusivamente los proyectos de Android Studio. PRANDROID, se llama la mía. Por poneros os ejemplo.
Cuando seleccionemos en el menu de inicio rápido que nos aparece al iniciar el programa, la opción New Project, nos saldrá algo como esto.
Fijaos bien en los nombres y demás. He llamado a nuestra aplicación Hello World. El nombre del modulo lo pone solo. Yo no toco nada, y continúo. En el nombre del paquete, he utilizado el de nuestro blog, con el formato que te recomienda el programa. Siiiii, ya sé que nuestro blog es hagamosunaapp.BLOGSPOT.com; pero da igual. Esto es solo una buena costumbre para que cuando subamos Apps a la Store. Cuidadito con la localización del proyecto. Para que no me desparrame archivos de todos los proyectos y me los mezcle juntos, me hago una carpetita con el nombre de nuestro proyecto y ya le digo que guarde ahí. Es por ser limpitos.

Ahora viene el galimatías de versiones: La versión mínima SDK es la versión mínima de Android sobre la que queremos que ande nuestra app. Elegir una versión muy baja nos permitirá que nuestra app funcione en todas las posteriores (si elegimos la 2.3, funcionará en la 4.0), pero también nos hará perder algunas funcionalidades de Android que han sido añadidas con las versiones nuevas (lo que nos dará problemas de compatibilidad con los servidores más nuevos). Por eso, deberíamos elegir una solución de compromiso. Por ejemplo: la versión 2.3.3 es la que llevan como mínimo los móviles nuevos. Nos vale, al menos para empezar.

La versión Target es la versión objetivo, es la versión para la que estamos programando. Las superiores nos entenderán, y si hemos señalado una versión mínima inferior, el IDE omitirá las funciones que las versiones inferiores no puedan procesar. Yo he elegido la de mi móvil, que es en el que probaré las App. Os recomiendo utilizar la misma siempre si después vamos a andar pasándonos proyectos de unos a otros.

La versión de compilación es la que va a utilizar el IDE para depurar y correr las aplicaciones. Viene por defecto la última versión, pero tarde o temprano deberemos descargarlas todas y migrar las aplicaciones para todas las versiones que queremos abarcar.

Las demás opciones importan poco. Llegaréis a una ventana para seleccionar el formato del Layout de nuestra Activity. Dejadlo por defecto, pero creo que a poco que hagamos acabaremos usándolos todos.

Hello world.

Bueno, no he cambiado el nombre de la Activity ni el Layout porque vamos a hacer solo esos dos, y nos da lo mismo. ¡Y listo! Ya hemos terminado nuestra primera aplicación. Ya os dije que nosotros no íbamos a hacer nada, AS hace una aplicación Hello World por defecto. Cuando os salga el tutorial, derradlo que no lo vamos a usar. Ahora, sin tocar nada, vamos a comprobar la aplicación. Aunque aún nos queda montar un emulador para poder hacerlo.

Un emulador es una simulación de un teléfono (o tablet) con la versión de Android para la que estamos compilando. Esto es muy fácil, y será conveniente que hagamos varias a lo largo de nuestra programación. Por lo pronto, vamos a crear una primera. La herramienta para ello es AVD Manager. Os cuelgo una foto para que veáis donde está:

Abrimos el asistente, y creamos un emulador. Le damos a Nuevo, le ponemos un nombre cualquiera, elegimos un dispositivo para emular (Yo he escogido un genérico de 4", más o menos del tamaño de mi teléfono), y escojo una Memoria (RAM) de 512 Mb( Como muchos teléfonos). El IDE de Google no permite aún utilizar Memorias simuladas de más de 768 Mb, pero para lo que vamos a hacer, por ahora, nos sobra. 
He señalado, eso si, la opción de Use Host GPU, que significa que vais a utilizar la tarjeta gráfica de vuestro ordenador para emular el dispositivo Android. Va a acelerar un poco el proceso, pero ya os aviso de que es MUY LENTO. 

Pues hasta aquí nuestra configuración. Salid del Manager, y vamos a probar la App. Debéis buscar la opción de Run (Es el Play de color verde cerca del ADV Manager que os he señalado antes) (o tocar Mayus+F10), y elegir la opción de Launch Emulator seleccionando el AVD que hemos creado. Aceptad, y PACIENCIA. Porque tarda. Si todo va bien, os tiene que salir nuestro "teléfono" Android. Desbloquearlo, pinchando en el candado y arrastrando a la derecha, y nos sale nuestra aplicación. Algo como esto:




Y hasta aquí nuestra primera App. No hemos hecho nada (en la App), pero si parece que hemos avanzado mucho. Con los próximos tutoriales empezaremos a cambiar esta App hasta que haga exactamente lo que queremos. ¡Hola Mundo!

domingo, 28 de julio de 2013

Instalar y configurar Android Studio

¿Qué es Android Studio?

Si hay algo que tengo muy claro es que no quiero que nos perdamos en un mar de siglas y no entendamos de que estamos hablando. Android Studio es un IDE para aplicaciones de Android diseñado por Google. Vamos por partes:

IDE significa Entorno de Desarrollo Integrado. Para que nos entendamos: en un programa que sirve para programar otros programas (en nuestro caso, aplicaciones de Android). Todos hemos tenido ya algún contacto con un IDE: Plato IDE, la herramienta de Silverfrost para programar en FORTRAN. ¿Y para qué queremos un IDE? Pues para no tener que escribir un programa enterito en el editor de notas, colocarle una extensión y ¡ala! a la aventura. En nuestro caso, el AS (Android Studio, sin miedo a las siglas), nos va a facilitar el trabajo encargándose de la "paja" de nuestra App, y dejándonos a nosotros la parte de diseño.

¡Cuidadito! Con esto no digo que no nos vaya a hacer falta aprender código o llenarnos de barro hasta los codos. Pero nos facilitará el trabajo. Nos pondrá en colorines las líneas de código, nos dirá que cosas NO debemos tocar, nos compilará (montar las líneas de código en una App y mandarlo al lenguaje del móvil), y nos simulará lo que hacemos en un emulador de Android.

Otra cosita: el JSK: Java Development Kit. Es un paquete de herramientas para desarrolladores de JAVA. Java es la "lengua" en la que están escritas las Apps de Android. Por eso, para poder programar en el IDE de Google necesitamos el paquete de la compañía desarrolladora de Java: Oracle. Por tanto; antes de instalar AS, necesitamos el JSK. Lo podéis descargar de aquí: http://www.oracle.com/technetwork/java/javase/downloads/index.html
Descargar la versión "Java Platform (JDK) 7u25", para vuestro sistema operativo. (Si tenéis Windows de 32 o de 64 bits podéis consultarlo en Panel de Control > Sistema y Seguridad > Sistema, o algo muy parecido si tenéis un Windows anterior/posterior al mío). 

Y después de todo este galimatías, vamos a instalar y configurar AS.

Cómo instalar y configurar Android Studio.

Lo primero es descargar el archivo de la página oficial. Ésta: http://developer.android.com/sdk/installing/studio.html
Descargad la versión 0.2. ¡La versión es 0.algo porque aún está en desarrollo! Es posible que encontremos algún bug (un error en el programa), pero esta gente sigue desarrollando y mejorando el IDE hasta sacar una versión definitiva. No hay miedo.

Una vez descargado, y si ya habéis instalado el JSK, ejecutar e instalar AS. Es posible (muy posible), que os salga un error que reza que no puede encontrar la localización del JSK. ¡Si acabamos de instalarlo! Bueno no pasa nada: para solucionarlos, id a menú Inicio> Equipo> Propiedades del Sistema en la parte de arriba, Configuración Avanzada del Sistema a la izquierda y en la pestaña de Opciones Avanzadas, el botón de abajo, Variables de Entorno.
En la ventana que se os abre, id al cuadro de abajo, Variables del Sistema. Pulsad sobre nueva y añadir:

  • JAVA_HOME en la casilla de “Nombre de la variable”
  • El directorio donde tenéis Java instalado. Si habéis instalado una versión de 64 bits estará en: “C:\Program Files\Java\jdk_version_de_java” y si tenéis una versión de 32 bits o x86 estará en “C:\Program Files (x86)\Java\jdk_version_de_java”.
Es posible que tengáis las carpetas en español, miradlo. Si es así, no debéis escribir Program Files si no Archivos de Programa. Y lo de jdk_versión_de_java, si acabáis de descargarlo, será: jdk1.7.0_25.

Bueno, creo que eso es todo. Las opciones de instalación, la verdad, lo mejor es no tocarlas. Yo las he dejado como estaban. Una vez terminado el proceso de instalación, os saldrá esto:
Ahora, debéis pinchar en Configure>Project Defaults>Project Structure, y seleccionar, si no está ya, vuestra versión de JDK en la pestaña desplegable:
Y hasta aquí por hoy. En breves, más. 

Un saludo!

Guille



De que va esto

Hola a todos, primero quiero intentar explicar lo mejor posible de que va este blog. Y digo intentar porque esto es una primera toma de contacto con algo que no sabemos aun hacia dónde irá o hacia dónde queremos que vaya.

Lo que quiero dejar claro es que yo no soy ningún experto en Apps de Android ni de ningún tipo. Y, salvo sorpresa inesperada, ninguno de los que vamos a escribir en el blog lo somos, y por eso quiero dejar claro que este no va a ser un blog infinitamente técnico. Es más, mi intención es que todos los que escribamos contemos los que aprendamos a medida que vayamos descubriendo este mundillo en el que parecemos decididos a meternos.

Y sin enrollarme más, vamos al lío. Propongo que, para empezar a programar las aplicaciones de Android utilicemos el nuevo IDE de Google: Android Studio. ¿Por qué aplicaciones para Android? Porque venden, porque tienen tirada, porque son útiles, porque son versátiles, porque valen para teléfonos, tablets y otros gadgets variados de muchas marcas y porque el IDE es GRATIS. Ahí es nada. ¿Y por qué Android Studio? Porque lo mejor para enterarse de algo es ir a preguntar a la fuente de la información, así que, ¿quién va a desarrollar un IDE mejor que el diseñador del sistema en cuestión? Pues eso.

¿Y por qué hacemos un blog si ya hay cientos de blogs, páginas, foros, tutoriales online y videotutoriales sobre esto mismo? Porque nosotros vamos a empezar desde cero y vamos a contarlo todo hasta que demos la App por terminada.

Ahora si, al lio.