programacin en00_Joyanes Preliminares.indd I00_Joyanes
Preliminares.indd I 12/5/11 12:49:5512/5/11 12:49:55
00_Joyanes Preliminares.indd 2 16/5/11 13:43:17
Luis Joyanes AguilarCatedrtico de Lenguajes y Sistemas
InformticosUniversidad Pontificia de SalamancaIgnacio Zahonero
Martnez Profesor Asociado de Programacin y Estructura de
DatosUniversidad Pontificia de SalamancaAlgoritmos, programacin
orientada a objetose interfaz grfica de usuarioprogramacin enMXICO
BOGOT BUENOS AIRES CARACAS GUATEMALA MADRID NUEVA YORK SAN JUAN
SANTIAGO SO PAULO AUCKLAND LONDRES MILN MONTREALNUEVA DELHI SAN
FRANCISCO SINGAPUR ST. LOUIS SIDNEY TORONTO00_Joyanes
Preliminares.indd III00_Joyanes Preliminares.indd III 12/5/11
12:49:5512/5/11 12:49:55
Director General Mxico: Miguel ngel Toledo CastellanosEditor
sponsor: Pablo Eduardo Roig VzquezCoordinadora editorial: Marcela
I. Rocha MartnezEditora de desarrollo: Karen Estrada
ArriagaSupervisor de produccin: Zeferino Garca GarcaProGraMaCin En
Java 6. algoritmos, programacin orientada a objetos e interfaz
grfica de usuariosPrimera edicinProhibida la reproduccin total o
parcial de esta obra,por cualquier medio, sin la autorizacin
escrita del editor.DERECHOS RESERVADOS 2011, respecto a la primera
edicin porMcGRAW-HILL/INTERAMERICANA EDITORES, S.A. DE C.V.A
Subsidiary of The McGraw-Hill Companies, Inc.Prolongacin Paseo de
la Reforma 1015, Torre A,Piso 17, Colonia Desarrollo Santa
Fe,Delegacin lvaro Obregn,C.P. 01376, Mxico, D. F.Miembro de la
Cmara Nacional de la Industria Editorial Mexicana, Reg. Nm.
736iSBn: 978-607-15-0618-41234567890 1098765432101Impreso en Mxico
Printed in Mexico00_Joyanes Preliminares.indd 4 13/5/11
11:59:44
Contenido XIXUna primera reflexin acerca de JavaLa empresa Sun
Microsystems anunci formalmente el nacimiento de Java en mayo de
1995 en una conferencia del sector industrial de computacin. La
promesa de que la tecnologa Java1 se convertira en un aglutinante o
integrador (universal glue fue el tr-mino original empleado) que
conectara a los usuarios con la informacin proceden-te de
servidores web, bases de datos, proveedores de informacin o
cualquier otra fuente de informacin imaginable, comenz pronto a
hacerse una realidad palpable. Java se granje la atencin de la
comunidad tecnolgica y de negocios. La expansin de la World Wide
Web, que por aquella poca comenz su expansin despus de su
nacimiento en los primeros aos de esa dcada, de la mano de su
creador Tim Berners-Lee, y la posibi-lidad de Java como herramienta
para su uso en los primeros navegadores convirti pron-to a esta
tecnologa en un referente en los negocios y en la industria.Java se
utiliza hoy da con gran profusin en las empresas y es clave en el
desarrollo de la web; sus caractersticas de seguridad tanto para
desarrolladores como para usuarios fortalecieron su uso. Java se
utiliza actualmente en el desarrollo de grandes proyectos
tec-nolgicos empresariales, para soportar y mejorar la
funcionalidad de los servidores web (los equipos que proporcionan
los contenidos que visualizamos a diario en navegadores como
Firefox, Explorer, Chrome, Opera o Safari), aplicaciones para
cualquier tipo de dis positivos, desde telfonos celulares hasta
reproductores de audio, video, fotografa o videoconsolas; as como
para dispositivos embebidos en los grandes sistemas de comu-nicacin
como aviones, barcos, trenes, etctera. Java tambin presenta
caractersticas de programacin avanzada, lo que le hace muy til para
realizar tareas tales como progra-mar redes o conectar bases de
datos y proyectos concurrentes. Desde su presentacin en 1996, Sun
(ahora propiedad de Oracle) ha lanzado siete versiones importantes
de Java: 1.0, 1.1, 1.2, 1.3, 1.4, 5.0 y 62 y ya anunci Java 7, la
cual se encuentra en fase de pruebas, as como Java 8. Oracle anunci
el 19 de noviembre de 2010 que el Java Development Kit (JDK) de la
versin 7 estar disponible el 28 de julio de 2011. Ese mismo da
tambin anunci que las especificaciones de Java 7 y Java 8
ini-ciaban el proceso de aprobacin por el Community Process
Executive Committe. El 14 de enero de 2011 Oracle, a travs del blog
de Mark Reinhold,3 arquitecto jefe de Java anunci que el JDK 7
Project ha sido terminado y el 3 de febrero anunci, en el mismo
blog, que el borrador de JDK 7 est disponible para preguntas,
comentarios y sugeren-cias. La versin 7 y, naturalmente, la ms
lejana Java 8, entendemos que convivir duran-te los prximos aos con
las versiones anteriores.En los ltimos aos, la interfaz de
programacin de aplicaciones (API, application programming
interface) creci desde 20 clases a ms de 3 000 (3 777 en Java 6) y
proba-blemente superarn las 4 000 en la futura versin. Las API
actuales generan desarrollos 1 Trmino empleado porque es mucho ms
que un lenguaje de programacin. 2 La versin existente en el sitio
web de Oracle en el momento de la revisin fi nal de este libro era
Java Platform, Standard Edition (SE) versin 6 update 24 (JDK y
JDR), misma que se puede descargar en:
www.oracle.com/technetwork/java/javase/down-loads/index.html 3 El
blog de Mark Reinhold se encuentra en la direccin:
http://blogs.sun.com/mr/PRLOGO00_Joyanes Preliminares.indd
XIX00_Joyanes Preliminares.indd XIX 12/5/11 12:50:0212/5/11
12:50:02
XX PRLOGOpara reas tan diversas como construccin de interfaces
grficas de usuario, gestin y administracin de bases de datos,
seguridad, procesamiento con XML, etctera. Por todas estas y muchas
ms razones (que no alcanza a cubrir esta breve introduc-cin pero
que iremos conociendo a lo largo del libro y en su pgina web
asociada y que el lector apreciar a medida que avance su formacin,
ya sea dirigida por sus maestros y profesores o de manera
autodidacta si lo lee en solitario o en grupo de trabajo), Java se
ha convertido en un lenguaje de programacin clave en la formacin
tanto en univer-sidades como en institutos tecnolgicos o centros de
formacin profesional. La versatili-dad de Java permite que los
planes de estudio consideren su enseanza de muy diversas maneras,
en asignaturas de iniciacin a la programacin de computadoras y a
continua-cin, programacin orientada a objetos, o bien como
continuacin de otras asignaturas como Fundamentos de programacin o
Programacin I, en otros lenguajes, ya sean algortmi-cos con
pseudocdigo o estructurados como Pascal o C, o complemento de otros
lengua-jes orientados a objetos como C++.El libro se basa en las
caractersticas fundamentales de Java Standard Edition (SE) 6,
conocida popularmente como Java 6 y es compatible con las
anteriores 5.0 y 2 porque as fue desarrollada por sus creadores;
tambin servir para Java 7, al menos en lo relativo a las
caractersticas, sintaxis y estructuras del lenguaje.Por qu hemos
escrito este libro y a quin va dirigido?Bienvenido a Programacin en
Java 6. Este libro se ha diseado para un primer curso de
Programacin de Computadoras (Fundamentos o Metodologa de
programacin y/o Progra-macin I) segn los diferentes nombres de los
currculos de los pases iberoamericanos, incluyendo lgicamente
Espaa, Portugal y Brasil, y su con tinuacin en Programacin II o
Programacin orientada a objetos, como evolucin natural del
estudiante en carreras de Ingeniera de Sistemas Computacionales
(Sistemas), Ingeniera Informtica (los actuales grados de Ingeniera
en Espaa), otras Ingenieras como Telecomunicaciones, Indus-triales,
Electrnica, Geogrfica, Mecnica, etctera y tambin pensando en el
tronco co-mn de Ciencias Matemticas, Fsicas (carrera de los
autores), etctera. En el mbito sajn o en las instituciones que
sigan el currculo de Computer Science de ACM, el libro sigue las
directrices de CS1 y CS2. La programacin de computadoras sigue
exigiendo en la segunda dcada del siglo xxi una formacin fuerte en
algoritmos y en tcnicas bsicas de programacin, as como un curso de
programacin orientada a objetos, junto al manejo de tcnicas
especiales de ordenacin y bsqueda en listas, archivos y flujos, y
otras propiedades importantes en el estudio algortmico como
recursividad o recursin. Hoy da las materias anteriores de-ben
complementarse con un conocimiento de interfaces grficos de usuario
y los pri-meros pasos en programacin de aplicaciones para la web
mediante los navegadores en internet antes citados.Java es el
lenguaje de programacin moderno que permite el aprendizaje y la
forma-cin de todas las tcnicas mencionadas; razn fundamental por la
que decidimos escribir este libro.Aprovechamos la experiencia
adquirida en nuestra primera obra de Java, Programa-cin en Java 2,
as como la de nuestra obra avanzada Estructura de datos en Java,
adems de otras obras nuestras utilizadas en la comunidad
universitaria universidades, insti-tutos tecnolgicos y escuelas de
ingeniera tales como Fundamentos de programacin, Programacin en C y
Programacin en C++. Con la realimentacin, consejos y propuestas que
nos proporcionaron los alumnos, lectores y autodidactas, y sobre
todo maestros y profesores, hemos escrito este libro tratando de
llegar al mayor nmero posible de per-sonas en el mbito
iberoamericano.00_Joyanes Preliminares.indd XX00_Joyanes
Preliminares.indd XX 12/5/11 12:50:0212/5/11 12:50:02
Prlogo XXIHoy en da, los estudiantes universitarios de primeros
cursos navegan por internet y utilizan sus computadoras para disear
sus proyectos de clase; muchas otras personas navegan en internet
para buscar informacin y comunicarse con otros individuos. Todas
es-tas actividades son posibles porque existen programas de
computadora o software, de-sarrollados por personas que utilizan
los lenguajes de programacin (programadores).Java es el lenguaje de
programacin que, en la actualidad y en el futuro, permite realizar
todas estas tareas; fue creado para facilitar tareas generales y
especficas de pro-gramacin y desarrollo profesional y es
actualizado de forma continua.Nuestro objetivo principal es
ensearle cmo debe escribir programas en el lengua-je de programacin
Java, pero antes de que usted comience su aprendizaje,
conside-ramos muy importante que comprenda la terminologa de
programacin y por ello, pensando sobre todo en los estudiantes que
se inician en ella, hemos escrito los captulos 1 y 2 a modo de
breve curso de introduccin a Fundamentos de programacin4 o a
Programacin I.Cmo usar este libro?El principal enfoque de esta obra
es su destino final, aprendizaje de la programacin y, en
particular, la programacin en Java. Pretendemos, apoyndonos en
nuestra larga ex-periencia, ofrecer un servicio a los estudiantes
que se inician en la programacin de computadoras como primera
herramienta o aquellos que procedan de asignaturas basa-das en
algoritmos y programacin estructurada y que han utilizado en su
aprendizaje de pseudocdigo o lenguajes de programacin clsicos tales
como Pascal, C, e incluso Fortran porque todava algunas escuelas de
ciencias e ingeniera siguen utilizndolo como herramienta de
aprendizaje debido a su larga tradicin; de hecho los autores de
este libro aprendieron a programar con dicho lenguaje en la carrera
de Ciencias Fsicas y por ello podemos dar fe de su uso. Tambin va
dirigido a aquellos alumnos que desean introducirse a la
programacin orientada a objetos posteriormente en la organizacin
del libro mostraremos nuestra propuesta de curso de orientacin a
objetos o que mi-gran del lenguaje C++, o quieren introducirse en
Java directamente por sus caractersti-cas especiales.Java es un
lenguaje muy potente; adems de las caractersticas tradicionales de
todo lenguaje, generalmente orientado a objetos, dispone de
herramientas para proporcionar soporte para crear programas que
utilicen una interfaz grfica de usuario (IGU o GUI, graphical user
interface). Por estas circunstancias el libro se puede utilizar de
tres formas diferentes, cuya eleccin debe hacer el lector o, en el
caso de enseanza reglada, por el maestro o profesor y que
proponemos a continuacin:Enfoque integrado. Recomendado para los
alumnos que se inician en asignaturas como Programacin I,
Fundamentos de programacin, etctera o en modo autodi-dacta; los
captulos se deben estudiar secuencialmente. Enfoque de programacin
orientada a objetos. Dirigida a los alumnos que deseen una formacin
bsica de programacin y, a continuacin, seguir la asignatura de
Pro-gramacin orientada a objetos; los captulos 1 a 6 se estudiarn
en orden secuencial o segn la conveniencia del lector, y a partir
de su conocimiento, los captulos 7 a 9 y 12 a 17, dejando los
captulos 10 y 11 para su estudio en el momento que considere el
lector; posteriormente estudiar los captulos 18 al 22. 4 Si desea
profundizar en este tema con la ayuda de un lenguaje algortmico,
como el pseudocdigo, le sugerimos consultar la bibliografa
recomendada en la pgina web del libro o nuestra obra Fundamentos de
programacin, 4a. edicin, o el Portal Tec-nolgico y de Conocimiento
de McGraw-Hill (www.mhe.es/joyanes) que consideramos
tiles.00_Joyanes Preliminares.indd XXI00_Joyanes Preliminares.indd
XXI 12/5/11 12:50:0212/5/11 12:50:02
XXII PRLOGOEnfoque de interfaz grfica de usuario. En este caso
se recomienda comenzar con los captulos bsicos 1 a 6 en secuencia,
estudiar los captulos 10 y 11, y a continua-cin pasar a los
captulos 20 al 22; lo cual implica omitir los captulos de objetos:
7 a 9, para estudiarlos a su conveniencia, y, posteriormente, 12 a
17; los captulos 18 y 19 los podr estudiar en cualquier momento a
partir del captulo 11.Todo el cdigo fuente, explicaciones, ejemplos
y ejercicios, fueron escritos, compila-dos y ejecutados para
asegurar la calidad con Java 6 y, en muchos casos, hemos probado la
versin 7.0, disponible en el sitio oficial de Oracle y que
recomendamos y utilizamos a lo largo del libro, lo puede consultar
en el Apndice F.Pgina web del libro (OLC)En la pgina web oficial
del libro (www.mhhe.com/uni/joyanespj6e) el lector po-dr encontrar
la siguiente documentacin:Apndices especficos de la web que
complementan los de la edicin impresa. Talleres prcticos
complementarios con temas terico-prcticos para ampliar y pro-
fundizar determinados captulos del libro.Cdigo fuente de los
programas ms notables del libro, junto con los correspondien- tes a
los ejemplos y ejercicios desarrollados y explicados en el
libro.Bibliografa y sitios web recomendados con enlaces destacados,
sitios de fabricantes, revistas y peridicos online. Enlaces web
recomendados por Oracle/Sun. Enlace con el Portal Tecnolgico y de
Conocimiento ( www.mhe.es/joyanes).Documentacin actualizada de la
plataforma Java. Tutoriales y cursos de programacin en Java y otra
documentacin complementaria en formato de PowerPoint. Documentacin
complementaria de todo tipo para programadores y desarrolladores.
Organizacin del libroJava rene las caractersticas de un lenguaje de
programacin tradicional con enfoque orientado a objetos, dispone de
una extensin y una enorme biblioteca de clases que au-menta con
cada versin (ver captulo 1, tabla 1.4) y con entornos de desarrollo
tra-dicionales, sin uso de interfaces grficas de usuario y de
programacin en la web y carac-tersticas de un lenguaje de
programacin moderno con una interfaz grfica de usuario y
posibilidad de escribir programas especficos web (applets) que
pueden correr en nave-gadores, como Firefox de Mozilla, Explorer de
Microsoft, Chrome de Google, Safari de Apple, etctera, y que
seguramente, usted utiliza a diario en su institucin, hogar, o en
su telfo-no celular. Intentamos conjugar ambas caractersticas de
Java y aunque anteriormente dimos consejos prcticos para utilizar
este libro, ahora comentamos a detalle cmo orga-nizamos el libro y
su contenido.El captulo 1 introduce al lector en la historia de las
computadoras, la web y los len-guajes de programacin; el lector
puede saltar total o parcialmente el captulo si est familiarizado
con estos conceptos. Sin embargo, sugerimos que lea los apartados
dedi-cados a la web y cloud computing (computacin en la nube), la
plataforma de internet que facilitar el uso del software como un
servicio, as como del hardware y otros compo-nentes de computacin.
En este captulo tambin describimos las caractersticas princi-pales
de Java y de la mquina virtual Java, la potente herramienta que
desarrollaron los creadores del lenguaje para hacer a Java
independiente de la plataforma sobre la que trabaje el
programador.00_Joyanes Preliminares.indd XXII00_Joyanes
Preliminares.indd XXII 12/5/11 12:50:0212/5/11 12:50:02
Prlogo XXIIIEl captulo 2 se pens para lectores sin formacin
previa en programacin; describe el procedimiento de resolucin de
problemas con computadoras y el proceso de ejecucin de un programa
Java; tambin explica las metodologas de programacin tpicas y
tradi-cionales basadas en clases (orientacin a objetos), as como
los entornos ms popula res de desarrollo integrados de Java. Tambin
se presentan las tcnicas tradicionales de pro-gramacin estructurada
junto con las tcnicas de programacin orientada a objetos. En el
captulo 3 se describen los elementos bsicos de Java con nfasis en
las platafor-mas Java SE 5.0 y Java 6, anunciando la futura Java SE
7 que posiblemente estar disponi-ble a partir del ao 2011. Explica
con detenimiento la estructura general de un programa en Java, as
como los elementos que la componen.Estos tres primeros captulos
conforman un breve curso de introduccin a la progra-macin y su
comprensin permitir iniciarse a pleno rendimiento en la programacin
en Java. En esta primera parte se mezclan los importantes conceptos
de algoritmos, pro-gramas, entornos de desarrollo y la construccin
de los primeros programas en Java junto con las metodologas de
programacin tradicionales y orientadas a objetos. El captulo 4
describe todos los operadores y expresiones que las computadoras
ne-cesitan para realizar cualquier tipo de clculo aritmtico, lgico
y de manipulacin de bits, junto con los operadores necesarios para
toma de decisiones, conversin de tipos de datos as como la
prioridad y asociatividad que deben cumplir los operadores en la
escritura y ejecucin de expresiones.Los captulos 5 y 6 tratan sobre
las estructuras de control que permiten alterar el flujo de control
secuencial de las instrucciones de un programa y que se dividen en
dos grandes grupos: a) secuenciales y b) repetitivas o iterativas.
El captulo 7 se dedica a analizar los fundamentos tericos de la
programacin orien-tada a objetos (POO); describe sus principios
fundamentales junto con los conceptos de clases y objetos,
elementos clave de este tipo de programacin; tambin hace una
intro-duccin a UML, el lenguaje de modelado unificado por
excelencia, empleado en la mayora de los proyectos de desarrollo
profesional a los que el programador se enfrenta-r en su vida
laboral.Los captulos 8 y 9 se centran en el anlisis y diseo de
clases y objetos as como en los mtodos que forman parte de ellos;
introduce la declaracin de tales elementos y su implementacin.
Explica los conceptos importantes de paquetes y de biblioteca de
clases, caractersticas sobresalientes y diferenciadoras de Java;
analiza los mtodos y las clases predefinidas junto con los mtodos y
clases definidos por el usuario.El captulo 10 cubre las primeras
estructuras de datos que estudiar el lector: arreglos o arrays,
listas y tablas, desde un punto de vista prctico; el captulo ampla
y presta aten-cin especial a lo explicado en el captulo 6 respecto
al bucle for each que fue introdu-cido por primera vez en Java 5.0
y que permite hacer recorridos en arreglos. El captulo examina los
diferentes tipos de arreglos y la clase Vector y ArrayList que
facilitan la manipulacin de datos y algoritmos de bsqueda en
listas.El captulo 11 se centra en el estudio de las cadenas
(strings) o secuencias de caracte-res tan necesarias en la
manipulacin de datos de texto; estudia la clase String para
manipular todo tipo de operaciones con cadenas. El captulo 12 es la
prolongacin de los captulos 8 y 9, profundizando en los concep-tos
de clases y objetos e introduciendo los nuevos conceptos de
interfaces y clases abstrac-tas. Junto con los captulos 7, 8 y 9
constituye los fundamentos bsicos de la programacin orientada a
objetos que se completa con los captulos 13 a 17 y conforman el
curso de introduccin a la programacin orientada a objetos.El
captulo 13 describe la herencia, una de las propiedades
fundamentales de la orien-tacin a objetos y principio clave en este
tipo de diseo, la cual facilita la reutilizacin de clases; el
captulo tambin analiza cmo se derivan clases a partir de otras ya
existentes y 00_Joyanes Preliminares.indd XXIII00_Joyanes
Preliminares.indd XXIII 12/5/11 12:50:0312/5/11 12:50:03
XXIV PRLOGOestudia el concepto de herencia simple y herencia
mltiple (aunque sta, por los proble-mas de diseo que suele
plantear, con muy buen criterio fue omitida por los creadores de
Java, al contrario de lo que sucede en C++, que s la implementa).
El captulo 14 estudia los conceptos de polimorfismo y de ligadura
junto con sus ventajas, inconvenientes y mtodos para su
implementacin.El captulo 15 se dedica a estudiar la genericidad,
una de las caractersticas destacadas de la orientacin a objetos, la
cual permite el diseo y construccin de tipos de datos ge-nricos o
plantillas (templates). Describe el diseo y creacin de clases
genricas y los mtodos genricos y su aplicacin en las mquinas
virtuales Java. El captulo 16 se dedica al tratamiento de errores
mediante la aparicin y ejecucin de excepciones; analiza las
condiciones de error en los programas y los mtodos de ma-nipulacin
de excepciones en Java. Tambin describe las clases de excepciones
definidas en Java y sistemas de especificacin de excepciones.El
captulo 17 se centra en el estudio y manipulacin de flujos y
archivos de datos; trata los diferentes tipos de archivos y
presenta mtodos y procedimientos para su diseo correcto junto con
los archivos de objetos predefinidos.El captulo 18 se dedica a
analizar tcnicas avanzadas de ordenacin y bsqueda de informacin en
listas y archivos; estudia los mtodos clsicos y ms eficientes de
ordena-cin y bsqueda.La recursividad es una propiedad muy
importante en el diseo de algoritmos y tiene numerosas aplicaciones
en el campo matemtico, fsico, etctera; el captulo 19 describe dicho
concepto junto con los mtodos ms reconocidos para decidir cundo
utilizarla y cundo usar la repeticin o iteracin. Analiza problemas
tradicionales de la vida diaria que se resuelven mediante mtodos
recursivos, tales como las torres de Hanoi, la bsque-da binaria o
la ordenacin de archivos mediante un mtodo conocido como mergesort
(fusin de archivos). Los captulos 20 y 21 estudian con detenimiento
el tratamiento de grficos mediante las API y la herramienta swing
de AWT; proporciona criterios y mtodos de diseo y construccin de
ventanas, etiquetas, botones, etctera. Un concepto importante que
ofrece Java es el de evento as como su gestin; el captulo 21 lo
estudia; tambin describe la jerarqua de eventos y los componentes
grficos como fuentes de eventos.El captulo 22 se dedica al
importante concepto de applet, la aplicacin Java para ma-nejar
programas en la web y que puedan ejecutarse en navegadores; explica
el concepto y cmo crear de modo prctico un ap