100%(1)100% encontró este documento útil (1 voto) 553 vistas669 páginasJava para Desarrollo Android
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
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 TIMEDIARTodos 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 covariantesIndice 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érIndice 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......
ResumenIndice 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énLos 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 JavaAndroid 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. CadaJava 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:
java1. 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 Java1. 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
Vue 2023
Aún no hay calificaciones
Vue 2023
131 páginas
Librería ADC
Aún no hay calificaciones
Librería ADC
2 páginas
MSC Lab6
Aún no hay calificaciones
MSC Lab6
6 páginas