[go: up one dir, main page]

100% encontró este documento útil (1 voto)
553 vistas669 páginas

Java para Desarrollo Android

Programacion en java
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
553 vistas669 páginas

Java para Desarrollo Android

Programacion en java
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
Está en la página 1/ 669
eS BOS ana Ke PROGRAMACION ES = ay ea Nie: ca than) BI B = Ni Pp mt ea ne Bae NW laa sia) Apress’ ANNANYAN CSL | Java para desarrollo Android Jeff "Javajeff" Friesen JAN/Y/\ MUL TIMEDIAR Todos los nombres propios de programas, sistemas operativos, equipos hardware, etc. que aparecen en este libro son marcas registradas de sus respectivas compaiifas u organizaciones. Reservados todos los derechos. El contenido de esta obra estd protegido por la Ley, que establece penas de prisién y/o multas, ademas de las correspondientes indemnizaciones por daiios y perjuicios, para quienes reprodujeren, plagiaren, distribuyeren 0 comunicaren publicamente, en todo o en parte, una obra literaria, artistica 0 cientifica, 0 su transformacién, interpretacién © ejecucién artistica fijada en cualquier tipo de soporte 0 comunicada a través de cualquier medio, sin la preceptiva autorizacion. Authorized translation from English language edition published by Apress. Copyright © 2010 by Jeff “Javaleff” Friesen. All rights reserved. Edicién espaftola: © EDICIONES ANAYA MULTIMEDIA (GRUPO ANAYA, $.A.), 2011 Juan Ignacio Luca de Tena, 15. 28027 Madrid Depésito legal: M. 21.220-2011 ISBN: 978-84-415-2961-8 Printed in Spain Impreso en: Lavel, S. A. A mi mejor amigo. HEME gradecinientos Agradecimientos Le doy las gracias a Steve Anglin por proponerme escribir este libro, a Debra Kelly por guiarme por los diversos aspectos de este proyecto, a Tom Welsh por ayudarme con el desarrollo de los capitulos, a Paul Connolly por su rapidez detectando varias erratas y a Bill McManus y al equipo de produccién por lograr que el contenido de la obra tuviese un buen aspecto. Han pasado muchos afos desde que comencé a escribir sobre Java, por lo que también agradezco a los siguientes editores el haberme ayudado a compartir mis conocimientos con otras personas: Chris Adamson, Bridget Collins, Richard Dal Porto, Sean Dixon, Victoria Elzey, Kevin Farnham, Todd Green, Jennifer Orr, Athen O'Shea, Esther Schindler, Daniel Steinberg, Jill Steinberg, Dustin Sullivan y Atlanta Wilson. Sobre el autor Jeff "JavaJeff" Friesen ha estado activamente vinculado con Java desde principios de la década de 1990. Jeff ha trabajado con Java para varias empresas, como una firma de consultoria del area de salud, donde cre6 su propio software Java/C++ que funcionaba con tarjetas inteligentes. Jeff ha escrito numerosos articulos sobre Java en JavaWorld (nt tp: //www. javaworld.com), informIT (nttp: //www.informit.com)yjavanet(nttp: //java.net); ademiés, ha sido autor de varios libros de Java, como uno sobre la plataforma Java SE6, centrandose exclusivamente en las nuevas y mejoradas funcionalidades de la versién 6 de Java. Jeff también impartié clases de dicho lenguaje en colegios y universidades. Posee una licenciatura en Ciencias matematicas y de la computacién por la Universidad de Brandon, Manitoba, Canada. Actualmente trabaja como auténomo en Java y otras tecnologias de software. Sobre el revisor técnico Paul Connolly es el Director de Ingenieria de la linea de pro- ducto RightSuite de Atypon Systems. RightSuite es una solucién de control de acceso empresarial y comercial utilizada por muchas de las compaitias de multimedia y de publicidad mas grandes del mundo. Paul disfruta disefiando e implementando sistemas de software de alto rendimiento para empresas. Paul es también un contribuidor activo en la comunidad de cédigo abierto. Antes de unirse a Atypon Systems, trabajé como ingeniero de software sénior en Standard & Poor's, donde disené y desarroll6 importantes sistemas de comunicaciones. Posee las certificaciones Sun Certified Java Programmer, Certified Business Component Developer y Sun Certified Web Component Developer. Paul vive en Nueva York con su mujer, Marina. Indice de contenidos Agradecimientos. Sobre el autor... Sobre el revisor técnico... Introduccién Organizacién del libro Java es un lenguaje Java es una plataforma Java SE, Java EE, Java ME y Android Instalacion y exploracién del JDK Instalacién y exploracién de dos IDE populares IDE NetBeans IDE Eclipse Poker... Comprendiendo el juego Modelado del juego en pseudocddigo Conversién de pseudocédigo en codigo Java Compilacién, ejecucién y distribucion de FourOfAKind, HEC tisdice de contenidos 2. Fundamentos del lenguaj Clases Declaracién de clases Introduccién de campos.. Declarar campos . Inicializaci6n de campo: Campos de s6lo lectura.. Introduccién de métodos Declaracién de métodos... Implementacién de método Métodos sobrecargados... Introduccién de constructores..... Introduccién de otros inicializadores Inicializadores de clase Inicializadores de instancia Orden de inicializacién Interfaz o Implementacién. ‘Objetos....... Creacién de objetos y matrices. Acceso a campos... Llamadas a métodos Pila de llamadas a métodos. Llamadas recursiva Pasar argumentos Llamadas a métodos de instancia encadenado Recoleccién de basura. Ejercicios.. Resumen... 3. Aprendizaje de las caracteristicas del lenguaje orientado a objetos. Herencia... Extensi6n de clases La superclase maxima. Clonacién Igualdad Finalizacién Cédigo has! Representacién de cadenas Composicién El problema con la herencia de implementacion... Polimorfismo Upcasting y enlace en tiempo de ejecucion Clases abstractas y métodos abstractos.. Downcasting e identificacién del tipo en tiempo de ejecucion Tipos de retorno covariantes Indice de contenidos [EME Interfaces Declaracién de interfaces... Implementacién de interfaces... Extensién de interfaces ¢Por qué utilizar interfaces? Fjercicios.. Resumen. 4, Dominio de las caracteristicas avanzadas del lenguaje (I) Tipos anidados Clases estética Clases internas no estaticas. Clases anénimas Clases locales... Interfaces dentro de clases Paquetes... zQué son los paquetes? Los nombres de paquetes deben ser tinico: La sentencia de paquete La sentencia de importaci6n... Buisqueda de paquetes y tipo... Busqueda en tiempo de compilacién. Busqueda en tiempo de ejecucién Jugar con paquetes...... Paquetes y archivos JAR. Importaciones estaticas Excepcione: Qué son las excepciones?. Representacion de excepciones en el cédigo fuente. ‘Cédigos de error y objetos La jerarquia de la clase Throwable...... Clases de excepciones personalizadas Ejecucién de excepcione: Manejo de excepciones Realizacién de la limpieza. Fjercicios. Resumen... 5. Dominio de las caracteristicas avanzadas del lenguaje (I). Aserciones Declaraci6n de aserciones... ‘Uso de las aserciones .. Invariantes internas.. Invariantes de flujo de control. Disefo por contrato 0 convenciér Indice de contenidos —————— Evitar las aserciones..... . Habilitar y deshabilitar aserciones.... Anotaciones. Descubrimiento de anotaciones .. Declaracién de tipos de anotacién y cédigo fuente de anotaciones Uso de meta-anotaciones y deciaraciones de tipo de anotacién. Procesamiento de anotaciones. pea 228 230 233 Genéricos.. 235 Colecciones y la necesidad de la seguridad de tipo.. 235 Tipos de genéricos. 238 Declaracién y uso de tipos genéricos personalizados. 239 Limites del parametro de tipo. 241 Ambito del pardmetro de tipo La necesidad de comodines Cosificacion y borrado 247 Métodos genéricos. . 248 Enumeraciones 50 El problema con los tipos enumerados tradicionales 250 La alternativa de las enumeracione: Mejora de una enumeracién. La clase de enumeracién... Extensi6n de la clase Enum. Fjercicios.. Resumen. 6. Exploracién de las API bisicas (1) API para matematicas Math y StrictMath. BigDecimal Biginteger . Informacién de paquete..... Clases envolventes primitivas. Float y Double.. Integer, Long, Short y Byte . Number. API References. Terminologia basica Reference y ReferenceQueue SoftReference. WeakReference PhantomReference Ejercicios. Resumen. Indice de contenidos 7. Exploracién de las API basicas (II) API Reflection. Gestién de cadenas String StringBuffer Sistema. API Threading .. Runnable y Threa Sincronizacién de hilo: Fjercicios. Resumen 8. Recorrido por la plataforma de colecciones. Introducci6n a la plataforma..... Comparable y comparador.. Iterable y Collectior Iterator y el bucle for mejorado. Empaquetado automatico (autob ‘oxing) y desempaquetado (unboxing) Queue.. PriorityQueue Map ‘TreeMap.. HashMap . IdentityHashMap 412 WeakHashMap 414 EnumMap.. 416 SortedMap. 417 Utilidades Clases de colecciones clasicas. Fjercicios Resumen. 9, Exploracién de otras API de utilida 432 Utilidades de concurrencia Ejecutores... Sincronizadores .. Indice de contenides Colecciones concurrentes Bloque Variables atémicas. Las API de internacionalizacién .. Local Paquetes de recursos. Paquetes de recursos de propiedad ... Paquetes de recursos de lista Iteradores de interrupcion Recopiladores (Collator) Fechas, zonas horarias y calendarios.. Formateadores . Formateadores de nimero Formateadores de mensaje API Preferences .. Generacién aleatoria de ntimeros. API Regular Expressions. Ejercicios Resumen... 10. Trabajar con E/S File... RandomAccessFile Flujos. Introduccion a las clases de flujo... OutputStream e InputStream .. : ByteArrayOutputStream y ByteArrayinputStream FileOutputStream y FileInputStream.... PipedOutputStream y PipedInputStream .. FilterOutputStream and FilterInputStream. BufferedOutputStream y BufferedInputStream .. DataOutputStream y DatalnputStream Serializaci6n y deserializacion de objeto: E Serializacion y deserializacién predeterminada Serializacién y deserializacién personalizada Externalizaci6n. PrintStream. Escritores y lectores ... Introduccién a las clases de escritura 7 de lectura Writer y Reader. OutputStreamWriter y InputStreamReader. FileWriter y FileReader...... Efercicios...... Resumen Indice de contenidos Apéndice. Soluciones a los ejerci Capitulo 1. Primeros pasos con Java Capitulo 2. Fundamentos del lenguaje Capitulo 3. Aprendizaje de las caracteristicas del lenguaje orientado a objetos Capitulo 4. Dominio de las caracteristicas avanzadas del lenguaje (1) Capitulo 5. Dominio de las caracteristicas avanzadas del lenguaje (1 Capitulo 6. Exploraci6n de las API basicas (1) Capitulo 7. Exploracién de las API basicas (I1).. Capitulo 8. Recorrido por la plataforma de colecciones.. Capitulo 9, Exploracién de otras API de utilidad Capitulo 10. Trabajar con E/S Indice alfabético.. Introduccién Los smartphones y otros dispositivos méviles téctiles estén haciendo furor iiltima- mente. Su popularidad se debe a la capacidad que tienen de ejecutar programas. Aunque cliPhone y el iPad, con su creciente coleccién de aplicaciones Objective-C, son los lideres del mercado, los smartphones Android con su amplio repertorio de aplicaciones Java se estn convirtiendo en un potente competidor. No sélo los desarrolladores de iPhone /iPad ganan dinero vendiendo sus programas, sino que también muchos programadores de Android hacen lo propio sacando al mercado herramientas similares. Segtin sitios Web como The Register (http: / /www. register. co.uk/),algunos desarrolladores de Android estan ganando un montén de dinero (ww. theregister.co.uk/2010/03/02/android_app_profit/). En una situaci6n econémicamente delicada como la que se vive hoy en dia, tal vez le gustaria ponerse manos a la obra para convertirse en un programador de Android y hacer algo de dinero. Si tiene buenas ideas, perseverancia y algo de talento artistico (o si conoce a gente que lo tenga), esté en el camino correcto para lograr el objetivo. Una buena razén por la cual considerar el desarrollo de aplicaciones Android en lugar de las que se hacen para iPhone/iPad es el precio més reducido que implica trabajar con esta plataforma. Por ejemplo, no necesita comprar un Mac sobre el cual realizar programas de Android, como ocurre si se desea hacerlo para iPhone/iPad; su ordenador Windows, Linux o Unix funcionara perfectamente. HE ttroduccion —s Lo que es mas importante es que necesitar contar con una comprensién sélida del lenguaje Java y de las interfaces de programacién de aplicaciones bésicas (API) antes de ponerse a desarrollar para Android. Después de todo, las herramientas Android estén escritas en Java ¢ interactian con muchas de las API estindar de dicho lenguaje (como las de hilos de ejecucién y de entrada /salida). Escribf este libro para proporcionarle unos conocimientos bésicos de Java sélidos, de forma que pueda proseguir su camino por la arquitectura de Android, API y aspectos especificos de las herramientas. Esta obra le ayudaré a comprender el lenguaje Java, asi como muchas de las API que son fundamentales para las aplicaciones Android y otras herramientas Java. También ofrece una introduccidn sobre algunos instrumentos basicos de desarrollo. Organizacion del libro Este libro esta estructurado en diez capitulos y un apéndice. Cada capitulo se centra en una recopilacién de temas relacionados y finaliza con una serie de ejercicios que deberia completar para asimilar de la mejor forma posible el contenido tratado. El apén- dice incluye las soluciones a todas las tareas propuestas. El capitulo 1 ofrece una introduccidn a Java, centrandose primero en su naturaleza dual (lenguaje y plataforma), para después explicar las ediciones Java SE, Java EE y Java ME de Sun/Oracle del software de desarrollo Java, as{ como la edicién Android de Google. A continuacion, se explica cémo, descargar e instalar el Kit de desarrollo Java SE ODK) y aprendera algunos de los aspectos fundamentales de Java, desarrollando y jugando con un par de sencillas aplicaciones. Después de una breve introduccion de los IDE NetBeans y Eclipse, experimentard el desarrollo de las aplicaciones dentro del contexto del péker, un juego de cartas en consola. El capitulo 2 le servira para adentrarse mas profundamente en Java centrandose en Jos fundamentos del lenguaje (como tipos, expresiones, variables y sentencias) dentro de los contextos de clases y objetos. Como las aplicaciones estan ampliamente basadas en clases, es importante aprender cémo desarrollarlas correctamente y en este apartado Je mostramos cémo hacerlo. Elcapitulo 3 es una extensién del 2 en cuanto a conocimientos sobre objetos, repasando las caracteristicas del lenguaje que le llevan de las aplicaciones basadas en objetos a las orientadas a objetos. Concretamente, aprender sobre las propiedades relacionadas con la herencia, el polimorfismo y las interfaces. Durante el repaso de la herencia, conocer a la superclase primordial de Java. Ademés, en la seccién dedicada a la exploracién de interfaces, descubrira la raz6n real por la cual se incluyeron en el lenguaje Java; no son simplemente una alternativa ala carencia existente para multiples implementaciones de herencia, sino que tiene una misién ms elevada. Elcapitulo 4 ofrece las cuatro categorias de caracteristicas avanzadas del lenguaje: tipos anidados, paquetes, importaciones estaticas y excepciones. Durante el repaso sobre los tipos anidados, explicamos brevemente el concepto de cierre y mencionamos que apare- cern en la version 7 de Java (alguno de ellos se espera que liegue en poco tiempo). Java para desarrollo Android Este libro lo he escrito varios meses antes de que saliera a la luz la version 7 de Java a finales de 2010. Aunque he intentado ofrecer una perspectiva lo més aproximada posible, como por ejemplo con las caracteristicas especificas del lenguaje, es posible que la sintaxis difiera ligeramente de lo que puede encontrar en este libro. Ademés, s6lo analizo los cierres brevemente porque se trata de una propiedad que esta todavia en fase de pruebas al finalizar esta edicién. Para obtener mas informacién sobre los cierres y otros conceptos funcionales de programacién (como lambdas) que se estén considerando para la version 7 de Java, le recomiendo que revise algunos articulos comoel que redacté Alex Collins al respecto (ht tp: //Java .dzone.com/articles/ lambdas-closures-jdk-7). El capitulo 5 contintia explorando las caracterfsticas avanzadas del lenguaje, centran- dose en los asertos, anotaciones, genéricos y enumeraciones. Aunque el tema de los gené- ricos ha acarreado confusiones en muchos desarrolladores, considero que mi andlisis sobre este aspecto servird para aclarar gran parte de su misterio. Entre otros temas, aprender a interpreta declaraciones de tipo como Enum>. El capitulo 6 comienza con una explicacién que se ocupa més de las API que de las caracteristicas del lenguaje. En primer lugar, explica muchos de los tipos orientados a las matematicas de Java (como Math, StrictMath, BigDecimal y BigInteger) y también repasa la palabra reservada st r ict fp de Java. A continuacién, analiza la clase Package, las clases wrapper (envoltorios) primitivos y la API References, El capitulo 7 contintia explorando las API basicas de Java, centrndose en los reflejos, la gestién de cadenas, la clase System y los hilos de ejecucién. El capitulo 8 abarca exclusivamente la plataforma de colecciones de Java, la cual le proporciona una solucién para organizar objetos en listas, series, colas y mapas. El capitulo 9 sigue con la exploracién de las API de utilidades que ofrece Java, expli- cando las de concurrencia, internacionalizacién, preferencias, generacién de nimeros aleatorios y expresiones regulares. El capitulo 10 se centra en las entradas/salidas (I/O). En este apartado explo- ramos la compatibilidad clasica I/O en términos de su clase File, de la clase RandomAccessFile, de varias de difusion y algunas més de escritura/lectura. En este capitulo también se incluye una explicacién sobre los mecanismos de "serializacin" y “deserializacion’. Este libro analiza ampliamente las API que son comunes en Java SE y Android. Sin embargo, en el capitulo 9 utilizo la herramienta Swing para proporcionar una interfaz grifica de usuario en uno de los ejemplos de internacionalizacién del capitulo; Android no es compatible con Swing. Introduccién Una vez que complete este libro, le recomiendo que utilice otros recursos para comenzar a desarrollar aplicaciones para Android. Convenciones Para ayudarle a sacar el mayor partido al texto y saber dénde se encuentra en cada momento, a lo largo del libro utilizamos distintas convenciones: * Lascombinaciones de teclas se muestran en negrita, como por ejemplo Control-A. Los botones de las distintas aplicaciones también se muestran en negrita. * Los nombres de archivo, URL y cédigo incluido en texto se muestran en un tipo de letra monoespacial. * Los mentis, submentis, opciones, cuadros de diélogo y demés elementos de la interfaz de las aplicaciones se ensefian en un tipo de letra Arial. En estos cuadros se incluye informacion importante directamente relacionada con el texto adjunto. Los trucos, sugerencias y comentarios afines relacionados con el tema analizado se reproducen en este formato. Cédigo fuente Para desarrollar los ejemplos, puede optar por introducir manualmente el cédigo o utilizar los archivos de cédigo fuente que acompafian al libro. En el sitio Web de Anaya Multimedia: http: //www.anayamultimedia.es, dirfjase a la seccién Soporte técnico>Complementos, donde encontrar un apartado dedicado a este libro introdu- ciendo el cédigo 2318103. Aunque casi todo el codigo es compatible con la versién 6 de Java, necesitard la versi6n 7 para compilar una de las aplicaciones. SST Muchas gracias por comprar este libro. Espero que le resulte titil y le deseo muchos éxitos en su carrera como desarrollador de aplicaciones Android. Jeff "Javajeff" Friesen, Agosto 2010. Primeros pasos con Java Android es el paquete de software de Google para dispositivos méviles que incluye un sistema operativo y software intermedio (middleware). Con la ayuda de Java, el sistema operativo ejecuta programas realizados en este lenguaje y diseftados de forma especial, conocidos como aplicaciones Android, Como estén basadas en Java, tiene sentido aprenderlo antes de adentrarse en el mundo del desarrollo Android. Este libro ilustra algunos conceptos a través de aplicaciones Java que no son para Android. Este capitulo establece el escenario para ensefiarle los conceptos fundamentales de Java que necesita entender antes de embarcarse en su carrera Android. Primero, respondo a la pregunta "Qué es Java?". A continuacién, muestro cémo instalar el Kit de desarrollo Java SE y repaso las herramientas del JDK para compilar y ejecutar apli- caciones Java. Después de mostrarle como incorporar y utilizar los IDE de cédigo abierto NetBeans y Eclipse, de forma que pueda desarrollar estos programas de manera mas répida, ofrezco una aplicacién para jugar a un juego de cartas con reglas similares a las del poker. Esta aplicacién le servira para captar la esencia del lenguaje Java y representa la pieza prin- cipal de mi explicacién sobre el desarrollo de aplicaciones. 1. Primeros pasos con Java 2Qué es Java? Java es un lenguaje y una plataforma originada por Sun Microsystems. Esta seccién lo describe brevemente y revela lo que significa para Java ser una plataforma. Para satis- facer diversas necesidades, Sun lo organizé en tres ediciones principales: Java SE, Java EE y Java ME. Esta seccién explora también de modo conciso cada una de ellas junto con Android. Java cuenta con una interesante historia desde diciembre de 1990. En aquella época, a James Gosling, Patrick Naughton y Mike Sheridan (todos ellos empleados de Sun Microsystems) se les encargé la tarea de pensar enla proxima tendencia mas importante en informatica. Llegaron ala conclusion de que tendria que involucrar la convergencia entre dispositivos informaticos y electrodomésticos de consumo inteligente. Acababa de nacer el proyecto Verde (Green project). Los frutos de dicho proyecto fueron Star7, un dispositivo inalambrico portétil que inclufa una pantalla LCD en color de 5 pulgadas, un procesador SPARC, una capacidad de graficos sofisticada y una versién de Unix; un "Oak", un lenguaje desarrollado por James Gosling para la programacién de aplicaciones que se ejecutasen en Star7, cuyo nombre proviene de un roble (oak, en inglés) que crecié junto a la ventana de su oficina en Sun. Para evitar un conflieto con otro lenguaje con el mismo nombre, el Dr. Gosling cambié su nombre por Java. Sun Microsystems prosiguié mejordndolo hasta que Oracle adquirié Sun a principios de 2010. En http: //java. sun.com/ puede encontrar las iltimas noticias sobre Java. Java es un lenguaje Java es un lenguaje en el cual los desarrolladores expresan cédigo fuente (texto del programa). Su sintaxis (reglas para combinar simbolos con caracteristicas propias) proviene parcialmente de C y C++, con el objetivo de acortar la curva de aprendizaje para los desarrolladores de estos lenguajes. La siguiente lista identifica algunas simili- tudes entre Java y C/C++: * Java y C/C++ comparten los mismos estilos de comentarios de linea tinica y de varias lineas. Estos permiten documentar el cédigo fuente. * Muchas de las palabras reservadas de Java son idénticas a sus equivalentes en C/C++ (Zor, if, switch y while, por ejemplo) y los equivalentes en C++ (como por ejemplo, catch, class, publicy try). * Java es también compatible con los tipos primitivos de cardcter, punto flotante de doble precisién, punto flotante, entero, entero largo y entero corto a través de Jas mismas palabras reservadas: char, double, float, int, long y short. Java para desarrollo Android * Java también es compatible con muchos de los mismos operadores, incluidos los aritméticos (+, -, *, / y 8) y los condicionales (?:). © Java también utiliza corchetes ({ y }) para delimitar bloques de instrucciones, La siguiente lista identifica algunas diferencias entre Java y C/C++: © Java es compatible con estilos de comentarios adicionales conocidos como Javadoc, tal y como veremos posteriormente en este capitulo. * Java proporciona palabras reservadas no disponibles en C/C++ (como por ejemplo, extends, strict fp, synchronized y transient). © Java admite el tipo entero byte, no proporciona una versién con signo del tipo char y no ofrece versiones sin signo de int, Long y short. Del mismo modo, todos los tipos primitivos de Java poseen tamafios de implementacién garanti- zados, lo que supone una importante ayuda a la hora de conseguir portabilidad, tal y como analizamos més adelante. No podemos decir lo mismo de los tipos primitivos equivalentes en C y C++. + Java proporciona operadores que no se pueden encontrar en C/C++. Se incluyen instanceof y >>> (desplazamiento a la derecha en modo bit sin signo). * Java acoge las instrucciones break y continue que no encontraremos en C/CH. Aprenderemos mucho sobre los comentarios de una linea y varias lineasen el capitulo 2. Ademés, en dicho apartado conoceremos las palabras reservadas, los tipos primitivos, los operadores, los bloques y Jas instrucciones (break y continue incluidas). Java fue diseado para ser un lenguaje més seguro que C/C++. Lo consigue en parte gracias a la omisién de ciertas caracteristicas de C/C++. Por ejemplo, Java no es compa- tible con los punteros (variables que contienen direcciones) y no nos permite sobrecargar los operadores. También logra una mayor seguridad mediante la modificacién de determinadas carac- teristicas de C/C++. Por ejemplo, los bucles deben estar controlados por expresiones Booleanas en lugar de por enteras, donde Ves falsoy un valor distinto de 0 es verdadero. En el capitulo 2 analizamos los bucles y las expresiones. Imagine que tenemos que escribir un bucle while en C/C++ que'se repita no mas de 10 veces. Rapidamente, especificariamos while (x) x++#; (asumiendo que x es una variable entera inicializada a 0; en el capitulo 2 examinamos las variables) donde x++ aftade un 1 al valor de x. Este bucle no finaliza al llegar a 10; acabamos de generar un bug (un defecto). Este problema es dificil que ocurra en Java, puesto que se quejaré en el momento en que vea while (x). Este aviso requiere que revisemos la expresién y probablemente que especifiquemos while (x!=10). No s6lo incorpora mas seguridad (no podemos simplemente especificar x), sino que también obtenemos mayor claridad: while (x!=10) es més intuitivo que while (x). La susodicha caracteristica y otras que también posee son compatibles con clases, objetos, herencia, polimorfismo e interfaces. Java, ademas, EEZEE 1. Primeros pasos con Java ofrece propiedades avanzadas relacionadas con tipos anidados, paquetes, importaciones estaticas, excepciones, aserciones, anotaciones, genéricos, enumeraciones, etc. En los préximos capitulos exploramos todas estas caracteristicas. Java es una plataforma Java es una plataforma para la ejecucién de programas. En contraste con las que estén compuestas de procesadores fisicos (como un Intel, por ejemplo) y de sistemas opera- tivos (como Linux), la plataforma Java consiste en una maquina virtual y un entorno de ejecucién asociado. La maquina virtual es un procesador de software que presenta su propia serie de instrucciones. El entorno de ejecucién asociado est4 compuesto de bibliotecas para el desarrollo de programas y la interaccién con el sistema operativo interno. El entorno de ejecucién incluye una enorme biblioteca de archivos de clase prede- finidos que llevan a cabo tareas comunes, como operaciones matematicas (trigonomé- tricas, por ejemplo) y comunicaciones de red. Esta libreria suele denominarse biblioteca de clases esténdar. Un programa especial llamado "compilador Java" traduce el cédigo fuente en instruc- ciones (y datos asociados) que son ejecutadas por la maquina virtual. Suelen llamarse "bytecode". El compilador las almacena junto con los datos de un programa en archivos con la extensién .class, los cuales son conocidos como archivos de clase (classfiles), puesto que suelen guardar el equivalente compilado de clases, una caracteristica del lenguaje que analizaremos con més detalle en el capitulo 2. Un programa Java se ejecuta a través de una herramienta (como java) que abre e inicia Ja maquina virtual y pasa el archivo de la clase principal de la aplicacién a la maquina, la cual emplea un cargador de clase (classloader), una maquina virtual o un componente del entorno de ejecucién para abrir dicho archivo. Una vez que esté abierto, el componente verificador de bytecode de la maquina virtual se asegura de que es valido y que no compromete la seguridad. El verificador cierra la méquina virtual en cuanto encuentra algtin problema con el bytecode. Asumiendo que todo es correcto, el interpretador de la maquina virtual traduce el bytecode instruccién por instruccién. Realiza la identificacién de las instrucciones del bytecode y revisa la ejecuci6n de las instrucciones nativas equivalentes. Las instrucciones nativas (también conocidas como cédigo nativo) son las comprendidas por el procesador fisico de la plataforma interna. Cuando el interpretador aprende que una secuencia de instrucciones de bytecode se ejecuta de forma repetida, informa al compilador JIT (Just In Time, Justo a tiempo) de la maquina virtual de que debe actuar sobre dichas instrucciones en el cédigo nativo. Java para desarrollo Android EEE La compilacién JIT se Heva a cabo s6lo una vez para una secuencia dada de instruc- ciones de bytecode. Como se ejecutan en lugar de la secuencia asociada, el programa se desarrolla mucho més répido. Durante el proceso, el interpretador podria encontrar una peticién de ejecucién de otro bytecode del archivo de clase. Cuando esto sucede, solicita al cargador de clase que abra el fichero y al verificador que compruebe el bytecode antes de ejecutarlo. Esta parte de Java promueve la portabilidad ofreciendo una abstracci6n de la plata- forma interna. Como resultado, el mismo bytecode puede ejecutarse de igual manera en Windows, Linux, Mac OS X 0 en otras. Java se presents bajo el eslogan "programa una vez, ejectitalo en cualquier parte”. ‘Aunque es un lenguaje realmente completo en términos de portabilidad, no siempre es posible. A pesar de ser una plataforma mayormente independiente, ciertas partes (como la planificaci6n de hilos de ejecucién que analizamos en el capitulo 7) varian de una plataforma interna a otra. La parte de plataforma de Java también promueve la seguridad proporcionando un entorno en el cual se ejecuta el cédigo. El objetivo es evitar que el cédigo malintencionado corrompa la plataforma interna y se haga, por consiguiente, con informaci6n sensible. Como muchos desarrolladores no estan satisfechos con el lenguaje Java pero consideran que su plataforma esimportante, han optado por lenguajes adicionales como Groovy, los cuales se ejecutan sobre Java. Del mismo modo, la version Java 7 incluye una maquina virtual mejorada que hasta simplifica la adaptacion de mas lenguajes de programacion dindmica (los que requieren menos programacion rigida; en los cuales, por ejemplo, no es necesario definir un tipo de variable antes de utilizarla). Java SE, Java EE, Java ME y Android Los desarrolladores emplean las diferentes ediciones de la plataforma Java para crear programas que se ejecuten en ordenadores de sobremesa, navegadores Web, servidores Web, dispositivos méviles (como teléfonos) y dispositivos embebidos (como receptores/ decodificadores de television): * Plataforma Java, Standard Edition (Java SE): Creada para el desarrollo de aplica- ciones independientes que se ejecutan en ordenadores. Java SE también se utiliza para el desarrollo de applets, unos programas que funcionan en el contexto de un navegador Web. 1. Primeros pasos con Java * Plataforma Java, Enterprise Edition (Java EE): Ideada para el desarrollo de apli- caciones orientadas a la empresa y servlets, las cuales son programas de servidor que se atienen a la API Servlet de Java EE. Java EE esta construido por encima Java SE. * Plataforma Java, Micro Edition (Java ME): Pensada para el desarrollo de MIDlets, unos programas que se ejecutan en dispositivos méviles, y Xlets, los cuales son propios de los dispositivos embebidos. Los desarrolladores usan, ademés, una edicién especial de la plataforma Java creada por Google (véase ht tp: //developer .android. com/index. html) para hacer apli- caciones que se ejecutan sobre dispositivos Android. Esta edici6n es conocida como la plataforma Android. Centrandonos en ella, podriamos decir que esté compuesta basica- mente de bibliotecas del nuicleo Java (en parte basadas en Java SE) y una maquina virtual conocida como Dalvik. Este software colectivo se ejecuta sobre un kernel de Linux espe- cialmente modificado. ‘Véase la entrada sobre el sistema operativo Android que ofece Wikipedia (http: // es. wikipedia. org/wiki/Android) para aprender mas sobre él, asi comola pagina que habla sobre el software Dalvik (http: //es .wikipedia.org/wiki/Dalvik) para conocer dicha maquina virtual. En este libro analizamos el lenguaje Java (compatible con Java SE y Android) y las API de Java SE (también compatibles con Android). Del mismo modo, mostramos el cédigo fuente de las aplicaciones Java SE (normalmente fragmentos). Instalaci6n y exploracién del JDK EI JRE (Java Runtime Environment, Entorno de ejecucién Java) implementa la plata- forma Java SE y hace posible la ejecucién de programas Java. El JRE puiblico puede obtenerse de la pagina de descargas de Java SE (http: //java.sun.com/javase/ downloads /index. jsp). Sin embargo, el JRE ptblico no hace que sea posible el desarrollo de programas Java. Para dicha tarea necesitamos conseguir e instalar el Kit de desarrollo Java SE (JDK), el cual contiene las herramientas precisas (incluido el compilador Java) y un JRE privado. JDK 1.0 fue el primer JDK publicado (en mayo de 1995). Hasta la legada del JDK 6, se ofrecié a través del Kit de desarrollo Java (SE no era parte del titulo). Con el paso de los afios, se han publicado numerosas versiones, siendo la JDK 7 la tiltima. Cada Java para desarrollo Android —___ niimero del JDK identifica una versién de Java. Por ejemplo, JDK 1.0 se relaciona con la versién 1.0 de Java y JDK 5 es la 5.0 de Java. JDK 5 fue el primero en proporcionar un niimero de version interno: 1.5.0. La pagina de descargas de Java SE ofrece también acceso al JDK actual. Haga clic en el enlace de descarga para obtener el programa de instalacién para su plataforma. Determinado cédigo del libro requiere el JDK 7, s6lo disponible en version de prueba al cierre de esta edicin (http: // java. sun.com/javase/downloads/ea. jsp). Elinstalador del JDK coloca el Kit de desarrollo en un directorio local. En mi plataforma Windows 7 se corresponde con C:\Archivos de programa\Java\jdk1.6.0_24, siendo JDK 6 Update 24 la versién actual al cierre de esta edicién. Después de instalar el JDK, deberia afiadir el subdirectorio bin a la variable de entorno PATH de su plataforma. De esta forma, podré ejecutar herramientas JDK desde cualquier directorio de su sistema de archivos. Por dltimo, tal vez. considere oportuno crear un subdirectorio proyectos dentro del directorio rafz de su JDK para organizar los trabajos de Java, asi como otro dentro de éste cada uno de los proyectos que desarrolle. El directorio raiz contiene varios archivos (como README, .htm1, el cual proporciona informacién sobre el JDK y src. zip, que ofrece el cédigo fuente de la biblioteca de clases estandar) y subdirectorios, entre los cuales se incluyen los siguientes: © bin: Este subdirectorio contiene herramientas del JDK organizadas, entre las que se incluye la de compilacién de Java. Mas adelante las analizaremos. « _ jre:Posee en su interior la copia privada del JRE del JDK, la cual le permite ejecutar programas Java sin tener que descargar e instalar el JRE puiblico. «lib: Alberga ficheros de biblioteca utilizados por las herramientas del JDK. Por ejemplo, tools. jar contiene los archivos de clase del compilador de Java. En este libro hard uso tan sélo de unas cuantas herramientas del subdirectorio bin, especificamente javac (compilador de Java), java (cargador de aplicaciones), javadoc (generador de documentacién) y jar (creador, actualizador y extractor de archivos). 1. Primeros pasos con Java javac no es el compilador de Java. Se trata de una herramienta que abre e inicializa Ja maquina virtual, le indica el archivo de clase principal del compilador (ubicado en tools. jar) y le pasa el nombre del fichero original que se compila en el archivo de clase principal. Las herramientas del JDK se ejecutan en la linea de comandos mediante sus argu- mentos. Puede aprender mas sobre estos dos conceptos en el articulo de la Wikipedia al respecto (http: //es.wikipedia.org/wiki/Linea_de_comandos Ahora que ya tiene instalado el JDK y sabe algo acerca de sus herramientas, esta listo para explorar una pequefia aplicacién DumpArgs que muestra sus argumentos de linea de comandos en el dispositivo de salida estandar. El dispositivo de salida esténdar es parte de un mecanismo conocido como Standard 1/0 (E/S Esténdar), Este sistema, compuesto por una entrada, una salida y un error esténdar, y que ademés esta generado con el sistema operativo Unix, hace posible que se pueda leer un texto de diferentes fuentes (teclado o archivo), asi como escribir dicho texto en diversos destinos (pantalla 0 archivo). El texto se lee del dispositivo de entrada, que suele ser el teclado de forma predetermi- nada pero que puede redirigitse a un archivo, Se muestra en el dispositivo de salida, que por defecto suele ser la pantalla pero que es posible redirigirlo a un fichero. El texto del mensaje de error aparece en el dispositivo de error esténdar, que por defecto suele ser la pantalla pero que es posible redirigitlo a un archivo distinto al de salida. El listado 1.1 ensefia el cédigo fuente de la aplicacion Dumpargs. Listado 1.1. Recopilacion de los argumentos de linea de comandos a través de la matriz args de main() y visualizacién en el dispositivo de salida estandar public class Dumpargs jublic static void main(String() args) System. out.printia("Pas: for {int i= 0; i < args System.out.printin(args[1]}; 1d arguments:") ; length; i++) La aplicacién DumpArgs del listado 1.1 esta compuesta de una clase llamada DumpArgs y un método en su interior denominado main (), el cual es el punto de entrada de la aplicacién y proporciona el cédigo a ejecutar. Aprenderé mas sobre clases y métodos en el capitulo 2. Java para desarrollo Android main () es llamado con una matriz de cadenas (strings), que son secuencias de carac- teres, la cual identifica los argumentos de linea de comandos de la aplicaci6n. Estas cadenas se almacenan en una variable args de la matriz String. En el siguiente capi- tulo analizaremos las Ilamadas, matrices y variables. Aunque la variable de matriz se llama args, el nombre no tiene nada de especial. Podria | llamarle como quisiera. main () primero ejecuta System, out .print1n ("Passed arguments: ") ;,elcual lama al método print1n() de System. out con la cadena "Passed arguments: ". Esta invocacién da como resultado Passed arguments: en el dispositivo de salida estindar y termina la linea actual para que la siguiente soluci6n se envie a una nueva linea inmediatamente debajo de la actual. En el capitulo 7 explico System, out. System. out proporciona acceso a una familia de métodos print1n() y print () para mostrar distintos tipos de datos (como secuencias de caracteres y enteros). A diferencia de los métodos print 1n (), los print () no finalizan la Iinea actual, sino que continéian con las salidas subsecuentes en la misma. Cada método printin () termina una linea con una cadena de separacién de linea, que es definida porla propiedad del sistema 1 ine. separator, la cual no es necesariamente tun dnico cardcter de nueva linea (en el codigo fuente identificado por un literal de ca- récter ' \n'), Enel capitulo 7 explicamos las propiedades del sistema, en ¢l 10 Line. separator yen el2 los iterales de caracteres. Por ejemplo, en plataformas Windows, Ja cadena de separacion de linea es un cardcter de retorno de carro (cuyo eédigo entero €s 13), seguido de uno de avance de Tinea (euyo cédigo entero es 10). main() utiliza un bucle for para ejecutar repetidamente System. out. printin(args{i]);. El bucle se activa tantas args. length veces, de forma que identifica el nimero de cadenas que estan almacenadas en args. En el capitulo 2 anali- zaremos los bucles. La llamada al método System. out .print1n(args[i]); lee la cadena guar- dada en la entrada ith de la matriz args. La primera entrada esta ubicada en el indice (posicién) 0); la tiltima esta almacenada en args. length ~ 1. Esta llamada al método muestra entonces esta cadena en el dispositivo de salida estandar. Asumiendo que estamos familiarizados con la interfaz de linea de comandos de la plataforma y que nos encontramos en la misma, sittese en el directorio DumpArgs y copie el listado 1.1 en un archivo llamado DumpArgs . java. Acto seguido, compile este archivo a través del siguiente comando: java Dunparg: java 1. Primeros pasos con Java Asumiendo que hemos incluido la extensién . java, la cual es requerida por javac, y que el DumpArgs . java se compila correctamente, deberiamos encontrar un archivo llamado DumpArgs .class en el directorio actual. Ejecute esta aplicacién desde la linea de comandos: java Dunpargs Si todo va bien, deberia ver la siguiente linea de salida en pantalla: Passed arguments: Para una salida més interesante necesitaremos pasar los argumentos de linea de comandos a Dumpargs. Por ejemplo, ejecute la siguiente linea, la cual especifica Curly, Moe y Larry como los tres argumentos que se mandaran a DumpArgs: java DunpArgs Curly Moe Larry En esta ocasi6n, debemos ver esta salida expandida en pantalla: Passed arguments: curly Moe Larry Podemos redirigir la salida a un archivo; para ello, basta con especificar el signo de "mayor que" (>) seguido de un nombre. Por ejemplo, java DumpArgs Curly Moe Larry>out . txt almacena la salida de la aplicaci6n DumpArgs en un archivo llamado out.txt. En lugar de especificar System. out .printin (), podriamos establecer system. err.print1n() para mostrar caracteres en el dispositivo de error estandar, ya que System. err proporciona las mismas familias de métodosprint1n () yprint () que system. out. Sin embargo, deberia pasar de System. out a System.err Gnicamente cuando necesite que la salida de un mensaje de error se muestre en la pantalla, incluso cuando la salida estandar se redirige a un archivo. iFelicidades por compilar correctamente su primer archivo fuente de aplicaci6n y por ejecutar la aplicaci6n! El listado 1.2 ensefia el cédigo fuente de un segundo ejemplo, el cual muestra el texto obtenido del dispositivo de entrada estandar en el de salida. Listado 1.2. Visualizacion en el dispositivo de salida del texto leido del dispositivo de entrada. public class EchoText { public static void main(String{} args) throws java.io. 10Exception i System.out.printin ("Please enter some text and press Enter!"); Java para desarrollo Android while ((ch ~ System.in.read()) != 13) system-out.print (char) ch); System.out-print3n(); Después de mostrar un mensaje indicéndole al usuario que introduzca algo de texto, main () incorpora la variable int ch para almacenar la representacién entera de cada uno de los caracteres. Aprenderemos mas sobre int y los enteros en el capitulo 2. main () entra en un bucle whi le (analizado en él capitulo 2) para leer e imprimir caracteres. Dicho bucle llama primero a System.in.read() para leer un caracter y asignarle su valor entero a ch. Se termina cuando el valor es igual a 13 (el valor entero de la tecla Intro) Cuando la salida estandar no es redirigida a un archivo, System. in. read () devuelve 33 para indicar que la tecla Intro ha sido pulsada. En plataformas como Windows, una Hamada subsecuente a System. in. read () devuelve el entero 10, sefialando un ca- ricter de avance de linea, Tanto sise redirige una entrada estandar comosino, System. in. read() devuelve -1 en el momento en que no haya més caracteres por leer. Para cualquier otro rango en ch, este valor se convierte en un cardcter a través de (char), el cual es un ejemplo del operador cast de Java (analizado en el capitulo 2). Es mostrado a través de System. out .print1n(). La llamada final System. out. prinin() termina la linea actual sin dar salida a ningtin contenido. Cuando se redirige Ia entrada estandar a un archivo y System.in.read() no es capaz de leer ningjin texto (quizés porque el fichero esta guardado en un dispositive de almacenamiento extemo que ha sido extraido antes de la operacién de lectura), system.in.read() resulta en un objeto que describe este problema. Se confirma esta posibilidad afiadiendo throws java.io. IOException al final del encabezado del métodomain () .En el capitulo 4 analizaremos throws y java.io. IOException en el capitulo 10. Compile el listado 1.2 ejecutando javac EchoText.. java yactive la aplicaci6n con java EchoText. Sele solicitara introducir un texto y, después de hacerlo y pulsar Intro, se enviard a la salida estandar. Por ejemplo, considere la siguiente solucién: Helio Java 1. Primeros pasos con Java Puede redirigir el origen de la salida a un archivo, especificando el signo de "menor que" (<) seguido de un nombre. Por ejemplo, java EchoText > Brot ans Figura 1.2. La ventana principal del IDE NetBeans. La interfaz de usuario de NetBeans consiste en una ventana principal compuesta de una barra de ments, un barra de herramientas, un espacio de trabajo y una barra de estado. El espacio de trabajo muestra inicialmente una pagina de inicio, la cual ofrece tutoriales sobre NetBeans, asi como noticias y blogs. Java para desarrollo Android ——$—— Para ayudarle a sentirse comodo con la interfaz de usuario de NetBeans le ensefiaré cémo crear el proyecto DumpArgs, compuesto de un tinico archivo DumpArgs . java con el cédigo fuente del listado 1.1. También aprender a compilar y ejecutar esta apli- caci6n. Siga estos pasos para crear el proyecto DumpArgs: 1. Seleccione Archivo>Proyecto nuevo. 2. Enel panel inicial del cuadro de didlogo Proyecto nuevo, asegiirese de que Java es la categoria seleccionada bajo la lista Categorias y que Aplicacion Java es el proyecto que est marcado en la lista Proyectos. Haga clic en el botén Siguiente. 3. Enel panel resultante, introduzca DumpArgs en el cuadro de texto Nombre de proyecto. Observard que dumpargs.Main aparece en el campo de texto situado a la derecha de la casilla de verificacién Crear clase principal. Sustituya dumpargs . Main por DumpArgs y haga clic en Terminar. Después de unos instantes, verd un espacio similar al que se muestra en la figura 1.3. Después de elaborar el proyecto DumpArgs, observara que NetBeans ha organizado el espacio de trabajo en cuatro areas principales: proyectos, editor, navegador y tareas. ee rom THD B-O- (Ginn) é [Be ourerrosjove, «| erry eRe eMretiauiesiaa pibie clase Damptegs public aratie votd matm[sersag() zg) ( @ earconeoo cm a : i ete en a | poo cn wat he foro Lieber Tamm + "eR ol = lit ips) Figura 4.3. El espacio de trabajo esta dividido en varias areas. 1. Primeros pasos con Java La zona de proyectos le ayuda a gestionar sus trabajos. Esta ventana esta dividida en las fichas Proyectos, Archivos y Servicios: * La ficha Proyectos es el punto de entrada principal del cédigo y de los archivos. Muestra una visualizacién logica de contenido importante del proyecto. * La ficha Archivos ofrece una visualizacién de sus proyectos basada en directorios, incluyendo cualquier fichero y carpeta que no se ensefte en Proyectos. * La ficha Servicios es el punto inicial para los recursos de ejecucién. Presenta una visualizacién l6gica de los recursos importantes de ejecucién, como los servidores, bases de datos y servicios Web que estén registrados con el IDE. El 4rea del editor le ayuda a configurar los archivos fuente del proyecto. Cada uno cuenta con su propia ficha, etiquetada con el nombre del fichero. La figura 1.3 muestra una ficha DumpArgs java, la cual proporciona acceso al esqueleto del codigo fuente. En breve, sustituiremos este cédigo por el del listado 1.1. Dicho esqueleto ensefia comenta- rios de una y varias lineas (discutidos en el capitulo 2) y comentarios Javadoc (analizados posteriormente en este capitulo). El Area del navegador muestra la ficha Navegador, la cual presenta una visualiza- cién compacta del archivo seleccionado actualmente y simplifica la navegacién entre las distintas partes del fichero. El érea de tareas contiene la ficha Tareas, la cual ofrece una lista de trabajos para los. distintos archivos del proyecto que necesitan ser resueltos. Sustituya el esqueleto del cédigo fuente de DumpArgs . java por el del listado 1.1 y seleccione Ejecutar Main Project en el menti Ejecutar para compilar esta aplicacion. La figura 1.4 ilustra el resultado de la aplicacion. La ficha Salida de la figura 1.4 ensefia tan slo el resultado de la llamada al método System. out .print1n ("Passed arguments:"). Para ver mas debe pasar argu- mentos de linea de comandos a DumpArgs. Para lograrlo con el IDE NetBeans siga estos pasos: 1. Seleccione Archivo>Project Properties (DumpArgs). 2. Enel cuadro de didlogo que aparece, escoja Ejecutar en el arbol de categorias e introduzca Curly Moe Larry en el campo de texto Argumentos del panel resul- tante. Haga clic en el botén Aceptar. Nuevamente, seleccione Ejecutar>Ejecutar Main Project para ejecutar la aplicacién Dumpargs. En esta ocasién, la ficha Salida debe mostrar Curly, Mow y Larry en lineas separadas después de Passed arguments:. Esto es todo lo que vamos a comentar acerca del IDE NetBeans. Para obtener mas informacién al respecto revise los tutoriales incluidos en la ficha Pagina de Inicio, acceda a la ayuda del IDE a través del ment Ayuda y explore los documentos de la base de conocimiento en http: //netbeans.org/kb/. ayscem.out-petnein(acge(1) Figura 1.4, Una ficha Salida aparece a la izquierda de la ficha Tareas y muestra la salida de la aplicacién DumpArgs. IDE Eclipse Eclipse es un IDE en cédigo abierto para el desarrollo de programas en Javay en otros Jenguajes como C, COBOL, PHP, Perl y Python. Eclipse Classic es una distribucién de este IDE que esté disponible para su descarga; la version actual al cierre de esta edicién es la 3.6.2. Deberia conseguir e instalar el IDE Eclipse Classic para seguir las explica- ciones con ejemplos de esta seccién. Comience por acceder a ht tp: //eclipse.org/ downloads/ y siga los pasos que se detallan a continuacién: 1. Desplacese hacia abajo hasta que encuentre la versi6n Eclipse Classic. 2. Seleccione la plataforma apropiada (como Windows). 3. Escoja un sitio de descarga para poder proceder con la obtencién del archivo con el paquete de la distribucién. Yo descargué el archivo instalador eclipse-SDK-3.6.2-win32.zip de aproxi- madamente 171MB para mi plataforma Windows 7, lo descomprimi, movi el directorio eclipse resultante a otra ubicacién y creé un acceso directo al eclipse.exe del directorio. EEN Printers pasos con jaoa A diferencia del IDE NetBeans 6.9, el cual requiere la instalacién de un JDK antes de poder incorporar el instalador, no es necesario hacer lo mismo con eclipse. exe, puesto que el IDE Eclipse ya trae su propio compilador de Java. Sin embargo, precisard al menos el JDK 6 Update 16 para ejecutar la mayor parte del eédigo de este libro (0 JDK 7 para ejecutarlo todo). Asumiendo que tiene instalado el IDE Eclipse Classic, inicie esta aplicacién. Deberia aparecer una pantalla identificando al IDE, seguida de un cuadro de didlogo que le permite seleccionar Ia ubicacién de un espacio de trabajo para almacenar los proyectos; a continuacién, se mostraré una ventana principal similar a la que puede ver en la figura 1.5 Welcome to Eclipse Figura 1.5. La ventana principal del IDE Eclipse Classic. La interfaz de usuario de Eclipse consiste en una ventana principal compuesta de una barra de mentis, un barra de herramientas, un espacio de trabajo y una barra de estado. El espacio de trabajo presenta inicialmente una pagina de bienvenida, la cual ofrece enlaces para acceder a tutoriales y otras opciones. Para ayudarle a sentirse cémodo con la interfaz de usuario de Eclipse le mostraré cémo crear el proyecto Dumpargs, Java para desarrollo Android compuesto de un tinico archivo DumpArgs . java con el cédigo fuente del listado 1.1. ‘También aprender a compilar y ejecutar esta aplicaci6n. Siga estos pasos para crear el proyecto DumpArgs: 1. Seleccione File>New (Archivo>Nuevo) y Java Project (Proyecto Java) en el ment contextual resultante. 2. Enel cuadro de didlogo New Java Project (Nuevo proyecto Java), introduzca DumpArgs en el cuadro de texto Project name (Nombre de proyecto). Mantenga elresto de opciones con sus valores predeterminados y haga clic en el bot6n Finish (Terminar). 3. Pulse en el icono Workbench (Espacio de trabajo) para acceder al espacio de trabajo. Eclipse omite la ficha de bienvenida y le lleva directamente la proxima vez que inicie este IDE. Para regresar a la ficha de bienvenida seleccione Help>Welcome (Ayuda> Bienvenida). Después del paso final, vera un espacio similar al que se muestra en la figura 1.6. igs Sach Pe far = BOQ: wG- OF- By i rat | Bese, Recut Path ames fae see Figura 1.6. El espacio de trabajo esta dividido en varias zonas. En la parte izquierda vera una ficha Hamada Package Explorer (Explorador de paquetes), la cual identifica los proyectos del espacio de trabajo en términos de paquetes (analizados en el capitulo 4). Por el momento, tan s6lo ensefia una entrada DumpArgs enesta ficha. 1. Primeros pasos con Jaca Si despliega DumpArgs, mostrard los elementos stc y JRE System Library. Elelemento srcalmacena los archivos fuente del proyecto DumpArgs y JRE System Library identifica varios archivos JRE que se utilizan para ¢jecutar esta aplicacién. Ahora, aftadiremos un nuevo archivo llamado DumpArgs . java a src: 1. Seleccione sre y escoja File>New (Archivo>Nuevo) y File (Archivo) nuevamente enel menti contextual resultante. 2. Enelcuadro de didlogo New File (Nuevo archivo), introduzca DumpArgs.javacn el cuadro de texto File name (Nombre de archivo) y haga clic en el boton Finish (Terminar) Eclipse responde mostrando una ficha de edicién titulada DumpArgs.java. Copie el listado 1.1 aqui y compile y ejecute esta aplicacién seleccionando Run>Run (Ejecutar>Ejecutar). La figura 1.7 tiene el resultado. wave wu |) etme ‘system. out-peaaein(aegatith? Figura 1.7. La ficha Console (Consola), situada en la parte inferior del espacio de trabajo, muestra la salida de la aplicacién DumpArgs. Como con el IDE NetBeans, debe pasar argumentos de linea de comandos a Dumpargs para ver la salida adicional de esta aplicaci6n. Para lograrlo con el IDE Eclipse: Seleccione Run>Run Configurations (Ejecutar>Ejecutar configuraciones).. 2. Enel cuadro de dislogo Run Configurations (Ejecutar configuraciones) resultante, escoja la ficha Arguments (Argumentos). 3. Introduzca Curly Moe Larry en el 4rea de texto Program arguments (Argumentos de programa) y haga clic en el botén Close (Cerrar) Java para desarrollo Android ee ‘Nuevamente, seleccione Run>Run para ejecutar la aplicacién DumpArgs. En esta ocasién, la ficha Console debe mostrar Curly, Mow y Larry en lineas separadas después de Passed arguments:. Esto es todo lo que vamos a comentar acerca del IDE Eclipse. Para obtener més infor- macién al respecto revise los tutoriales incluidos en la ficha Welcome (Bienvenida), acceda a la ayuda a través del menti Help (Ayuda) y explore los documentos de la base de conocimiento en http: //eclipse.org/documentation/. Poker El desarrollo de una aplicacién no es una tarea sencilla. Si no realiza una planifica- cin cuidadosa antes de empezar, es probable que pierda su tiempo y dinero a medida que se disponga a crearla, ademés de tirar el de sus usuarios en caso de no satisfacer sus necesidades. Es muy importante probar cuidadosamente el software. Podria tener que afrontar problemas legales si causa contrariedades financieras a sus usuarios. En esta seccién muestro una técnica para el desarrollo de aplicaciones de forma eficiente. La ofrezco en el contexto de una aplicacién Java que le permite jugar a un sencillo juego de cartas tipo poker, llamado "Four of a kind", con el ordenador. Comprendiendo el juego ‘Antes de sentarse delante del ordenador y ponerse a escribir cédigo, necesita comprender completamente el dominio del problema que vamos a intentar modelar a través de él. En este caso, es un juego basado en el poker y ha de entender cémo funciona. Participan de dos a cuatro jugadores con una baraja esténdar de 52 cartas. La idea del juego es ser el primero en hacerse con cuatro cartas que tengan el mismo ntimero (cuatro ases, por ejemplo) para ser el ganador. Eljuego comienza mezclando las cartas y colocando la baraja boca abajo. Cada jugador toma una por la parte superior de la baraja. El que tenga la carta més alta (el rey en este juego) reparte cuatro a cada uno de sus oponentes, comenzando por el situado a su derecha. E] que reparte empieza a jugar. El jugador examina sus cartas para determinar cuales son las ideales para conseguir las cuatro del mismo tipo; se deshace de la menos util en un mont6n de descartes y toma. otra de la parte superior de la baraja. Si cada carta tiene un valor diferente, el jugador selecciona aleatoriamente una de la cual deshacerse. Si ya cuenta con cuatro del mismo tipo, las muestra y gana el juego. 1. Primeros pasos con Java Modelado del juego en pseudocédigo Ahora que ya entendemos en qué consiste el juego, vamos a empezar a modelarlo. No vamos realizar este paso previo en c6digo fuente Java, puesto que nos perderfamos en muchos detalles. Por el contrario, utilizaremos pseudoc6digo para esta tarea El pseudocédigo es una descripcién de alto nivel compacta e informal del dominio del problema. A diferencia de la explicacién anterior del juego, es una lista paso a paso para encontrar la solucién al problema (véase el listado 1.3). Listado 1.3. Pseudocddigo del juego de péker para dos jugadores (persona y ordenador). 1.Crear una baraja de cartas y mezclarias 2.Originar un monton de descartes vacios. 3.Hacer que cada uno de los jugadores, tanto la persona como el ordena una carta de la parte superior de la baraja 4.Designar al jugador con la carta més alta como el jugador actual. 5.Devolver las cartas en la parte de abajo de la bara 6.21 jugador actual reparte cuatro cartas a cada uno de los otros dos de forma alternativa, repartiendo la primera al otro jugador. 7.£1 jugador actual examina sus cartas para ver cudles son mejores para poker. Descarta la menos Util y la coloca sobre el mon 8.£1 jugador actual toma la ca: ada mis arriba en péker, muestra su mano y gana el Jueg otro jugador cor ja no tiene mis tener un 4n de descs ta si Si consigue un el actual. tas, se toma ell mi én de descartes y se mezcla de so desde el paso 7 Derivar el pseudocédigo del listado 1.3 partir de la descripcion anterior es el primer paso para conseguir una aplicacién que implemente el juego del poker. El pseudocédigo lleva a cabo varias tareas, con toma de decisiones y repeticiones incluidas. A pesar de ser una gufa mas titil para comprender el funcionamiento del juego, el listado 1.3 esta a un nivel demasiado alto como para ser traducido a Java. Por tanto, debemos refinarlo para facilitar el proceso de traduccién. El listado 1.4 muestra este refinamiento. Listado 1.4. Pseudocédigo refinado del juego de poker para dos jugadores (persona y ordenador). deck = new Deck() shuffle () cardPile = new DiscardPile() heard = deck.deal() eCard = deck.deal () deck. pi card) deck.putBack (eCard) + deck. shuffle () Repeat at step 4 Player = HUMANO if cCard.rank() > nCard-rank() 7.1.1, curPlayer = ORDENADOR ankQ)

También podría gustarte