Universidad Nacional Autónoma de México - INTRODUCCIÓN A LA PROGRAMACIÓN EN JAVA Facultad de Ingeniería
←
→
Transcripción del contenido de la página
Si su navegador no muestra la página correctamente, lea el contenido de la página a continuación
Universidad Nacional Autónoma de México Facultad de Ingeniería INTRODUCCIÓN A LA PROGRAMACIÓN EN JAVA OpenBoxe® http://www.openboxer.260mb.com
Introducción a la Programación en Java 1. El lenguaje de Programación Java y la Plataforma Java El lenguaje de programación Java es un lenguaje moderno, presentado por primera vez por Sun Microsystems en el segundo semestre de 1995. Se trata de un lenguaje de programación completamente neutral con respecto a la plataforma de ejecución, lo que permite, entre otras cosas, añadir programas a una página web. Lo que más les gusta a los programadores es: La sencillez y elegancia de cómo se escriben los programas en Java. Se trata de un lenguaje de programación orientado a objetos. En el proceso de compilación se realizan una multitud de comprobaciones que permiten eliminar muchos posibles errores posteriores. Las bibliotecas ya definidas que proporciona el lenguaje y que el programador puede utilizar sin tener que hacerlas de nuevo. La evolución de Java ha sido muy rápida, desde el momento en que se hizo público el lenguaje y su primer entorno de programación hasta nuestros días, la plataforma de java ha ido creciendo constantemente y a un ritmo cada vez mayor, pues se han ido incorporando un gran número de programadores en todo el mundo. Java 2 es la actual plataforma de desarrollo de programas que consta de: Un lenguaje de programación: Java Un conjunto de bibliotecas estándar que se incluyen con la plataforma y que deben existir en cualquier entorno con Java (Java Core). Estas bibliotecas comprenden: strings, procesos, entrada, salida, propiedades del sistema, fecha y hora, Applets, API de Red, internacionalización, seguridad, componentes, serialización, JDBC, etc. Un conjunto de herramientas para el desarrollo de programas. Entre ellas cabe citar el compilador de Java, el generador de documentación, el depurador de programas en Java, etc. Un entorno de ejecución cuyo principal componente es una máquina virtual para poder ejecutar los programas en código de bytes. La plataforma Java 2 se puede utilizar desde distintos sistemas operativos, ejecutándose cada uno de ellos en el hardware correspondiente. 1
Introducción a la Programación en Java Fuente Java Herramientas (javac y otras) Bytecodes Java Sistema de ejecución API (runtime) Máquina virtual Sistema operativo (Solaris, Linux, Windows, MacOS,...) Hardware (Sparc, Pentium, PowerPC,...) Figura 1. Elementos de la plataforma Java 2 2. Desarrollo de Programas El desarrollo de programas Java, sigue un proceso como el que sigue: Edición de programa fuente. Se denomina programa fuente al programa que se escribe utilizando un entorno de programación o cualquier editor, en un lenguaje de programación. En java los archivos fuente tienen un nombre con terminación .java, donde el nombre ha de ser el mismo que el empleado como nombre de la clase. Compilación. Una vez escrito el programa, debemos de compilarlo; los entornos de desarrollo facilitan esta tarea haciéndola casi invisible en algunos de ellos o bien, utilizando en la línea de comandos la siguiente instrucción: javac nombreArchivo.java En este proceso, se comprueba que lo que se ha escrito es correcto en Java y se traduce a otro lenguaje denominado código de bytes (bytecode). Si durante la compilación se detectan errores, el entorno avisará de los problemas detectados y dónde se han encontrado, para que se puedan corregir. Si en la compilación no se detecta ningún error se genera un archivo con extensión .class con el mismo nombre que la clase que se compila. Ejecución. Una vez compilado se ejecuta el programa y se comprueba se hace lo que se había previsto; sino, habrá que modificarlo. 2
Introducción a la Programación en Java 3. Entornos de desarrollo Existen multitud de fabricantes que disponen de entornos de desarrollo para Java. En primer lugar están teniendo una gran aceptación algunos entornos de libre distribución. Se pueden utilizar otros entornos, aunque se tengan que pagar licencias, ya que existen versiones reducidas que se pueden utilizar ara aprender los fundamentos del lenguaje y la programación con Java. NetBeans (java.sun.com o www.netbeans.org). NetBeans es un proyecto de creación de un entorno de libre distribución profesional patrocinado por Sun MicroSystems. Eclipse (www.eclipse.org). Eclipse es un proyecto de creación de un entorno genérico de desarrollo patrocinado principalmente por IBM. Su objetivo es crear un marco de trabajo para distintas tareas y lenguajes de programación. BlueJ (www.bluej.org). BlueJ es un entorno desarrollado en la Universidad de Kent. Antes de instalar el entorno, es necesario descargar de la página de Sun el paquete J2SE. La interfaz es más sencilla que los anteriores. JCreator LE (www.jcreator.com). La versión LE es una versión de uso gratuito; es necesario ingresar nuestro nombre y dirección de correo electrónico, de esta manera, nos enviarán una URL de donde podremos descargar el programa. 3
Introducción a la Programación en Java 4. Entorno típico de Java De manera general, los programas en Java pasan a través de cinco fases para poder ejecutarse. Estas fases son: edición, compilación, carga, verificación y ejecución. El programa se crea en un editor y se almacena en disco en un archivo con la terminación .java El compilador crea los códigos de bytes y los almacena en disco, en un archivo con la terminación .class El cargador de clases lee los archivos .class (que contienen códigos de bytes) del disco y coloca esos códigos de bytes en la memoria El verificador de código de bytes confirma que todos los códigos de bytes sean válidos y no violen las restricciones de seguridad de Java El intérprete lee los Intérprete códigos de bytes y los traduce en un lenguaje que la computadora pueda entender, posiblemente almacenando los valores de datos a medida que se ejecuta el programa 4
Introducción a la Programación en Java La fase 1 consiste en editar un archivo (mediante un programa de edición, como bloc de notas) y se guarda en un dispositivo de almacenamiento secundario (disco duro). Los nombres de archivo de los programas escritos en Java terminan con la extensión .java. En la fase 2, se efectúa el proceso de compilación del programa en Java, mediante el comando javac. El compilador de Java traduce dicho programa a códigos de bytes (instrucciones que el intérprete de Java puede entender). Si el programa se compila correctamente, el compilador produce entonces un archivo con extensión .class, que contiene los códigos de bytes que se interpretarán durante la fase de ejecución. javac nombreDeArchivo.java En la fase 3 se realiza el proceso de carga. El programa debe colocarse en memoria antes de ejecutarse, para esto Java cuenta con un cargador de clases que toma los archivos .class y los transfiere a la memoria principal. A medida que se cargan los bytes, el verificador de códigos de bytes se encarga de verificar los códigos de bytes en la fase 4. El proceso de verificación asegura que los códigos de bytes de las clases sean válidos y que no violen las restricciones de seguridad de Java. Finalmente en la fase 5, el intérprete bajo el control del sistema operativo, interpreta el programa un código de bytes a la vez, realizando de esta forma las acciones especificadas por el programa. Existen dos tipos de programas para los cuales ocurre este proceso: aplicaciones y applets. Una aplicación es un programa que generalmente se guarda y se ejecuta desde el equipo local del usuario. Un applet es un pequeño programa que generalmente se ejecuta desde un servido Web, de manera que los applets se cargan desde un equipo remoto en el navegador, se ejecutan en éste y se descartan cuando termina su ejecución. Las aplicaciones se cargan en memoria y se ejecutan, utilizando el intérprete de Java mediante el comando java, de la siguiente manera: java nombreDeArchivo 5
Introducción a la Programación en Java 5. Introducción a las aplicaciones en Java Primer programa en Java Consideremos una aplicación sencilla que muestra una línea de texto. Una aplicación en Java es un programa que se ejecuta utilizando el intérprete java. Consideremos cada una de las líneas del programa en orden. Las líneas 1 y 2 // Bienvenido1.java // Programa para imprimir texto. Comienzan con //, indicando que el resto de la línea es un comentario. El compilador de Java ignora estos comentarios. Un comentario de comienza con // se llama comentario de fin de línea (o de una sola línea). También son válidos los comentarios tradicionales denominados de múltiples líneas: /* Éste es un comentario Tradicinal. Puede Dividirse en muchas líneas */ La línea 4 public class Bienvenido1 { Comienza con una declaración de clase para la clase Bienvenido1. Todo programa en Java consiste de cuando menos una declaración de clase que debe ser definida por el usuario. Estas clases se conocen como clases definidas por el usuario. La palabra reservada class introduce una declaración de clase en Java la cual debe ir seguida inmediatamente por el nombre de la clase. Las palabras reservadas se reservan para uso exclusivo de Java y siempre se escriben en minúsculas. Por convención, todos los nombres de clase en Java comienzan con una letra mayúscula y la primera letra de cada palabra en el nombre de la clase debe ir en mayúscula. El nombre de la clase se conoce como identificador, y está compuesto por una serie de caracteres que pueden ser letras, dígitos, guiones 6
Introducción a la Programación en Java bajos (_)y signos de moneda ($), no pueden comenzar con un dígito y no puede tener espacios. Java es sensible a mayúsculas y minúsculas. Cuando se guarda una declaración de clase de tipo public, el nombre de éste archivo debe ser el nombre de la clase, seguido de la extensión java. La línea 7 public static void main( String args[] ) es el punto de inicio de toda aplicación Java. Los paréntesis después del main indica que se trata de un bloque de construcción del programa, al cual se le llama método. Las declaraciones de clases en Java generalmente contienen uno o más métodos. En una aplicación en Java, sólo uno de estos métodos debe llamarse main, de lo contrario, la aplicación no se ejecutará. Los métodos pueden realizar tareas y devolver información una vez que hayan concluido. La palabra reservada void indica que este método realizará una tarea, pero no devolverá ningún tipo de información cuando se complete su tarea. La línea 9 System.out.println( "Bienvenido a la programacion en Java!" ); indica a la computadora que realice una acción, en este caso, que imprima una cadena de caracteres contenida entre los caracteres de comilla doble. System.out se conoce como objeto de salida estándar y permite a las aplicaciones en Java mostrar un conjunto de caracteres en la ventana de comandos. El método System.out.println imprime una línea de texto en la ventana de comandos. Modificación de nuestro primer programa en Java Mostrar una línea con varias instrucciones ¡Bienvenido a la Programación en Java! puede mostrarse en varias formas: Las líneas 9 y 10 del método main System.out.print( "Bienvenido a " ); System.out.println( "la programacion en Java!" ); 7
Introducción a la Programación en Java muestran una sola línea en la ventana de comandos. La primera instrucción utiliza el método print de System.out para mostrar una cadena. A diferencia de println, después de mostrar su argumento, print no posiciona el cursor de salida al inicio de la siguiente línea en la ventana de comandos. Mostrar varias líneas de texto con una sola instrucción. Una sola instrucción puede mostrar varias líneas, utilizando caracteres de nueva línea. Los caracteres de nueva línea indican a los métodos print y println de System.out cuando deben de colocar el cursor de salida al inicio de la siguiente línea en la ventana de comandos. La barra diagonal inversa (\) que aparece en la línea 9, se le conoce como carácter de escape e indica a los métodos print y println cuando se va a imprimir un carácter especial. Mostrar texto en un cuadro de diálogo Muchas aplicaciones en Java utilizan ventanas o cuadros de diálogo para mostrar la salida. Generalmente, los cuadros de diálogo son ventanas que muestran mensajes importantes a los usuarios del programa. La clase JOptionPane de Java proporciona cuadros de diálogo previamente empaquetados. 8
Introducción a la Programación en Java Las numerosas clases predefinidas de Java se agrupan en categorías de clases relacionadas, conocidas como paquetes. Un paquete es una colección de clases con nombre y se conocen como la Interfaz de Programación de Aplicaciones de Java (API). Los paquetes de la API se dividen en básicos (comienzan con la palabra java) y opcionales (comienzan con la palabra javax) y se utilizan para mejorar las capacidades de Java. En este ejemplo utilizaremos la clase predefinida de Java JOptionPane, la cual se encuentra en el paquete javax.swing. La línea 5 import javax.swing.JOptionPane; // el programa usa JOptionPane es una declaración import y nos permite identificar las clases predefinidas que se utilizan en un programa en Java. El compilador trata de cerciorarse de que se utilicen correctamente las clases de la API de Java y las declaraciones import ayudan al compilador a localizar las clases que se desean utilizar. El paquete javax.swing ayuda a los programadores a crear más fácilemente Interfaces Gráficas de Usuario (GUIs). Los componentes de la GUI facilitan al usuario de un programa la introducción de datos y el formato o presentación de los mismos. El las líneas 12 y 13 del método main JOptionPane.showMessageDialog( null, "Bienvenido\na\nla programacion\nen Java!" ); llaman al método showMessageDialog de la clase JOptionPane para mostrar un cuadro de diálogo que contiene un mensaje. Este método requiere de dos argumentos y se separan por comas (,). El primer argumento siempre será la palabra reservada null y el segundo argumento es la cadena a mostrar en el cuadro de diálogo. El primer argumento ayuda a la aplicación en Java a determinar en dónde se va a colocar el cuadro de diálogo. Como el primer elemento es null, el cuadro de diálogo aparece en el centro de la pantalla. El método JOptionPane.showMessageDialog es un método especial de la clase JOptionPane, el cual se conoce como método static. Generalmente, los métodos estáticos se llaman utilizando el nombre de su clase, seguido de su punto (.) y el nombre del método, de la siguiente manera NombreDeLaClase.nombreDelMétodo(argumentos) La barra de título del cuadro de diálogo contiene la cadena Mensaje, para indicar que este cuadro de diálogo va a presentar un mensaje al usuario. El cuadro de diálogo incluye Aceptar(OK), que el usuario puede oprimir para descartarlo. La línea 15 System.exit( 0 ); // terminar la aplicación con la ventana 9
Introducción a la Programación en Java Utiliza el método estático exit de la clase System para terminar la aplicación. Esto se requiere para terminar cualquier aplicación que muestre una interfaz gráfica de usuario. System es una clase del paquete java.lang. Observe que la clase System no se importa con una declaración import al principio del programa, de manera predeterminada, el paquete java.lang se importa en todos los programas de Java. El argumento 0 para el método exit indica que el programa terminó correctamente (Un valor distinto de 0 generalmente indica que ha ocurrido un error). Otra aplicación en Java: Suma de enteros Nuestra siguiente aplicación recibe como entrada dos enteros introducidos por el usuario mediante el teclado, calcula la suma de los valores y muestra el resultado. Este programa utiliza otro cuadro de diálogo predefinido de la clase JOptionPane, el cual se conoce como cuadro de diálogo de entrada que permite al usuario introducir un valor para utilizarlo en el programa. El programa utiliza un cuadro de diálogo de mensaje que contiene la suma de enteros. La línea 7 10
Introducción a la Programación en Java public class Suma{ comienza la declaración de la clase Suma. El nombre de este archivo para esta clase public debe ser Suma.java. Las líneas 12 y 13 String primerNumero; // 1a cadena introducida por el usuario String segundoNumero; // 2a cadena introducida por el usuario son instrucciones para declarar variables (declaraciones), las cuales especifican los nombres y los tipos de las variables que se utilizan en este programa. Una variable es una ubicación en la memoria de la computadora. Todas las variables deben declararse con un nombre y un tipo antes de poder usarse. Estas declaraciones especifican que dichas variables son de tipo String (secuencias de caracteres) y este tipo se define en el paquete java.lang. Las declaraciones puede dividirse en varias líneas, separando cada variable de la declaración con una coma (lista separada con comas). Varias variables del mismo tipo pueden declararse en una sola declaración o en varias de ellas. String primerNumero, // 1a cadena introducida por el usuario segundoNumero; // 2a cadena introducida por el usuario Las líneas 15 a 17 int numero1; // primer número a sumar int numero2; // segundo número a sumar int suma; // suma de numero1 y numero2 declaran que estas variables son datos de tipo de int, es decir, guarda valores enteros. La línea 20 primerNumero = JOptionPane.showInputDialog( “Escriba el primer entero" ); utiliza el método showInputDialog de JOptionPane para mostrar un cuadro de diálogo. El argumento para showInputDialog indica que el usuario debe escribir en el campo de texto. Este mensaje se llama indicador, ya que hace que el usuario realice una acción específica. La forma simple de entrada en Java es similar a la salida en la ventana de comando, pero limitada. El resultado del método showInputDialog de JOptionPane (un valor String que contiene los caracteres escritos por el usuario) se da a la variable primerNumero utilizando el operador de asignación =. Lo mismo sucede con las líneas 23 y 24 segundoNumero = JOptionPane.showInputDialog( "Escriba el segundo entero" ); Las líneas 27 y 28 numero1 = Integer.parseInt( primerNumero ); numero2 = Integer.parseInt( segundoNumero ); 11
Introducción a la Programación en Java convierten los dos valores String que introduce el usuario en valore Int, para que el programa pueda utilizarlos en el cálculo. El método estático parseInt de la clase Integer convierte un número String en un número entero. Dicha clase también se encuentra en el paquete java.lang. La línea 31 suma = numero1 + numero2; es una instrucción de asignación que calcula la suma de esas dos variables. Una vez realizado el cálculo, las líneas 34 y 35 JOptionPane.showMessageDialog( null, "La suma es " + suma, "Resultados", JOptionPane.PLAIN_MESSAGE ); utiliza el método estático showMessageDialog de la clase JOptionPane para mostar el resultado de la suma. Esta nueva versión requiere de cuatro argumentos. El primer argumento es null, que indica que el cuadro de diálogo aparecerá en el centro de la pantalla, el segundo argumento es el mensaje a mostrar. El tercer argumento representa la cadena que debe aparecer en la barra de título del cuadro de diálogo. El cuarto argumento JOptionPane.PLAIN_MESSAGE, es el tipo de cuadro de diálogo, un valor que indica el tipo de cuadro de diálogo de mensaje que se va a mostrar. El tercer argumento utiliza el operador + que es utilizado frecuentemente para la concatenación de cadenas. Aritmética Mostrar las tablas de los operadores aritméticos utilizados en java Toma de desiciones: Operadores de igualdad y relacionales Mostrar la tabla de operadores de igualdad y relacionales El siguiente ejemplo utiliza seis instrucciones if para comprobar dos números introducidos por el usuario. Si la condición en cualquiera de las instrucciones if es verdadera, se ejecuta la instrucción de asignación asociada. Se introducen valores a través de los cuadros de diálogo de entrada. Se hacen las conversiones requeridas (String int) y se efectúan las comparaciones: // Comparacion.java // Compara enteros utilizando instrucciones if, operadores relacionales // y de igualdad. // paquetes de Java import javax.swing.JOptionPane; public class Comparacion { // el método main empieza la ejecución de la aplicación de Java 12
Introducción a la Programación en Java public static void main( String args[] ) { String primerNumero; // primera cadena introducida por el usuario String segundoNumero; // segunda cadena introducida por el usuario String resultado; // una cadena que contiene el resultado int numero1; // primer número para comparar int numero2; // segundo número para comparar // recibir el primer número del usuario como una cadena primerNumero = JOptionPane.showInputDialog( "Escriba el primer entero:" ); // recibir el segundo número del usuario como una cadena segundoNumero = JOptionPane.showInputDialog( "Escriba el segundo entero :" ); // convertir los números de tipo String a tipo int numero1 = Integer.parseInt( primerNumero ); numero2 = Integer.parseInt( segundoNumero ); // inicializar resultado con cadena vacía resultado = ""; if ( numero1 == numero2 ) resultado = resultado + numero1 + " == " + numero2; if ( numero1 != numero2 ) resultado = resultado + numero1 + " != " + numero2; if ( numero1 < numero2 ) resultado = resultado + "\n" + numero1 + " < " + numero2; if ( numero1 > numero2 ) resultado = resultado + "\n" + numero1 + " > " + numero2; if ( numero1 = numero2 ) resultado = resultado + "\n" + numero1 + " >= " + numero2; // Mostrar los resultados JOptionPane.showMessageDialog( null, resultado, "Resultados de la comparacion", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // terminar la aplicación } // fin del método main } // fin class Comparación 13
Introducción a la Programación en Java 6. Instrucciones de Control: Parte 1 Java tiene tres tipos de estructuras de selección. La estructura if selecciona una acción si la condición es verdadera, o evita la acción si la condición es falsa. La instrucción if…else realiza una acción si la condición es verdadera, o realiza una acción distinta si la acción es falsa. La instrucción switch realiza una de entre varias acciones, dependiendo del valor de la expresión. La instrucción if es una estructura de selección simple, ya que selecciona o ignora una sola acción (o un solo grupo de acciones). La instrucción if…else es una estructura de selección doble, ya que selecciona entre dos acciones distintas (o grupos de acciones). La instrucción switch es una estructura de selección múltiple, ya que selecciona entre diversas acciones (o grupos de acciones). Java también cuenta con tres estructuras de repetición (estructuras de ciclo) que permiten a los programas ejecutar acciones en forma repetida, siempre y cuando una condición llamada la condición de continuación de ciclo siga siendo verdadera. Las estructuras de repetición se implementan con las instrucciones while, do…while y for. Las instrucciones while y for realizan la acción (o grupo de acciones) cero o más veces, si la condición de continuación de ciclo inicialmente es falsa, no se realiza ninguna acción. La instrucción do…while realiza la acción una o más veces. Repetición controlada por un contador 14
Introducción a la Programación en Java Repetición controlada por un centinela // Fig. 4.9: Promedio2.java // Programa del promedio de una clase mediante la repetición controlada por // centinela. import java.text.DecimalFormat; // clase para dar formato a los números import javax.swing.JOptionPane; public class Promedio2 { public static void main( String args[] ) { int total; // suma de las calificaciones int contadorCalif; // número de calificaciones introducidas int calificacion; // valor de la calificación double promedio; // número con punto decimal para el promedio String cadenaCalif; // calificación introducida por el usuario // fase de inicialización total = 0; // incializar el total contadorCalif = 0; // inicializar contador de ciclo 15
Introducción a la Programación en Java // fase de procesamiento // obtener la primera calificación del usuario cadenaCalif = JOptionPane.showInputDialog( "Escriba calificación como entero o -1 para salir:" ); // convertir cadenaCalif en int calificacion = Integer.parseInt( cadenaCalif ); // iterar hasta que el usuario introduzca el valor centinela while ( calificacion != -1 ) { total = total + calificacion; // sumar calificacion al total contadorCalif = contadorCalif + 1; // incrementar el contador // obtener siguiente calificación del usuario cadenaCalif = JOptionPane.showInputDialog( "Escriba calificación como entero o -1 para salir:" ); // convertir cadenaCalif en int calificacion = Integer.parseInt( cadenaCalif ); } // fin de instrucción while // fase de terminación DecimalFormat dosDigitos = new DecimalFormat( "0.00" ); // si el usuario introdujo al menos una calificación... if ( contadorCalif != 0 ) { // calcular el promedio de todas las calificaciones introducidas promedio = (double) total / contadorCalif; // mostrar el promedio con dos dígitos de precisión JOptionPane.showMessageDialog( null, "El promedio de la clase es " + dosDigitos.format( promedio ), "Promedio de la clase", JOptionPane.INFORMATION_MESSAGE ); } // fin de la parte if de la instrucción if...else else // si no se introdujeron calificaciones, imprimir el mensaje apropiado JOptionPane.showMessageDialog( null, "No se introdujeron calificaciones", "Promedio de la clase", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // terminar la aplicación } // fin de main } // fin de la clase Promedio2 Para este ejemplo podemos observar que en la línea 45 se declara dosdigitos como una referencia a un objeto de la clase DecimalFormat (paquete java.text). Los objetos DecimalFormat dan un formato a los números. En este ejemplo, decidimos mostrar el promedio de la clase con dos dígitos a la 16
Introducción a la Programación en Java derecha del punto decimal. La línea 45 crea un objeto DecimalFormat que se inicializa con el patrón “0.00”. Cada 0 especifica la posición de dígito en el número de punto flotante con formato. La palabra clave new comienza una expresión de creación de instancia de una clase, la cual crea un objeto del tipo especificado a la derecha de new. El proceso de crear nuevos objetos se conoce también como crear una instancia de, o instanciar un objeto. El valor entre paréntesis después del tipo de la expresión de creación de la instancia de una clase se utiliza para inicializar (dar un valor) al nuevo objeto. A la referencia dosDigitos se le asigna el valor de la operación new, que es una referencia al nuevo objeto. La instrucción de la línea 45 se lee como “dosDigitos obtiene el valor de new DecimalFormat(“0.00”)”. Estructuras de Control Anidadas // Analisis.java // Análisis de los resultados de un examen. import javax.swing.JOptionPane; public class Analisis { public static void main( String args[] ) { // inicializar variables en las declaraciones int aprobados = 0; // número de aprobados int reprobados = 0; // número de reprobados int contadorEstudiantes = 1; // contador de estudiantes int resultado; // resultado de un examen String entrada; // valor introducido por el usuario String salida; // cadena de salida //procesar 10 estudiantes utilizando un ciclo controlado por contador while ( contadorEstudiantes
Introducción a la Programación en Java // fase de terminación; preparar y mostrar resultados salida = "Aprobados: " + aprobados + "\nReprobados: " + reprobados; // determinar si aprobaron más de 8 estudiantes if ( aprobados > 8 ) salida = salida + "\nAumentar colegiatura"; JOptionPane.showMessageDialog( null, salida, "Análisis de resultados del examen", JOptionPane.INFORMATION_MESSAGE ); System.exit( 0 ); // terminar la aplicación } // fin de main } // fin de la clase Analisis 7. Introducción a los Applets en Java Los Applets son subprogramas hechos en Java que se puede inscrustar en un documento HTML. Cuando un navegador carga una página Web que contiene un applet, éste se descarga en el navegador Web y comienza a ejecutarse. Esto nos permite crear programas que cualquier usuario pueda ejecutar con sólo cargar la página Web correspondiente. El navegador que ejecuta un applet se conoce como contenedor de applets. Applet simple en Java: Cómo dibujar una cadena 18
Introducción a la Programación en Java Eje x Eje y Menú Ventana del appletviewer Subprograma La barra de estado imita a La esquina superior la que se mostraría en la izquierda del área de dibujo barra de estado del es la ubicación (0,0). El navegador, a medida que área de dibujo termina justo se carga el applet y encima de la barra de comienza a ejecutarse. estado. Las coordenadas x Coordenada de píxel (25,25) en se incrementan de donde se muestra la cadena izquierda a derecha. Las coordenadas y se incrementan de arriba hacia abajo. Esquina superior izquierda del área de dibujo Coordenada de píxel (25,25) Barra de Estado Este programa muestra varias características importantes de Java. Consideraremos cada una de las líneas de programa detalladamente. La línea 17 hace el verdadero trabajo del programa: dibujar la cadena ¡Bienvenido a la programación en Java! en la pantalla. Comencemos desde el principio. La línea 5 import java.awt.Graphics; // importar la clase Graphics 19
Introducción a la Programación en Java es una declaración import que indica que el applet utiliza la clase Graphics del paquete java.awt. Esta clase permite a un applet de Java dibujar gráficos, como líneas, rectángulos, óvalos y cadenas de caracteres. La línea 6 import javax.swing.JApplet; // importar la clase JApplet es otra declaración import, la cual indica que el applet utiliza la clase JApplet del paquete javax.swing. Al crear un applet en Java 2, debe importarse la clase JApplet. Al igual que con las aplicaciones, todos los applets de Java contienen cuando menos una declaración de clase pública. Una característica clave de las declaraciones de clases es que los programadores raras veces crean sus clases desde “cero”. De hecho, cuando se crea una declaración de clase, normalmente se utilizan piezas de una declaración de clase existente. Java utiliza la herencia para crear nuevas clases a partir de las declaraciones de clase existentes. La línea 8 public class SubprogramaBienvenido extends JApplet { comienza con la declaración class para la clase SubprogramaBienvenido e introduce la declaración de la clase. El cuerpo de la clase esta delimitados por llaves. La palabra clave extends indica que la clase SubprogramaBienvenido hereda los miembros existentes (datos y métodos) de otra clase. La clase que se hereda en este punto es JApplet y aparece a la derecha de la palabra clave extends. En esta relación de herencia, JApplet se conoce como la superclase y SubprogramaBienvenido se conoce como la subclase. El uso de la herencia produce que SubprogramaBienvenido tenga los atributos (datos) y comportamientos (métodos) de la clase JApplet así como las nuevas características que agregaremos en nuestra de declaración de la misma clase. Nosotros extedemos la clase JApplet porque alguien más ya definió lo que significa ser un applet. Los contenedores de applets esperan que todos los applets de Java tengan ciertos comportamientos (métodos). De hecho, u contenedor de applets espera que cada applet que ejecute tenga más de 200métodos distintos. Hasta este momento hemos definido un método en cada uno de los programas que hemos diseñado, si tuviéramos que definir 200, nunca crearíamos un applet. El uso de extends para heredar de la clase JApplet nos permite crear nuevos applets rápidamente, al definir solamente lo que es nuevo y distinto acerca de nuestros applets. El mecanismo de herencia es fácil de utilizar; el programador no necesita conocer todos los detalles acerca de la clase JApplet ni de cualquier otra especie que vaya a heredar a una nueva clase. El programador sólo necesita saber que la clase JApplet define las capacidades requeridas para crear el applet mínimo. Las clases se utilizan como plantillas o planos de construcción para instanciar (crear) objetos, de manera que puedan utilizarse en los programas. Un objeto (o instancia de clase) reside en la memoria de la computadora y 20
Introducción a la Programación en Java contiene la información utilizada por el programa. El término objeto normalmente implica que los atributos (datos) y comportamientos (métodos) están asociados con el objeto. Los métodos del objeto utilizan sus atributos para proporcionar servicios útiles al cliente del objeto (código de programa que llama a los métodos). Cuando el contenedor de applets carga la clase SubprogramaBienvenido, al contenedor crea un objeto de tipo SubprogramaBienvenido que implementa los atributos y comportamientos del applet. El contenedor de applets es el cliente del objeto SubprogramaBienvenido; es decir, el contenedor de applets llamará a los métodos de SubprogramaBienvenido . Los contenedores de applets pueden crear sólo objetos de clases que sean public y que extiendan a JApplet. Por lo tanto, los contenedores de applets requieren que las declaraciones de clase de los applets empiecen con la palabra clave public, de no ser así, el contenedor de applets no podrá cargar ni ejecutar el applet. La línea 11 public void paint( Graphics g ) comienza con la declaración del método paint del applet, que es uno de los tres métodos del applet, que el contenedor de applets llama cuando éste empieza a ejecutar el applet. En orden estos métodos son init, start y paint. La clase del applet recibe una versión gratuita de cada uno de estos métodos de la clase JApplet. Sin no se declaran estos métodos en el applet, el contenedor de applets llama a las versiones heredadas, dichos métodos tienen cuerpos vacíos. Para que nuestro applet pueda dibujar, la clase SubprogramaBienvenido sobrescribe la versión de paint de la superclase, colocando instrucciones en el cuerpo de paint para dibujar un mensaje en pantalla. Cuando el contenedor de applets indica al applet que se dibuje a sí mismo es la pantalla mediante una llamada al método paint, aparece el mensaje en la pantalla. Las líneas 11 a 19 declaran el método paint, que dibuja gráficos (líneas, óvalos y cadenas de caracteres en un applet. La palabra clave void (línea 11) indica que este método no devuelve resultados. Los paréntesis indican el conjunto de parámetros para el método paint. Generalmente los programadote pasan datos mediante una llamada al método. Al escribir applets, no se llama al método paint en forma explícita. En vez de eso, el contenedor de applets llama a paint para decirle al applet que dibuje y el contenedor de applets pasa un argumento a paint: un objeto Graphics (conocido como g), que paint requiere para realizar su tarea. Es responsabilidad del contenedor de applets crear el objeto Graphics al que se refiere g. el método paint utiliza la referencia (g) al objeto Graphics para crear dibujos en los applets. Es necesario que se utilice la palabra reservada public al inicio de la línea 11 para que el contenedor de applets pueda llamar al método paint. La línea 14 super.paint( g ); 21
Introducción a la Programación en Java llama a la versión del método paint de la superclase JApplet. Por el momento esta debe ser la primera instrucción en todas las declaraciones del método paint. La línea 17 g.drawString("¡Bienvenido a la programación en Java!",25, 25); indica que la computadora debe dibujar los caracteres de la cadena definida. Esta instrucción utiliza el método drawString de la clase Graphics, el cual proporciona capacidades de dibujo. La instrucción llama a drawString utilizando la referencia g de la lista de parámtros de paint, seguida por un separador punto (.), al cual le sigue el nombre del método, seguida de unos paréntesis que indica los argumentos que necesita el método para realizar su tarea. La g al inicio de la instrucción indica que paint debe utilizar el objeto Graphics que el contenedor de applets pasa a paint. El primer argumento para drawString es la cadena que va a dibujar. Los últimos dos argumentos en la lista (25,25) son las coordenadas x e y en donde va a aparecer la esquina inferior izquierda de la cadena. Los métodos de la clase Graphics requieren de coordenadas que indiquen en donde dibujar. El sistema de coordenadas en Java es el siguiente: las coordenadas se miden a partir de la esquina superior izquierda del applet, en píxeles. Un píxel es una unidad de resolución para la pantalla de la computadora. Cada píxel tiene un par de coordenadas que describe la posición de este píxel en la pantalla. En el appletviewer la coordenada (0,0) de applet aparece justo debajo del menú Subprograma. En un navegador Web, dicha coordenada aparece en la esquina superior izquierda del área rectangular en la que se ejecuta el applet. El tamaño de un applet depende del tamaño y resolución de la pantalla. +x (0,0) Eje X +y (x,y) Eje Y Compilación y ejecución del applet Al igual que con las clases de la aplicaciones, es necesario que compilemos la clase de un applet para poder ejecutarla: 22
Introducción a la Programación en Java javac NombreDeArchivo.java Los applets se incrustan en páginas Web para ejecutarse en un contenedor de applets (appletviewer o un navegador). Antes de poder ejecutar el applet es necesario crear el documento HTML para cargar el applet en el contenedor de applets, de manera que este archivo indique cuál applet va a cargar y que ejecute el cargador de applets. El elemento applet tiene varios atributos. El primero de éstos es code = “SubprogramaBienvenido.class”, indica que el archivo class específicado contiene la clase del applet compilada. El segundo y tercer atributo indican la anchura y altura del applet (width, height). El appletviewer comprende solamente las etiquetas HTML y , por lo que algunas veces se conoce como el navegador mínimo (ignora todas las demás etiquetas de HTML). El appletviewer nos permite probar los applets y asegurar que se ejecute correctamente. Para ejecutar el appletviewer, simplemente escribimos lo siguiente en la línea de comandos: Appletviewer NombreDeArchivo.html Dibujar cadenas y líneas Dibujar cadenas y líneas (continuación) 23
Introducción a la Programación en Java Las líneas 17 y 20 del método paint g.drawLine( 15, 10, 250, 10 ); g.drawLine( 15, 30, 250, 30 ); usan el método drawLine de la clase Graphics para indicar que el objeto al que g hace referencia debe dibujar dos líneas. Dicho método requiere de cuatro argumentos que representan los dos puntos finales de la línea en el applet: la coordenada x, la coordenada y del punto inicial de la línea, y la coordenada x, la coordenada y del punto final de la recta. Todos los valores de las coordenadas se especifican con respecto a la coordenada (0,0). Coordenada Coordenada (15, 10) (250, 10) Coordenada Coordenada (15, 30) (250, 30) Agregar números de punto flotante 24
Introducción a la Programación en Java // SubprogramaSuma.java // Suma dos números de punto flotante. // paquetes de Java import java.awt.Graphics; // importar la clase Graphics import javax.swing.*; // importar el paquete javax.swing public class SubprogramaSuma extends JApplet { double suma; // la suma de los valores introducidos por el usuario // inicializar el subprograma, obteniendo los valores del usuario public void init() { String primerNumero; // primera cadena introducida por el usuario String segundoNumero; // segunda cadena introducida por el usuario double numero1; // primer número a sumar double numero2; // segundo número a sumar // obtener el primer número del usuario primerNumero = JOptionPane.showInputDialog( "Escriba el primer valor de punto flotante" ); // obtener el segundo número del usuario segundoNumero = JOptionPane.showInputDialog( "Escriba el segundo valor de punto flotante" ); // convertir los números de tipo Stromg a tipo double numero1 = Double.parseDouble( primerNumero ); numero2 = Double.parseDouble( segundoNumero ); // sumar los números suma = numero1 + numero2; } // fin del método init // dibujar los resultados en un rectángulo en el fondo del subprograma public void paint( Graphics g ) { // llamar a la versión del método paint de la superclase super.paint( g ); // dibujar un rectángulo, empezando desde (15, 10), que tenga 270 // píxeles de ancho y 20 píxeles de alto g.drawRect( 15, 10, 270, 20 ); // dibujar los resultados como String en (25, 25) g.drawString( "La suma es " + suma, 25, 25 ); } // fin del método paint } // fin de la clase SubprogramaSuma 25
Introducción a la Programación en Java Una vez más, utilizamos JOptionPane.showInputDialog para solicitar datos de entrada al usuario. El applet calcula la suma de los valores de entrada y muestra el resultado, dibujando una cadena dentro de un rectángulo en el applet. La línea 5 import java.awt.Graphics; // importar la clase Graphics importa la clase Graphics (del paquete java.awt) para utilizarla en este applet. En realidad no se requiere la declaración import de la línea 5, si siempre utilizamos el nombre completo de la clase Graphics (java.awt.Graphics), que incluye el nombre completo del paquete y el nombre de la clase. Por ejemplo, la primera línea del método paint podría escribirse de la siguiente manera: public void paint ( java.awt.Graphics g ) La línea 6 import javax.swing.*; // importar el paquete javax.swing especifica al compilador que todas las clases del paquete javax.swing están disponibles para este applet. El asterisco (*) indica que todas las clases en el paquete java.swing (como JApplet y JOptionPane) deben estar disponibles para el compilador. Sin embargo, esto no hace que todas las clases del paquete se carguen en memoria cuando el programa empieza a ejecutarse; sólo se cargarían aquellas clases que se utilicen en el programa. Esto nos permite utilizar nombres simples, el nombre de la clase en sí de cualquier clase del paquete. La línea 8 comienza con la declaración de la clase SubprogramaSuma e indica que esta clase hereda JApplet. public class SubprogramaSuma extends JApplet { La línea 9 double suma; // la suma de los valores introducidos por el usuario declara que la variable suma es una variable del tipo primitivo double, como la variable está declarada dentro del cuerpo de la declaración de la clase, pero fuera de los cuerpos de todas las declaraciones de los métodos de la clase, es una instrucción de declaración de variable para un campo. Cada instancia de la clase contiene una copia de cada campo. Un beneficio de los campos es que todos los métodos de la clase pueden usarlos. Las variables que se declaran en el cuerpo de un método específico se conocen como variables locales, y pueden utilizarse solamente en el cuerpo de este método. Otra de las distinciones entre los campos y las variables locales es que los campos tienen valores predeterminados y las variables locales no. El valor predeterminado para un campo de tipo double es 0.0. 26
Introducción a la Programación en Java Este applet contiene los métodos: init (líneas 12 a 35) y paint (líneas 38 a 50). Cuando un contenedor de applets carga un applet, el contenedor crea una instancia de la clase del applet y llama a su método init. El contenedor de applets llama al método init sólo una vez durante la ejecución de un applet. El método init normalmente inicializa los campos del applet (si se necesitan inicializarse con valores distintos a los predeterminados) y realiza tareas que deben ocurrir una sola vez, cuando el applet comienza a ejecutarse. Es en este punto donde el applet crea la interfaz gráfica de usuario. La línea del método init siempre aparece como: public void init() Los tipos en Java se dividen en dos categorías: tipos primitivos y tipos de referencia (conocidos también como tipos no primitivos). Los tipos primitivos son: boolean, char, byte, short, int, long, flota y double. Las variables de estos tipos pueden cada una, guardar exactamente un tipo de su valor declarado. Todos los tipos no primitivos son tipos de referencia, por lo que todas las clases son tipos de referencia. Los programas utilizan variables de tipo referencia para referirse a los objetos del programa. Dichas referencias contienen la ubicación de un objeto en la memoria de la computadora, el cual puede contener muchas piezas de datos y podría tener muchos métodos. Una variable de tipo primitivo no puede usarse para invocar un método. Sin embargo, un uso importante de una referencia es para invocar métodos de cierto objeto. String primerNumero; // primera cadena introducida por el usuario String segundoNumero; // segunda cadena introducida por el usuario double numero1; // primer número a sumar double numero2; // segundo número a sumar En este punto, el método init del applet regresa y el contendor del applet llama al método start de applet, como se puede observar, dicho método no se declaró en este applet, por lo que se llama al que hereda de la clase JApplet. Generalmente, el método start se utiliza con un concepto avanzado conocido como subprocesamiento múltiple. 27
Introducción a la Programación en Java 8. Instrucciones de Control: Parte 2 Instrucción de repetición while El método drawLine requiere de cuatro argumentos, los cuales representan la primera coordenada x, la primera coordenada y, la segunda coordenada x y la segunda y de la línea. En este ejemplo, la segunda coordenada y cambia de valor durante cada iteración en el ciclo, con el cálculo contador*10. Este cambio hace que el segundo punto (punto final de la línea) se mueva en cada llamada a drawLine 10 pixeles hacia abajo del área visible del applet. Instrucción de repetición for 28
Introducción a la Programación en Java Cálculo del interés compuesto Una persona invierte $1000.00 en una cuenta de ahorro que produce el 5% de interés. Suponiendo que todo el interés se deposita en la cuenta, calcule e imprima el monto de dinero en la cuenta final de cada año, durante 10 años, use la siguiente fórmula para determinar los montos: c p (1 t ) n En donde, p es el monto que se invirtió originalmente, t es la tasa de interés anual, no es el número de años y c es la cantidad depositada al final del n-ésimo año. 29
Introducción a la Programación en Java Las líneas 18 y 19 declaran la referencia formatoMoneda de tipo NumberFormat, y se inicializa llamando al método estático getCurrencyInstance de NUmberFormat. Este método devuelve un objeto NumberFormat que puede dar formato a los valores numéricos como cantidades monetarias. El argumento para el método (Locale.US) indica que los valores monetarios deberán almacenarse en dólares estadounidenses: deben comenzar con un signo de dólares ($), usar un punto decimal para separar los dólares de los centavos y utilizar una coma para indicar los miles. La clase Locale proporciona constantes que pueden utilizarse para personalizar este programa y representar valores monetarios de otros países, de manera que los formatos de moneda se muestren apropiadamente para cada configuración regional. La clase NumberFormat se encuentra en el paquete java.text y la clase Locale que se encuentra en el paquete java.util. La línea 22 declara la referencia areaTextoSalida del tipo JTextArea y la inicializa con un nuevo objeto de la clase JTextArea (java.swing). Un objeto JTextArea es un componente de la GUI que puede mostrar muchas líneas de texto. El cuadro de diálogo de mensaje que muestra el objeto JTextArea determina la anchura y la altura de ese objeto, con base en la cadena que contiene. Un objeto JTextArea cuando se combina con otro componente llamado JScrollPane nos permite desplazarnos a través de las líneas de texto, de manera que podamos ver toda la salida del programa. Los métodos para colocar texto en un objeto JTextArea incluyen setText y append. La línea 25 utiliza el método setText de JTextArea para colocar una cadena en el objeto JTextArea al que areaTextoSalida hace referencia. Inicialmente, un objeto JTextArea contiene una cadena vacía (es decir, una cadena que no contiene caracteres). La instrucción anterior remplaza la cadena vacía con una que contiene los encabezados para nuestras dos columnas de salida: “Año” y “Cantidad en depósito”. Los encabezados de las columnas se separan con un carácter tabulación (\n). Además, la cadena contiene el carácter de nueva línea (\n), el cual indica que cualquier texto que se agregue al objeto JTextArea empezará en la siguiente línea. La instrucción for ejecuta su cuerpo 10, modificando la variable de control anio. Java no incluye el operador de exponenciación. Por lo tanto, utilizamos el método estático pow de la clase Math, Math.pow(x,y). La línea 31 realiza el cálculo del enunciado del problema. Las líneas 34 y 35 agregan mediante append, más texto al final de salidaAreatexto. El texto incluye el valor actual de anio, un carácter de tabulación, el resultado de la llamada al método moneyFormat.format y un carácter de nueva línea. Las líneas 40 y 41 muestran los resultados de los cálculos en un cuadro de diálogo de mensaje. Una característica interesante de la clase JOptionPane es que el mensaje que muestra con showMessageDialog puede ser una cadena o una componente de GUI, como JTextArea. Instrucción de repetición do…while 30
Introducción a la Programación en Java La instrucción do…while es similar a la instrucción while; ya que el programa evalúa la condición de continuación de ciclo al principio, antes de ejecutar el cuerpo del ciclo. Si la condición es falsa, el cuerpo del ciclo while nunca se ejecutará. La estructura de repetición do…while evalúa la condición de continuación de ciclo después de ejecutar el cuerpo del ciclo; por lo tanto, el cuerpo del ciclo siempre se ejecutará cuando menos una vez. Dibujar 10 círculos anidados, utilizando do…while Los cuatro argumentos que representan la coordenada x superior izquierda, las coordenada y superior izquierda, la anchura y la altura del cuadro delimitador del óvalo se calculan con base en el valor de contador. Comienza dibujando el círculo más interno. Instrucción de selección múltiple switch Java cuenta con la instrucción switch de selección múltiple para realizar distintas acciones, con base en los posibles valores de una variable o expresión entera. Cada acción se asocia con un valor integral constante (es decir, un valor de tipo byte, short, int o char, pero no long) que la variable o expresión puede asumir. Applet para dibujar líneas, rectángulos u óvalos, con base en lo que el usuario introduce mediante un cuadro de diálogo de entrada. // PruebaSwitch.java // Dibujar líneas, rectángulos u óvalos con base en la entrada del usuario. import java.awt.Graphics; 31
Introducción a la Programación en Java import javax.swing.*; public class PruebaSwitch extends JApplet { int opcion; // la opcion del usuario en cuanto a cuál figura dibujar // inicializar el subprograma, obteniendo la opción del usuario public void init() { String entrada; // la entrada del usuario // obtener la opción del usuario entrada = JOptionPane.showInputDialog( "Escriba 1 para dibujar líneas\n" + "Escriba 2 para dibujar rectángulos\n" + "Escriba 3 para dibujar óvalos\n" ); opcion = Integer.parseInt( entrada ); // convertir entrada en int } // fin del método init // dibujar figuras en el fondo del subprograma public void paint( Graphics g ) { super.paint( g ); // llamar al método paint heredado de JApplet for ( int i = 0; i < 10; i++ ) { // iterar 10 veces (0-9) switch ( opcion ) { // determinar la figura a dibujar case 1: // dibujar una línea g.drawLine( 10, 10, 250, 10 + i * 10 ); break; // fin de procesamiento de case case 2: // dibujar un rectángulo g.drawRect( 10 + i * 10, 10 + i * 10, 50 + i * 10, 50 + i * 10 ); break; // fin de procesamiento de case case 3: // dibujar un óvalo g.drawOval( 10 + i * 10, 10 + i * 10, 50 + i * 10, 50 + i * 10 ); break; // fin de procesamiento de case default: // dibujar cadena indicando que se escribió un valor incorrecto g.drawString( "Se escribió un valor incorrecto", 10, 20 + i * 15 ); } // fin de instrucción switch } // fin de instrucción for } // fin del método paint 32
También puede leer