Think Java 2nd Ed.
El objetivo de este libro es enseñarte a pensar como un informático.Esta forma de pensar combina algunas de las mejores características de las matemáticas, la ingeniería y las ciencias naturales.Al igual que los matemáticos, los científicos de la computación usan lenguajes formales para denotar ideas, específicamente, cálculos.Al igual que los ingenieros, diseñan cosas, ensamblan componentes en sistemas y evalúan compensaciones entre alternativas.Y al igual que los científicos, observan el comportamiento de sistemas complejos, forman hipótesis y prueban predicciones.
Una habilidad importante para un informático es el problema solving.It implica la capacidad de formular problemas, pensar creativamente en soluciones y expresar soluciones de manera clara y accurately.As resulta que el proceso de aprender a programar computadoras es una excelente oportunidad para desarrollar habilidades para resolver problemas.En un nivel, aprenderás a escribir programas Java, una habilidad útil por sí misma.Pero en otro nivel, usarás la programación como un medio para end.As si seguimos, ese fin se hará más claro.
1.1 ¿Qué es un Ordenador?
Cuando las personas escuchan la palabra computadora, a menudo piensan en una computadora de escritorio o una computadora portátil.No es sorprendente que la búsqueda de “computadora” en Imágenes de Google (https://images.google.com/) muestre filas y filas de este tipo de máquinas.Sin embargo, en un sentido más general, una computadora puede ser cualquier tipo de dispositivo que almacena y procesa datos.
Dictionary.com define una computadora como ” un dispositivo electrónico programable diseñado para aceptar datos, realizar operaciones matemáticas y lógicas prescritas a alta velocidad y mostrar los resultados de estas operaciones.Los mainframes, las computadoras de escritorio y portátiles, las tabletas y los teléfonos inteligentes son algunos de los diferentes tipos de computadoras.”
Cada tipo de computadora tiene su propio diseño único, pero internamente todos comparten el mismo tipo de hardware.Los dos componentes de hardware más importantes son los procesadores (o CPU) que realizan cálculos simples y la memoria (o RAM) que almacena información temporalmente.La Figura 1.1 muestra el aspecto de estos componentes.
Figura 1.1: Ejemplo de hardware de procesador y memoria.
Los usuarios generalmente ven e interactúan con pantallas táctiles, teclados y monitores, pero son los procesadores y la memoria los que realizan el cálculo real.Hoy en día, es bastante estándar, incluso para un teléfono inteligente, tener al menos ocho procesadores y cuatro gigabytes (cuatro mil millones de células) de memoria.
1.2 ¿Qué Es La Programación?
Un programa es una secuencia de instrucciones que especifica cómo realizar un cálculo en el hardware de la computadora.El cálculo podría ser algo matemático, como resolver un sistema de ecuaciones o encontrar las raíces de un polinomio.También podría ser un cálculo simbólico, como buscar y reemplazar texto en un documento o (curiosamente) compilar un programa.
Los detalles se ven diferentes en diferentes idiomas, pero algunas instrucciones básicas aparecen en casi todos los idiomas:
entrada: Obtenga datos del teclado, un archivo, un sensor u otro dispositivo. salida: Muestra datos en la pantalla o envía datos a un archivo u otro dispositivo. matemáticas: Realiza operaciones matemáticas básicas como suma y división. decisión: Verifique ciertas condiciones y ejecute el código apropiado. repetición: Realice una acción repetidamente, generalmente con alguna variación.
Lo creas o no, eso es casi todo lo que hay que hacer.Cada programa que haya utilizado, sin importar lo complicado que sea, se compone de pequeñas instrucciones que se parecen mucho a these.So puede pensar en la programación como el proceso de dividir una tarea grande y compleja en subtareas cada vez más pequeñas.El proceso continúa hasta que las subtareas son lo suficientemente simples como para ser realizadas con los circuitos electrónicos proporcionados por el hardware.
1.3 El Programa Hello World
Tradicionalmente, el primer programa que escribes al aprender un nuevo lenguaje de programación se llama programa “Hello World”.Todo lo que hace es emitir las palabras ¡Hola, Mundo! a la screen.In Java, se ve así:
Cuando se ejecuta este programa, muestra lo siguiente:
¡Hola, Mundo!
Observe que la salida no incluye las comillas.
Los programas Java se componen de definiciones de clase y método, y los métodos se componen de sentencias.Una instrucción es una línea de código que realiza una acción básica.En el programa Hello World, esta línea es una instrucción de impresión que muestra un mensaje al usuario:
Sistema.fuera.println (“Hello, World!”);
System.out.println
muestra los resultados en la pantalla; el nombre println
significa “línea de impresión”.De forma confusa, imprimir puede significar tanto “mostrar en la pantalla “como” enviar a la impresora”. En este libro, trataremos de decir” mostrar ” cuando nos referimos a la salida a la pantalla.Como la mayoría de las instrucciones, la instrucción print termina con un punto y coma (;
).
Java distingue entre mayúsculas y minúsculas, lo que significa que las mayúsculas y las minúsculas no son lo mismo.En el programa Hola Mundo, System
tiene que comenzar con una letra mayúscula; system
y SYSTEM
no funcionarán.
Un método es una secuencia de instrucciones con nombre.Este programa define un método llamado main
:
principal vacío estático público (Argumentos de cadena)
El nombre y formato de main
es especial: cuando se ejecuta el programa, comienza en la primera instrucción en main
y termina cuando termina la última instrucción.Más adelante, verá programas que definen más de un método.
Este programa define una clase llamada Hello
.Por ahora, una clase es una colección de métodos; tendremos más que decir sobre esto más tarde.Puedes darle a una clase el nombre que quieras, pero es convencional comenzar con una letra mayúscula.El nombre de la clase debe coincidir con el nombre del archivo en el que se encuentra, por lo que esta clase debe estar en un archivo llamado Hello.Java.
Java utiliza llaves ({
y }
) para agrupar cosas together.In Hola.java, las llaves externas contienen la definición de clase, y las llaves internas contienen la definición de método.
La línea que comienza con dos barras (//
) es un comentario, que es un poco de texto en inglés que explica el código.Cuando Java ve //
, ignora todo desde allí hasta el final de la línea.Los comentarios no tienen ningún efecto en la ejecución del programa, pero hacen que sea más fácil para otros programadores (y para tu futuro yo) entender lo que querías hacer.
1.4 Compilación de programas Java
El lenguaje de programación que aprenderás en este libro es Java, que es un lenguaje de alto nivel.Otros lenguajes de alto nivel de los que puede haber oído hablar incluyen Python, C y C++, PHP, Ruby y JavaScript.
Antes de que puedan ejecutarse, los programas en idiomas de alto nivel deben traducirse a un idioma de bajo nivel, también llamado “lenguaje de máquina”.Esta traducción lleva algún tiempo, lo cual es una pequeña desventaja de los idiomas de alto nivel.Pero los idiomas de alto nivel tienen dos ventajas principales:
- Es mucho más fácil programar en un idioma de alto nivel.Los programas tardan menos tiempo en escribir, son más cortos y fáciles de leer, y es más probable que sean correctos.
- Los lenguajes de alto nivel son portátiles, lo que significa que pueden ejecutarse en diferentes tipos de computadoras con pocas o ninguna modificación.Los programas de bajo nivel solo pueden ejecutarse en un tipo de computadora.
Dos tipos de programas traducen idiomas de alto nivel a idiomas de bajo nivel: intérpretes y compilers.An el intérprete lee un programa de alto nivel y lo ejecuta, lo que significa que hace lo que el programa says.It procesa el programa poco a poco, leyendo alternativamente líneas y realizando cálculos.La Figura 1.2 muestra la estructura de un intérprete.
Figura 1.2: Cómo se ejecutan los lenguajes interpretados.
En contraste, un compilador lee todo el programa y lo traduce completamente antes de que el programa comience a ejecutarse.El programa de alto nivel se llama código fuente.El programa traducido se llama código objeto o ejecutable.Una vez que se compila un programa, puede ejecutarlo repetidamente sin necesidad de traducir el código fuente code.As como resultado, los programas compilados a menudo se ejecutan más rápido que los programas interpretados.
Tenga en cuenta que el código objeto, como lenguaje de bajo nivel, no es portátil.No puede ejecutar un ejecutable compilado para una computadora portátil con Windows en un teléfono Android, para example.To ejecutar un programa en diferentes tipos de máquinas, debe compilarse de forma múltiple times.It puede ser difícil escribir código fuente que compile y se ejecute correctamente en diferentes tipos de máquinas.
Para solucionar este problema, Java se compila e interpreta.En lugar de traducir el código fuente directamente a un ejecutable, el compilador Java genera código para una máquina virtual.Esta máquina “imaginaria” tiene la funcionalidad común a computadoras de escritorio, computadoras portátiles, tabletas, teléfonos, etc.Su lenguaje, llamado código de bytes Java, se parece al código objeto y es fácil y rápido de interpretar.
Como resultado, es posible compilar un programa Java en una máquina, transferir el código de bytes a otra máquina y ejecutar el código de bytes en esa otra máquina.La figura 1.3 muestra los pasos del proceso de desarrollo.El compilador Java es un programa llamado javac.It traduce .archivos java en .archivos de clase que almacenan el código de bytes resultante.El intérprete de Java es otro programa, llamado java, que es la abreviatura de” Máquina Virtual Java ” (JVM).
Figura 1.3: El proceso de compilar y ejecutar un programa Java.
El programador escribe el código fuente en el archivo Hola.java y utiliza javac para compilarlo.Si no hay errores, el compilador guarda el código de bytes en el archivo Hello.class.To ejecute el programa, el programador utiliza java para interpretar el código de bytes.El resultado del programa se muestra en la pantalla.
Aunque parezca complicado, estos pasos se automatizan para usted en la mayoría de los entornos de desarrollo.Por lo general, solo tiene que pulsar un botón o escribir un solo comando para compilar e interpretar su programa.Por otro lado, es importante saber qué pasos están sucediendo en segundo plano, para que si algo sale mal, pueda averiguar qué es.
1.5 Mostrando dos mensajes
Puede poner tantas instrucciones como desee en el método main
.Por ejemplo, para mostrar más de una línea de salida:
Como también se muestra en este ejemplo, puede poner comentarios al final de una línea, así como en líneas por sí mismos.
Las frases que aparecen entre comillas se denominan cadenas, porque contienen una secuencia de caracteres encadenados en la memoria.Los caracteres pueden ser letras, números,signos de puntuación, símbolos, espacios, pestañas, etc.
System.out.println
añade un carácter especial, llamado nueva línea, que se mueve al principio de la siguiente línea.Si no quieres una nueva línea al final, puedes usar print
en lugar de println
:
En este ejemplo, la primera instrucción no agrega una nueva línea, por lo que la salida aparece en una sola línea:
Adiós, mundo cruel
Aviso de que hay un espacio al final de la primera cadena, que aparece en la salida justo antes de la palabra cruel.
1.6 Formatear el código fuente
En el código fuente Java, se requieren algunos espacios.Por ejemplo, necesita al menos un espacio entre palabras, por lo que este programa no es legal:
publicclassGoodbye{ publicstaticvoidmain (String args) { Sistema.fuera.print (“Adiós”); Sistema.fuera.println (“mundo cruel”); }}
Pero la mayoría de los otros espacios son opcionales.Por ejemplo, este programa es legal:
Las nuevas líneas son opcionales, too.So podríamos escribir esto:
Todavía funciona, pero el programa es cada vez más difícil de leer.Las nuevas líneas y los espacios son importantes para organizar visualmente su programa, lo que facilita la comprensión del programa y la detección de errores cuando ocurren.
Muchos editores formatearán automáticamente el código fuente con sangrías y saltos de línea consistentes.Por ejemplo, en DrJava (ver Apéndice A. 1) puede sangrar su código seleccionando todo el texto (Ctrl+A) y presionando la tecla Tab.
Las organizaciones que desarrollan mucho software suelen tener directrices estrictas sobre cómo formatear el código fuente.Por ejemplo, Google publica sus estándares de codificación Java para su uso en proyectos de código abierto: https://google.github.io/styleguide/javaguide.html.
Probablemente no entienda estas pautas ahora, porque se refieren a funciones de idioma que aún no ha visto.Pero es posible que desee referirse a ellos periódicamente mientras lee este libro.
1.7 Usando secuencias de escape
Es posible mostrar varias líneas de salida con una sola línea de código.Solo tienes que decirle a Java dónde poner los saltos de línea:
La salida es de dos líneas, cada una de las cuales termina con un carácter de nueva línea:
¡Hola!¿Qué tal?
Cada \n
es una secuencia de escape, o dos caracteres de código fuente que representan un solo carácter.(La barra invertida le permite escapar de la cadena para escribir caracteres especiales.) Observe que no hay espacio entre \n
y How
.Si agregas un espacio allí, habrá un espacio al principio de la segunda línea.
\n
newline \t
ficha \"
doble cita \
barra diagonal inversa Tabla 1.1: secuencias de escape Comunes
Java dispone de un total de ocho secuencias de escape, y los cuatro más comúnmente usados se muestran en la Tabla 1.1.Por ejemplo, para escribir comillas dentro de cadenas, debe escaparlas con una barra invertida:
Sistema.fuera.println(“She said \”Hello!para mí.”);
el resultado es El siguiente:
Ella dijo: “Hola!”para mí.
1.8 ¿Qué Es La Informática?
Este libro omite intencionalmente algunos detalles sobre el lenguaje Java (como las otras secuencias de escape), porque nuestro objetivo principal es enseñarle a pensar como un científico de la computación.Ser capaz de entender la computación es mucho más valioso que simplemente aprender a escribir código.
Si está interesado en aprender más sobre Java, Oracle mantiene un conjunto oficial de tutoriales en su sitio web (https://thinkjava.org/tutorial).El tutorial “Fundamentos del lenguaje”, que se encuentra en” Aprender el lenguaje Java”, es un buen lugar para comenzar.
Uno de los aspectos más interesantes de escribir programas es decidir cómo resolver un problema en particular, especialmente cuando hay múltiples soluciones.Por ejemplo, hay numerosas formas de ordenar una lista de números, y cada forma tiene su advantages.In para determinar qué camino es el mejor para una situación dada, necesitamos técnicas para describir y analizar soluciones formalmente.
Un algoritmo es una secuencia de pasos que especifica cómo resolver un problema.Algunos algoritmos son más rápidos que otros, y algunos usan menos espacio en la memoria de la computadora.La informática es la ciencia de los algoritmos, incluyendo su descubrimiento y analysis.As aprendes a desarrollar algoritmos para problemas que no has resuelto antes, aprenderás a pensar como un informático.
Diseñar algoritmos y escribir código es difícil y propenso a errores.Por razones históricas, los errores de programación se llaman bugs, y el proceso de rastrearlos y corregirlos se llama debugging.As aprendes a depurar tus programas, desarrollarás nuevas habilidades para resolver problemas.Tendrá que pensar de manera creativa cuando ocurran errores inesperados.
Aunque puede ser frustrante, la depuración es una parte intelectualmente rica, desafiante e interesante de la computadora science.In de alguna manera, la depuración es como el trabajo de detective.Te enfrentas a pistas, y tienes que inferir los procesos y eventos que llevaron a los resultados que ves.Pensar en cómo corregir programas y mejorar su rendimiento a veces incluso conduce al descubrimiento de nuevos algoritmos.
1.9 Programas de depuración
Es una buena idea leer este libro frente a una computadora para que pueda probar los ejemplos a medida que avanza.Puede ejecutar muchos de los ejemplos directamente en el panel de interacciones de DrJava (consulte el Apéndice A. 2).Pero si pones el código en un archivo fuente, será más fácil probar variaciones.
Siempre que esté experimentando con una nueva función, también debe intentar cometer errores.Por ejemplo, en el programa Hola Mundo, ¿qué sucede si omites una de las comillas?¿Y si omites las dos cosas?¿Qué pasa si escribes println
mal?Este tipo de experimentos te ayudan a recordar lo que lees.También ayudan con la depuración, porque se aprende lo que los mensajes de error mean.It es mejor cometer errores ahora y a propósito que más tarde y accidentalmente.
La depuración es como una ciencia experimental: una vez que tiene una idea de lo que está saliendo mal, modifica su programa y vuelve a intentarlo.Si su hipótesis era correcta, entonces puede predecir el resultado de la modificación y dar un paso más cerca de un programa de trabajo.Si tu hipótesis estaba equivocada, tienes que inventar una nueva.
La programación y la depuración deben ir de la mano.No solo escriba un montón de código y luego realice la depuración de prueba y error hasta que todo funcione.En su lugar, comience con un programa que haga algo y haga pequeñas modificaciones, depurándolas a medida que avanza, hasta que el programa haga lo que desea.De esta manera, siempre tendrá un programa de trabajo, y aislar errores será más fácil.
Un gran ejemplo de este principio es el sistema operativo Linux, que contiene millones de líneas de code.It comenzó como un programa simple que Linus Torvalds utilizó para explorar el chip Intel 80386.De acuerdo con Larry Greenfield en La Guía de Usuarios de Linux, ” Uno de los proyectos anteriores de Linus era un programa que cambiaría entre imprimir AAAA y BBBB.Esto más tarde evolucionó a Linux.”
Finalmente, la programación a veces saca emociones fuertes.Si estás luchando con un bicho difícil, es posible que te sientas enojado, abatido o avergonzado.Recuerda que no estás solo, y prácticamente todos los programadores han tenido experiencias similares.¡No dude en comunicarse con un amigo y hacer preguntas!
1.10 Vocabulario
A lo largo del libro, tratamos de definir cada término la primera vez que lo usamos it.At al final de cada capítulo, incluimos los nuevos términos y sus definiciones en orden de aparición.Si dedicas algún tiempo a aprender este vocabulario, te resultará más fácil leer los siguientes capítulos.
solución de problemas: El proceso de formular un problema, encontrar una solución y expresar la solución. hardware: Los componentes electrónicos y mecánicos de una computadora, como CPU, RAM y discos duros. procesador: Un chip de computadora que realiza instrucciones simples como aritmética y lógica básicas. memoria: Circuitos que almacenan datos mientras el ordenador esté encendido.No debe confundirse con dispositivos de almacenamiento permanente como discos duros y flash. programa: Una secuencia de instrucciones que especifica cómo realizar tareas en un equipo.También conocido como “software”. programación: La aplicación de la resolución de problemas para crear programas informáticos ejecutables. sentencia: Parte de un programa que especifica un paso de un algoritmo. instrucción print: Una instrucción que hace que la salida se muestre en la pantalla. método: Una secuencia de sentencias con nombre. clase: Por ahora, una colección de métodos relacionados.(Verás más adelante que hay mucho más. comentario: Parte de un programa que contiene información sobre el programa, pero que no tiene efecto cuando se ejecuta el programa. lenguaje de alto nivel: Un lenguaje de programación diseñado para ser fácil de leer y escribir para los humanos. lenguaje de bajo nivel: Un lenguaje de programación que está diseñado para ser fácil de ejecutar para una computadora.También se llama “lenguaje de máquina”. portable: La capacidad de un programa para ejecutarse en más de un tipo de ordenador. interpretar: Ejecutar un programa en un idioma de alto nivel traduciéndolo una línea a la vez y ejecutando inmediatamente las instrucciones correspondientes. compilar: Para traducir un programa en un lenguaje de alto nivel a un lenguaje de bajo nivel, todo a la vez, en preparación para su ejecución posterior. código fuente: Un programa en un lenguaje de alto nivel, antes de ser compilado. código objeto: La salida del compilador, después de traducir el programa. ejecutable: Otro nombre para el código objeto que está listo para ejecutarse en un hardware específico. máquina virtual: Una emulación de una máquina real. La JVM permite que un equipo ejecute programas Java. código de bytes: Un tipo especial de código objeto utilizado para programas Java.El código de bytes es similar al código objeto, pero es portátil como un lenguaje de alto nivel. cadena: Una secuencia de caracteres; el tipo de datos principal para el texto. nueva línea: Un carácter especial que significa el final de una línea de texto.También conocido como” final de línea”,” fin de línea “(EOL), o”salto de línea”. secuencia de escape: Una secuencia de código que representa un carácter especial cuando se usa dentro de una cadena. algoritmo: Un procedimiento o fórmula para resolver un problema, con o sin computadora. informática: El enfoque científico y práctico de la computación y sus aplicaciones. bug: Un error en un programa. depuración: El proceso de encontrar y eliminar errores.
1.11 Ejercicios
Al final de cada capítulo, incluimos ejercicios que puedes hacer con las cosas que has aprendido.Le animamos a que al menos intente cada problema.No puedes aprender a programar solo leyendo sobre ello; tienes que practicar.
Antes de poder compilar y ejecutar programas Java, es posible que tenga que descargar e instalar algunas herramientas.Hay muchas buenas opciones, pero recomendamos DrJava, que es un “entorno de desarrollo integrado” (IDE) muy adecuado para principiantes.Las instrucciones para comenzar están en el Apéndice A.
El código de este capítulo está en el directorio ch01 de ThinkJavaCode2.Consulte la página ?? para obtener instrucciones sobre cómo descargar el repositorio.Antes de comenzar los ejercicios, le recomendamos que compile y ejecute los ejemplos.
Los científicos informáticos tienen el molesto hábito de usar palabras comunes en inglés para significar algo que no sea su significado común en inglés.Por ejemplo, en inglés, las declaraciones y los comentarios son lo mismo, pero en los programas son diferentes.
- En la jerga informática, ¿cuál es la diferencia entre una declaración y un comentario?
- ¿Qué significa decir que un programa es portable?
- En inglés común, ¿qué significa la palabra compilar?
- ¿Qué es un ejecutable? ¿Por qué se usa esa palabra como sustantivo?
La sección de vocabulario al final de cada capítulo está destinada a resaltar palabras y frases que tienen significados especiales en ciencias de la computación.Cuando veas palabras familiares, ¡no asumas que sabes lo que significan!
Antes de hacer cualquier otra cosa, descubra cómo compilar y ejecutar un programa Java.Algunos entornos ofrecen programas de muestra similares al ejemplo de la sección 1.3.
- Escriba el programa Hello World; luego compile y ejecútelo.
- Agregue una instrucción print que muestre un segundo mensaje después de Hello, World!.Di algo ingenioso como, ¿Cómo estás?.Compilar y ejecutar el programa de nuevo.
- Agregue un comentario al programa (en cualquier lugar), recompile y vuelva a ejecutarlo.El nuevo comentario no debe afectar al resultado.
Este ejercicio puede parecer trivial, pero es el punto de partida para muchos de los programas que trabajaremos with.To depurar con confianza, necesitará tener confianza en su entorno de programación.
En algunos entornos, es fácil perder la pista de qué programa se está ejecutando.Es posible que intente depurar un programa mientras ejecuta otro accidentalmente.Agregar (y cambiar) instrucciones de impresión es una forma sencilla de asegurarse de que el programa que está viendo es el programa que está ejecutando.
Es una buena idea cometer tantos errores como se te ocurra, para que veas qué mensajes de error produce el compilador.A veces el compilador te dice exactamente lo que está mal, y todo lo que tienes que hacer es arreglarlo.Pero a veces los mensajes de error son engañosos.Con el tiempo, desarrollará un sentido de cuándo puede confiar en el compilador y cuándo tiene que resolver las cosas usted mismo.
Comenzando con el programa Hello World, pruebe cada uno de los siguientes errores.Después de realizar cada cambio, compile el programa, lea el mensaje de error (si hay uno) y luego corrija el error.
- Retire uno de los soportes rizados de apertura.
- Retire uno de los tirantes rizados de cierre.
- En lugar de
main
, escribamian
. - Elimine la palabra
static
. - Elimine la palabra
public
. - Elimine la palabra
System
. - Sustitúyase
println
porPrintln
. - Sustitúyase
println
porprint
. - Eliminar un paréntesis.
- Agregue un paréntesis adicional.