Download Escritura de Programas Java - Área de Computación FISMAT

Document related concepts
no text concepts found
Transcript
Escritura de Programas Java
H. Tejeda
Noviembre 2016
Índice
1. Terminologı́a básica de programación
1
2. Programación procedural vs orientada al objeto
3
3. Caracterı́sticas del lenguaje Java
6
4. Aplicación de consola para salida a pantalla
7
5. Compilación y depuración
12
6. Ejecución y depuración
13
7. Comentarios
15
8. Aplicación GUI
16
9. Ayuda
17
1.
Terminologı́a básica de programación
Un programa de computadora es un conjunto de instrucciones que se escriben para
indicar a la computadora que hacer. El hardware es la parte tangible de un equipo computacional, tales como la memoria, el disco, o el procesador, y los programas son el software.
1
Un software de aplicación es aquel que realiza una tarea para el usuario, como el cálculo
de una nómina, procesamiento de palabras, o un juego. Un software del sistema es un
programa que ayuda a manipular la computadora, como Windows, o Linux. La lógica usada
en cualquier software determina el orden exacto de las instrucciones requeridas para producir
los resultados deseados.
Todos los programas de computadora deben ser convertidos a lenguaje de máquina. El lenguaje de máquina, o código de máquina, es el conjunto de instrucciones que una computadora puede ejecutar. Cada tipo de procesador tiene su propio conjunto de instrucciones
de lenguaje de máquina. Las instrucciones y datos están formadas por secuencias de ceros y
unos.
El lenguaje de máquina es un lenguaje de programación de bajo nivel, o uno que
corresponde cercanamente a la circuiterı́a del procesador. Los lenguajes de bajo nivel usan
las direcciones de memoria para máquinas especı́ficas cuando se usan comandos, por lo que
los lenguajes de bajo nivel son dı́ficles de usar y deben adaptarse con cada tipo de máquina
en el cual el programa se ejecute.
La programación ha evolucionado en una tarea más fácil gracias al desarrollo de los lenguajes
de programación de alto nivel. Un lenguaje de programación de alto nivel permite
usar un vocabulario de palabras adecuadas, como read, write, o add, en vez de secuencias
numéricas. Los lenguajes de alto nivel también permiten asignar nombres intuitivos, de
una palabra, a localidades de la memoria de la computadora, tales como horasTrabajadas
o tarifa, en vez de tener que recordar localidades de memoria. Java es un lenguaje de
programación de alto nivel.
Cada lenguaje de alto nivel posee su propia sintaxis, o reglas del lenguaje. Todos los lenguajes tienen un vocabulario limitado y especı́fico, las palabras reservadas (keywords) del
lenguaje, y un conjunto especı́fico de reglas para usar el vocabulario. Cuando se aprende un
lenguaje de programación se aprende su vocabulario y sus reglas de sintaxis.
Cuando se usa un lenguaje de programación, los programadores escriben una serie de sentencias de programación para realizar las tareas que quieren que el programa haga. Las
sentencias de programación son también conocidas como comandos porque son órdenes a
la computadora, tales como “muestra esta palabra” o “agrega estos dos números”.
Después que las sentencias del programa son escritas por los programadores en un lenguaje
de alto nivel, se usa un programa de computadora llamado compilador o intérprete para
traducir las sentencias en lenguaje de máquina. Un compilador traduce un programa entero
antes de ejecutar la sentencia, mientras un intérprete traduce una sentencia del programa a
la vez, y la ejecuta tan pronto como es traducida. Java usa un compilador para traducir las
sentencias del programa y un intérprete para leer el código compilado lı́nea por lı́nea cuando
el programa se ejecuta.
Los compiladores e intérpretes lanzan uno o más mensajes de error cada vez que encuentra una sentencia de programa no válida, es decir, una sentencia que contiene un error de
sintaxis. El programador puede corregir el error e intentar otra traducción por compilación
2
o interpretación del programa otra vez. Localizar y reparar todos los errores es la primera
parte del proceso de depuración del programa.
2.
Programación procedural vs orientada al objeto
Hay varias aproximaciones para escribir programas de cómputo, dos de las más populares
son la programación procedural y la orientada al objeto.
2.1.
Programación procedural
La programación procedural es un estilo de programación en las cuales las operaciones
son ejecutadas una después de otra en secuencia. En las aplicaciones procedurales, se crean
nombres para localidades de memoria que pueden guardar valores, como números o texto,
en forma electrónica. Estas localidades son llamadas variables porque guardan valores que
podrı́an cambiar. Las operaciones individuales usadas en un programa de cómputo, por
conveniencia, son agrupadas en unidades lógicas llamadas procedimientos, como una serie
de comparaciones y cálculos que pueden servir para determinar el impuesto que se debe
pagar. Un programa procedural define las localidades de memoria variable y luego llama
una serie de procedimientos para la entrada, manipulación, y la salida de valores guardados
en estas localidades. Cuando un programa llama un procedimiento, la lógica en uso es
abandonada temporalmente para que los comandos del procedimiento se puedan ejecutar. Un
solo programa procedural podrı́a tener cientos de variables y llamadas a procedimientos. Los
procedimientos también son llamados módulos, funciones, y subrutinas, lo cual dependerá del
lenguaje de programación, siendo en Java el término método el más usado.
2.2.
Programación orientada al objeto
La programación orientada al objeto es una extensión o refinamiento de la programación
procedural, en la cual se tiene una aproximación diferente para escribir programas computacionales. Los programas orientados al objeto involucran la creación de clases, los cuales
son planos para objetos; creación de objetos de esas clases; y la creación de aplicaciones que
usen esos objetos. Después de crear clases, estas pueden ser reusadas para desarrollar nuevas clases o programas. En este paradigma, o modelo, involucra ver los componentes del
programa como objetos que pertenecen a clases que son similares a objetos concretos en el
mundo real; luego, se pueden manipular los objetos y tenerlos interrelacionados entre ellos
para lograr el resultado deseado.
Originalmente, el uso más frecuente de la programación orientada al objeto fue para dos
tipos principales de aplicaciones:
simulaciones de computadora, las cuales intentan imitar actividades del mundo
3
real para poder mejorar sus procesos o para que los usuarios puedan entender mejor
como los procesos del mundo real trabajan.
interfaces gráficas de usuario o las GUI (graphical user interface), las cuales permiten a los usuarios interactuar con un programa en un ambiente gráfico.
La programación orientada al objeto requiere entender tres conceptos básicos:
Encapsulamiento
Herencia
Polimorfismo
2.3.
Clases, objetos, y encapsulamiento
En la programación orientada al objeto, una clase es un término que describe un grupo
o colección de objetos con propiedades comunes. La definición de clase existe antes que
cualquier objeto sea creda de esta, de manera análoga a como un plano existe antes que
cualquier casa sea construida. Una definición de clase describe que atributos sus objetos
tendrá y podrán hacer estos objetos. Los atributos son las caracterı́sticas que definen un
objeto; estas son propiedades del objeto. En Java se tienen dos tipos de clases: aquellas que
ya han sido desarrolladas por los creadores del lenguaje y las clases personalizadas propias
nuevas.
Un objeto es una instancia concreta, especı́fica de una clase. Cuando se crea un objeto, se
instancia una clase. Se pueden crear objetos de clases que se hayan escrito y de clases escritas
por otros programadores, incluyendo la de los creadores de Java. Los valores contenidos en
las propiedades de un objeto frecuentemente diferencian instancias de la misma clase de
alguna otra. Por ejemplo, la clase Automóvil describe que objetos Automóvil son. Algunas
propiedades de la clase son la marca, modelo, año, color, número de serie. Cada Automóvil
tiene los mismos atributos pero no, por supuesto, los mismos valores para estos atributos. Los
valores de las propiedades de un objeto son también referidas como el estado del objeto.
Se podrı́a ver a los objetos como similares a sujetos, y sus atributos como equivalentes a
adjetivos que describen los sujetos.
Cuando se entiende la clase de un objeto, se entienden las caracterı́sticas del objeto. Si
alguien compra un Automóvil, se sabe que este tiene una marca. Sabiendo que atributos
existen para las clases, se permiten solo preguntas acerca de los estados o valores de esos
atributos. Por ejemplo, se podrı́a preguntar cuantos kilómetros el auto recorre por litro, pero
no se podrı́a preguntar cuantos viajes ha realizado el auto. En un sistema operativo GUI hay
varios componentes como ventanas y botones, ¿cuáles son algunos de los atributos de estos
componentes y qué comportamientos tienen?
4
Las clases además de definir propiedades, también definen métodos que los objetos pueden
usar. Un método es un bloque autocontenido de código de programa que realiza alguna
acción, parecido a un procedimiento en un programa procedural. Por ejemplo, un Automóvil
podrı́a tener métodos para moverse hacia adelante, hacia atrás, ser llenado con gasolina, o
lavado. Algunos métodos pueden modificar ciertos atributos, como la velocidad actual de
un Automóvil y el estado de su tanque de gasolina. De manera análoga, si los objetos son
sujetos, entonces los métodos son similares a verbos. ¿En un sistema operativo GUI que
acciones se podrı́an aplicar a los componentes.
En las clases orientadas al objeto, los atributos y métodos son encapsulados en objetos que
luego son usados en forma similar como los objetos de la vida real. El encapsulamiento se
refiere a dos nociones orientadas al objeto cercanamente relacionadas:
el encapsulamiento es el encierro de datos y métodos dentro de un objeto. El encapsulamiento permite tratar todos los datos y métodos como una sola entidad.
el encapsulamiento también se refiere al ocultamiento de datos y métodos del exterior.
Ocultamiento de datos es también llamada a veces ocultamiento de información, y el
ocultamiento de como los métodos trabajan es ocultamiento de implementación. El
encapsulamiento permite esconder métodos y atributos especı́ficos de fuentes externas
y da la segurida que mantiene métodos y datos seguros de cambios inadvertidos.
Si los métodos de un objeto están bien escritos, el usuario no está preocupado de los detalles
de bajo nivel de cómo los métodos son ejecutados, y el usuario deberá simplemente entender
la interfaz o interacción entre el método y el objeto. Por ejemplo, si en un Automóvil se
puede leer el velocı́metro, no importa como el dato es calculado.
2.4.
Herencia y polimorfismo
Una caracterı́stica importante de un programa diseñado orientado al objeto es la herencia,
la habilidad para crear clases que comparten los atributos y métodos de clases existentes
pero con caracterı́sticas más especı́ficas. Por ejemplo, Automóvil es una clase, y todos los
objetos Automóvil comparten varios rasgos y habilidades. Convertible es una clase que
hereda de la clase Automóvil; un Convertible es un tipo de Automóvil que tiene y puede
hacer todo lo que hace un Automóvil, pero con un mecanismo agregado y una capacidad
adicional para quitar su techo. Convertible no es un objeto, es una clase. Un Convertible
especı́fico es un objeto, por ejemplo, porsche914Rojo1965.
La herencia ayuda a entender objetos del mundo real. Por ejemplo, la primera vez que se
encuentra un Convertible, ya se han entendido como los sistemas del Automóvil trabajan,
por ejemplo, el encendido, los frenos, etc. Sólo se necesita revisar los atributos y métodos que
son “nuevos” en un Convertible. Las ventajas en la programación son las mismas, se pueden
construir clases nuevas basadas en clases existentes y concentrarse en las caracterı́sticas
especializadas que se están agregando.
5
El polimorfismo es otro concepto importante en la programación orientada al objeto, que
describe la caracterı́stica de los lenguajes para permitir que la misma palabra o sı́mbolo
sean interpretados correctamente en situaciones diferentes dependiendo del contexto. Por
ejemplo, las clases Automóvil, Velero, y Aeroplano todas heredan de Vehı́culo, los métodos
encender y parar trabajan diferentemente para instancias de estas clases.
Cuando se ve un signo de suma (+) entre dos números, se entiende que están siendo sumados.
Cuando se ve tallado en un árbol entre dos nombres, se entiende que los nombres están
enlazados románticamente.
3.
Caracterı́sticas del lenguaje Java
Java fue desarrollado por Sun Microsystems como un lenguaje orientado al objeto para aplicaciones de negocio de propósito genera y para aplicaciones interactivas basadas en WWW
(World Wide Web). Algunas de las ventajas son sus caracterı́sticas de seguridad y su arquitectura neutral, un programa Java se ejecuta en cualquier sistema operativo, como
Windows, OS X, o Linux, o dispositivo, como PC, smartphone o tablet.
Java se ejecuta en una variedad amplia de computadoras y dispositivos porque no ejecuta
instrucciones directamente en el dispositivo. En vez de esto, Java se ejecuta en una máquina
hipótetica llamada máquina virtual Java o JVM (Java Virtual Machine). La JVM no es
una entidad fı́sica creada de hardware, pero está compuesta de software.
Las sentencias escritas en un lenguaje de programación de alto nivel son el código fuente.
Cuando se escribe un programa Java, primero se construye el código fuente usando un editor
de texto tal como nano, o un ambiente de desarrollo. Un ambiente de desarrollo es
un conjunto de herramientas que ayuda a escribir programas como el autocompletado de
palabras o el resaltado de sintaxis con colores. Las sentencias son guardadas en un archivo;
luego, el compilador Java convierte el código fuente en un programa binario de bytecode.
Un programa llamado el intérprete Java entonces revisa el bytecode y se comunica con el
sistema operativo, ejecutando las instrucciones bytecode lı́nea por lı́nea dentro de la JVM.
En Java, una versión del programa se ejecuta en todas las plataformas (Windows, Unix,
Linux, OS X). Sun Microsystem tiene un slogan “Write once, run anywhere” o WORA
para describir la habilidad de una versión de un programa Java para trabajar correctamente
en múltiles plataformas.
Java también es más fácil de usar que muchos otros lenguajes orientados al objeto. Java
está modelado después de C++. Java elimina muchas de las caracterı́sticas más difı́ciles de
entender de C++, como son los apuntadores y la herencia múltiple.
3.1.
Tipos de programas Java
Hay principalmente dos tipos de programa Java:
6
Applets son programas que están encajados en una página Web.
Aplicaciones Java son programas autónomos. Estas aplicaciones pueden dividirse en:
• Aplicación de consola, las cuales soportan salida de carácteres a una pantalla
en una terminal o en una ventana DOS. Estas son las aplicaciones más fáciles de
crear.
• Aplicación de ventana, las cuales crean una GUI con elementos tales como
menús, barras de herramienteas, y cuadros de diálogo.
4.
Aplicación de consola para salida a pantalla
A primera vista, aún la aplicación más simple Java involucra una cantidad razonable de
sintaxis confusa. Considerar el código de la aplicación 1 el cual está escrito en cinco lı́neas,
y es sólo para mostrar en la pantalla “Primera aplicación de Java”.
1
2
3
4
5
public c l a s s Primera {
public s t a t i c void main ( S t r i n g [ ] a r g s ) {
System . out . p r i n t l n ( ” Primera a p l i c a c i ón de Java ” ) ;
}
}
Código 1: clase Primera
4.1.
Sentencia de salida
El código 1 ocupa cinco lı́neas, pero solo contiene una sentencia de programación Java. La
sentencia System.out.println("Primera aplicación de Java"); hace el trabajo actual
en este programa. Al igual que todas las sentencias, esta termina con un punto y coma. La
mayorı́a de las sentencias Java pueden ponerse en tantas lı́neas como se quiera, siempre y
cuando se pongan rompimientos de lı́neas en los lugares apropiados. Para la sentencia previa,
se podrı́an poner rompimientos antes o después de abrir paréntesis, o antes o después del
cierre. Se prefiere poner una sentencia corta en una sola lı́nea.
El texto “Primera aplicación de Java” es una cadena literal de carácteres, una serie de
carácteres que aparecerán exactamente como fueron ingresados. Cualquier cadena literal es
escrita entre comillas dobles. Una cadena literal no puede ser dividida y colocada en varias
lı́neas. Se describe enseguida las partes de la sentencia.
7
Partes
System
out
println()
puntos
"Primera apl ..."
;
Descripción
clase
objeto definido en la clase System
método seguido por ()
separan las clases, objetos y métodos
cadena literal que es un argumento
al método println()
terminador de la sentencia
Los argumentos, como la cadena “Primera aplicación de Java”, aparecen siempre dentro de
paréntesis. Los argumentos son piezas de información que son mandadas al método, ya que
este requiere información para realizar su tarea. El acto de mandar argumentos a un método
es llamado pasar argumentos al método.
El método al cual se le pasa “Primera aplicación de Java” es llamado println(). Los métodos
println() y print() producen salida, donde el primero, después de la salida, pone el punto
de inserción en la siguiente lı́nea y la primera columna, mientras con el segundo, mantiene
el punto de inserción en la misma lı́nea de salida.
Cuando se llama un método, siempre se usan paréntesis siguiendo al nombre del método.
El método println() puede ser usado sin argumentos para generar de salida una lı́nea en
blanco. La cantidad de argumentos para algún método es variable.
System es una clase por lo que define atributos de objetos System, siendo uno de sus atributos
out.
Los puntos en System.out.println() son usados para separar los nombres de los componentes en la sentencia.
Java es sensible a la capitalización de letras, ası́ el nombre de la clase llamada System es una
clase completamente diferente de una llamada system, SYSTEM, etc.
Ası́ la sentencia que muestra la cadena “Primera aplicación de Java” contiene una clase, una
referencia a un objeto, una llamada a método, un argumento de método, y un punto y coma
de terminación de sentencia, pero la sentencia no puede estar sola; esta metida dentro de
una clase.
4.2.
Clase Primera
Todo lo que se use dentro de un programa Java deberá ser parte de una clase. Cuando
se escribe public class Primera, se está definiendo una clase llamada Primera. Se puede
definir una clase usando cualquier nombre o identificador que se requiera, siempre y cuando
cumpla los siguientes requisitos:
1. Iniciar con una letra del alfabeto inglés, letra no del inglés, como ñ o π, un guión bajo,
o un signo de dólar. El identificador no puede iniciar con un dı́gito.
8
abstract
assert
boolean
break
byte
case
catch
char
class
const
continue
for
default
goto
do
if
double
implements
else
import
enum
instanceof
extends
int
final
interface
finally
long
float
native
new
switch
package
synchronized
private
this
protected
throws
public
throws
return
transient
short
try
static
void
strictfp
volatile
super
while
Cuadro 1: Palabras reservadas Java
2. El identificador sólo puede tener letras, dı́gitos, guiones bajo, o signos de dólar.
3. El identificador no puede ser una palabra reservada, como public o class. Ver el
cuadro 1 para una lista de palabras reservadas.
4. El identificador no puede ser uno de los siguientes valores: true, false, o null.
Nota. Java está basado en Unicode, el cual es un sistema internacional de representación
de carácteres. El término letra indica letras de cualquier idioma, como el inglés, árabe, o
griego
Es un estándar Java, sin embargo no es un requisito, iniciar los identificadores de clase con
una letra mayúscula y usar letras minúsculas conforme se ocupen para hacerlo legible. El
estilo que une palabras en la cual se inicia con letra mayúscula es llamada caja tipógrafica Pascal, o algunas veces caja camello superior. Se deben seguir las convenciones
establecidas para que sea fácil a otros programadores interpretar y seguir sus programas.
Algunos nombres de clase válidos por la convención anterior son:
Empleado
EstudianteNoGraduado
Artı́culoInventario
Presupuesto2016
Por otra parte identificadores legales pero no convencionales son:
Estudiantegraduado
Artı́culo Inventario
9
PRESUPUESTO2016
presupuesto2016
Nombres ilegales de clase en Java podrı́an ser:
Artı́culo Inventario
class
2016Presupuesto
Teléfono#
Se comentan enseguida las partes de una clase tı́pica, en particular la clase Primera:
Partes
Descripción
public class Primera cabecera de la clase
public
especificador de acceso para definir las
bajo la cual una clase puede ser accedida
class
palabra clave
Primera
nombre de la clase
{ }
encierran el contenido de la clase y los datos
junto con los métodos hacen el cuerpo de la clase
La clase Primera sólo contiene un método dentro de las llaves. El nombre del método es
main(), y el método main(), al igual que el método println(), incluyen su propio juego de
paréntesis. El método main() en la clase Primera contiene una sola sentencia, la sentencia
que usa el método println(). El método main() no contiene ningún otro método, pero este
llama al método println().
4.3.
Estilo de sangrado
Los espacios son opcionales, en general, en Java. Espacio en blanco es cualquier combinación de caracteres no imprimibles. Se usa espacio en blanco para organizar el código y
hacerlo más legible. Se pueden insertar espacios en blancos entres palabras o lı́neas en el
código tecleando espacios, tabuladores, o lı́neas en blanco ya que el compilador ignora estos.
Sin embargo, no se puede usar espacio en blanco dentro de un identificador o palabra clave.
Por cada llava de apertura ({) debe existir una correspondiente llave de cierre (}), pero la
colocación de las llaves no es importante para el compilador.
El estilo de sangrado usado en el código 1 de la clase Primera, en el cual las llaves de apertura
no están en lı́neas separadas, es conocido como el estilo K & R en honor a Kernighan y
10
Ritchie, quienes escribieron el primer libro del lenguaje de programación C. Otro estilo de
sangrado, en el cual las llaves de apertura ocupan su propia lı́nea y están alineados, es
llamado el estilo Allman gracias al programador Eric Allman que popularizó ese estilo.
Cuando se escriba código, se deberá desarrollar un estilo consistente.
La mayorı́a de los programadores sangran las sentencias del método con unos cuantos espacios
más que sus llaves. Algunos programadores usan 2, 3, y hasta 4 espacios. Otros programadores
usan la tecla tabulador para crear los sangrados, pero otros se oponen a su uso ya que los
tamaños de sangrado varian en diferentes sistemas.
4.4.
Método main()
Enseguida se proporciona una explicación breve de los términos usados en la cabecera del
métódo main(), la cabecera es: static void main(String[] args).
La palabra reservada public es un especificador de acceso usado al nivel del método.
Con la palabra reservada static se logra que un método sea accesible y usabel aún
sin que existan objetos de la clase.
La palabra reservada void indica que el método no devuelve ningún valor cuando es
llamado, es decir el método no manda ningún valor de regresa a cualquier otro método
que podrı́a usarlo.
El nombre del método es main(), y este se debe incluir en todas las aplicaciones Java.
Cuando se ejecuta una aplicación Java, la JVM siempre ejecuta primero el método
main(). No se requiere que las clases tengan este método.
El contenido entre los paréntesis de la cabecera del método, String[] args, representa
el tipo de argumento que puede ser pasado al método main(). String es una clase Java
que puede ser usada para guardar cadenas de carácteres. El identificador args es usado
para manejar cualquier objeto String que podrı́a ser enviado al método main(). En la
clase Primera no se usa el identificador args, pero aún ası́ se debe poner dentro de los
paréntesis. El identificador no necesita llamarse args, podrı́a ser cualquier identificador
legal, pero este es un nombre tradicional.
Se puede usar el siguiente esqueleto de código Java para iniciar con una aplicación, en la cual
se reemplaza CualquierNombreDeClase con el nombre que se quiera y la lı́nea con /******/
con las sentencias que se quieran ejecutar.
11
1
2
3
4
5
public c l a s s CualquierNombreDeClase {
public s t a t i c void main ( S t r i n g [ ] a r g s ) {
/∗ ∗∗∗∗ ∗/
}
}
Código 2: esqueleto para iniciar una aplicación Java
4.5.
Guardar la clase Java
Cuando se escribe una clase Java, esta se guarda en algún medio de almacenamiento como
un disco, DVD o dispositivo USB. En Java, si una clase es public, es decir, si se uso el
especificador de acceso public antes del nombre de la clase, se debe guardar la clase en
un archivo que tenga el mismo nombre y la extensión .java. Por ejemplo, la clase Primera
deberá ser guardada en un archivo llamada Primera.java. Si la extensión no es .java, el
compilador Java no reconoce el archivo como conteniendo una clase Java.
5.
Compilación y depuración
Después de que se escribe y guarda una aplicación, dos pasos deben ocurrir antes de que se
pueda ver la salida de la aplicación.
1. Se debe compilar la clase escrita, llamada el ćodigo fuente, en bytecode.
2. Se debe usar el intérprete de Java para traducir el bytecode en sentencias ejecutables.
Para compilar el código fuente desde la lı́nea de comando, se debe teclear javac seguida
del nombre del archivo que contiene el código fuente. Por ejemplo, para compilar un archivo
llamado Primera.java, se teclea lo siguiente y se presiona Intro:
javac Primera.java
Se podrı́an tener tres tipos de salidas:
Se recibe un mensaje tal como ‘javac’ is not recognized as an internal or
external command, operable program or batch file.
Se recibe uno o más mensajes de error de sintaxis en el programa.
No se reciben mensajes, lo cual indica que la aplicación se compiló con éxito.
12
Si se recibe un mensaje de error de que el comando no es reconocido, esto podrı́a significar
uno de los siguientes:
Se escribió mal el comando javac.
Se escribió mal el nombre del archivo.
No se está dentro del directorio o carpeta correcta para compilar.
Java no fue instalado correctamente.
En el caso de que se tengan uno o más errores de sintaxis en el código fuente, es porque se
introdujeron errores al teclear el código o por usar el lenguaje de programación de forma
incorrecta. Por ejemplo, si el nombre de la clase es primera pero se guardó el archivo como
Primera.java, se recibirá un mensaje de error. Para estos errores, se debe editar el archivo
con el código fuente y hacer las correcciones necesarias.
La salida por errores de compilación muestran el nombre del archivo en el cual el error fue
encontrado, el número de la lı́nea en el cual este fue encontrado, la lı́nea que contiene el error
y un sı́mbolo (ˆ) que apunta el lugar exacto del error.
El mensaje de error incluye la cuenta de errores encontrados. Este es un error en tiempo de
compilación, o uno en el cual el compilador detecta una violación de las reglas de sintaxis
del lenguaje y no puede traducir el código fuente a bytecode.
Cuando se compila una clase, el compilador podrı́a reportar muchos errores conforme los
encuentre, por lo que podrı́an corregir tantos errores como sea posible. En ocasiones, un
error en la sintaxis causa múltiples mensajes de error que normalmente no serı́an errores si
el primer error de sintaxis no existiera, ası́ que arreglando un error podrı́a eliminar múltiples
mensajes de error. En ocasiones, cuando se arregla un error en tiempo de compilación y se
recompila el programa, nuevos mensajes de error se podrı́an generar.
Después de una compilación exitosa, se puede ejecutar el archivo clase en cualquier sistema
que tenga un intérprete del lenguaje Java.
6.
Ejecución y depuración
Después de que un programa compila sin errores de sintaxis, se puede ejecutar. Solo porque
el programa compila y se ejecuta, no significa que el programa está libre de errores.
6.1.
Ejecución de una aplicación Java
Para ejecutar la aplicación Primera desde la lı́nea de comandos, teclear lo siguiente:
13
java Primera
Después de teclear el comando java para ejecutar el programa, la cadena literal, Primera
aplicación de Java, en la llamada al método println() es mostrada en la salida. Luego
el control regresa al indicador de comandos.
Cuando se ejecuta una aplicación Java usando el comando java, no se agrega la extensión
.class al nombre del archivo. Al teclear java Primera, el intérprete busca un archivo llamado
Primera.class. Si se teclea java Primera.class, el intérprete busca incorrectamente por un
archivo llamado Primera.class.class.
6.2.
Modificar una clase compilada
Después de ver la salida de la aplicación Primera, se podrı́a decidir modificar la clase Primera
para obtener un resultado diferente. Por ejemplo, se quiere cambiar para mostrar lo siguiente:
Mi aplicación Java
nueva y mejorada
Para producir la nueva salida, primero se debe modificar el archivo de texto que contiene la
clase existente. Se necesita cambiar la cadena literal existente, y luego agregar una sentencia
de salida para otra cadena de texto. El código 3 muestra las modificaciones realizadas.
1
2
3
4
5
6
public c l a s s Primera {
public s t a t i c void main ( S t r i n g [ ] a r g s ) {
System . out . p r i n t l n ( ”Mi a p l i c a c i ón Java ” ) ;
System . out . p r i n t l n ( ” nueva y mejorada ” ) ;
}
}
Código 3: clase Primera con la salida modificada
Antes de que el nuevo código fuente se pueda ejecutar, se debe hacer lo siguiente:
1. Guardar el archivo con los cambios.
2. Compilar la clase con el comando javac, en este caso, se recompila la clase.
3. Interpretar el bytecode y ejecutar la clase usando el comando java.
Cuando se recompila una clase, la versión previa del archivo compilado con la extensión
.class es reemplazada. Cuando se modifica una clase, se debe decidir si se quiere retener la
versión original. Si se quiere, se debe dar a la versión nueva un nombre nuevo de clase y de
archivo.
14
6.3.
Depuración
Además de los errores de sintaxis, un segundo tipo de error ocurre cuando la sintaxis del
programa es correcta y el programa compila pero produce resultados incorrectos cuando se
ejecuta. Este tipo de error es un error de lógica, el cual es frecuentemente más dı́ficil de
hallar y resolver, por ejemplo alguna cadena literal podrı́a estar mal escrita. Otros casos de
errores de lógica son una multiplicación de dos valores cuando se querı́a sumarlos, imprimir
un reporte incompleto, u olvidar generar un total al final de un reporte.
Un error de lógica es un tipo de error en tiempo de ejecución, un error detectado cuando
el programa pide al sistema hacer algo incorrecto, o ilegal, mientras se ejecuta. No todos los
errores en tiempo de ejecución son culpa del programador, por ejemplo, el hardware podrı́a
fallar mientras se ejecuta el programa.
7.
Comentarios
En las aplicaciones grandes donde se realizan varias tareas es difı́cil recordar varios pasos,
o como se querı́an usar variables particulares. La documentación del código ayuda a recordar porque se escribieron lı́neas de código en la forma que se hizo. Los comentarios del
programa son sentencias no ejecutables que son agregadas al programa con el propósito de
documentar, es decir, los comentarios son puestos para ayudar a leer el código fuente y no
para la ejecución de computadora.
Los programadores usan comentarios para dejar notas para ellos y para otros que podrı́an
leer sus programas. Los archivos Java deberı́an incluir, al menos, comentarios indicando el
autor, la fecha, y el nombre de la clase o función. Se recomienda incluir un comentario breve
para describir el propósito de cada método creado dentro de una clase.
Los comentarios también pueden ser útiles cuando se está desarrollando una aplicación. Si
un programa no está trabajando como se espera, se pueden “comentar” varias sentencias y
ejecutar el programa para observar el efecto.
Hay tres tipos de comentarios en Java:
Comentarios de lı́neas inician con dos diagonales (//) y llegan hasta el final de la
lı́nea actual. Un comentario de lı́nea puede aparecer en su propia lı́nea o al final de una
linea después del código. No requiere sı́mbolo de terminación.
Comentarios de bloque inician con una diagonal y un asterisco (/*) y terminan con
un asterisco y una diagonal (*/). Puede aparecer en su propia lı́nea, o en una linea de
código, ya sea antes o después. Los comentarios de bloque se pueden extender tantas
lı́neas como se requiera.
Comentarios de documentación son usados para generar la documentación del
15
código usando un programa llamado javadoc Inician con una diagonal y dos asteriscos
(/**) y terminan con asterisco y una diagonal (*/).
El siguiente código muestra como los comentarios son usados en el código. En este ejemplo, la
única sentencia que se ejecuta es System.out.println("Hola"); lo demás son comentarios.
// Mostrando comentarios
/* Esto muestra
que estos comentarios
no importan */
System.out.println("Hola"); // Esta lı́nea se ejecuta
// donde empieza el comentario
/* Todo, excepto el println()
son comentarios */
Se podrı́a querer crear comentarios por estética. Por ejemplo, se podrı́a querer usar un
comentario que sea un renglón de guiones o asteriscos, para usarlos como una lı́nea divisora
entre partes de un programa.
8.
Aplicación GUI
Java además de permitir usar la clase System para producir salida en una ventana de comandos, también proporciona clases integradas que generan salida GUI. Por ejemplo, Java
tiene una clase llamada JOptionPane que permite producir cuadros de diálogo. Un cuadro
de diálogo es un objeto GUI parecido a una ventana en la cual se pueden poner mensajes
que se quieran mostrar. El código 4 muestra una clase llamada PrimerDialogo. La clase
PrimerDialogo contiene varios elementos que son familiares, excepto el código de las lı́neas
1 y 5 que son nuevas.
Nota. En las versiones viejas de Java, cualquier aplicación que usaba un diálogo JOptionPane
requerı́a terminar con una sentencia System.exit(0); o de otro modo la aplicación no
terminaba.
1
2
3
4
5
6
import j a v a x . swing . JOptionPane ;
public c l a s s P r i m e r D i a l o g o {
public s t a t i c void main ( S t r i n g [ ] a r g s ) {
JOptionPane . showMessageDialog ( null , ” Primer Diá l o g o de Java ” ) ;
}
}
Código 4: clase PrimerDialogo
16
En la lı́nea 1 se usa la sentencia import. Se usa la sentencia import cuando se quiere acceder
una clase integrada de Java que está contenida en un grupo de clases llamado paquete. Para
usar la clase JOptionPane, se debe importar desde el paquete javax.swing seguida de un
punto y el nombre de la clase. Para usar una sentencia import se debe colocar fuera de
cualquier clase.
Nota. No se necesita usar una sentencia import cuando se usa la clase System porque
esta clase está contenida en el paquete java.lang, el cual es automáticmante importado
en cada programa Java.
La sentencia de la lı́nea 4 en la clase PrimerDialogo usa el método showMessageDialog()
que es parte de la clase JOptionPane. Como es un método está seguido por un juego de
paréntesis. El método showMessageDialog() requiere dos argumentos. Siempre que un método requiera múltiples argumentos, estos son separados por comas. Si el primer argumento es
null se logra que la caja de salida de mensaje sea colocada en el centro de la pantalla. El
segundo argumento, después de la coma, es la cadena que será mostrada.
Cuando el usuario ejecuta PrimerDialogo podrá pulsar en el botón Aceptar o en el botón
cerrar para descartar el cuadro de diálogo.
9.
Ayuda
Una cantidad abundante de material de ayuda existe en el sitio web de Java, http://www.oracle.com/technetwork/java/index.html . De valor particular es la interfaz de programación
de aplicaciones, o la API (application programming interface) de Java. Esta API de Java
también es conocida como la biblioteca de clases Java; la cual contiene información acerca
de como usar cada clase Java, incluyendo listas de todos los métodos que se pueden usar con
las clases.
También de interés en el sitio web de Java son las preguntas hechas frecuentementes o
FAQ (frecuently asked questions), que proporcionan respuestas breves a varias preguntas
comunes acerca de Java y los productos. También están disponibles varias versiones de las
herramientas de desarrollo Java o JDK (Java Development Kit) que se pueden descargar
sin costo. El JDK es un SDK (Software Development Kit), que incluye herramientas de
desarrollo. Hay versiones para Windows, Linux y OS X.
Un conjunto de lecciones llamadas “The Java Tutorial ” con cientos de ejemplos completos
está disponible desde https://docs.oracle.com/javase/tutorial/ . El tutorial está organizado
en caminos, grupos de lecciones para un tema particular.
17