Prefacio
Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com
Como cualquiera de los lenguajes de programación más utilizados, Java tiene su parte de detractores, defensores, problemas, rarezas... y una curva de aprendizaje,1 y una curva de aprendizaje. El libro de cocina de Java pretende ayudar al desarrollador Java a ponerse al día en algunas de las partes más importantes del desarrollo Java. Me centro en las API estándar y en algunas de terceros, pero no dudo en cubrir también cuestiones relacionadas con el lenguaje.
Ésta es la cuarta edición de este libro, y ha sido moldeado por muchas personas y por los innumerables cambios que ha experimentado Java en sus dos primeras décadas de popularidad. Los lectores interesados en la historia de Java pueden consultar el Apéndice A.
Java 11 es la versión actual soportada a largo plazo, pero Java 12 y 13 ya están disponibles. Java 14 está en acceso anticipado y su lanzamiento final está previsto para el mismo día que la cuarta edición de este libro. La nueva cadencia de lanzamientos cada seis meses puede ser estupenda para el equipo de desarrollo de Java SE en Oracle y para los sitios de noticias relacionados con Java, pero "puede causar algo de trabajo extra" a los autores de libros de Java, ya que los libros suelen tener un ciclo de revisión más largo que el de Java. Java 9, que salió después de la edición anterior de este libro, fue una versión de ruptura, la primera en mucho tiempo que rompió la compatibilidad con versiones anteriores, principalmente el sistema de módulos de Java. Se supone que todo lo que aparece en el libro funciona en cualquier JVM que se siga utilizando para desarrollar código. Nadie debería estar utilizando Java 7 (¡ni nada anterior!) para nada, y nadie debería estar haciendo nuevos desarrollos en Java 8. Si es así, ¡es hora de pasar página!
El objetivo de esta revisión es mantener el libro al día de todos estos cambios. Al tiempo que he eliminado mucho material antiguo, he añadido información sobre nuevas funciones como los Módulos y la JShell interactiva, y he actualizado mucha otra información por el camino.
A quién va dirigido este libro
Voy a suponer que conoces los conceptos básicos de Java. No te diré cómo println
una cadena, ni cómo escribir una clase que extienda a otra y/o implemente una interfaz .Doy por supuesto que has hecho un curso de Java comoIntroducción de Learning Tree o que has estudiado un libro introductorio como Head First Java, Learning Java o Java in a Nutshell (O'Reilly). Sin embargo, el Capítulo 1 abarca algunas técnicas que quizá no conozcas muy bien y que son necesarias para comprender parte del material posterior. ¡Siéntete libre de saltártelo! Tanto la versión impresa del libro como la copia electrónica tienen muchas referencias cruzadas.
¿Qué contiene este libro?
Java ha parecido más adecuado para el "desarrollo a lo grande", o desarrollo de aplicaciones empresariales, que para el script de una sola línea, de una sola vez, en Perl, Awk o Python. Esto se debe a que es un lenguaje compilado y orientado a objetos. Sin embargo, esta idoneidad ha cambiado un poco con la aparición de JShell (verReceta 1.4). Ilustro muchas técnicas con ejemplos de clases Java más breves e incluso fragmentos de código; algunos de los más sencillos se mostrarán utilizando JShell. Todos los ejemplos de código (salvo algunos de una o dos líneas) están en uno de mis repositorios públicos de GitHub, por lo que puedes estar seguro de que cada fragmento de código que veas aquí ha sido compilado, y la mayoría se ha ejecutado recientemente.
Algunos de los ejemplos más largos de este libro son herramientas que escribí originalmente para automatizar alguna que otra tarea mundana. Por ejemplo, una herramienta llamadaMkIndex
(en el repositorio javasrc ) lee el directorio de nivel superior del lugar donde guardo el código fuente de mis ejemplos Java, y crea un archivo index.html apto para navegadores para ese directorio. Otro ejemplo es XmlForm
, que se utilizó para convertir partes del manuscrito de XML a la forma que necesitaba otro software de publicación. XmlForm
también se encargó -mediante otro programa,GetMark
- de inserciones de código completas y parciales del directoriojavasrc en el manuscrito del libro. XmlForm
está incluido en el repositorio de Github que he mencionado, al igual que una versión posterior de GetMark
, aunque ninguno de ellos se utilizó en la construcción de la cuarta edición. Actualmente, el software de publicación Atlas de O'Reilly utilizaAsciidoctor, que proporciona el mecanismo que utilizamos para insertar archivos y partes de archivos en el libro.
Organización de este libro
Repasemos la organización de este libro. Cada capítulo consta de un puñado de recetas, breves secciones que describen un problema y su solución, junto con un ejemplo de código. El código de cada receta pretende ser en gran medida autónomo; siéntete libre de tomar prestados trozos de cualquiera de ellas para utilizarlos en tus propios proyectos. El código se distribuye con un copyright al estilo Berkeley, sólo para desalentar la reproducción al por mayor.
Comienzo el Capítulo 1, "Primeros pasos: Compilar y ejecutar Java", describiendo algunos métodos para compilar tu programa en distintas plataformas, ejecutarlo en distintos entornos (navegador, línea de comandos, escritorio con ventanas) y depurarlo.
El Capítulo 2, "Interactuar con el entorno", pasa de compilar y ejecutar tu programa a conseguir que se adapte al entorno: los demás programas que viven en tu ordenador.
Los siguientes capítulos tratan de las API básicas. El Capítulo 3, "Cadenas y cosas", se centra en uno de los tipos de datos más básicos pero potentes de Java, mostrándote cómo ensamblar, diseccionar, comparar y reorganizar lo que de otro modo podrías considerar texto ordinario. Este capítulo también trata el tema de la internacionalización/localización para que tus programas puedan funcionar tan bien en Akbar, Afganistán, Argel, Ámsterdam y Angleterre como en Alberta, Arkansas y Alabama.
El Capítulo 4, "Coincidencia de patrones con expresiones regulares", te enseña a utilizar la potente tecnología de expresiones regulares de Unix en muchos dominios de problemas de coincidencia de cadenas y patrones. El procesamiento de expresiones regulares es estándar en Java desde hace años, pero si no sabes cómo utilizarlo, puede que estés reinventando la rueda pinchada.
El Capítulo 5, "Números", trata tanto de los tipos numéricos incorporados, como int
y double
, como de las clases API correspondientes (Integer
, Double
, etc.) y de las facilidades de conversión y comprobación que ofrecen. También se mencionan brevemente las clases de "números grandes". Como los programadores de Java a menudo necesitan tratar con fechas y horas, tanto a nivel local como internacional, el Capítulo 6, "Fechas y horas", trata este importante tema.
Los siguientes capítulos tratan sobre el procesamiento de datos. Como en la mayoría de los lenguajes, las matrices en Java son colecciones lineales e indexadas de objetos similares, como se explica en el Capítulo 7, "Estructurar datos con Java". Este capítulo trata a continuación de las numerosas clases Collections: potentes formas de almacenar cantidades de objetos en el paquete java.util
, incluido el uso de Java Generics.
A pesar de cierto parecido sintáctico con lenguajes procedimentales como C, Java es en el fondo un lenguaje de Programación Orientada a Objetos (POO), con algunas construcciones importantes de Programación Funcional (PF) hábilmente mezcladas.
Enel Capítulo 8, "Técnicas orientadas a objetos", se analizan algunas de las nociones clave de la POO que se aplican a Java, incluidos los métodos que suelen sobrescribirse en java.lang.Object
y la importante cuestión de los patrones de diseño. Java no es, ni será nunca, un lenguaje de PF pura, pero es posible utilizar algunos aspectos de la PF, cada vez más con Java 8 y su compatibilidad con las expresiones lambda (también conocidas como cierres). Esto se trata en el Capítulo 9, "Técnicas de programación funcional: Interfaces funcionales, flujos y colecciones paralelas".
El siguiente capítulo trata aspectos de la entrada y salida tradicionales. El capítulo 10, "Entrada y salida: Lectura, escritura y trucos de directorio", detalla las reglas para leer y escribir archivos (no te saltes esto si crees que los archivos son aburridos; necesitarás parte de esta información en capítulos posteriores). El capítulo también te muestra todo lo demás sobre los archivos -comoaveriguar su tamaño y la hora de la última modificación- y sobre la lectura y modificación de directorios, la creación de archivos temporales y el cambio de nombre de archivos en el disco.
Apache Hadoop, Apache Spark y muchas otras infraestructuras de big data están escritas en Java y son extensibles con Java, como se describe en el Capítulo 11, "Ciencia de datos y R". El lenguaje de programación R es popular entre los científicos de datos, los estadísticos y otros científicos. Existen al menos dos reimplementaciones de R codificadas en Java, y Java también puede interactuar directamente con la implementación estándar de R en ambas direcciones, por lo que este capítulo también cubre R.
Dado que Java se promulgó originalmente como el lenguaje de programación para Internet, es justo dedicar algo de tiempo a las redes en Java. El Capítulo 12, "Clientes de red", cubre los fundamentos de la programación de redes desde el lado del cliente, centrándose en los sockets. Hoy en día, tantas aplicaciones necesitan acceder a un servicio web, principalmente a servicios web RESTful, que esto parecía necesario. Luego pasaré al lado del servidor en el Capítulo 13, "Java del lado del servidor", en el que aprenderás algunas técnicas de programación del lado del servidor.
Una representación sencilla basada en texto para el intercambio de datos es JSON, la notación de objetos de JavaScript. El Capítulo 14, "Procesamiento de datos JSON", describe el formato y algunas de las muchas API que han surgido para tratar con él.
El capítulo 15, "Paquetes y empaquetado", muestra cómo crear paquetes de clases que funcionen juntas. Este capítulo también habla de la implementación (también conocida como distribución e instalación) de tu software.
El capítulo 16, "Threaded Java", te explica cómo escribir clases que parecen hacer más de una cosa a la vez y te permiten aprovechar el potente hardware multiprocesador.
El capítulo 17, "Reflexión, o "Una clase con nombre de clase"", te desvela secretos como la forma de escribir mecánicamente documentos de referencias cruzadas de API y cómo los servidores web son capaces de cargar cualquier Servlet antiguo -sin haber visto antesesa clase concreta- yejecutarlo.
A veces ya tienes código escrito y funcionando en otro lenguaje que puede hacer parte de tu trabajo por ti, o quieres utilizar Java como parte de un paquete mayor. El capítulo 18, "Uso de Java con otros lenguajes", te muestra cómo ejecutar un programa externo (compilado o script) y también interactuar directamente con código nativo en C/C++ u otros lenguajes.
No hay espacio en un libro de este tamaño para todo lo que me gustaría contarte sobre Java. El epílogo presenta algunas reflexiones finales y un enlace a mi resumen en línea de las API de Java que todo desarrollador Java debería conocer.
Por último, el Apéndice A, "Java antes y ahora", presenta la historia de Java en una cronología por versiones, de modo que, sea cual sea la versión de Java que hayas aprendido, puedes ponerte al día rápidamente.
¡Tantos temas y tan pocas páginas! Muchos temas no reciben una cobertura del 100%; he intentado incluir las partes más importantes o más útiles de cada API. Para ir más allá, consulta las páginas javadoc oficiales de cada paquete; muchas de estas páginas tienen una breve información tutorial sobre cómo debe utilizarse el paquete.
Además de las partes de Java que se tratan en este libro, se han estandarizado otras dos ediciones de plataforma, Java ME y Java EE.Java Micro Edition (Java ME) se ocupa de dispositivos pequeños como dispositivos de mano, teléfonos móviles y faxes. En el otro extremo de la escala de tamaños -grandes máquinas servidoras- estáEclipse Jakarta EE, que sustituye a la antigua Java EE, que en el siglo pasado se conocía como J2EE. Jakarta EE se ocupa de crear aplicaciones grandes, escalables y distribuidas. Las API que forman parte de Jakarta EE incluyen Servlets, JavaServer Pages, JavaServer Faces, JavaMail, Enterprise JavaBeans (EJB), Container and Dependency Injection (CDI) y Transactions. Los paquetes de Jakarta EE suelen empezar por "javax" porque no son paquetes básicos. Este libro menciona sólo algunos de ellos; también hay unJava EE 8 Cookbookde Elder Moraes (O'Reilly) que cubre algunas de las API de Jakarta EE, así como unJava Servlet & JSP Cookbook más antiguo de Bruce Perry (O'Reilly).
Este libro no cubre Java Micro Edition, Java ME. En absoluto. Pero hablando de teléfonos y dispositivos móviles, probablemente sepas que Android utiliza Java como lenguaje. Lo que debería reconfortar a los desarrolladores Java es que Android también utiliza la mayor parte del núcleo de la API de Java, excepto Swing y AWT, para los que proporciona sustitutos específicos de Android. El desarrollador Java que quiera aprender Android puede considerar consultar mi Android Cookbook (O'Reilly), o el sitio web del libro.
Libros de Java
Este libro contiene mucha información útil. Sin embargo, debido a la amplitud de los temas, no es posible tratar un solo tema en todo el libro. Por ello, el libro contiene referencias a muchos sitios web y otros libros. Al señalar estas referencias, espero servir a mi público objetivo: la persona que quiere aprender más sobre Java.
O'Reilly publica, en mi opinión, la mejor selección de libros sobre Java del mercado. A medida que la API sigue ampliándose, también lo hace la cobertura. Consulta la lista completa de la colección de libros sobre Java de O'Reilly; puedes comprarlos en la mayoría de librerías, tanto físicas como virtuales. También puedes leerlos en línea a través de la Plataforma de Aprendizaje en Línea de O'Reilly, un servicio de suscripción de pago. Y, por supuesto, la mayoría están ahora disponibles en formato ebook; los ebooks de O'Reilly no tienen DRM, por lo que no tienes que preocuparte de que su esquema de protección anticopia te bloquee en un dispositivo o sistema concreto, como ocurre con otras editoriales.
Aunque se mencionan muchos libros en los puntos adecuados del libro, algunos merecen una mención especial aquí.
En primer lugar, Java in a Nutshell (Java en una cáscara de nuez ) de David Flanagan y Benjamin Evan (O'Reilly) ofrece una breve visión general del lenguaje y la API y una referencia detallada de los paquetes más esenciales. Es práctico para tenerlo junto al ordenador. Head First Java, de Bert Bates y Kathy Sierra, ofrece una introducción mucho más caprichosa al lenguaje y se recomienda para los desarrolladores menos experimentados.
Java 8 Lambdas (Warburton, O'Reilly) cubre la sintaxis lambda introducida en Java 8 en apoyo de la programación funcional y de un código más conciso en general.
Modularidad de Java 9: Patterns and Practices for Developing Maintainable Applications de Sander Mak y Paul Bakker (O'Reilly) cubre los importantes cambios introducidos en el lenguaje en Java 9 para el sistema de módulos Java.
Java Virtual Machine de Jon Meyer y Troy Downing (O'Reilly) intrigará a la persona que quiera saber más sobre lo que hay bajo el capó. Este libro está agotado, pero se puede encontrar usado y en bibliotecas.
Una descripción definitiva (y monumental) de la programación de la GUI Swing esJava Swing de Robert Eckstein et al. (O'Reilly).
Java Network Programming yJava I/O, ambos de Elliotte Harold (O'Reilly), también son referencias útiles.
Para trabajar con bases de datos Java, se recomienda Database Programming with JDBC & Java, de George Reese (O'Reilly) y Pro JPA 2: Mastering the Java Persistence API, de Mike Keith y Merrick Schincariol (Apress). O mi próximavisión general de Java Database.
Aunque el libro que estás leyendo ahora no trata mucho de Java EE, me gustaría mencionar dos libros sobre ese tema:
-
Arun Gupta cubre la Edición Empresarial en Java EE 7 Essentials (O'Reilly).
-
El libro de Adam Bien, Real World Java EE Patterns: Repensar las buenas prácticas ofrece ideas útiles para diseñar e implantar una aplicación empresarial.
Puedes encontrar más información en el sitio web de O'Reilly.
Por último, aunque no es un libro, Oracle tiene una gran cantidad deinformación sobre Javaen la web. Esta página web solía presentar un gran diagrama que mostraba todos los componentes de Java en un "diagrama conceptual". En la Figura P-1 se muestra una primera versión del mismo; cada recuadro de color es un enlace en el que se puede hacer clic para acceder a detalles sobre esa tecnología concreta.
Para bien o para mal, las nuevas versiones de Java han sustituido esto por una página de texto; en Java 13 la página está en https://docs.oracle.com/en/java/javase/13.
Libros de programación general
El Arte de Programar Ordenadores de Donald E. Knuth (Addison-Wesley) ha sido fuente de inspiración para generaciones de estudiantes de informática desde su primera publicación en 1968. El Volumen 1 abarca los Algoritmos Fundamentales, el Volumen 2 es Algoritmos Seminuméricos, el Volumen 3 es Ordenación y Búsqueda, y el Volumen 4A es Algoritmos Combinatorios, Parte 1. Los volúmenes restantes de la serie proyectada no están terminados. Aunque sus ejemplos distan mucho de Java (inventó el hipotético lenguaje ensamblador MIX para sus ejemplos), muchas de sus discusiones sobre algoritmos -sobre cómo deben utilizarse los ordenadores para resolver problemas reales- son tan relevantes hoy como hace años.2
Aunque sus ejemplos de código son bastante anticuados ahora, el libro The Elements of Programming Style de Brian Kernighan y P. J. Plauger (McGraw-Hill) marcó el estilo (literalmente) para una generación de programadores con ejemplos de varios lenguajes de programación estructurados. Kernighan y Plauger también escribieron un par de libros, Software Tools (Addison-Wesley) y Software Tools in Pascal (Addison-Wesley), que mostraban tan buenos consejos sobre programación que yo solía aconsejar a todos los programadores que los leyeran. Sin embargo, estos tres libros ya están anticuados; muchas veces quise escribir un libro de continuación en un lenguaje más moderno. En su lugar, ahora me remito a La práctica de la programación, la continuación de Kernighan -escrita con Rob Pike (Addison-Wesley)- de la serieHerramientas de software. Este libro continúa la tradición de excelencia de los Bell Labs en libros de texto sobre software. En ediciones anteriores de este libro, incluso había adaptado un fragmento de código de su libro, su analizador CSV. Por último, Kernighan ha publicado recientemente UNIX: A History and a Memoir, su visión de la historia de Unix.
Véase también El programador pragmático, de Andrew Hunt y David Thomas (Addison-Wesley).
Libros de diseño
En Java Design (PTR-PH/Yourdon Press), de Peter Coad, se tratan las cuestiones del análisis y el diseño orientados a objetos específicamente para Java. Coad se muestra algo crítico con la implementación en Java del paradigma observable-observador y ofrece su propio sustituto.
Uno de los libros sobre diseño orientado a objetos más famosos de los últimos años es Patrones de diseño, de Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides (Addison-Wesley). A estos autores se les suele llamar colectivamente la "Banda de los Cuatro", por lo que a veces se hace referencia a su libro como el libro GoF. Uno de mis colegas lo llamó "el mejor libro sobre diseño orientado a objetos de la historia", y yo estoy de acuerdo; como mínimo, está entre los mejores.
Refactoring, de Martin Fowler (Addison-Wesley), abarca un montón de "limpiezas de código" que pueden aplicarse al código para mejorar su legibilidad y mantenimiento. Al igual que el libro GoF introdujo una nueva terminología que ayuda a los desarrolladores y a otras personas a comunicarse sobre cómo debe diseñarse el código, el libro de Fowler proporciona un vocabulario para debatir cómo debe mejorarse. Pero este libro puede ser menos útil que otros; muchas de las refactorizaciones aparecen ahora en el Menú Refactorización del IDE Eclipse (ver Receta 1.3).
Actualmente circulan dos importantes corrientes de teorías metodológicas. La primera se conoce colectivamente como métodos Ágiles, y sus miembros más conocidos son Scrum y Programación Extrema (XP). XP (la metodología, no ese sabor tan antiguo del sistema operativo de Microsoft) se presenta en una serie de pequeños textos breves y legibles dirigidos por su diseñador, Kent Beck. El primer libro de la serie XP es Extreme Programming Explained (Addison-Wesley). Una buena visión general de todos los métodos ágiles es Agile Software Development Ecosystems de Jim Highsmith (Addison-Wesley).
Otro grupo de libros importantes sobre metodología, que abarca el diseño orientado a objetos más tradicional, es la serie UML dirigida por "los Tres Amigos" (Booch, Jacobson y Rumbaugh). Sus principales obras son laGuía del Usuario UML , el Proceso UML y otros. Un libro más pequeño y accesible de la misma serie es Martin Fowler's UML Distilled.
Convenciones utilizadas en este libro
Este libro utiliza las siguientes convenciones.
Convenciones de programación
En este libro utilizo la siguiente terminología. Un programa es cualquier unidad de código que pueda ejecutarse: desde un programa principal de cinco líneas, hasta un servlet o componente de nivel web, un EJB o una aplicación GUI completa. Los applets eran programas Java para utilizar en un navegador web; fueron populares durante un tiempo, pero hoy apenas existen. Un servlet es un componente Java construido utilizando las API de Jakarta EE para utilizarlo en un servidor web, normalmente a través de HTTP. Los EJB son componentes de nivel de negocio construidos utilizando las API de Yakarta. Una aplicación es cualquier otro tipo de programa. Una aplicación de escritorio (también conocida como cliente) interactúa con el usuario. Un programa de servidor trata con un cliente indirectamente, normalmente a través de una conexión de red (actualmente suele ser HTTP/HTTPS).
Los ejemplos mostrados son de dos tipos. Los que comienzan con cero o más declaraciones import, un comentario javadoc y una declaración public class
son ejemplos completos. Los que comienzan con una declaración o una sentencia ejecutable, por supuesto, son extractos. Sin embargo, las versiones completas de estos extractos se han compilado y ejecutado, y la fuente en línea incluye las versiones completas.
Las recetas están numeradas por capítulo y número, así que, por ejemplo, la Receta 8.1 se refiere a la primera receta del Capítulo 8.
Convenciones tipográficas
En este libro se utilizan las siguientes convenciones tipográficas:
- Cursiva
-
Se utiliza para comandos, nombres de archivo y URL de ejemplo. También se utiliza para dar énfasis y para definir nuevos términos cuando aparecen por primera vez en el texto.
Constant width
-
Se utiliza en ejemplos de código para mostrar listados parciales o completos de programas en código fuente Java. También se utiliza para nombres de clases, nombres de métodos, nombres de variables y otros fragmentos de código Java.
Constant width bold
-
Se utiliza para las entradas del usuario, como los comandos que escribes en la línea de comandos.
Constant width italic
-
Muestra el texto que debe sustituirse por valores proporcionados por el usuario o por valores determinados por el contexto.
Consejo
Este elemento significa un consejo o sugerencia.
Nota
Este elemento significa una nota general.
Advertencia
Este icono indica una advertencia o precaución.
Ejemplos de códigos
Los ejemplos de código de este libro están en el GitHub del autor. La mayoría están en el repositoriojavasrc, pero algunos se han extraído de otro repositorio, darwinsys-api. Los detalles para descargarlos están en la Receta 1.6.
Muchos programas van acompañados de un ejemplo que los muestra en acción, ejecutados desde la línea de comandos. Suelen mostrar un prompt que termina en $
para Unix o en >
para Windows, dependiendo del ordenador que estuviera utilizando el día que escribí el ejemplo. Si hay texto antes de este carácter prompt, se puede ignorar. Puede ser una ruta o un nombre de host, de nuevo, dependiendo del sistema.
Estos ejemplos suelen mostrar también el nombre completo del paquete de la clase, porque Java lo exige al iniciar un programa desde la línea de comandos. Y como eso te recordará en qué subdirectorio del repositorio de fuentes debes encontrar el código fuente, no lo señalaré explícitamente muy a menudo.
Agradecemos la atribución, pero en general no la exigimos. Una atribución suele incluir el título, el autor, la editorial y el ISBN. Por ejemplo "Java Cookbook " de Ian F. Darwin (O'Reilly). Copyright 2020 RejmiNet Group, Inc., 978-1-492-07258-4".
Si crees que el uso que haces de los ejemplos de código no se ajusta al uso legítimo o al permiso concedido anteriormente, no dudes en ponerte en contacto con nosotros en permissions@oreilly.com.
Aprendizaje en línea O'Reilly
Nota
Durante más de 40 años, O'Reilly Media ha proporcionado formación tecnológica y empresarial, conocimientos y perspectivas para ayudar a las empresas a alcanzar el éxito.
Nuestra red única de expertos e innovadores comparten sus conocimientos y experiencia a través de libros, artículos, conferencias y nuestra plataforma de aprendizaje online. La plataforma de aprendizaje en línea de O'Reilly te ofrece acceso bajo demanda a cursos de formación en directo, rutas de aprendizaje en profundidad, entornos de codificación interactivos y una amplia colección de textos y vídeos de O'Reilly y de más de 200 editoriales. Para más información, visita http://oreilly.com.
Comentarios y preguntas
Como ya he dicho, he probado todo el código en al menos una de las plataformas de referencia, y la mayoría en varias. Aun así, puede haber dependencias de plataforma, o incluso errores, en mi código o en alguna implementación importante de Java. Por favor, notifica cualquier error que encuentres, así como tus sugerencias para futuras ediciones, escribiendo a:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Norte
- Sebastopol, CA 95472
- 800-998-9938 (en Estados Unidos o Canadá)
- 707-827-0515 (internacional o local)
- 707-829-0104 (fax)
Existe una página web para este libro en la que se recogen erratas, ejemplos y cualquier información adicional. Puedes acceder a ella en http://shop.oreilly.com/product/0636920304371.do.
Envía un correo electrónico a bookquestions@oreilly.com para comentar o hacer preguntas técnicas sobre este libro.
Para más información sobre nuestros libros, cursos, conferencias y noticias, consulta nuestro sitio web en http://www.oreilly.com.
Encuéntranos en LinkedIn: https://linkedin.com/company/oreilly-media
Míranos en YouTube: http://www.youtube.com/oreillymedia
El sitio de O'Reilly contiene una lista de erratas. También encontrarás el código fuente de todos los ejemplos de código Java para descargar; ¡no pierdas el tiempo escribiéndolos de nuevo! Para instrucciones específicas, consultala Receta 1.6.
Agradecimientos
En el epílogo de la primera edición escribí que "escribir este libro ha sido una experiencia humilde". Debería añadir que mantenerlo también lo ha sido. Aunque muchos se han deshecho en elogios -un crítico muy amable lo calificó de "posiblemente el mejor libro jamás escrito sobre el lenguaje de programación Java"-, yo me he sentido humilde ante la cantidad de errores y omisiones de las ediciones anteriores. Me he esforzado por corregirlos.
Mi vida ha sido tocada muchas veces por el flujo de los hados que me han puesto en contacto con la persona adecuada para enseñarme lo correcto en el momento adecuado. Steve Munro, con quien hace tiempo que perdí el contacto, me introdujo en el mundo de los ordenadores cuando íbamos a la misma clase en el instituto, en concreto en un IBM 360/30 del Consejo de Educación de Toronto que era más grande que una sala de estar, tenía 32 ó 64K (¡no M ni G!) de memoria, y tenía quizás la potencia de un PC/XT. El difunto Herb Kugel me tomó bajo su tutela en la Universidad de Toronto mientras aprendía sobre los grandes mainframes IBM que vinieron después. Terry Wood y Dennis Smith, de la Universidad de Toronto, me introdujeron en los mini y microordenadores antes de que existiera el PC de IBM. Por las tardes y los fines de semana, el Toronto Business Club de Toastmasters Internationaly la Canada SCUBA School de Al Lambert me permitieron desarrollar mi capacidad para hablar en público y enseñar. Varias personas de la Universidad de Toronto, pero sobre todo Geoffrey Collyer, me enseñaron las características y ventajas del sistema operativo Unix en un momento en que estaba preparado para aprenderlo.
Gracias a los muchos instructores y alumnos de Learning Tree que me mostraron formas de mejorar mis presentaciones. Sigo dando clases para "El Árbol" y recomiendo sus cursos a los desarrolladores ocupados que quieran centrarse en un tema en detalle durante cuatro días.
Más cerca de este proyecto, Tim O'Reilly creyó en mi "pequeño libro de Lint" cuando no era más que un capítulo de muestra de una obra propuesta más larga, lo que permitió mi entrada temprana en el enrarecido círculo de autores de O'Reilly. Años más tarde, Mike Loukides me animó a seguir intentando encontrar una idea de libro sobre Java con la que tanto él como yo pudiéramos trabajar. Y me apoyó cuando seguí retrasándome con los plazos. Mike también leyó todo el manuscrito e hizo muchos comentarios sensatos, algunos de los cuales bajaron los vuelos de la fantasía a la tierra. Jessamyn Read convirtió muchos borradores enviados por fax y correo electrónico de dudosa legibilidad en las ilustraciones de calidad que puedes ver en este libro. Y muchas, muchas otras personas con talento de O'Reilly ayudaron a dar a este libro la forma que ahora tienes.
Los ejemplos de código ahora se incluyen dinámicamente (para que las actualizaciones se hagan más rápido) en lugar de pegarlos. Mi hijo (y desarrollador de programación funcional) Benjamin Darwin ayudó a cumplir el plazo convirtiendo casi toda la base de código al mecanismo de "inclusión" más reciente de O'Reilly y resolviendo un par de otros problemas de presentación no relacionados con Java. También ayudó a que el Capítulo 9 fuera más claro y funcional.
En O'Reilly
Para esta cuarta edición del libro, Suzanne McQuade fue la supervisora editorial, y Corbin Collins el editor principal. Corbin fue especialmente meticuloso a la hora de revisar el manuscrito. Meghan Blanchette, Sarah Schneider, Adam Witwer, Melanie Yarbrough y las numerosas personas de producción que se enumeran en la página de Copyright contribuyeron a que la tercera edición estuviera lista para que la leyeras. Gracias a Mike Loukides, Deb Cameron y Marlowe Shaeffer por el trabajo editorial y de producción de la segunda edición.
Revisores técnicos
Para la cuarta edición tuve la suerte de contar con dos revisores técnicos muy minuciosos, Sander Mak y Daniel Hinojosa. Estos dos me llamaron la atención sobre muchas cuestiones que no había tenido en cuenta durante la revisión principal, lo que dio lugar a extensas reescrituras y cambios en las últimas semanas antes de que el equipo de producción de O'Reilly se hiciera cargo. ¡Muchas gracias a los dos!
Mi revisor para la tercera edición, Alex Stangl, leyó el manuscrito de la tercera edición y superó con creces su deber, haciendo innumerables sugerencias útiles, ¡incluso encontrando erratas que habían estado presentes en ediciones anteriores! Benjamin Darwin, Mark Finkov e Igor Savin hicieron sugerencias útiles sobre secciones concretas. A todos los que he olvidado mencionar, ¡os doy las gracias!
Bil Lewis y Mike Slinn hicieron útiles comentarios sobre varios borradores de la primera edición. Ron Hitchens y Marc Loy leyeron detenidamente todo el borrador final de la primera edición. Agradezco a Mike Loukides su aliento y apoyo durante todo el proceso. La editora Sue Miller ayudó a guiar el manuscrito a través de las fases finales de producción, un tanto enérgicas. Sarah Slocombe leyó el capítulo XML en su totalidad e hizo muchas sugerencias lúcidas; por desgracia, el tiempo no me permitió incluirlas todas en la primera edición.
Jonathan Knudsen, Andy Oram y David Flanagan comentaron el esquema del libro cuando era poco más que una lista de capítulos y recetas, y pudieron ver el tipo de libro en que podría convertirse y sugerir formas de mejorarlo.
Cada una de estas personas mejoró este libro de muchas maneras, sobre todo sugiriendo recetas adicionales o revisando las existentes. ¡Gracias a todos! Los fallos que quedan son míos.
Lectores
Mi más sincero agradecimiento a todos los lectores que encontraron erratas y sugirieron mejoras. Cada nueva edición es mejor gracias al esfuerzo de gente como tú, que se toma el tiempo y la molestia de informar de lo que hay que informar.
Mención especial merece uno de los traductores alemanes del libro,3 Gisbert Selke, que leyó la primera edición de principio a fin durante su traducción y aclaró mi inglés. Gisbert volvió a hacerlo para la segunda edición y aportó muchas refactorizaciones de código, que han hecho de éste un libro mucho mejor de lo que sería de otro modo. Yendo más allá del deber, Gisbert incluso contribuyó con una receta(Receta 18.5) y revisó algunas de las otras recetas del mismo capítulo. ¡Gracias, Gisbert!
La segunda edición también se benefició de los comentarios de Jim Burgess, que leyó grandes partes del libro. Recibí comentarios sobre capítulos concretos de Jonathan Fuerth, el difunto Kim Fowler, Marc Loy y Mike McCloskey. Mi mujer, Betty, y mis hijos, entonces adolescentes, también corrigieron varios capítulos.
Las siguientes personas contribuyeron con informes de errores significativos o sugirieron mejoras: Rex Bosma, Rod Buchanan, John Chamberlain, Keith Goldman, Gilles-Philippe Gregoire, B. S. Hughes, Jeff Johnston, Rob Konigsberg, Tom Murtagh, Jonathan O'Connor, Mark Petrovic, Steve Reisman, Bruce X. Smith y Patrick Wohlwend.
Etc.
Mi querida esposa, Betty Cerar, sigue sabiendo más sobre la bebida con cafeína que bebo mientras programo que sobre el lenguaje de programación que utilizo, pero su pasión por la expresión clara y la gramática correcta ha beneficiado mucho a mis escritos durante nuestra vida juntos.
Ningún libro sobre Java estaría completo sin una nota de agradecimiento a James Gosling por inventar Java (también inventó el primer Unix Emacs, la hoja de cálculo sc y el sistema de ventanas NeWS). Gracias también a su empleador Sun Microsystems (antes de que fuera absorbido por Oracle) por liberar no sólo el lenguaje Java, sino una increíble variedad de herramientas Java y bibliotecas API disponibles gratuitamente en Internet.
Willi Powell, de Apple Canadá, proporcionó acceso a macOS para la primera edición, en los primeros días de macOS.
A todos y cada uno de vosotros, mi más sincero agradecimiento.
Software de producción de libros
Utilicé diversas herramientas y sistemas operativos para preparar, compilar y probar este libro. Los desarrolladores de OpenBSD, "el sistema proactivamente seguro similar a Unix", merecen mi agradecimiento por haber creado un clon de Unix estable y seguro que, además, es más parecido al Unix tradicional que otros sistemas gratuitos. Utilicé el editor vi(vi en OpenBSD y vim en Windows) mientras introducía el manuscrito original en XML, y utilicé Adobe FrameMaker (una maravillosa herramienta de documentación basada en GUI que Adobe compró y posteriormente destruyó) para dar formato a los documentos. No sé si podré perdonar alguna vez a Adobe por destruir el que posiblemente era el mejor sistema de documentación del mundo y por hacer de Internet un lugar tan peligroso al mantener vivo el Flash infestado de errores mucho más allá de su siglo de vida útil. Lo que sí sé es que nunca volveré a utilizar un sistema de documentación de Adobe para nada.
Por este motivo, el Libro de recetas de Android de código abierto que yo edité no se preparó con FrameMaker, sino con XML DocBook (generado a partir del marcado wiki en un sitio web con tecnología Java que escribí con este fin) y una serie de herramientas personalizadas proporcionadas por el grupo de herramientas de O'Reilly.
Las ediciones tercera y cuarta de este Libro de cocina Java se formatearon enAsciidoctory cobraron vida en la cadena de herramientas de publicación del Atlas de O'Reilly.
1 Para conocer las peculiaridades, consulta los librosJava Puzzlers de Joshua Bloch y Neal Gafter (Addison-Wesley).
2 Con posibles excepciones para las decisiones sobre algoritmos que son menos relevantes hoy en día, dados los cambios masivos en la potencia de cálculo ahora disponible.
3 Las ediciones anteriores están o han estado disponibles en inglés, alemán, francés, polaco, ruso, coreano, chino tradicional y chino simplificado. Mi agradecimiento a todos los traductores por sus esfuerzos para que el libro llegue a un público más amplio.
Get Libro de cocina de Java, 4ª edición now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.