106
Programación en Java - i UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA La Universidad Católica de Loja MODALIDAD VIRTUAL DE EDUCACIÓN A DISTANCIA CURSO ONLINE MATERIAL DE USO DIDÁCTICO PARA ESTUDIANTES DE LA UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA, PROHIBIDA SU REPRODUCCIÓN TOTAL O PARCIAL POR CUALQUIER MEDIO. (TIPO DERECHOS) APRENDIENDO JAVA GUíA DIDÁCTICA VIRTUAL

Guia de Java Version final ver 1_5

Embed Size (px)

Citation preview

Page 1: Guia de Java Version final ver 1_5

Programación en Java - i

UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA

La Universidad Católica de Loja

MODALIDAD VIRTUAL DE EDUCACIÓN A DISTANCIA

CURSO ONLINE

MATERIAL DE USO DIDÁCTICO PARA ESTUDIANTES DE LA UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA, PROHIBIDA SU REPRODUCCIÓN TOTAL O PARCIAL POR CUALQUIER MEDIO. (TIPO DERECHOS)

APRENDIENDO

JAVA GUíA DIDÁCTICA VIRTUAL

Page 2: Guia de Java Version final ver 1_5

Programación en Java - ii

INTRODUCCIÓN Hoy en día cuando la tecnología esta presente en todas las ciencias es importante tener un conocimiento de las técnicas mas avanzadas en cuanto al desarrollo de soluciones que optimicen al máximo los recursos y sobre todo nos permitan dar soluciones seguras y de alto nivel a nuestras necesidades. Una de estas tecnologías es la Internet y sin lugar a duda el lenguaje Java que actualmente es una herramienta muy importante de desarrollo para la Web, esto gracias a su independencia de la plataforma en que se ejecuta, seguridad que presenta al no permitir acceso a recursos no autorizados y las posibilidades que presenta para trabajo en red. Adicionalmente el aprendizaje de Java tiene gran importancia ya que es un punto de partida muy importante en el dominio de la programación Orientada a Objetos; pues hoy en día que esta filosofía de programación domina los entornos de programación será muy importante para nuestra formación profesional trabajar con una herramienta la misma que es eminentemente orientada a Objetos. Aprender Java es realmente interesante ya que este lenguaje dispone de un sinnúmero de APIs los mismos que permiten desarrollar aplicaciones orientadas a los entornos de tipo: gráfico, de sonido, video, aplicaciones para Internet, telefonía, TV, Bases de Datos, etc. El propósito de este curso es desarrollar aplicaciones de usuario final en el Lenguaje Java, que le permita al estudiante utilizar otras tecnologías como motores de bases de datos conjuntamente con este lenguaje y que sirva de base para el desarrollo de aplicaciones avanzadas que se ejecutan en un servidor Web tales como: servlets y jsp. El desarrollo del curso se realiza en base a los siguientes capítulos los cuales se describen en forma breve a continuación: El primer capitulo se llama “Introducción al lenguaje Java”; en el mismo se explica las características, instalación del entorno de desarrollo, utilización de las diferentes herramientas, se explica que es una Aplicación y que es un Applet, y se termina con una primera aplicación a la cual le haremos un análisis bien detallado. El segundo capitulo se llama “Programación orientada a Objetos”; En este se estudia toda la filosofía, que es una clase, que es un objeto, un método, un atributo o propiedad, en definitiva se sientan todas las bases teóricas para posteriormente aplicar estos conceptos en nuestros programas Java.

Page 3: Guia de Java Version final ver 1_5

Programación en Java - iii

En el capitulo3 denominado “Sintaxis del lenguaje”, entraremos a trabajar ya en la fase de programación, estudiaremos la estructura de una aplicación, tipos de datos, conversión de datos, como declarar métodos, como crear objetos, uso de las estructuras de control, constructores, arreglos, igualmente veremos como se hace el control de excepciones para obtener programas fiables. En el capitulo 4 denominado “Programación Orientada a Objetos en Java”; estudiaremos la jerarquía de clases que tiene el lenguaje, aprenderemos a utilizar la documentación de la API de Java, igualmente estudiaremos las clases de uso común en Java como son “String” y “Math” para trabajar con cadenas de caracteres y con operaciones matemáticas respectivamente, también veremos como trabaja la herencia, esto es muy importante en los lenguajes orientados a Objetos En el segundo mes trabajaremos en el capitulo número 5 “Interfaz gráfica de usuario” en esta oportunidad utilizaremos la tecnología “Swing” para desarrollar aplicaciones que le permitan al usuario tener una interactividad gráfica con las aplicaciones. En este capitulo también trataremos sobre el desarrollo de Applets para nuestras paginas Web. En el capitulo 6 “Hilos en Java” estudiaremos una de las características mas potentes de Java, la misma que se refiere a la desarrollo de aplicaciones que ejecuten varios procesos simultáneamente. Finalmente en el capitulo 7 “Flujos y acceso a los archivos” estudiaremos como trata Java a los flujos de información desde y hacia las aplicaciones, igualmente es importante el estudio del acceso a la información de los archivos.

Page 4: Guia de Java Version final ver 1_5

Programación en Java - iv

OBJETIVOS Objetivos Generales

Conocer los conceptos relacionados con la Programación Orientada a Objetos.

Aplicar la teoría de Programación Orientada a Objetos en aplicaciones

desarrolladas en el lenguaje Java.

Aplicar el lenguaje de programación Java en el desarrollo de aplicaciones locales y para Internet(Applets).

Page 5: Guia de Java Version final ver 1_5

Programación en Java - v

CONTENIDOS PRIMER MES CAPITULO 1: Introducción al Lenguaje Java 1.1 Lenguajes de Programación 1.2 El Lenguaje Java. Características 1.3 Instalación del JDK (Java Development Kit) 1.4 Utilidades para compilar, ejecutar, etc 1.5 Aplicaciones y Applets 1.6 Estructura básica de un programa y primera aplicación 1.7 Análisis a nuestra primera aplicación CAPITULO 2: Programación Orientada a Objetos 2.1 ¿ Qué es Programación Orientada a Objetos ? 2.2 Clases 2.3 Objetos 2.4 Atributos, Propiedades 2.5 Métodos 2.6 Mensaje 2.7 Encapsulamiento, ocultación 2.8 Herencia CAPITULO 3: Sintaxis del Lenguaje. 3.1 Estructura de una aplicación 3.2 Tipos de Datos 3.3 Declaración de Métodos 3.4 Operadores y Expresiones 3.5 Estructuras de Control 3.6 Creación de objetos y acceso a sus miembros 3.7 Constructores 3.8 Arreglos y matrices 3.9 Paso de argumentos a una aplicación 3.10 Conversiones de Tipos de Datos 3.11 Sobrecarga de Constructores y Métodos 3.12 Control de Excepciones en Java CAPITULO 4: Programación Orientada a Objetos en JAVA 4.1 Jerarquía de Clases en Java. La API de Java 4.2 Miembros de Instancia y de Clase 4.3 Clases que encapsulan los tipos de Datos Primitivos

Page 6: Guia de Java Version final ver 1_5

Programación en Java - vi

4.4 Clases de Uso común. String, Math 4.5 Herencia en Java. Uso de “super” SEGUNDO MES CAPITULO 5: Interfaz Gráfica de Usuario con Swing 5.1 El paquete “javax.swing” 5.2 Contenedores y Componentes 5.3 Distribución de los Objetos en un Contenedor 5.4 Control de eventos en “Swing” 5.5 Applets 5.6 Ciclo de vida de un Applet 5.7 Paso de parámetros a un Applet CAPITULO 6: Hilos en Java 6.1 Como crear Hilos en Java 6.2 Estados de un Hilo CAPITULO 7: Flujos y acceso a los Archivos 7.1 Modelo de transmisión de datos mediante flujos (streams) 7.2 Escritura y Lectura de datos en los ficheros 7.3 Uso de las clases FileOutputStream y FileInputStream ANEXOS GLOSARIO

Page 7: Guia de Java Version final ver 1_5

Programación en Java - vii

ORIENTACIONES GENERALES PARA EL ESTUDIO

Para un mejor seguimiento de la guía de aprendizaje y aprovechamiento al máximo de sus contenidos se recomienda lo siguiente:

Lea detenidamente los objetivos de cada unidad, estos le darán una visión de lo que usted va ha aprender.

Cuando lea la guía didáctica trate de entender al máximo lo que ahí se le

explica y no olvide leer en el libro básico los temas que se le indican, esta lectura reforzará las explicaciones de la guía.

Desarrolle las autoevaluaciones y ejercicios planteados al final de cada

capítulo tanto en la guía didáctica como en el libro básico, esto le permitirá ir evaluando sus progresos.

Utilizaré la siguiente simbología para dar mayor claridad a esta guía

Reforzar los conocimientos. El estudiante debe reforzar el contenido del tema investigando en el libro guía o en la fuente bibliográfica que se le indique.

Material multimedia Le permite al estudiante acceder a recursos de audio o video relacionados con el tema en estudio.

Documentación en Internet Información, herramientas de desarrollo o demostraciones en Internet.

Autoevaluaciones, ejercicios planteados En cada capitulo el estudiante dispondrá de una serie de preguntas y/o ejercicios para evaluar su avance.

Indicaciones del Profesor El profesor dará indicaciones puntuales; ya sean metodológicas como también para revisar el código de un ejercicio en particular

Símbolo utilizado en las líneas de código Se utiliza para indicar la continuación de una sola línea de código.

Recuerde que la manera más fácil y rápida de aprender es disfrutando del

estudio, piense en que durante el curso usted desarrollará aplicaciones muy atractivas.

Al final de la presente guía existe un Glosario en el cual constan todos los

términos técnicos que utilizaremos en la guía y otros adicionales, estos le pueden ser muy útiles en su estudio.

Page 8: Guia de Java Version final ver 1_5

Programación en Java - viii

Cualquier inquietud o comentario consulte con su profesor.

En el “cd rom” que acompaña a la presente guía usted dispone de: el instalador del JDK 1.4, documentación de la API de Java, utilitarios, software de desarrollo, manuales; los mismos que le serán de mucha utilidad durante el curso.

Page 9: Guia de Java Version final ver 1_5

Programación en Java - ix

BIBLIOGRAFÍA Libro básico

PAUL S. WANG, Java con programación orientada a objetos y aplicaciones en la www, Mexico, THOMSON Editores, 1999. Este libro responde a las necesidades del estudiante, principalmente en lo referente a los primeros capítulos, pues los mismos están claramente explicados en este texto; adicionalmente en la guía didáctica se hace referencia a las partes del libro que el estudiante debe revisar para reforzar los conocimientos. Por otra parte, este texto tiene una secuencia lógica de aprendizaje muy aceptable; es importante también mencionar que dispone de ejercicios al final de cada capitulo, los cuales es recomendable que el alumno los vaya desarrollando de acuerdo al avance del curso.

Bibliografía complementaria

FCO. JAVIER CEBALLOS, JAVA 2, Curso de Programación, Madrid, Alfaomega. Este libro tiene dos aspectos muy importantes: por un lado la parte teórica es muy explicativa en cuanto al lenguaje Java y en cuanto a la Programación Orientada a Objetos y por otro lado dispone de ejercicios desarrollados que complementan muy bien los contenidos del texto. Igualmente dispone de una serie de ejercicios propuestos que le ayudan al estudiante a aplicar los conocimientos adquiridos.

Sitios de Internet

http://java.sun.com/ http://javaboutique.internet.com/ http://www.developer.com/java/ http://www.java.com/en/index.jsp http://java.programacion.net/ http://usuarios.lycos.es/froufe/ http://www.juegosjava.com/ http://www.microjavacenter.com/

Page 10: Guia de Java Version final ver 1_5

Programación en Java - 1

PRIMER MES

Page 11: Guia de Java Version final ver 1_5

Programación en Java - 2

INTRODUCCIÓN AL LENGUAJE JAVA En este primer capítulo del presente curso quiero nuevamente darles la bienvenida y desearles éxitos en el proceso de aprendizaje, adicionalmente por indicarles que es muy importante leer las primeras secciones de la guía como son: Introducción, Objetivos, Orientaciones de Estudio; esto con el propósito de tener bien claro los objetivos que nos hemos planteado y lo que es más importante cómo llevaremos el presente curso. Objetivos

Explicar desde el punto de vista teórico la naturaleza y características del lenguaje Java

Emplear las indicaciones que en este capítulo se explican sobre la

instalación del entorno de programación, así como para codificar, compilar y ejecutar aplicaciones.

1.1 Lenguajes de Programación

¿Qué es un lenguaje de programación?; Los humanos utilizamos el lenguaje hablado para expresar nuestras ideas y sentimientos, de igual manera necesitamos un medio o lenguaje para indicarle al ordenador la secuencia de instrucciones que debe efectuar para ejecutar una tarea o proceso determinado, estas instrucciones se las expresa a través de un Lenguaje de programación, a continuación presento un extracto el mismo que nos habla sobre el término programación:

Analice los siguientes párrafos y elabore su propio concepto sobre los Lenguajes de Programación.

Page 12: Guia de Java Version final ver 1_5

Programación en Java - 3

“Dicho de la manera más sencilla, la programación es el proceso de diseñar un conjunto de instrucciones que puede ejecutar una computadora para resolver un problema. Esto parecería un ejercicio directo; si se reemplaza la palabra computadora con persona, es algo que hacemos cada vez que damos instrucciones a un automovilista para llegar a la oficina de correos más cercana. Basta proporcionar una lista no ambigua de instrucciones que pueda seguir el receptor: “Continúe de frente tres kilómetros, dé vuelta ala izquierda en el primer semáforo y luego siga derecho hasta que vea la escuela. La oficina de correos esta justo después de la escuela, a la izquierda”. La diferencia es que el receptor de tales instrucciones entiende el mismo lenguaje que su emisor. La computadora no lo hace así. De hecho, el único lenguaje que “entienden” las computadoras (en el sentido de que puedan ejecutar instrucciones en dicho lenguaje) dista mucho de los lenguajes humanos naturales como el español. En realidad, difícilmente podría crearse un lenguaje cuya comprensión generase más dificultades para las personas que el lenguaje de máquina usado en las computadoras. Es un tanto razonable considerar la historia de la programación como una sucesión de intentos para facilitar el proceso de la comunicación con las computadoras. A continuación se analizan los problemas de tal comunicación y las soluciones que han surgido” 1 1.2 El Lenguaje Java. Características Java es un lenguaje de programación de alto nivel, es decir que no requiere tener un conocimiento de la arquitectura física de la máquina para programar. Fue desarrollado por la empresa SUN Microsystems y es orientado a objetos; una de las principales ventajas que presenta este lenguaje es que es independiente de la plataforma es decir al mismo código se lo puede ejecutar y compilar en diferentes sistemas operativos sin necesidad de hacer cambios en este, esto es gracias al intérprete del lenguaje o maquina virtual de Java (JVM, Java Virtual Machine).

Lea los temas: Introducción, Componentes de Java y Características de Java en las paginas 1, 2, 6 del libro básico

1 Texto tomado del libro programación con JAVA de Decker Hirshfield, pagina 1

Page 13: Guia de Java Version final ver 1_5

Programación en Java - 4

Como nos podemos dar cuenta, programar en java es una tarea relativamente sencilla sobre todo si ya tienes conocimientos sobre Programación orientada a objetos y programación en el lenguaje “C” puesto que las instrucciones son muy similares. Adicionalmente a las características existen otras tales como:

Robusto: Java hace el manejo de memoria Interpretado: Puesto que Java corre en una maquina virtual

1.3 Instalación del JDK (Java Development Kit) Imagino que está esperando el momento de hacer su primer programa, pues ahí vamos pero en primer lugar instalaremos nuestro entorno de desarrollo y revisaremos las utilidades que éste nos presta. Evidentemente, para escribir programas se necesita un entorno de desarrollo Java el JDK (Java Development Kit). El instalador del JDK 1.4 lo puedes descargar desde el sitio www.java.sun.com, adicionalmente le comento que este instalador lo tiene disponible en el CD que acompaña a esta guía; el archivo se llama “j2sdk-1_4_0_01-windows-i586.exe” Haciendo doble clic sobre este archivo iniciamos la instalación:

En el CD que acompaña a la guía de estudio dispones de una presentación sobre la instalación del JDK

El programa por defecto se instalará en el directorio “C:\j2sdk1.4.0_01” obviamente usted puede instalarlo en cualquier directorio. Una vez finalizada la instalación se crea una estructura tal como indico a continuación.

Page 14: Guia de Java Version final ver 1_5

Programación en Java - 5

La carpeta “bin” contiene las herramientas de desarrollo. Esto es, los programas para compilar(javac), ejecutar(java), depura(jdb), documentar(javadoc), etc. los programas escritos en el lenguaje de programación Java.

JDK es el entorno de desarrollo que utilizan la mayoría de los profesionales. A pesar de que muchos programadores prefieren utilizar paquetes de desarrollo de otras formas, JDK aún se considera como la referencia en la implementación de Java. Si construimos y probamos una aplicación con JDK, debería funcionar en cualquier entorno de desarrollo, independientemente de la firma que lo haya creado. Aunque JDK puede crear y mostrar aplicaciones gráficas, su interfaz se basa en la línea de comandos. Por ejemplo, para ejecutar los programas hay que escribir los comandos en una ventana. Pero no nos asustemos. En realidad son bastante sencillos de utilizar. 1.4 Utilidades para compilar, ejecutar, … En el libro básico encontrará una serie de utilidades adicionales a las que le presento a continuación, que le recomiendo las lea, puesto que son muy necesarias para la compilación y ejecución de aplicaciones Java. En la versión 1.4 de JDK podemos encontrar entre otras las siguientes utilidades:

javac. El compilador de Java. Convierte el código fuente escrito en Java a bytecode.

java. El intérprete de Java. Ejecuta el bytecode de la aplicación en Java, directamente a partir de los archivos class.

appletviewer. Intérprete en Java que ejecuta las clases de los applet que se encuentran dentro de los archivos HTML.

javadoc. Crea documentación HTML basándose en el código fuente de. Java y en los comentarios que contiene.

jdb. El analizador de Java. Permite recorrer línea a línea el programa, analizando las variables y los puntos de interrupción.

javap. Desensamblador de Java. Muestra las funciones a las que puede acceder y, que se encuentran dentro de los archivos class compilados. También muestra el sentido del bytecode.

jar. Generador de archivos JAR. Estos archivos pueden trabajar con varios recursos y clases de Java que se pueden distribuir a través de un único archivo comprimido.

Estas utilidades deben ser accesibles desde cualquier directorio en el cual esté desarrollando las aplicaciones, esto se logra indicándole al Sistema Operativo en dónde buscar dichas utilidades; la variable de entorno PATH debe tener la ubicación exacta del directorio “bin” en el cual están dichas utilidades:

Page 15: Guia de Java Version final ver 1_5

Programación en Java - 6

SET PATH=“C:\Archivos de programa\j2sdk1.4.0_01\bin” En mi caso instalé el JDK en el directorio “C:\Archivos de programa\” y la ruta anteriormente escrita le indica al S.O. en qué lugar están las utilidades. Es recomendable colocar esta línea en el archivo “Autoexec.bat” para que la misma se ejecute cada vez que se encienda el ordenador, esto en el caso de Windows 98; si está trabajando en Windows XP en donde no tiene el archivo “Autoexec.bat” debe crear o editar la variable de entorno PATH, esto lo hace en el icono Mi PC Propiedades Opciones Avanzadas Variables de entorno; en el Grupo “Variables del sistema” tiene botones para crear esta variable o modificarla en el caso que ya exista. 1.5 Aplicaciones y Applets Un aspecto muy importante a tener en cuenta cuando desarrollemos programas en Java es saber si lo que vamos a programar es una aplicación o un Applet; una aplicación es un programa que lo ejecuta en su máquina directamente, es decir en la línea de comandos del sistema operativo pone la instrucción para ejecutar la aplicación; mientras que un Applet es igualmente un programa pero en este caso va insertado dentro de un Navegador Web que sea compatible con java (Internet Explorer o Nescape Navegator), en este curso empezaremos aprendiendo a programar aplicaciones para luego desarrollar Applets, vale la pena indicar que básicamente la programación es la misma (sintaxis, palabras reservadas) pero existe diferencia en cuanto a la estructura de estos dos tipos de programas, así mismo existe diferencia en cuanto a los parámetros que estos reciben; en el caso de las aplicaciones estos se reciben directamente desde la línea de comandos y en el caso de los Applets estos se envían directamente desde la pagina Web en la cual están insertados. 1.6 Estructura básica de un programa y primera aplicación

Lea la sección 1.1 ESTRUCTURA DE UN PROGRAMA EN JAVA y 1.2 UN PRIMER PROGRAMA en las paginas 10, 11, 12 del libro básico

Naturalmente para el desarrollo de aplicaciones será necesario un editor de texto el mismo que puede ser Edit, Notepad, WordPad, o cualquier otro, lo importante es tener un texto sin formato. Para desarrollar los ejercicios utilizaré el editor “Bloc de notas” de Windows, en este editor debe ingresar el código que muestro a continuación y que también esta en nuestro libro. Algo importante; durante este curso desarrollaremos aplicaciones y Applets, recomiendo un directorio de trabajo en el cual iremos probando nuestros ejercicios.

Page 16: Guia de Java Version final ver 1_5

Programación en Java - 7

Luego de digitar el código correspondiente a su programa debe grabarlo en el disco duro de su máquina, al grabarlo no olvide ponerle la extensión .java y el nombre del archivo debe ser el mismo nombre de la clase(class) en este caso la clase se llama Average, consecuentemente el nombre será “Average.java” esto es muy importante; en este punto quiero enfatizar que al grabar coloque el nombre del archivo con su extensión entre comillas esto nos evitará contratiempos posteriores al grabar archivos con otras extensiones. El siguiente paso luego de codificar un programa es compilar la aplicación y si ésta no tiene errores ya podremos ejecutar el programa.

La aplicación javac del JDK permite compilar el programa; los parámetros que esta recibe es el nombre del archivo(con extensión .java) que contiene el código fuente. Recuerde que el lenguaje java es sensible a mayúsculas y minúsculas, esto quiere decir que debe utilizar los nombres de archivos o variables tal como fueron declarados en el código.

Luego de compilar, naturalmente con 0 errores se podrá dar cuenta que se ha creado un archivo con extensión .class, este es el que se ejecutará posteriormente. A continuación procedemos a ejecutar la aplicación esto lo haremos con la utilidad java, podrá darse cuenta que en este caso no especificamos la extensión .java del fichero.

1.7 Análisis a nuestra primera aplicación // Average.java //

Page 17: Guia de Java Version final ver 1_5

Programación en Java - 8

En Java todo texto que inicie con: // significa que es un comentario, igualmente el texto que este entre /* y */ también será interpretado como comentario. class Average { En java la programación es orientada a Objetos, por lo tanto para toda aplicación será necesario declarar una o mas clases tal como lo indica la línea anterior. public static void main(String[] param) { Como en todos los lenguajes se tiene un método o programa principal, en java la ejecución del programa se inicia por el método main que es el principal, debe existir uno solo por cada clase; este método siempre debe ser público(public), estático(static), nunca devuelve valor alguno(void), y puede recibir cualquier cantidad de parámetros de tipo String en un arreglo de este tipo(variable param). int i = 11, j = 20; En esta línea declaramos e inicializamos dos variables de tipo entero (int). double a = ( i + j ) / 2.0; Igualmente declaramos una variable de tipo double a la cual se le asigna el resultado de un cálculo. System.out.println("i is " + i + " and j is " + j); System.out.println("Average is " + a); El atributo out de la clase System devuelve un objeto de tipo PrintStream, el método println de esta clase se lo utiliza para presentar información; nótese que los datos de tipo “int” automáticamente se convierten a “String” y el símbolo de concatenación es “+”

EJERCICIOS PROPUESTOS

1. Defina con sus propias palabras lo que es “Programación” 2. Enumere y describa por lo menos seis características del lenguaje Java 3. ¿Qué directorio debe ser especificado en la variable SET PATH y

porque? 4. ¿Cuál es la diferencia entre una Aplicación de Java y un Applet? 5. Modifique la aplicación “Average.java” para que ésta realice mas

operaciones, igualmente aumente la cantidad de variables 6. Seleccione con una línea el concepto correcto

Page 18: Guia de Java Version final ver 1_5

Programación en Java - 9

jar

javac

JDK

java

Java VM

AppleViewer

Entorno de desarrollo que utilizan la mayoría de profesionales.

Estructura idealizada de Java que se utiliza para implementar software en vez de Hardware

Se utiliza para ver el Applet con el mismo aspecto que tendrá cuando lo vea el usuario en una pagina HTML

Compila y convierte el código fuente escrito en Java a bytecode

Ejecuta una aplicación Java Genera archivos comprimidos

Page 19: Guia de Java Version final ver 1_5

Programación en Java - 10

PROGRAMACIÓN ORIENTADA A OBJETOS Los conceptos de la POO debemos tenerlos muy claros para luego entender la estructura de las aplicaciones; en este capítulo estudiaremos estos conceptos. Sigamos adelante, teniendo en cuenta que estos temas no sólo son importantes en este curso sino que también son útiles para sus estudios posteriores. Objetivos

Aplicar los conceptos de Programación Orientada a Objetos para modelar situaciones del mundo real y posteriormente aplicaciones en el lenguaje Java.

2.1 ¿Qué es Programación Orientada a Objetos? Tradicionalmente los programadores han desarrollado sus aplicaciones utilizando la técnica estructurada de programación; la POO es una forma especial de programar en la cual se expresa nuestro desarrollo como cosas del mundo real, esto implica una filosofía y forma de pensar diferente, pues los objetos o mecanismos que están en nuestro entorno tienen unas características (atributos) y un comportamiento o forma de actuar (métodos), y esta visión debe verse reflejada en nuestra programación.

Bajo estos términos pensemos en un “Automóvil” para tratar de modelarlo en un esquema de POO. Diríamos que éste tiene sus atributos como son color, marca, tamaño, número de puertas, año de fabricación, velocidad(en un determinado instante) etc.; estas características vendrían a ser los datos; mientras que las funcionalidades o métodos(en términos de POO) serían arrancar, parar, girar, acelerar, etc. como podrá darse cuenta en un objeto se encapsula tanto datos como la programación de su funcionamiento; otro

Lea la sección ¿Qué es POO?, Ventajas de POO, Conceptos de POO, POO en Java; en las paginas 3, 4, 5, 6, 7 de libro básico. A continuación extraiga algunas características, ventajas, desventajas de este tipo de programación.

Page 20: Guia de Java Version final ver 1_5

Programación en Java - 11

ejemplo más cercano a nuestro medio informático, sería modelar con orientación a objetos una ventana del “Sistema Operativo Windows”:

Atributos Valor actual Métodos Funcionamiento titulo dirección ancho alto posición _X posición _Y estado color_fondo

“WINDOWS” “C:\WINDOWS” 120 milímetros 80 milímetros 20 milímetros 32 milímetros normal, maximizado o minimizado “Blanco”

Mover cambiar_tamaño cambiar_estado

Cambia el valor de posición_X, posición_Y. Cambia el valor de los atributos ancho y alto. Permite a la ventana cambiar el estado a maximizada, minimizada o normal

En el ejemplo anterior se presenta el objeto “ventana” y se ha definido algunos atributos representativos, por otra parte tengo definidos tres métodos, tenga en cuenta que los métodos definen un comportamiento el mismo que puede involucrar un cambio de valor de los atributos 2.2 Clases Hemos visto que los objetos son:

Definición de datos o atributos, por una parte, y Programación, por otra parte.

La declaración de todos estos componentes del objeto es una clase, también se podría decir que una clase es una abstracción de objetos o que es la generalización de un tipo específico de objetos; siendo más prácticos podríamos comparar a una clase como un molde de hacer pasteles, con el cual se crean pasteles que vendrían a ser los objetos los mismos que se crean de acuerdo a las características del molde, en realidad una clase es algo así como una plantilla que se utiliza para crear objetos.

Page 21: Guia de Java Version final ver 1_5

Programación en Java - 12

Hablando desde el punto de vista informático y concretamente en Java se crean objetos cuando se define e instancia una variable de un tipo de clase, es decir de la siguiente manera: CuentaAhorros cliente1 = new CuentaAhorros(); En el siguiente gráfico se presenta la clase “Barras_Estadisticas” la cual define algunas propiedades como “cantidad_de_barras”, “color”, “valor”; así mismo se pueden definir métodos tales como “gráficar”, “aumentar_barras”, etc. En la parte inferior del gráfico se podrá dar cuenta que se han creado objetos los cuales tienen diferentes valores para cada uno de los atributos.

2.3 Objetos En la sección 2.1 ya hemos revisado lo que son los objetos y sobre todo como están estructurados. 2.4 Atributos, Propiedades Tal como lo hemos comentado anteriormente los atributos o propiedades son las características de un objeto, retomando el ejemplo del automóvil las características serán: color, año de fabricación, marca, velocidad en un determinado instante, entre otras; podrá darse cuenta que las características siempre están asociadas con su respectivo valor, ya sea este, de tipo texto o de tipo numérico; dicho de otra forma, los atributos almacenan los datos de los objetos, o también son los datos encapsulados en un objeto.

Page 22: Guia de Java Version final ver 1_5

Programación en Java - 13

Pueden existir dos tipos de atributos:

Propios: Son aquellos que han sido declarados explícitamente en la clase que crea el objeto.

Heredados: Son aquellos que pertenecen al objeto pero que no han sido declarados explícitamente en la clase dueña del objeto, sino mas bien han sido el resultado de un proceso de herencia de clases antecesoras.

2.5 Métodos Igualmente ya lo hemos comentado que un objeto no solo está compuesto de datos; también está compuesto de funcionalidades o lógica de comportamiento; los métodos en POO son lo que para la programación estructurada son los procedimientos o funciones; ósea que estos pueden recibir parámetros e igualmente pueden devolver algún dato. Adicionalmente también pueden ser propios y heredados como los atributos. 2.6 Mensaje Un mensaje en POO es simplemente un llamado a la ejecución de un método de un objeto determinado; revisemos la siguiente línea:

avión.elevarse(200); En este caso estamos enviando el mensaje “elevarse” al objeto “avión“ conjuntamente con un parámetro; que pueden ser las unidades de longitud que debe aumentar su altitud, en este caso 200. 2.7 Encapsulamiento, ocultación Tal parece que “Encapsulamiento” viene de la palabra “cápsula”; en todo caso ésta define claradamente lo que es un objeto, en el cual tanto los datos como sus funcionalidades están encerradas dentro de esta cápsula; esto permite el ocultamiento de estos datos; permitiéndole al objeto relacionarse con el exterior únicamente a través de mensajes; la respuesta a estos mensajes será la información que otros objetos requieren. 2.8 Herencia La herencia es la característica que permite crear clases a partir de otras ya existentes; con lo cual reutilizamos los componentes (atributos y métodos) de la clase inicial.

Page 23: Guia de Java Version final ver 1_5

Programación en Java - 14

Existen dos tipos de herencia, tal como se muestra en el siguiente gráfico:

Por otra parte es importante mencionar que Java implementa el tipo de herencia Simple lo que le permite ser más práctico y ordenado. Una alternativa al uso de herencia múltiple en Java es el uso de “Interfaces”

EJERCICIOS PROPUESTOS

1. Defina e implemente 5 objetos de nuestro entorno (por ejemplo avión

carro, etc.) en función de sus atributos y métodos; utilice como referencia el modelo del objeto “Windows” descrito en esta guía

2. Defina los atributos y métodos que se podrían implementar en la clase “Barras_estadisticas” de esta guía didáctica

3. Desarrolle dos ejemplos de jerarquía de clases en las cuales se aplique la característica de herencia

Los conceptos tratados en este capitulo son muy importantes para el entendimiento de la POO en Java. Exprese con sus propias palabras lo que es una clase, un objeto, método, atributo, herencia, etc. si es necesario utilice ejemplos para describir sus conceptos

Page 24: Guia de Java Version final ver 1_5

Programación en Java - 15

SINTAXIS DEL LENGUAJE Supongo que está inquieto por empezar a desarrollar aplicaciones, recuerde que en el primer capítulo ya tuvimos nuestro primer encuentro con la programación; le comento que este capítulo está orientado a aprender sobre la sintaxis, tipos de datos, estructuras de control y lo que es más importante codificaremos todos los conceptos de POO que estudiamos en el capítulo anterior. Objetivos

Aplicar los conocimientos básicos del lenguaje(sintaxis, tipos de datos, estructuras de control) en el desarrollo de aplicaciones.

3.1 Estructura de una aplicación Si Java es un lenguaje orientado a objetos, esto significa que su estructura estará basada en declaraciones de: clases, atributos y métodos.

Lea la sección: Métodos de definición; en las páginas 12, 13, 14 de libro básico.

En el esquema que muestro a continuación, todo el código está encerrado dentro de una definición de clase “public class MiClase”. Este código comprende en primer lugar la declaración de atributos, estos se declaran definiendo el tipo de dato y el nombre del atributo separándolos con comas si existieren más de uno. Luego se declaran los métodos, estos pueden devolver algún tipo de dato(similar a las funciones de la programación estructurada) o no devolver ningún valor(void) seguido del nombre del método y a continuación los parámetros que este recibe, estos parámetros pueden ser algunos y de diferentes tipos.

Page 25: Guia de Java Version final ver 1_5

Programación en Java - 16

Algo muy importante que debe tener en cuenta es la definición del método principal “public static void main(String[] parametros)” ya que la secuencia de instrucciones del programa se inicia en este. public class MiClase { /* Declaracion de atributos */ tipo_atributo nombre_atributo1, nombre_atributo2; tipo_atributo nombre_atributo3, nombre_atributo4; /* Declaración de métodos */ tipo_dato nombre_metodo1(tipo_dato parametro) { /*Cuerpo del método*/ . . . . . . . . . . . . . . } tipo_dato nombre_metodo2(tipo_dato parametro) { /*Cuerpo del método*/ . . . . . . . . . . . . . . } /* Declaración del método principal */ public static void main(String[] parametros) { /*Cuerpo del método*/ . . . . . . . . . . . . . . } }

Recuerde el primer ejercicio en la sección 1.6 del primer capítulo, podrá darse cuenta que éste no tiene declarados atributos y tiene implementado solo un método; el main(String[] param).

3.2 Tipos de Datos En Java los datos primitivos son: enteros(byte, short, int, long, char) y reales(float, double); así mismo se tiene los de tipo “String” y “boolean”.

Lea las secciones: 1.4 Instrucciones hasta la sección 1.10 Opción Múltiple; en las paginas 14 – 35 del libro básico

Page 26: Guia de Java Version final ver 1_5

Programación en Java - 17

La sintaxis para declarar atributos o variables de cualquiera de estos tipos es la siguiente: tipo_de_dato var1, var2, var3; Algo más; es posible asignar un valor a una variable en el momento que se la declara; tenga en cuenta que una cosa es definir atributos de un objeto y otra cosa es declarar variables de un método, en este caso las declaraciones de variables de método pueden estar en cualquier parte de éste. 3.3 Declaración de Métodos En los métodos se implementa la funcionalidad de la clase, los mismos que luego de ejecutarse pueden devolver un valor o no devolver nada en este caso se coloca la palabra reservada void, la sintaxis para la definición de métodos es la siguiente: Tipo_dato nombre(Tipo_dato arg1, Tipo_dato arg1,...) { /* Cuerpo del método */ } El tipo de dato que devuelve el método o de los argumentos que este recibe puede ser cualquiera de los anteriormente estudiados o void; en la implementación del cuerpo del método pueden haber declaraciones de variables, en este caso éstas son variables que tienen un alcance únicamente para el método y no a toda la clase como el caso de los atributos. 3.4 Operadores y Expresiones Un aspecto importante de mencionar es que este lenguaje es sensible a mayúsculas y minúsculas, lo que significa que en las expresiones debe utilizar

Page 27: Guia de Java Version final ver 1_5

Programación en Java - 18

las variables tal como fueron declaradas, y recuerde colocar el “;”(punto y coma) al final de toda expresión simple. 3.5 Estructuras de control Recuerda que debes leer del libro básico las páginas indicadas para entender claramente la sintaxis de las estructuras de control las mismas que son: while, if...else, for, do...while, switch. 3.6 Creación de objetos y acceso a sus miembros.

Una vez definidos los atributos y métodos de la clase estamos en capacidad de crear cualquier cantidad de objetos de esta clase. Es importante mencionar y tal como lo indica el libro, que luego de haber definido una clase ésta pasa a ser otro tipo de datos para nuestra aplicación, siendo así, es lógico pensar que para crear un objeto en primer lugar hay que declarar una variable de este tipo y posteriormente crear el objeto, obviamente estos dos pasos se los hace en dos líneas de código o en una sola, tal como lo veremos a continuación. Nombre_clase nombre_objeto; nombre_objeto = new Nombre_clase(); ó Nombre_clase nombre_objeto = new Nombre_clase(); Luego de crear el objeto se puede acceder a sus miembros(atributos o métodos), esto utilizando un punto “.” luego del nombre del objeto y finalmente el atributo o método. Nombre_objeto.atributo Nombre_objeto.metodo()

Lea las secciones: Clases y Objetos, Ocultamiento de la información y control de acceso a miembros, Creación de objetos, Constructores, Notaciones de acceso a miembros, Métodos; en las paginas 42 – 47 del libro básico

Algo importante para llegar a ser un excelente programador es adquirir una cultura o metodología de programación, es decir, definir y utilizar unos estándares de programación; en función de esto le planteo lo siguiente:

Al declarar una clase esta tendrá únicamente la primera letra en mayúscula y en plural.

Los nombres de objetos, variables o métodos serán enteramente en minúsculas.

Si existen nombres compuestos por ejemplo: “costoDeVenta” en estos casos escribir la primera letra con mayúscula.

Page 28: Guia de Java Version final ver 1_5

Programación en Java - 19

3.7 Constructores. En POO existen unos métodos muy especiales denominados constructores, estos se ejecutan justo el momento en que se crea el objeto, es decir en Java la instrucción “Nombre_clase nombre_objeto = new Nombre_clase();” es la que crea el objeto y consecuentemente esta línea hace un llamado para que se ejecute el constructor del objeto. En general los constructores se utilizan para inicializar los valores de los atributos de un objeto; a continuación presento algunas características de los constructores en Java:

Todas las clases que se definen en Java tienen un constructor por defecto el mismo que no tiene parámetros y se ejecuta cada vez que se crea un objeto de esta clase.

El nombre del/los constructores es exactamente el mismo nombre de la clase.

Los constructores nunca devuelven ningún valor(int, float, double, etc.), inclusive no se definen ni como “void”, y tampoco puede tener algún modificador(final, static, etc.).

Una clase puede tener varios constructores, como ya indique anteriormente con el mismo nombre de la clase, pero difieren en cuanto al tipo y cantidad de parámetros que estos reciben.

Cuando se quiere ejecutar un constructor desde una línea de código del objeto, se lo puede hacer directamente mediante su nombre o a través de la palabra reservada “this()”, en este caso esta línea deberá ser la primera de ese método.

El constructor que se ejecuta al momento de crear el objeto se lo especifica en la instrucción “new Nombre_clase(param1, param2,. . . );”

El constructor por defecto que tienen todas las clases, es reemplazado o desaparece cuando se declara explícitamente un constructor.

3.8 Arreglos y Matrices

Revisar en la sección de Anexos el Taller de Programación # 1.

Lea la sección: 2.2 Arreglos, 2.5 Argumentos de Línea de Comandos y main; en las páginas 47 – 49, 51 – 53 del libro básico

Page 29: Guia de Java Version final ver 1_5

Programación en Java - 20

En Java los arreglos(unidimensionales o multidimensionales) son objetos, por lo tanto será necesario primero declararlos y luego crearlos, la declaración puede ser de dos formas diferentes: tipo[] nombre; tipo nombre[]; y el arreglo se debe crear de la siguiente manera: nombre = new tipo[tamaño]; la declaración y creación del arreglo puede ser al igual que el resto de objetos en una sola línea: tipo[] nombre = new tipo[tamaño]; tipo nombre[] = new tipo[tamaño]; El tipo de datos de una matriz puede ser cualquiera de los ya estudiados e inclusive se puede declarar un arreglo de objetos. Para trabajar con arreglos en Java ya sean estos unidimensionales o multidimensionales es necesario primero declararlos y luego crearlos, esto es debido a que en realidad estos son objetos 3.9 Paso de argumentos a una aplicación En Java se pueden pasar valores a una aplicación desde la línea de comandos en el momento de ejecutar esta, cada argumento va separado por un espacio y la aplicación recoge estos valores en el arreglo de tipo “String” del método “main”, por ejemplo: la línea de comandos para ejecutar y enviar parámetros a la siguiente aplicación sería: “java Suma 23 56”. 1 2 3 4 5 6 7 8 9 10 11 12 13

class Suma { public static void main(String[] param) { int s; if (param.length < 2) { System.out.println("No existen parámetros"); } else { String a = param[0], b = param[1]; s = Integer.parseInt(a) + Integer.parseInt(b); System.out.println("La suma es: " + s); } } }

Page 30: Guia de Java Version final ver 1_5

Programación en Java - 21

En el código anterior, en la línea 8 se recogen los valores de los parámetros de tipo “String” los cuales son posteriormente transformados a tipo “int”, esto se lo hace utilizando el método “parseInt” de la clase “Integer” 3.10 Conversiones de Tipos de Datos

En Java al igual que en la mayoría de lenguajes es posible convertir los datos de un tipo a otro; dicha conversión puede ser implícita o explicita; la conversión implícita significa asignar un valor de una variable de menor precisión a una de mayor precisión tal como lo indica la figura 3.1 en la pagina 85 del libro básico, así por ejemplo se puede asignar directamente el valor que esta en una variable de tipo “byte” a una variable de tipo “short”; la conversión explicita significa cambiar el valor de una variable de mayor precisión a una de menor, por ejemplo: una variable de tipo “float” puede ser convertida a tipo “int” en este tipo de conversión se especifica el tipo de dato colocándolo entre paréntesis: float f = 3.1416F; int i = (int)f; En este último tipo de conversión se debe tener cuidado ya que se puede perder precisión en el resultado: 3.11 Sobrecarga de Constructores y Métodos En la sección 3.7 hablé sobre los constructores y mencioné que una clase puede tener varios constructores, estos difieren el uno del otro por el tipo y cantidad de parámetros que reciben, lo mismo ocurre con los otros métodos de la clase, es decir, se puede tener declarados varios métodos con el mismo nombre los cuales igualmente pueden diferir por el tipo y cantidad de parámetros, los métodos también se pueden diferenciar por el tipo de dato que estos devuelven lo cual no ocurre con los constructores ya que estos últimos nunca devuelvan valor alguno como ya lo comente en la sección 3.7. A esta propiedad de poder declarar varios métodos con el mismo nombre le denominamos sobrecarga. A continuación presento un ejemplo de métodos sobrecargados. 1 2 3 4 5

double calculo_de_recargo(double costo, int porcentaje) { double total; total = costo + (costo * porcentaje / 100); return total; }

Lea las secciones: 3.6 Conversiones de tipo, 3.7 Conversión Implícita de tipo, 3.8 Asignación Explicita de tipo; en las paginas 84 - 87 del libro básico.

Page 31: Guia de Java Version final ver 1_5

Programación en Java - 22

6 7 8 9 10 11 12 13 14 15

double calculo_de_recargo(double costo) { double total; total = costo + (costo * 12 / 100); return total; } double calculo_de_recargo(double costo, double incremento) { return costo + incremento; }

Los tres métodos definidos en el código anterior representan la sobrecarga de métodos en java; En el primer método se envía un parámetro de tipo “double” y otro de tipo “int”; en el segundo únicamente se envía un parámetro de tipo “double”, en este caso se asume que el porcentaje de incremento siempre será del 12%; y finalmente en el tercero se realiza el cálculo en base a una cantidad concreta. En definitiva los tres métodos realizan el cálculo de un recargo, pero los tres lo hacen de forma diferente.

3.12 Control de Excepciones en Java.

Cuando desarrollamos una aplicación, ésta esta expuesta a que durante su ejecución pueda ocurrir algún error como por ejemplo: una división por cero, dificultades en el ingreso de datos por teclado, tratar de convertir un texto a número, leer datos desde un archivo, errores en la transmisión por la red, etc. estas situaciones pueden producirse en cualquier momento aún cuando nuestro código sea lo mas claro y preciso; en estos casos es necesario preveer dichas situaciones y colocar código de control de errores en aquellos lugares en donde pueda producir una excepción. Para el control de errores en Java vamos a estudiar lo siguiente:

El uso de los bloques try {

. . . . .

. . . . . } catch (TipoExcepcion e1) {

La sobrecarga de métodos y constructores es una característica de pocos lenguajes de programación exprese su opinión sobre esta característica así como también las ventajas y desventajas que esta representa.

Lea la sección: 8.9 Manejo de Error y Excepción; en las páginas 258 – 263 del libro básico

Page 32: Guia de Java Version final ver 1_5

Programación en Java - 23

. . . . .

. . . . . } catch (TipoExcepcion e2) {

. . . . .

. . . . . }

El uso de la instrucción: throws En primer lugar estudiaremos el uso de los bloques try . . . . catch; en este caso se debe colocar la línea o las líneas que pueden producir errores en el bloque try, mientras que en el bloque o los bloques catch se debe colocar el código para el control de errores o en su defecto los mensajes correspondientes que adviertan al usuario que ha ocurrido un error de ese tipo. Es importante indicar que los errores pueden ser de diferentes tipos, para lo cual se debe colocar un bloque catch para cada tipo de error; y para cada tipo de estos errores se crea un objeto con la información de lo ocurrido; según la indicación anterior diríamos que se crearán los objetos e1 y e2. Revisemos el siguiente código para tener una visión más clara del control de Excepciones. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

class Numeros { String texto; int numero; int den = 0; int result; public Numeros(String texto) { this.texto = texto; } void dividir() { try { numero = Integer.parseInt(texto); result = numero/den; } catch (ArithmeticException e1) { System.out.println("Ha ocurrido un error del tipo: " + e1.toString()); result = -1; } catch (NumberFormatException e2) { System.out.println("Error el texto ingresado tiene espacios"); } } } public class Excepciones { public static void main(String[] args) { Numeros obj = new Numeros("124 ");

Page 33: Guia de Java Version final ver 1_5

Programación en Java - 24

31 32 33 34 35

obj.dividir(); System.out.println("El resultado de la división es: " + obj.result); } }

Las líneas 13 y 14 están dentro del bloque try, esto significa que al

ejecutarse las mismas podrían producir errores.

La línea 13 convierte un dato de tipo “String” a tipo “int”; este dato puede contener espacios o caracteres que no se puedan convertir a número, en este caso se producirá un error del tipo: “NumberFormatException”.

En la línea 14 se realiza una división, pero en este caso podría ocurrir

que el valor de la variable “den” sea igual a “cero”; esto producirá un error del tipo: “ArithmeticException”.

En cada uno de los bloques catch se crean los objetos e1 y e2 con

información de cada tipo de error. A continuación revisemos el uso de la instrucción “throws” la misma que sirve para declarar que en un determinado método puede ocurrir un error, esto quiere decir que el control de errores se lo debe hacer en el código que llame a dicho método, por ejemplo en el siguiente código declaremos que en el método “dividir()” pueden ocurrir errores del tipo: “ArithmeticException” y “NumberFormatException”: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

class Numeros2 { String texto; int numero; int den = 0; int result; public Numeros2(String texto) { this.texto = texto; } void dividir() throws ArithmeticException, NumberFormatException { numero = Integer.parseInt(texto); result = numero/den; } } public class Excepciones2 { public static void main(String[] args) { Numeros2 obj = new Numeros2("124 "); try { obj.dividir(); }

Page 34: Guia de Java Version final ver 1_5

Programación en Java - 25

24 25 26 27 28 29 30 31 32 33 34 35 36

catch (ArithmeticException e) { System.out.println("Ha ocurrido un Error del tipo: " + e.toString()); } catch (NumberFormatException e2) { System.out.println("Error el texto ingresado tiene espacios"); } System.out.println("El resultado de la división es: " + obj.result); } }

Revisemos el código anterior: las líneas 13 y 14 que anteriormente estaban atrapadas en el bloque try en este caso ya no lo están, puesto que hemos delegado el control de errores a otro lugar del programa, utilizando la instrucción throws en el encabezado del método “dividir()”. El uso de try. . .catch en este caso está en el método main (línea 22) de la clase Excepciones2, desde donde se llama al método dividir(). Finalmente vale la pena indicar que las excepciones pueden ser explicitas; si da un error indicando que se deben atrapar dichas Excepciones al momento de compilar; o pueden ser implícitas si da el error únicamente cuando estas ocurren es decir al momento de su ejecución.

EJERCICIOS PROPUESTOS

1. Desarrolle un cuadro sinóptico de los tipos de Datos de Java, incluya una

descripción de cada tipo de dato y los valores máximo y mínimo que pueden almacenar en el caso de los primitivos

2. Indique cual es la salida de la siguiente aplicación Java: 1 2 3 4 5 6 7 8 9 10 11 12

class Operaciones { int a,b; void asignar(int a1, int b1){ a = a1; b = b1; }

void sumar() { int s; s = a + b; System.out.println("La suma es: " + s); } int producto() {

El control de excepciones en Java es una característica muy potente de este lenguaje, sírvase desarrollar un análisis comparativo con formas de control de errores en otros lenguajes que usted conozca

Page 35: Guia de Java Version final ver 1_5

Programación en Java - 26

13 14 15 16 17 18 19 20 21 22 23

int p = a * b; return p; } public static void main(String[] args){ Operaciones calculo1 = new Operaciones(); calculo1.asignar(5,3); calculo1.sumar(); System.out.println("El producto es: " + calculo1.producto()); } }

3. Suponiendo que el siguiente método pertenece a la clase Operaciones

(pregunta anterior), corrija los errores existentes en el mismo: 1 2 3 4 5

Void resta() { Int r; R = a - B System.out.write("La resta es: " + r ); }

4. Desarrolle una aplicación en la cual utilice lo siguiente:

2 atributos de tipo int 2 atributos de tipo double 2 atributos de tipo String Implemente 3 métodos en la clase

Page 36: Guia de Java Version final ver 1_5

Programación en Java - 27

PROGRAMACION ORIENTADA A OBJETOS EN JAVA Ya hemos desarrollado aplicaciones en el lenguaje, pero aún no hemos explotado al máximo las ventajas de la POO que nos brinda este lenguaje, en este capitulo conocerá como están estructuradas las clases propias del lenguaje, así como también aplicaremos características como la herencia de clases a nuestros programas. Objetivos

Aplicar los conceptos de POO en las aplicaciones desarrolladas en Java. 4.1 Jerarquía de Clases en Java. La API de Java

Una de las grandes ventajas que presenta el lenguaje es que tiene una gran cantidad de clases desarrolladas(API de Java); estas clases están organizadas en una estructura en la cual existe una clase raíz. Esta jerarquía de clases en POO se llama herencia; es decir todas las clases en Java incluyendo aquellas definidas o creadas por nosotros heredan de esta raíz la misma que es la clase Object, consecuentemente los atributos y métodos de esta clase(Object) están disponibles en todas las clases del Lenguaje. A continuación presento un gráfico el mismo que representa una mínima parte de la estructura global de clases de Java.

En el CD que acompaña a esta guía se encuentra la totalidad de la jerarquía de clases de Java

Page 37: Guia de Java Version final ver 1_5

Programación en Java - 28

Esta estructura de clases conocida como la “API de Java” deben conocerla todos los programadores, este conocimiento implica saber: ¿Que clases existen?, ¿Para que sirve cada clase?, ¿De donde hereda una clase determinada?, ¿Cuántos constructores tienen las clases y que parámetros recibe cada uno de estos?, ¿Qué atributos tiene cada clase?, ¿Qué métodos tiene cada clase, que parámetros recibe y que tipo de dato devuelve?; para responder estas y otras interrogantes existe la documentación oficial de “Sun Microsystems” la misma que muestro a continuación:

Page 38: Guia de Java Version final ver 1_5

Programación en Java - 29

Las clases de la API de Java se encuentran agrupadas en paquetes; así por ejemplo el paquete “java.awt” agrupa todas las clases que se utilizan para desarrollar aplicaciones con interfaz gráfica de usuario como por ejemplo “Button”, “Frame”, “Label”, “Window”, “Graphics”, “TextField”, “Menu”, “List”, etc. Cuando utilicemos cualquier clase de la API es necesario primero importar dicha clase o se puede importar todo el paquete que la contiene, esto se lo hace con la palabra reservada “import”: import java.awt.Frame; import java.awt.*;

El uso de la documentación de la API de Java es muy importante en el desarrollo de aplicaciones ya que se puede encontrar información sobre las clases, sus constructores, métodos, atributos; exprese su opinión sobre ésta.

Page 39: Guia de Java Version final ver 1_5

Programación en Java - 30

En la primera línea del ejemplo anterior he importado únicamente la clase “Frame” del paquete “java.awt”, y en el segundo ejemplo he importado todo el paquete. En un párrafo anterior había comentado que todas las clases en Java incluyendo aquellas definidas por el programador heredan de la clase Object, por otra parte se podrá dar cuenta que en los ejercicios anteriores que hemos desarrollado no hemos importado esta clase ni el paquete que la contiene; esto se debe a que el paquete “java.lang” el cual contiene la clase “Object” es el único que se importa automáticamente en todas las aplicaciones que desarrollemos, es decir no es necesario colocar la siguiente línea al inicio de nuestras aplicaciones: import java.lang.*; La información en el documento de la API de Java se encuentra agrupada por paquetes, tal como lo indica la imagen anterior; haciendo clic en un paquete determinado se puede acceder a las clases, Interfaces, Excepciones(Las Interfaces y Excepciones las estudiaremos mas adelante) de ese paquete; luego se podrá observar una descripción de cada uno de estos elementos, por ejemplo haciendo clic en una clase podrá observar su descripción, las clases de las que hereda, detalle de constructores, atributos, métodos.

4.2 Miembros de Instancia y de Clase

La sección anterior(4.1) es muy importante, si la misma no quedo muy clara recomiendo investigar mas sobre el tema, pues el conocimiento de la estructura de clases en Java así como el uso de la documentación es la base para el desarrollo de los programas. Crear un objeto de una clase significa crear una instancia de esa clase. Por otra parte cuando se crea un objeto, este se crea con los atributos y métodos de la clase; pero ¿Qué son los atributos o métodos de instancia o de clase?; esto lo explicaré con el siguiente ejemplo: si recordamos la aplicación “Ventanas” del capitulo 3 la cual permitía crear objetos de dicha clase, recuerde el atributo “titulo” con el que cualquier objeto creado a partir de esta clase podía tener un titulo diferente, por Ejemplo: “Mi Pc”, “Mis Documentos”, etc. es decir se creó un atributo para cada objeto puesto que el

Le recomiendo que use esta documentación la misma que se encuentra disponible en la página Web de Java (www.java.sun.com) adicionalmente se encuentra en el CD que acompaña a esta Guía Didáctica.

Lea la sección: 3.10 Más sobre Miembros de Instancia y Estáticos; en las paginas 88 - 90 del libro básico

Page 40: Guia de Java Version final ver 1_5

Programación en Java - 31

valor de este atributo es diferenta en cada instancia u objeto; este sería un ejemplo de atributo de instancia. Analicemos otro aspecto con este mismo ejemplo; como usted sabe el color del fondo de las ventanas de Windows todas tienen siempre el mismo color; todas son blancas, o todas son verdes, o todas son azules, etc. es decir el color de fondo de la ventana no es diferente para cada ventana como lo era el titulo, en este caso el atributo “color_fondo” ha sido declarado como “static” lo que significa que es un atributo de clase ya que su valor va ha ser el mismo para todos los objetos creados a partir de esa clase, y si su valor cambia para un objeto, pues cambiará para todos los objetos, estos atributos o métodos se pueden referenciar a partir de un objeto, de la siguiente manera por ejemplo: MiPc.color_fondo = “Azul”; Pero si es un atributo de clase(static) pues es más normal y descriptivo referenciarlos a partir de la clase a la que pertenecen, esto es muy importante para los temas posteriores del presente curso: Ventanas.color_fondo = “Azul”; Con esto queda claro que el valor de este atributo será el mismo para todos los objetos de la clase. 4.3 Clases que encapsulan los tipos de Datos Primitivos

Las posibilidades de trabajo con los tipos de datos primitivos(byte, short, int, long, char, float, double, boolean) se ven ampliamente beneficiadas con el uso de las respectivas clases que los encapsulan. Esta clases contienen métodos que convierten un datos numérico a “String” y viceversa. Estas clases están implementadas en el paquete “java.lang”. 1 2 3 4 5 6 7 8 9 10

class Datos { public static void main(String[] param) { int num; String str; num = Integer.parseInt("128") + 20; str = Integer.toString(35) + "20"; System.out.println("Suma: " + num ); System.out.println("Concatenación: " + str); } }

Lea la sección: 8.2 Clases de envoltura de Java ; en las paginas 240 y 241 del libro básico.

Page 41: Guia de Java Version final ver 1_5

Programación en Java - 32

En el ejemplo anterior la clase “Integer” encapsula al tipo de dato “int”, así mismo existen otras clases: por ejemplo la clase “Character” encapsula el tipo de dato “char”, la clase “Long” encapsula el tipo de dato “long”, etc. 4.4 Clases de Uso común. String, Math

El tratamiento de cadenas (String) y de Funciones Matemáticas es muy importante cuando se esta iniciando en el estudio de un Lenguaje de Programación, también he comentado que Java tiene una estructura de clases ya desarrolladas, a las cuales únicamente debemos utilizarlas; dos de estas clases son la clase “String” y la clase “Math” las misma que pertenecen al paquete “java.lang”. Accediendo a la documentación de estas clases podrá revisar los métodos de los que disponen estas clases: Esta claro que en Java todo se construye en base a objetos, por lo tanto cuando usted declara una variable de tipo “String” en realidad lo que esta creando es un objeto de este tipo(String), estos objetos son algo especiales ya que no necesitan del operador “new” para instanciarse. Adicionalmente toda cadena en Java por ejemplo “abcd” es igualmente un objeto, esto quiere decir que se puede acceder a todos sus métodos; esto lo veremos a continuación en nuestro próximo taller de Programación.

4.5 Herencia en Java. Uso de “super”

La herencia es una de las características mas potentes de los lenguajes orientados a objetos, la misma que presenta grandes ventajas sobre todo en la reutilización de código y en la organización jerárquica de las clases, estas características se encuentran detalladas en la sección “4.1 Ventajas de la Herencia” del libro básico. Analicemos el siguiente ejemplo: Vamos a construir una clase llamada “Punto”, y posteriormente a partir de ésta, crearemos las clases “Circulo” y “Elipse”.

Lea la sección: 8.4 Cadenas; en las paginas 242 – 245 y el Apéndice 7: Cálculos Matemáticos; en las paginas 421 y 422 del libro básico.

Revisar en la sección de Anexos el Taller de Programación # 2 y # 3.

La herencia es fundamental en POO por lo tanto recomiendo leer el capitulo 4: Herencia y extensión de clase; en las paginas 105 – 130 del libro básico.

Page 42: Guia de Java Version final ver 1_5

Programación en Java - 33

La definición de los atributos y métodos de estas clases es la siguiente:

La estructura de clases del gráfico anterior muestra algunas ventajas de la herencia, en al cual se tienen definidas en la clase raíz algunos atributos y métodos, los cuales pasan a formar parte de las nuevas clases heredadas por efecto de la herencia; adicionalmente en las nuevas clases se puede aumentar otros atributos y métodos para hacerlas a estas mas especificas; en el ejemplo anterior he subrayado aquellos componentes que se implementan en las nuevas clases. Otra ventaja que presenta la herencia es la posibilidad de sobrescribir aquellos métodos que van a tener un comportamiento distinto en la nueva clase, por ejemplo el método dibujar en las clases Circulo y Elipse deberá ser implementado con el código que permita dibujar estos gráficos.

Existen algunos puntos importantes a mencionar con respecto a la herencia:

Los constructores no se heredan; en este caso será necesario llamarlos explícitamente utilizando la palabra reservada super

Si una clase ha sido declarada utilizando el modificador final; en este caso ésta no se puede heredar

En nuestro entorno existen muchos ejemplos que se podrían comparar con la herencia en Java, sírvase detallar algunos de estos ejemplos.

Revisar en la sección de Anexos el Taller de Programación #4.

Page 43: Guia de Java Version final ver 1_5

Programación en Java - 34

Los métodos implementados en una clase; se pueden sobrescribir en una subclase; es decir volver a implementar con nuevo código.

EJERCICIOS PROPUESTOS

1. Revisando la documentación de la API de Java indique las clases e

interfaces que pertenecen al paquete “java.sql” 2. Describa para que se utilizan 10 métodos de la clase “ResultSet” del

paquete “java.sql” 3. Desarrolle una aplicación en la cual se declare un atributo y/o un método

estático; adicionalmente describa una explicación que fundamente el uso de dicha declaración.

4. Desarrolle una aplicación en la cual utilice 5 métodos de la clase String 5. Desarrolle una aplicación en la cual utilice 5 métodos de la clase Math 6. Desarrolle una aplicación denominada “SeresVivos” en la cual aplique la

característica de “Herencia” en Java

Page 44: Guia de Java Version final ver 1_5

Programación en Java - 35

AUTOEVALUACION, PRIMER MES

Responda con Verdadero ( v ) o Falso ( f ) a las siguientes afirmaciones:

1 Un programa es una serie de instrucciones dadas al ordenador en un lenguaje entendido por él. ( )

2 Un lenguaje de programación es un medio para indicarle al ordenador la secuencia de instrucciones que debe efectuar. ( )

3 Java es un lenguaje independiente de la plataforma; Esto quiere decir que el código producido por el compilador Java puede transportarse a cualquier plataforma (Intel, Sparc, Motorola, etc).

( )

4 La utilidad “appletviewer” se utiliza para ejecutar las aplicaciones desarrolladas en Java. ( )

5 La variable “path” se configura para ejecutar las aplicaciones con entorno gráfico en Java. ( )

6 Las “aplicaciones” de Java se ejecutan directamente desde la línea de comandos. ( )

7 Para visualizar la ejecución de un “Applet”; éste debe estar insertado en una pagina Web. ( )

8 La estructura de un “Applet” y de una “aplicación” es exactamente la misma; es decir en ambos se debe utilizar el método “main”.

( )

9 La edición de un programa de Java se puede realizar en cualquier editor, lo importante es que éste se grabe como texto sin formato.

( )

10 La programación orientada a objetos (POO) es un modelo de programación que utiliza objetos para la solución de problemas. ( )

11 Una “clase” equivale a la generalización de un tipo especifico de objetos. ( )

12 Se entiende por objetos a la encapsulación genérica de datos y de los métodos para manipularlos. ( )

13 Un objeto contiene propiedades y metodos. ( ) 14 La herencia permite la reutilización de código. ( ) 15 En Java cada clase sólo puede tener una superclase ( )

16 Un constructor es un método que se ejecuta automáticamente cuando se crea un objeto. ( )

17 El método “main” de una aplicación debe declarar como parámetro un arreglo de datos de tipo “String”. ( )

18 Los datos de tipo “double” pertenecen al grupo de datos de los reales. ( )

19 Para crear objetos se utiliza el operador “new”. ( ) 20 En una clase se pueden implementar varios constructores. ( )

21 Todas las clases poseen por lo menos un constructor por defecto. ( )

Page 45: Guia de Java Version final ver 1_5

Programación en Java - 36

22 Un constructor siempre debe devolver algún tipo de dato ( )

23 En Java existen dos tipos de de conversión entre tipos de datos: “Implícita” y “Explicita”. ( )

24 La sobrecarga de métodos significa declarar varios métodos con el mismo nombre. ( )

25 Una excepción es un error que puede ocurrir durante la ejecución de un programe en java. ( )

26 Cuando ocurre una excepción se crea un objeto de tipo “Exception” (o de sus subclases) el mismo que contiene información del error ocurrido.

( )

27 Las excepciones pueden ser: “Explicitas” o “Implícitas” ( )

28 La clase “Object” es la raíz de todas las clases de la API de Java. ( )

29 Cuando desarrollamos aplicaciones sencillas en Java regularmente no se necesita importar el paquete “laja.lang” ya que este se importa automáticamente.

( )

30 Los miembros de clase o estáticos se pueden referenciar mediante el nombre de su clase o mediante el nombre de un objeto.

( )

31 La clase “Integer” encapsula el dato de tipo “int”. ( )

32 La palabra “super” se utiliza para hacer referencia a métodos o propiedades de la superclase o clase padre. ( )

Page 46: Guia de Java Version final ver 1_5

Programación en Java - 37

SEGUNDO MES

Page 47: Guia de Java Version final ver 1_5

Programación en Java - 38

INTERFAZ GRÁFICA DE USUARIO CON SWING La interfaz gráfica con el usuario es una parte fundamental en cualquier lenguaje de programación ya que permite la interactividad entre el usuario y la aplicación, esta debe ser muy amigable con el usuario. La tecnología Swing presenta una gran cantidad de “clases” gráficas lo que permite desarrollar aplicaciones muy funcionales en un entorno gráfico. Objetivos

Desarrollar aplicaciones con interfaz gráfica y control de eventos del “Mouse” y “Teclado”.

Emplear las ventajas que presenta la tecnología “Swing” y sus clases en

el desarrollo de aplicaciones. 5.1 El paquete “javax.swing” Hablar de interfaces gráficas en Java es hablar de “AWT” y “Swing”, actualmente se ha remplazado el desarrollo en “AWT” por el de “Swing” esto gracias a las capacidades que presenta este último y adicionalmente están implementados en código independiente de la plataforma; es importante mencionar que muchas clases de “Swing” heredan de sus correspondientes componentes de “AWT”. Al igual que para desarrollar con “AWT” se tenia el paquete “java.awt”, en “Swing” se tiene el paquete “javax.swing”; a este paquete pertenece la clase “JComponent” de la cual heredan todas las clases de “Swing”, estas clases son fáciles diferenciarlas de sus correspondientes en “AWT” porque su nombre inicia con la letra “J”, por ejemplo: “Frame” en “AWT” y “JFrame” en “Swing”. Adicionalmente al paquete “javax.swing” existen otros los mismos que contienen clases muy importantes para el desarrollo de aplicaciones, revisemos algunas de estas:

javax.swing.event javax.swing.filechooser javax.swing.table

Page 48: Guia de Java Version final ver 1_5

Programación en Java - 39

javax.swing.text javax.swing.tree

Este gráfico muestra como están estructuradas las clases de “Swing”, en el cual se han representado una mínima cantidad (las mas representativas), es importante indicar que los objetos de tipo “contenedor” de “Swing” tales como: “JWindow”, “JFrame”, etc. Heredan directamente de su correspondiente en “AWT”(“Window”, “Frame”, etc.); así mismo en el gráfico se han representado con líneas entrecortadas aquellas clases que no heredan directamente de su antecesora, así por ejemplo: la clase “JCheckBox” hereda de “JToggleButton”, esta hereda de “AbstractButton” y esta ultima de “JComponent”.

5.2 Contenedores y Componentes Los objetos contenedores son objetos sobre los cuales se puede colocar otros objetos como botones, etiquetas, listas, cajas de texto(TextField), etc. Un contenedor es una especie de plataforma sobre la que descansan los otros objetos o componentes. “JPanel”, “JFrame”,“JApplet”,“JWindow”, entre otros son ejemplos de contenedores. El “JFrame” es un contenedor de alto nivel, se lo utiliza en la construcción de aplicaciones Java, éste ya dispone de los elementos propios de una ventana de Windows como son: Titulo, bordes, botones de minimizar, maximizar y restaurar. El “JApplet” es otro tipo de contenedor al cual se lo inserta dentro de una pagina “Web” para ser visualizado.

Esta claro que para el desarrollo de aplicaciones con interfaz gráfica de usuario se puede utilizar AWT o Swing, como ejercicio le recomiendo comentar con sus compañeros sobre las diferencias, ventajas y desventajas en el uso de una u otra de estas tecnologías.

Page 49: Guia de Java Version final ver 1_5

Programación en Java - 40

El “JPanel” es un contenedor que se puede insertar dentro de otros contenedores como por ejemplo dentro de un “JFrame”, esto con el fin de darle mayor flexibilidad a los diseños gráficos. Los componentes son objetos (JButton, JCheckBox, JLabel, JList, JComboBox, JTable, etc.) que se insertan en un Contenedor; esto se lo hace utilizando el método “add” de dicho contenedor. Es importante indicar que en Swing no se puede insertar objetos directamente a un contenedor “JFrame”, es necesario insertar un contenedor intermedio en el cual se colocarán los objetos(ver gráfico adjunto).

5.3 Distribución de los objetos en un Contenedor El diseño y la distribución de los objetos en un Contenedor en Java se lo hace utilizando unas clases denominadas “administradores de diseño”. El siguiente código muestra como aplicar un administrador de diseño a un Contenedor y como se insertan posteriormente los objetos al mismo. 1 2 3 4 5 6 7 8

import javax.swing.*; import java.awt.*; class Distribucion extends JFrame { Container intermedio = new Container(); GridLayout admin = new GridLayout(2, 2, 25, 15); JButton primero = new JButton("Primero"); JButton segundo = new JButton("Segundo");

Revisar en la sección de Anexos el Taller de Programación # 5. Es importante que el estudiante disponga de la documentación de

la API de Java para revisar los métodos de los que disponen estas clases

Page 50: Guia de Java Version final ver 1_5

Programación en Java - 41

9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

JButton tercero = new JButton("Tercero"); JButton cuarto = new JButton("Cuarto"); Distribucion() { super("Distribucion de objetos en un Contenedor"); setBounds(0,0,200,140); intermedio = getContentPane(); intermedio.setLayout(admin); intermedio.add(primero); intermedio.add(segundo); intermedio.add(tercero); intermedio.add(cuarto); setVisible(true); } public static void main(String[] args) { Distribucion obj = new Distribucion(); } }

Para este ejemplo he utilizado el “GridLayout”, si revisamos en la documentación de la API de Java, veremos que esta clase dispone de un constructor en el cual se indica la cantidad de filas y columnas en las que divide virtualmente este administrador al contenedor, en nuestro caso dos filas y dos columnas; adicionalmente se especifica la distancia vertical y horizontal entre cada objeto(25 y 15). Se podrá dar cuenta que se crea un objeto de este tipo de distribución en la línea 6, adicionalmente se crea el contenedor intermedio en la línea 5 y posteriormente con el método “setLayout” de este contenedor se aplica el objeto de distribución que hemos creado(línea 16); La salida de esta aplicación seria la siguiente:

Es importante indicar que las líneas 6 y 16 se pueden escribir en una sola, de la siguiente manera:

intermedio.setLayout(GridLayout(2, 2, 25, 15)); A continuación realizaré una breve descripción de algunos de los administradores de diseño que dispone “Swing”. En este punto nuevamente quiero recalcar que es muy importante que el estudiante se apoye en la documentación de la API de Java.

Page 51: Guia de Java Version final ver 1_5

Programación en Java - 42

GridLayout. Organiza los objetos en filas y columnas, los objetos se colocan en el orden que se van insertando, también se conoce como diseño por rejilla. FlowLayout. Este administrador de diseño lo tienen como predeterminado la mayoría de los contenedores, y consiste en colocar los objetos uno a continuación del otro(de izquierda a derecha).

BorderLayout. Este administrador coloca los objetos en cinco posiciones predeterminadas: norte, sur, este, oeste y centro; al momento de insertar el objeto se especifica en que posición se colocará este.

5.4 Control de eventos en “Swing” En el presente capítulo ya hemos visto como colocar y distribuir objetos en un contenedor, ahora es importante darle vida a una aplicación es decir hacer que los objetos respondan a eventos generados por el “ratón” o “teclado”, en general lo que queremos es que los componentes de la aplicación realicen alguna tarea en respuesta a una petición del usuario.

Page 52: Guia de Java Version final ver 1_5

Programación en Java - 43

El gráfico anterior nos demuestra como ocurre un evento sobre un objeto; posteriormente el “listener” o escuchador detecta el tipo de evento el cual es delegado a un “método especifico” en el que se programan las acciones correspondientes. La programación de eventos en función de escuchadores implica 3 implementaciones de código diferentes: 1. En la declaración de la clase se debe implementar el escuchador de

eventos correspondiente:

class Eventos extends JFrame implements WindowListener 2. Cada manejador de eventos se debe asociar con el objeto que recibirá los

eventos utilizando un método especifico:

someComponent.addWindowListener(instanceOfMyClass);

Este método específico recibe como parámetro la instancia de la clase que implementa el Listener.

3. El código correspondiente al control de eventos se implementa en el

método predeterminado:

public void windowClosing(WindowEvent e) { System.exit(0);

}

Es importante recordar que cuando utilizamos una interface se deben implementar todos los métodos que pertenecen a esta; estos deben estar definidos aunque en algunos casos estén vacíos. Esto se puede apreciar claramente en la aplicación desarrollada correspondiente a este tema en el Taller de Programación # 6.

Page 53: Guia de Java Version final ver 1_5

Programación en Java - 44

La siguiente tabla muestra las características de algunos manejadores de eventos de Java. Tipo de Listener Componentes asociados Método invocado

ActionListener

JButton JTextField JCheckBox JRadioButton JComboBox

addActionListener

AdjustmentListener JScrollBar addAdjustmentListener FocusListener Todos los componentes addFocusListener

ItemListener

JButton JCheckBox JRadioButton JComboBox

addItemListener

KeyListener Todos los componentes addKeyListener MouseListener Todos los componentes addMouseListener MouseMotionListener Todos los componentes addMouseMotionListener

WindowListener Jframe JWindow addWindowListener

En la tabla siguiente se detallan los métodos correspondientes a cada Listener: Tipo de Listener Métodos que implementan Eventos

ActionListener actionPerformed(ActionEvent e) Hacer clic, presionar “Enter”, seleccionar un menu

AdjustmentListener adjustmentValueChanged(AdjustmentEvent e)

FocusListener focusGained(FocusEvent e) focusLost(FocusEvent e)

Los componentes obtienen el foco en el teclado

ItemListener itemStateChanged(ItemEvent e)

KeyListener keyPressed(KeyEvent e) keyReleased(KeyEvent e) keyTyped(KeyEvent e)

MouseListener

mouseClicked(MouseEvent e) mouseEntered(MouseEvent e) mouseExited(MouseEvent e) mousePressed(MouseEvent e) mouseReleased(MouseEvent e)

Presionar el botón del Mouse mientras esta sobre un componente

MouseMotionListener mouseDragged(MouseEvent e) mouseMoved(MouseEvent e)

Mover el Mouse sobre un componente

WindowListener

windowActivated(WindowEvent e) windowClosed(WindowEvent e) windowClosing(WindowEvent e) windowDeactivated(WindowEvent e) windowDeiconified(WindowEvent e) windowIconified(WindowEvent e) windowOpened(WindowEvent e)

Cerrar una ventana

Page 54: Guia de Java Version final ver 1_5

Programación en Java - 45

5.5 Applets

El Applet es otro tipo de contenedor al cual igualmente se le insertan objetos utilizando la misma metodología del resto de contenedores que hemos estudiado como JPanel o JFrame. Existen algunas características propias de los Applets, a continuación detallo algunas de estas:

Los Applets se insertan en una pagina Web, a diferencia de las aplicaciones Java que corren directamente desde la línea de comandos.

Las estructuras de una aplicación y de un Applet son diferentes: La secuencia de instrucciones a ejecutarse en una aplicación se inicia por el método “main(String[] args)”, mientras que los Applets tienen un ciclo de vida que se inicia por el método “init()”, “start()”, “paint()”, “stop()”, “destroy()” los mismos que estudiaremos con mas detalle mas adelante.

Los Applets disponen de restricciones en cuanto a seguridad, desde un Applet no se puede acceder al disco duro de la máquina, tampoco se puede eliminar archivos, esto no es posible sin los permisos correspondientes.

Como ya indique anteriormente un Applet va insertado en una página Web, a continuación presento la implementación de la página Web que contiene un Applet de Java(esta página corresponde al ejemplo mostrado en el Taller de programación # 7) 1 2 3 4 5 6 7 8 9 10

<html> <head> <title>Applet con Swing</title> </head> <body> <applet code="MiApplet.class" width=330 height=300> <param name=param_1 value="Lista de Clientes"> </applet> </body> </html>

Se podrá dar cuenta que en la etiqueta <applet> se especifica el archivo de clase correspondiente, en este caso se encuentra en el mismo directorio de la página Web que lo contiene, por esta razón se especifica únicamente el

Revise en la sección de Anexos el Taller de Programación # 6. Adicionalmente desarrolle un análisis comparativo del control de eventos en Java contra otros lenguajes como por ejemplo Visual Basic.

Leer el capítulo 4, Applets y Programación controlada por eventos y las secciones: 6.1 Control de Applets por parte del explorador, 6.2 Dibujo por medio de Applets; en las paginas 160 – 167 del libro básico.

Page 55: Guia de Java Version final ver 1_5

Programación en Java - 46

nombre del archivo “.class” y no la ruta en la que se encuentra. Es importante recomendar que se tenga instalada una versión de la JVM adecuada preferiblemente la última, esto con la finalidad de que se pueda ejecutar sin ningún problema el Applet en la página Web. Existe otra forma de visualizar la ejecución de una Applet(no en un Browser), esto es utilizando la utilidad Appletviewer del JDK la misma que se encuentra al igual que las otras utilidades del JDK en el directorio “bin”, la instrucción de la línea de comandos es la siguiente:

Appletviewer pagina_Web.html Vale la pena recalcar que esta utilidad se ejecuta en base al archivo html que contiene el Applet y no en base al archivo de clase tal como lo hace la utilidad “java” en la aplicaciones. 5.6 Ciclo de vida de un Applet Ya hemos estudiado como crear Applets y como insertarlos en una pagina Web, adicionalmente comenté que los Applets tienen una estructura diferente a las Aplicaciones, efectivamente el ciclo de vida de un Applet así como los métodos que se ejecutan eventualmente son administrados por el Navegador en el que el Applet se ejecuta, a continuación detallo los métodos pertenecientes al ciclo de vida del Applet y las condiciones en las cuales estos se ejecutan: Método Se ejecuta cuando ….

public void init()

Se abre por primera vez la página Web. Se hace clic en el botón “Actualizar” del Navegador.

Se regresa a la pagina Web que contiene el Applet luego de haberla abandonado(haciendo clic en los botones “Adelante” y “Atrás” del Navegador).

public void start() Luego de la ejecución del método “init”.

public void paint(Graphics g)

Luego de la ejecución del método “init” Se activa la página Web luego que esta se ha desactivado por la presencia de otra ventana sobre esta.

La pagina Web esta minimizada y se hace clic en esta para que vuelva a su estado anterior.

Se cambia de tamaño la página Web.

public void stop()

Se abandona la página Web que contiene el Applet (haciendo clic en los botones “Adelante” y “Atrás” del Navegador).

Se cierra la ventana del Navegador Detiene la ejecución de cualquier hilo lanzado en “start”

public void destroy() Luego de la ejecución del método stop()

Page 56: Guia de Java Version final ver 1_5

Programación en Java - 47

En el Applet desarrollado en el Taller de Programación # 7 he implementado una ventana adicional en la cual se muestran los métodos que se están ejecutando en el Applet cada vez que ocurre un evento: minimizar y maximizar el Navegador, desactivar y activar la ventana, cambiarla de tamaño, etc. 5.7 Paso de parámetros a un Applet Al igual que en las aplicaciones se puede pasar parámetros desde la línea de comandos, en los Applets se puede enviar cualquier valor desde la etiqueta <APPLET>; los parámetros enviados siempre serán interpretados como cadenas de caracteres o de tipo “String”(los valores de los parámetros pueden estar o no entre comillas) en el caso de números se debe hacer la conversión respectiva. Para recoger los valores enviados desde la página Web al Applet, se utiliza el método “getParameter(String nombre)” el mismo que recibe el nombre del parámetro indicado en la etiqueta <APPLET> de la pagina Web

EJERCICIOS PROPUESTOS

1. Explique la diferencia entre AWT y Swing. 2. Utilizando Swing desarrolle la siguiente interfaz gráfica de usuario:

3. Utilizando Swing desarrolle una aplicación que ejecute operaciones

matemáticas básicas, adicionalmente disponga de un área(pizarra) para escribir.

Revisar en la sección de Anexos el Taller de Programación # 7.

Page 57: Guia de Java Version final ver 1_5

Programación en Java - 48

4. Desarrolle un Applet que grafique una figura geométrica: circulo o

cuadrado o triangulo, etc. el tipo de figura que se dibujará debe ser pasado como parámetro desde la página Web así como también el tamaño o dimensiones.

Page 58: Guia de Java Version final ver 1_5

Programación en Java - 49

HILOS EN JAVA El lenguaje Java permite desarrollar aplicaciones que ejecuten diferentes procesos en forma simultánea; imagine un servidor Web el mismo que debe atender diferentes solicitudes por parte de varios clientes(Browser), naturalmente no se atienden estas solicitudes una por una, es decir manteniendo en cola de espera el resto de peticiones; para cada solicitud se debe lanzar un hilo diferente en este caso se tendrán varios hilos trabajando en forma simultanea. Es importante aclarar que en sistemas con un solo procesador no existe el multiprocesamiento, lo que hace el sistema es asignar a cada hilo un tiempo de uso de la CPU lo cual da la impresión que los procesos son simultáneos. Objetivos

Desarrollar aplicaciones que ejecuten procesos en forma simultánea

Entender la aplicabilidad de la clase “Thread” y de la interfaz “Runnable”

6.1 Como crear Hilos en Java La clase “Thread” del paquete “java.lang” implementa los métodos necesarios para crear y ejecutar Hilos, consecuentemente para crear Hilos bastará desarrollar una aplicación que herede de “Thread”, y sobrescribir el método “run()”, ya que en este método se implementa lo que se quiera que haga el hilo. El Hilo se crea el momento que instanciamos un objeto de nuestra clase, recordemos que estamos heredando de “Thread”; luego de crear el Hilo lo pondremos en un estado preparado para que se ejecute en cualquier momento(el Hilo estará compitiendo con el resto de Hilos por el uso de la CPU), esto se lo hace mediante el método “start()” el mismo que hace un llamado al método “run()” en el cual se implemento el código. La siguiente aplicación demuestra lo explicado con respecto a Hilos.

Page 59: Guia de Java Version final ver 1_5

Programación en Java - 50

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

class Hilos extends Thread { public Hilos(String str) { super(str); } public void run() { for (int i = 0; i < 10; i++) System.out.println(i + " " + getName()); System.out.println("Hilo terminado ==> " + getName()); } public static void main (String[] args) { Hilos h1 = new Hilos("Quito"); Hilos h2 = new Hilos("Cuenca"); Hilos h3 = new Hilos("Loja"); h1.start(); h2.start(); h3.start(); } }

En la aplicación anterior se crean 3 hilos, c/u con un nombre diferente, luego se ejecutan mediante el método “start()”. En el método “run()” se presenta 10 veces el nombre de cada hilo y al finalizar este proceso se presenta un mensaje indicando que el proceso a concluido. Ya hemos visto que se pueden crear hilos heredando de la clase “Thread”, pero que pasaría si se quiere implementar hilos en un Applet, tenga presente que los Applets heredan de la clase “JApplet” o “Applet”, y recuerde que Java no permite la herencia múltiple(heredar de “Applet” y de “Thread”), en este caso existe una segunda forma de crear aplicaciones con Hilos, la cual se basa en la implementación de la interfaz “Runnable”. A continuación presento los pasos a seguir para implementar Hilos sin que esté derivada de “Thread”. 1. “El Objeto debe ser de una clase que implemente la interfaz Runnable, ya

que es esta la que soporta el método run. 2. Sobrescribir el método run con las sentencias que tiene que ejecutar el

hilo. 3. Crear un objeto de esa clase. 4. Crear un objeto de la clase Thread pasando como argumento al

constructor, el objeto cuya clase incluye el método run. 5. Invocar al método start del objeto Thread”2 .

2 Texto tomado del libro JAVA 2 – Curso de programación de Fco. Javier Cevallos, pagina 641

Revisar en la sección de Anexos el Taller de Programación # 8.

Page 60: Guia de Java Version final ver 1_5

Programación en Java - 51

6.2 Estados de un Hilo Los Hilos pueden encontrarse en uno de los siguientes estados: 1. Nuevo. El hilo ha sido creado pero aún no ha sido activado. Cuando se

active pasara al estado preparado. 2. Preparado. El hilo está activo y está a la espera de que le sea asignada

la UCP. 3. En ejecución. El hilo está activo y le ha sido asignada la UCP(sólo los

hilos activos, preparados, pueden ser ejecutados). 4. Bloqueado. El hilo espera que otro elimine el bloqueo. Un hilo bloqueado

puede estar: Dormido. El hilo esta bloqueado durante una cantidad de tiempo

determinada, después de la cual despertará y pasará al estado preparado.

Esperando. El hilo esta esperando a que ocurra alguna cosa un mensaje “notify”, una operación de E/S o adquirir la propiedad de un método sincronizado. Cuando ocurra, pasará al estado preparado.

5. Muerto. El hilo ha finalizado(esta muerto) pero todavía no ha sido recogido por su padre. Los hilos muertos no pueden alcanzar ningún otro estado.3

Los diferentes estados de un hilo se muestran en el siguiente gráfico.

EJERCICIOS PROPUESTOS

1. Desarrolle una aplicación que ordene simultáneamente tres matrices,

utilice diferentes métodos de ordenación 2. Desarrolle una aplicación que tenga cuatro círculos cambiando de tamaño

continuamente(aumentar y disminuir en valor del radio)

3 Texto tomado del libro JAVA 2 – Curso de programación de Fco. Javier Cevallos, pagina 636

Page 61: Guia de Java Version final ver 1_5

Programación en Java - 52

FLUJOS Y ACCESO A LOS ARCHIVOS El desarrollo de aplicaciones en cualquier lenguaje requiere de funcionalidades para enviar datos a un dispositivo de Entrada/Salida, a un archivo, a Internet, a otra computadora en una red, etc. o recibir datos de los mismos. En Java se logra estas funcionalidades gracias a los flujos de información; para lo cual Java dispone de Clases, y creando objetos de estos tipos se puede lograr la comunicación hacia y desde dichos dispositivos. Objetivos

Conocer el modelo de comunicación de Java mediante el uso de flujos (stream).

Aplicar los temas aquí estudiados para desarrollar aplicaciones que se

comuniquen con otros dispositivos(archivos, computadoras).

Desarrollar aplicaciones que lean datos de archivos y graben datos en los mismos.

7.1 Modelo de transmisión de datos mediante flujos (streams).

Como en Java todo se maneja en base a objetos y clases; los flujos no son la excepción, en realidad un flujo es un objeto que se encuentra en un punto intermedio entre nuestra aplicación y el punto de origen o destino de la información; esto se puede entender mediante la siguiente ilustración:

Lea las secciones: 8.6, 8.7 y 8.8 sobre Flujos de Entrada/Salida; en las páginas 246 – 257 del libro básico

Page 62: Guia de Java Version final ver 1_5

Programación en Java - 53

Este esquema de implementación de flujos lo codificaremos a continuación utilizando como origen de datos el teclado y como destino de los mismos la pantalla; es importante indicar que a lo largo del curso ya hemos venido utilizando implícitamente estos flujos, principalmente aquel que se utiliza para presentar datos en pantalla: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

import java.io.*; class Flujos { InputStream teclado = System.in; PrintStream pantalla = System.out; String texto = ""; void leer() throws IOException { int letra; pantalla.print("Ingrese el texto: "); do { letra = teclado.read(); texto = texto + (char)letra; } while (letra != '\n' ); teclado.close(); } void escribir() { pantalla.println("El texto ingresado es: " + texto); pantalla.close(); } public static void main(String[] args) { Flujos datos = new Flujos(); try { datos.leer(); } catch(IOException ioe) {} datos.escribir(); } }

Los algoritmos para leer y escribir datos son siempre más o menos los mismos:4

4 Texto tomado del libro JAVA 2 – Curso de programación de Fco. Javier Cevallos, pagina 92

Page 63: Guia de Java Version final ver 1_5

Programación en Java - 54

Leer Escribir Abrir un flujo desde un origen Mientras haya información Leer información Cerrar el flujo

Abrir un flujo hacia un destino Mientras haya información Escribir información Cerrar el flujo

En el ejemplo anterior hemos creado dos flujos:

El objeto teclado de tipo InputStream El objeto pantalla de tipo PrintStream

El objeto teclado dispone del método read para leer información; mientras que el objeto pantalla dispone del método println para enviar información al destino, en este caso el monitor. En este ejemplo vale mencionar que el atributo in de la clase System devuelve la entrada estándar de nuestro sistema; lo mismo ocurre con el atributo out de la misma clase System que devuelve la salida estándar (teclado y pantalla respectivamente); igualmente estos atributos devuelven objetos de tipo InputStream y PrintStream, esto lo puede verificar revisando la documentación de la API de Java. 7.2 Escritura y Lectura de datos en los Ficheros. Para lectura o escritura de datos desde o hacia un archivo, es necesario tomar en cuenta algunos parámetros como por ejemplo: el tipo de datos(bytes, caracteres, etc.) o la forma de acceder a los datos(archivos secuénciales o aleatorios); en este curso nos ocuparemos del acceso y escritura a los datos de un archivo de forma secuencial, el estudio del acceso aleatorio a los datos queda como tema de estudio para el alumno. Tal como indiqué en el párrafo anterior se debe tener en cuenta el tipo de dato que se va ha escribir o leer del archivo:

Flujos de bytes Flujos de caracteres Flujos de datos primitivos

El paquete java.io contiene todas las clases necesarias para desarrollar aplicaciones que manipulen estos tipos de datos; el siguiente gráfico muestra algunas clases de este paquete, podrá darse cuenta que en la mayoría de los casos existen clases correspondientes para el acceso de datos y para la escritura de los mismos en ficheros:

Page 64: Guia de Java Version final ver 1_5

Programación en Java - 55

7.3 Uso de las clases FileOutputStream y FileInputStream. Estas clases se utilizan para grabar o leer datos de tipo byte; a continuación presento el código necesario para escribir datos en un archivo utilizando la clase FileOutputStream

Page 65: Guia de Java Version final ver 1_5

Programación en Java - 56

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

import java.io.*; class EscribirBytes { FileOutputStream datosOut = null; byte[] datos = new byte[72]; int nbytes; EscribirBytes() { try { System.out.print("Escriba el texto: "); nbytes = System.in.read(datos); datosOut = new FileOutputStream("Datos.txt", false); datosOut.write(datos, 0, nbytes - 2); datosOut.close(); } catch(IOException e) { System.out.println("Error: " + e.toString()); } } public static void main(String[] args) { new EscribirBytes(); } }

En la línea 4 declaramos un flujo de tipo FileOutputStream a través del

cual grabaremos los datos. El arreglo de bytes denominado datos se lo utiliza para recoger los datos

ingresados por el usuario desde el teclado; línea 11. En la línea 12 creamos el objeto datosOut; en este constructor definimos

el nombre del archivo en el que se grabarán los datos, el parámetro false indica que se deben sobrescribir los datos existentes en dicho archivo.

Los datos se escriben en el archivo utilizando el método write al cual se le envía como parámetros: el arreglo de bytes que contiene los datos, la posición en el arreglo desde donde se grabarán los datos y la cantidad de datos que se deben grabar; en este caso estamos restando 2 bytes para eliminar los caracteres CR y LF que se guardan al final de la línea.

El código que presento a continuación permite leer datos desde un archivo utilizando la clase FileInputStream. 1 2 3 4 5 6 7 8 9

import java.io.*; class LeerBytes { FileInputStream datosIn = null; byte[] datos = new byte[72]; int nbytes; LeerBytes() { try {

Page 66: Guia de Java Version final ver 1_5

Programación en Java - 57

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

datosIn = new FileInputStream("Datos.txt"); nbytes = datosIn.read(datos, 0, 72); String str = new String(datos, 0, nbytes); System.out.println(str); datosIn.close(); } catch(IOException e) { System.out.println("Error: " + e.toString()); } } public static void main(String[] args) { new LeerBytes(); } }

En la línea 10 creamos un objeto de la clase FileInputStream; en este

constructor especifico el archivo desde el que obtendremos la información.

En la línea 11 el método read se utiliza para leer datos desde el archivo especificado; los datos se almacenan en la variable datos.

EJERCICIOS PROPUESTOS

1. Desarrolle una aplicación que almacene los siguientes datos en un

archivo tipo texto: cedula, apellidos, nombres y dirección de una lista de clientes

2. Desarrolle una aplicación que lea los datos que se almacenan en la aplicación anterior

3. Desarrolle una aplicación que copie los datos tipo texto de archivo fuente a un archivo destino

Page 67: Guia de Java Version final ver 1_5

Programación en Java - 58

AUTOEVALUACION, SEGUNDO MES

Responda con Verdadero ( v ) o Falso ( f ) a las siguientes afirmaciones:

1 La interfaz gráfica de usuario implica el uso de objetos tales como botones, cuadros de dialogo, gráficos, etc. ( )

2 Muchas clases de swing heredan las características de sus correspondientes en AWT ( )

3 La clase “JComponent” es la superclase de todas las clase de “Swing” ( )

4 Dentro de un objeto contenedor se pueden colocar otros objetos, incluso contenedores ( )

5 La clase “JApplet” es de tipo contenedor ( ) 6 Los objetos de tipo “JFrame” se caracterizan por tener una franja

para el titulo, botones de minimizar, maximizar, restaurar. ( )

7 Para añadir objetos o componentes a un contenedor se utiliza el método “plus” ( )

8 Los “administradores de diseño” se utilizan para distribuir los objetos en la interfaz de usuario ( )

9 Cuando se quiere dividir un contenedor en filas y columnas para insertar objetos se debe utilizar el “GridLayout” ( )

10 Cuando implementamos los “listener” en nuestra aplicación; estos detectan los eventos ocurridos sobre el(los) objeto(s) previamente especificado(s).

( )

11 Cuando utilizamos interfaces en nuestras aplicaciones se deben implementar todos los métodos que pertenecen a esta interfaz ( )

12 El ciclo de vida de un Applet comprende la ejecución de los siguientes métodos “init()”, “start()”, “paint()”, “stop()”, “destroy()” ( )

13 El método “getParameter(String str)” de la clase Applet se utiliza para recoger parámetros enviados desde la pagina Web. ( )

14 Una forma de crear hilos en Java es desarrollar una clase que herede de la clase “Thread” ( )

15 Cuando creamos hilos en Java se debe sobrescribir el método “run()” ( )

16 Es posible crear hilos implementando la interfaz “Runnable” ( ) 17 Un hilo puede estar en cualquiera de los siguientes estados:

Nuevo, Preparado, En ejecución, Bloqueado, Muerto. ( )

18 Un flujo es un objeto que se encuentra entre una aplicación Java y una fuente o destino de datos ( )

19 El acceso a Escritura o Lectura de datos en un fichero puede ser de forma aleatoria o secuencial. ( )

20 Las clase “FileOutputStream” y “FileInputStream” son clases de acceso secuencial a ficheros ( )

21 Al implementar flujos se utiliza el método “close()” en el inicio de la transmisión de datos para optimizar los procesos ( )

Page 68: Guia de Java Version final ver 1_5

Programación en Java - 59

ANEXOS

Page 69: Guia de Java Version final ver 1_5

Programación en Java - 60

Taller de Programación # 1

En este punto vamos a desarrollar una aplicación en la cual implementemos en código todo lo estudiado. Planteamiento de la aplicación A continuación implementaremos la clase “Ventanas” la misma que trata de modelar algunos comportamientos de una ventana del sistema Operativo Windows, la misma que ya la analizamos en el capitulo anterior. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

/* Archivo: Ventanas.java */ /* Fecha: 13 de Julio 2003 */ /* Autor: Guido Riofrio */ class Ventanas { // Declaración de atributos String titulo, direccion; int ancho, alto; int posicion_X, posicion_Y; int estado; static String color_fondo = "Blanco"; // Implementación del método crear_ventana void crear_ventana(String p_titulo, int posicion_X, int posicion_Y, int ancho, int alto, int estado) { titulo = p_titulo; this.posicion_X = posicion_X; this.posicion_Y = posicion_Y; this.ancho = ancho; this.alto = alto; this.estado = estado; } // Implementación del método mover void mover(int dX, int dY){ posicion_X = posicion_X + dX; posicion_Y = posicion_Y + dY; } // Implementación del método cambiar_tamaño void cambiar_tamaño(int ancho1, int alto){ ancho = ancho + ancho1; this.alto = this.alto + alto; } // Implementación del método presentar_informacion void presentar_informacion(){ System.out.println("El titulo de la ventana es: " + titulo); System.out.println("La posición es: X = " + posicion_X + ", Y = " + posicion_Y);

Page 70: Guia de Java Version final ver 1_5

Programación en Java - 61

43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

System.out.println("El tamaño es: Ancho = " + ancho + " Alto = " + alto); switch (estado){ case 0: System.out.println("Ventana MINIMIZADA\n"); break; case 1: System.out.println("Ventana NORMAL\n"); break; case 2: System.out.println("Ventana MAXIMIZADA\n"); break; } } // Implementación del método principal de la clase Ventanas public static void main(String[] parametros) { Ventanas miPc = new Ventanas(); miPc.crear_ventana("Mi PC", 120, 180, 80, 50, 1); miPc.presentar_informacion(); miPc.mover(-30,20); miPc.cambiar_tamaño(10, 15); miPc.estado = 2; miPc.presentar_informacion(); } }

Análisis de la aplicación

Las líneas 1,2,3 son comentarios informativos sobre el programa. Luego en la línea 5 declaramos la clase “Ventanas”. Las líneas 8 – 12 corresponden a la declaración de atributos de la clase

con los tipos de datos ya estudiados; centrémonos en la línea 12 en la cual se asigna un valor al momento de declarar la variable “color_fondo” pero además se utiliza la palabra static la misma que indica que este es un atributo de clase y no de objeto; en las siguientes paginas revisaremos con mayor detalle esta palabra.

Luego en la línea 15 y 16 implementamos el primer método(“crear_ventana”) de esta clase, este método recibe algunos parámetros los mismos que son asignados a los atributos de la clase.

Preste atención en las líneas 17 – 22 a los nombres de los parámetros, la mayoría de estos tienen el mismo nombre de los atributos, en este caso la asignación se hace utilizando la palabra reservada “this”, esta palabra se utiliza para hacer referencia a los miembros(atributos o métodos) del objeto actual en el que estamos trabajando; esto tiene mucha lógica puesto que no puedo escribir el siguiente código, por ejemplo: “estado=estado” es decir asignar el valor del parámetro “estado” al atributo igualmente denominado “estado”.

Luego en el método “mover”(línea 26) simplemente se incrementa el valor de “posición_X” y “posición_Y” con los parámetros que llegan a este método.

Page 71: Guia de Java Version final ver 1_5

Programación en Java - 62

En el método “Cambiar_tamaño” (línea 32) se cambian los valores de “ancho” y “alto”.

El método “presentar_informacion” (línea 38) presenta el valor de los atributos.

Finalmente esta el método principal (línea 58) de la clase en el cual se crea un objeto en la línea “Ventanas miPc = new Ventanas();”, posteriormente se ejecutan los métodos del objeto, estos son referenciados por medio de un punto “.”, igualmente se cambia el valor del atributo “estado”.

Resultados de la aplicación.

La aplicación llama dos veces al método “presentar_informacion” Consecuentemente se presentan dos veces los valores de los atributos con los valores asignados en los métodos que previamente se ejecutan.

Page 72: Guia de Java Version final ver 1_5

Programación en Java - 63

Taller de Programación # 2

En el siguiente programa aplicaremos algunos métodos de la clase “String”, igualmente implementaremos un constructor para inicializar los valores de los atributos de la clase, así mismo aplicaremos la sobrecarga de métodos, definiendo dos métodos con el mismo nombre pero diferente implementación. Quiero enfatizar que es muy importante que utilice la documentación de la API de Java para ir revisando los recursos de los que dispone esta clase(“String”). Planteamiento de la aplicación Se trata de modelar la clase denominada “Párrafos” la misma que tiene sus atributos(texto, tipo de letra, tamaño de letra, longitud del texto) y sus métodos(Insertar un texto en el párrafo, eliminar un texto, buscar una palabra o frase, remplazar). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

/* Archivo: Basicas.java */ /* Fecha: 23 de Julio 2003 */ /* Autor: Guido Riofrio */ // Implementación de la clase Parrafos class Parrafos { String texto; String tipo_letra; int tamaño_letra; Parrafos(String texto, String tipo_letra, int tamaño_letra) { this.texto = texto; this.tipo_letra = tipo_letra; this.tamaño_letra = tamaño_letra; } String insertar(int posicion, String texto_nuevo) { String txt1, txt2; txt1 = texto.substring(0, posicion); txt2 = texto.substring(posicion, texto.length()); texto = txt1 + texto_nuevo + txt2; return texto; } void eliminar(int pos_inicio, int pos_fin) { String txt1, txt2; txt1 = texto.substring(0, pos_inicio); txt2 = texto.substring(pos_fin, texto.length()); texto = txt1 + txt2; } int eliminar(String txt_out) { int indice; indice = texto.indexOf(txt_out); if (indice != -1)

Page 73: Guia de Java Version final ver 1_5

Programación en Java - 64

37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

eliminar(indice, indice + txt_out.length()); return indice; } void remplazar(String txt_old, String txt_new) { int indice; indice = eliminar(txt_old); if (indice != -1) insertar(indice, txt_new); } int buscar(String txt_find) { return texto.indexOf(txt_find); } } // Implementación de la clase principal llamada "Basicas" class Basicas { public static void main(String[] parametros) { Parrafos refran = new Parrafos("Muchas cosas que se pueden averiguar pensando hay que vivirlas", "Arial", 12); System.out.println("\nREFRAN INICIAL: " + refran.texto); System.out.println("\nREFRAN LUEGO DE INSERTAR: " + refran.insertar(13, "y realidades ")); refran.eliminar(50, 59); System.out.println("\nREFRAN LUEGO DE ELIMINAR 1: " + refran.texto); refran.eliminar("cosas y "); System.out.println("\nREFRAN LUEGO DE ELIMINAR 2: " + refran.texto); refran.remplazar("que se pueden averiguar","del conocimiento"); System.out.println("\nREFRAN LUEGO DE REMPLAZAR: " + refran.texto); System.out.println("\nLA PALABRA \"del\" SE ENCUENTRA EN LA POSICION: " + refran.buscar("del")); System.out.println("\nEL REFRAN TIENE " + refran.texto.length() + " LETRAS"); } }

Análisis de la aplicación Se podrá dar cuenta que la aplicación tiene 2 clases; la clase “Parrafos” implementa los atributos y los métodos necesarios para modelar un párrafo de texto, mientras que la clase principal, se llama “Basicas” es decir esta contiene el método “main”, consecuentemente el nombre del archivo se debe llamar “Basicas.java”.

En la líneas 6, 8, 9 se declaran los atributos de la clase “Parrafos” de los cuales se utiliza principalmente el denominado “texto”.

Page 74: Guia de Java Version final ver 1_5

Programación en Java - 65

En las líneas 11 – 16 se declara e implementa un constructor el mismo que recibe 3 parámetros y en el cuerpo del mismo se inicializan los atributos.

En las líneas 18 – 24 se declara e implementa el método “insertar” para insertar nuevo texto al párrafo. Este método recibe como parámetros la posición en donde insertar y el texto que se insertara.

Luego en las líneas 20 y 21 se extraen dos subcadenas: desde el inicio hasta “posición” en “txt1” y desde “posición” hasta el final en “txt2”, para luego en la línea 22 insertar el texto nuevo entre estas dos subcadenas. Como ya indique anteriormente cuando se declara un atributo o variable de tipo “String” lo que realmente se tiene es un objeto de la clase “String” lo cual nos permite acceder a sus métodos, en este caso tenemos el objeto “texto” y hemos accedido al método “length()” para obtener el tamaño de este “texto”; finalmente este método devuelve un dato de tipo String(línea 23).

En las líneas 26 – 31 se declara e implementa el método “eliminar” el mismo que suprime el texto comprendido entre los parámetros de “pos_inicio” y “pos_fin”.

En las líneas 28 y 29 se extraen dos subcadenas: desde el inicio hasta “pos_inicio” en “txt1” y desde “pos_fin” hasta el final en “txt2”, para luego en la línea 30 sumar estas dos subcadenas lo cual automáticamente elimina el texto comprendido entre “pos_inicio” y “pos_fin”. Para sumar estas dos subcadenas también se puede utilizar el método “concat” de la clase “String”(texto = txt1.concat(txt2);)

En las líneas 33 – 39 se declara e implementa otro método “eliminar”, pero en este caso recibe como parámetro el texto que se desea eliminar(“txt_out”).

Luego se calcula la posición inicial y final de “txt_out” con el fin de enviar estos valores como parámetros al método “eliminar” que inicialmente estudiamos. La posición inicial(índice) se calcula con ayuda del método “indexOf” de la clase “String” y la posición final resulta de sumar la posición inicial mas la longitud de “txt_out”, estas operaciones se la hace en las líneas 35 y 37 principalmente. Vale indicar que si el método “indexOf” no encuentra la cadena que esta buscando “txt_out” este devuelve un valor de -1; finalmente este método devuelve la posición en la que se encontró el texto eliminado.

El método “remplazar” declarado e implementado en las líneas 41 – 46 y que recibe como parámetros el texto antiguo y el texto nuevo resulta de una combinación del método “eliminar” y del método “insertar”.

El método “buscar” devuelve la posición en la que se encuentra el texto que se esta buscando.

Luego en el método “main” de la clase “Basicas” creamos un objeto(“refran”) o instancia de la clase “Parrafos”(línea 56) al mismo que le enviamos los parámetros necesarios para que el constructor los cargue en los respectivos atributos.

El código que esta a partir de la línea 59 ejecuta los métodos del objeto “refran” y presenta el valor que tiene el atributo “texto”.

Page 75: Guia de Java Version final ver 1_5

Programación en Java - 66

Recomiendo analizar la salida de esta aplicación comparándola con los parámetros que reciben los métodos al momento de ejecutarse. Resultados de la aplicación.

Page 76: Guia de Java Version final ver 1_5

Programación en Java - 67

Taller de Programación # 3

En el siguiente programa aplicaremos los métodos de la clase “Math”, estos métodos al igual que los atributos se encuentran en la documentación de la API de Java. Planteamiento de la aplicación Se trata de modelar la clase denominada “Matematicas.java” la misma que contiene algunas funciones de la clase “Math” insertadas en una tabla en un entorno gráfico, es importante indicar que el diseño de interfaces de usuario es materia de un capitulo posterior. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

/* Archivo: Matematicas.java */ /* Fecha: 24 de Julio 2003 */ /* Autor: Guido Riofrio */ import javax.swing.*; import java.awt.*; class Matematicas extends JFrame { String[] columnas = {"Función de Java", "Operación", "Resultado"}; Object[][] datos = { {"abs(-12.56)", "Valor absoluto de un número", new Double(Math.abs(-12.56))}, {"cos(Math.PI)", "Coseno de un ángulo dado en Radianes", new Double(Math.cos(Math.PI))}, {"log(5)", "Logaritmo de un número", new Double(Math.log(5))}, {"max(12, 56)", "El valor máximo de dos cantidades", new Integer(Math.max(12,56))}, {"pow(4, 3)", "Potenciación", new Double(Math.pow(4,3))}, {"random()", "Numeros Aleatorios", new Double(Math.random())}, {"round(19.8)", "Redondeo de una cantidad", new Double(Math.round(19.8))}, {"sqrt(81)", "Raíz cuadrada", new Double(Math.sqrt(81))}, {"toDegrees(Math.PI)","Angulo de Radianes a grados", new Double(Math.toDegrees(Math.PI))}, {"toRadians(180)", "Angulo de Grados a Radianes", new Double(Math.toRadians(180))}}; JTable tabla = new JTable(datos,columnas); JScrollPane scrollPane = new JScrollPane(tabla); Matematicas() { super("Uso de la clase Math de JAVA"); setBounds(0,0,600,300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new GridLayout(1,1,10,10)); getContentPane().add(scrollPane);

Page 77: Guia de Java Version final ver 1_5

Programación en Java - 68

41 42 43 44 45 46 47

setVisible(true); } public static void main(String[] args) { Matematicas obj = new Matematicas(); } }

Análisis de la aplicación Como ya indique anteriormente esta aplicación esta desarrollada en un interfaz gráfica, pero la idea es mostrar algunos métodos de la clase “Math” (funciones matemáticas.)

En las líneas 6 y 7 se importan los paquetes que utilizaremos para los objetos gráficos.

En las líneas 9 y 10 se declara un arreglo de String el mismo que contiene los encabezados de la tabla en la aplicación

En las líneas 11 a la 31 de declara otro arreglo que contendrá los datos de la tabla antes mencionada, esta tabla tiene tres columnas; la primera y la segunda son de tipo “String”, la tercera contiene un objeto de tipo “Integer” o “Double”; depende del método que se aplique.

En la línea 45 creamos un objeto de la clase “Matematicas”. Las líneas 36 a 41 se explican en el taller de programación # 5

correspondiente al diseño de interfaces gráficas de usuario. Resultados de la aplicación.

Page 78: Guia de Java Version final ver 1_5

Programación en Java - 69

Taller de Programación # 4

En el siguiente programa aplicaremos los conceptos de herencia de POO en Java, por otra parte tenga en cuenta el uso del método “paint” el mismo que nos muy útil en el capitulo relacionado con interfaces gráficas de usuario. Planteamiento de la aplicación En la siguiente aplicación implementaremos las clases: Punto, Círculo y Elipse explicadas en la sección 4.5 de nuestra guía; en la misma que las clases Círculo y Elipse heredan de Punto; tenga en cuenta los métodos implementados en la clase padre los cuales posteriormente son utilizados en las clases heredadas. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

/* Archivo: Herencia.java */ /* Fecha: 24 de Julio 2003 */ /* Autor: Guido Riofrio */ import javax.swing.*; import java.awt.*; class Punto extends JFrame { int x; int y; Punto(int x, int y) { super("Implementación de las clases: Punto, Circulo, Elipse"); this.x = x; this.y = y; setBounds(0,0,200,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } void dibujar() { Graphics grf; grf = getGraphics(); paint(grf); } void mover(int dx, int dy) { Graphics grf; grf = getGraphics(); x = x + dx; y = y + dy; paint(grf); } void get_X(String clase) { System.out.println("La coordenada X del objeto de tipo " + clase + " es: " + x); } void get_Y(String clase) { System.out.println("La coordenada Y del objeto de tipo " + clase + " es: " + y);

Page 79: Guia de Java Version final ver 1_5

Programación en Java - 70

40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97

} public void paint(Graphics g) { setBackground(new Color(191,206,237)); g.setColor(Color.black); g.fillOval(x,y,4,4); } } class Circulo extends Punto { int radio; Circulo(int x, int y, int radio) { super(x, y); this.radio = radio; } void get_Radio() { System.out.println("El radio del objeto perteneciente a la clase Circulo es: " + radio); } public void paint(Graphics g) { setBackground(new Color(232,241,217)); g.setColor(Color.blue); g.fillOval(x,y,radio,radio); } } class Elipse extends Punto { int radioMay; int radioMen; Elipse(int x, int y, int radioMay, int radioMen) { super(x, y); this.radioMay = radioMay; this.radioMen = radioMen; } void get_RadioMay() { System.out.println("El radio mayor del objeto de tipo Elipse es: " + radioMay); } void get_RadioMen() { System.out.println("El radio menor del objeto de tipo Elipse es: " + radioMen); } public void paint(Graphics g) { setBackground(new Color(245,213,242)); g.setColor(Color.red); g.fillOval(x,y,radioMay,radioMen); } } public class Herencia { public static void main(String[] args) { /******* Clase Punto *******/ Punto obj1 = new Punto(100,120); obj1.dibujar(); obj1.mover(40, -20); obj1.get_X("Punto"); obj1.get_Y("Punto");

Page 80: Guia de Java Version final ver 1_5

Programación en Java - 71

98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114

/****** Clase Circulo ******/ Circulo obj2 = new Circulo(90, 90, 40); obj2.dibujar(); obj2.mover(40, -20); obj2.get_X("Circulo"); obj2.get_Y("Circulo"); obj2.get_Radio(); /****** Clase Elipse *******/ Elipse obj3 = new Elipse(90, 90, 50, 30); obj3.dibujar(); obj3.mover(-30, 25); obj3.get_X("Elipse"); obj3.get_Y("Elipse"); obj3.get_RadioMay(); obj3.get_RadioMen(); } }

Análisis de la aplicación En el presente análisis nos referiremos a los aspectos relacionados con la herencia, el código relacionado con la implementación gráfica se lo explicara con mayor detalle en el capitulo 5.

En las líneas 9 y 10 se declaran dos atributos de la clase “Punto”. En las líneas 12 hasta la 20 se implementa el constructor de esta clase,

en el mismo se inicializan los atributos de la clase con los valores que trae el constructor.

En las líneas 21 hasta la 25 se implementa el método “dibujar” el mismo que al igual que los demás será posteriormente heredado, este llama al método “paint” que es donde realmente se gráfica.

En el método “mover” (líneas 26 hasta la 32) se altera el valor de los atributos o coordenadas “x” e “y” para dibujarse nuevamente.

En las líneas 33 hasta la 40 se implementan los métodos “get_X” y “get_Y” en los cuales simplemente se presenta el valor de “x” e “y”, como estos métodos posteriormente serán heredados, pues reciben un parámetro que indica la clase (en realidad pertenecen a un objeto de una clase determinada) a la cual pertenecen en ese momento.

En las líneas 41 hasta la 45 se implementa el método “paint” el mismo que los estamos sobrescribiendo ya que éste en realidad pertenece a una clase antecesora y se lo utiliza exclusivamente para realizar gráficos sobre los componentes de “Swing”.

En la línea 48 se declara la clase “Circulo” la misma que hereda las características ya implementadas en la clase “Punto”.

En la línea 49 se declara un tercer atributo para esta clase. En las líneas 51 hasta la 54 se implementa el constructor de esta clase al

mismo que le llegan tres parámetros, tenga en cuenta el uso de “super”; dicha instrucción ejecuta el constructor de la clase superior, recuerde que los constructores no se heredan, por este motivo es necesario ejecutarlos de forma explicita utilizando la palabra “super”.

Page 81: Guia de Java Version final ver 1_5

Programación en Java - 72

En las líneas 55 hasta la 58 se implementa el método “get_Radio” el mismo que no recibe parámetros ya que es exclusivo de “Circulo” y de acuerdo a nuestra estructura este posteriormente no se heredara.

En las líneas 59 hasta la 63 implementamos nuevamente el método “paint”; en este caso se ajusta a las necesidades de esta clase.

En las líneas 66 hasta la 88 se implementa la clase “Elipse” la cual igualmente hereda de “Punto”.

En las líneas 90 hasta la 114 se implementa la clase principal de nuestra aplicación en la cual se crean tres objetos(uno de cada clase de las anteriores)

En la línea 93 se crea el primer objeto de la clase “Punto” al cual se le envían 2 parámetros tal como esta diseñado su constructor.

En las líneas 94 hasta la 97 se ejecutan los métodos: dibujar, mover, get_X y get_Y de este primer objeto (obj1).

En las líneas 99 hasta la 112 se ejecutan los métodos de los dos objetos restantes, tenga en cuenta que se ejecutan normalmente algunos métodos implementados únicamente en la clase “Punto” por ejemplo el método “mover”

Resultados de la aplicación.

Page 82: Guia de Java Version final ver 1_5

Programación en Java - 73

Taller de Programación # 5

La siguiente aplicación demuestra como crear una interfaz gráfica de usuario, veremos como trabajan los contenedores y los componentes. Planteamiento de la aplicación En esta aplicación insertaremos dentro de un contenedor “JFrame” algunos objetos o componentes básicos para desarrollar aplicaciones con”Swing”, debo mencionar que en esta primera aplicación me he centrado únicamente en el diseño y no en el control de eventos sobre dichos objetos, es decir los componentes no responden a las acciones del teclado o del ratón. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

/* Archivo: Interfaz.java */ /* Fecha: 28 de Julio 2003 */ /* Autor: Guido Riofrio */ import javax.swing.*; import java.awt.*; class HolaSwing extends JFrame { String[] dias = { "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo" }; String[] meses = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"}; Container intermedio = new Container(); JButton aceptar = new JButton("Aceptar"); ImageIcon imagen = new ImageIcon("middle.gif"); JButton cancelar = new JButton("Cancelar",imagen); JSlider control = new JSlider(20, 80); JComboBox opciones_1 = new JComboBox(dias); JList opciones_2 = new JList(meses); JScrollPane scroll_opc_2 = new JScrollPane(opciones_2); JLabel etiqueta = new JLabel("Etiqueta"); JLabel picture = new JLabel(new ImageIcon("Dog.gif")); HolaSwing() { super("Interfaz Gráfica de Usuario"); setBounds(0,0,360,260); intermedio = getContentPane(); intermedio.setLayout(new FlowLayout()); intermedio.add(aceptar); intermedio.add(cancelar); intermedio.add(control); intermedio.add(opciones_1); opciones_2.setVisibleRowCount(4); intermedio.add(scroll_opc_2); intermedio.add(etiqueta); intermedio.add(picture); setVisible(true); }

Page 83: Guia de Java Version final ver 1_5

Programación en Java - 74

41 42 43 44 45 46 47

} public class Interfaz { public static void main(String[] args) { HolaSwing obj = new HolaSwing(); } }

Análisis de la aplicación

Las líneas 5 y 6 importan los paquetes que contienen las clases: “JFrame”, “JButton”, “Container”, etc.

En la linea 8 se declara la clase “HolaSwing” la misma que hereda de “JFame”.

En las líneas 9 – 13 se declaran dos arreglos “días” y “meses” los mismos que posteriormente serán relacionados con dos objetos “JComboBox” y “JList”.

En la línea 14 se crea un objeto “Container” sobre el cual se insertaran los objetos.

En las línea 15 – 24 se crean los objetos que tendrá la interfaz grafica de usuario; podrá darse cuenta que para crear el objeto llamado “cancelar”(Botón) el mismo que tiene un gráfico primero se ha creado un objeto llamado “imagen” de tipo “ImageIcon”; lo mismo ocurre con el objeto “picture” de tipo “JLabel”. Recomiendo revisar en la documentación de la API los constructores que estoy utilizando para crear objetos de estas clases. Igualmente el objeto “opciones_2” de tipo “JList” debe ser insertado en un objeto de la clase “LScrollPane”, esto es necesario para que sea visible la barra de desplazamiento vertical.

En la línea 26 se declara el constructor de nuestra clase. Recuerde que los constructores no se heredan, en este caso estoy

haciendo una llamada al constructor de la clase padre ósea “JFame”; línea 27.

El método “setBounds” que ha sido heredado a “JFrame” desde la clase “Component”, lo utilizo para indicar la posición y tamaño de la ventana; línea 28.

En la línea 29 el método “getContentPane” de “JFrame” asigna una referencia al objeto “intermedio” de tipo “Container”.

En la línea 30 definimos una forma de distribuir los objetos en el objeto “intermedio”, esto se lo hace mediante el método “setLayout” al mismo que se le pasa un objeto de tipo “FlowLayout”.

En las líneas 31 – 38 se insertan los objetos al contenedor, tome en cuenta que en la línea 35 especifico que deben ser visibles 4 elementos en el objeto de tipo “JList”.

Finalmente en la línea 39 se hace visible la ventana.

Page 84: Guia de Java Version final ver 1_5

Programación en Java - 75

Resultados de la aplicación.

Page 85: Guia de Java Version final ver 1_5

Programación en Java - 76

Taller de Programación # 6

Ya hemos estudiado la forma en que se insertan objetos al contenedor; en la siguiente aplicación programaremos la forma en que los componentes responden a eventos del “teclado” o “ratón”. Planteamiento de la aplicación En la siguiente aplicación implementare interfaces que escuchen(Listener) eventos que ocurran sobre los objetos “JButton”, “JTextField”, “Container” y “JFrame”; estos eventos pueden ser: un clic en un botón, presionar la tecla “Enter” en el objeto llamado “texto” de tipo “JTextField”, hacer clic en el objeto llamado “area2” de tipo “Container” o hacer que el puntero del “Mouse” entre o salga de esta área(objeto “area2”), otro evento puede ser cerrar la ventana de la aplicación. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

/* Archivo: Eventos.java */ /* Fecha: 30 de Julio 2003 */ /* Autor: Guido Riofrio */ import javax.swing.*; import java.awt.*; import java.awt.event.*; class Eventos extends JFrame implements WindowListener, ActionListener, MouseListener { Container intermedio = new Container(); FlowLayout admin = new FlowLayout(10,10,10); JPanel panel1 = new JPanel(admin); MiContainer area2 = new MiContainer(); JPanel panel3 = new JPanel(admin); JButton aceptar = new JButton("Aceptar"); JButton cancelar = new JButton("Cancelar"); JTextField texto = new JTextField("Digite su nombre.",20); JTextField msgbox = new JTextField(25); Eventos() { super("Control de Eventos"); setSize(310,300); intermedio = getContentPane(); intermedio.setLayout(new BorderLayout()); admin.setAlignment(FlowLayout.CENTER); panel1.setBackground(new Color(234,207,255)); panel3.setBackground(new Color(176,231,176)); panel1.add(aceptar); panel1.add(cancelar); panel1.add(texto); panel1.setPreferredSize(new Dimension(300,80)); panel3.add(msgbox); intermedio.add(panel1,BorderLayout.NORTH); intermedio.add(area2,BorderLayout.CENTER);

Page 86: Guia de Java Version final ver 1_5

Programación en Java - 77

37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94

intermedio.add(panel3,BorderLayout.SOUTH); addWindowListener(this); aceptar.addActionListener(this); cancelar.addActionListener(this); texto.addActionListener(this); area2.addMouseListener(this); setVisible(true); } /* Metodos pertenecientes a la interfaz "WindowListener" */ public void windowActivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowClosing(WindowEvent e) { System.exit(0); } public void windowDeactivated(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowOpened(WindowEvent e) {} /* Metodos pertenecientes a la interfaz "ActionListener" */ public void actionPerformed(ActionEvent e) { if (e.getSource() == aceptar) { msgbox.setText(msgbox.getText() + " Aceptar"); } if (e.getSource() == cancelar) { msgbox.setText(msgbox.getText() + " Cancelar"); } if (e.getSource() == texto) { msgbox.setText(" ¡ Hola " + texto.getText() + " ! "); } } /* Metodos pertenecientes a la interfaz "MouseListener" */ public void mouseClicked(MouseEvent e) { area2.dibujar(e.getX(), e.getY()); msgbox.setText("Clic en: X = " + e.getX() + " Y = " + e.getY()); } public void mouseEntered(MouseEvent e) { msgbox.setText("metodo mouseEntered en: " + e.getX() + " Y = " + e.getY()); } public void mouseExited(MouseEvent e) { msgbox.setText("metodo mouseExited en: " + e.getX() + " Y = " + e.getY()); } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} /* Metodo principal de la clase "Eventos" */ public static void main(String[] args) { Eventos obj = new Eventos();

Page 87: Guia de Java Version final ver 1_5

Programación en Java - 78

95 96 97 98 99 100 101 102 103 104 105 106 107 108

} } class MiContainer extends Container { int x,y; void dibujar(int x, int y) { this.x = x; this.y = y; repaint(); } public void paint(Graphics g) { g.fillOval(x, y, 6, 6); } }

Análisis de la aplicación

En las líneas 5 hasta la 7 se importan los paquetes necesarios para el diseño de la interfaz así como de los eventos.

En las líneas 9 y 10 se declara la clase eventos, también se implementan las interfaces para el control de eventos.

En la línea 38 se aplica el método “addWindowListener” con esto le estamos indicando a la ventana (o Frame) que escuche los eventos que ocurren sobre esta, el parámetro que recibe es de tipo “WindowListener”, en este caso es el objeto sobre el cual estamos trabajando.

En las líneas 39 hasta la 41 aplicamos el método “addActionListener” con lo cual estos objetos escucharan cualquier evento de tipo “ActionListener”; lo mismo ocurre en la línea 42 cuyo objeto escuchara eventos del tipo “MouseListener”.

En las líneas 48 a 56 se implementan los métodos de la interfaz “WindowListener”; tal como indique en la guía, estos deben ser especificados aun cuando no se utilicen; en este caso estamos programando que cuando se ejecute el método “windowClosing”(este método se ejecuta cuando se hace clic en botón de cierre de la ventana) saldremos completamente de la aplicación.

En las líneas 60 hasta la 71 implementamos el único método que pertenece a la interfaz “ActionListener”; es importante mencionar que cada método recibe como parámetro un objeto con información del evento, en este caso el método ”getSouurce” objeto “e” lo utilizaremos para reconocer en que objeto ocurrió el evento para posteriormente realizar alguna acción en este caso estamos presentando un mensaje en el objeto “msgbox”.

En las líneas 75 hasta la 89 implementamos los métodos de la interfaz “MouseListener”.

El método “mouseClicked” se ejecuta cuando se hace un clic sobre el objeto (“area2”); este método dibuja un punto en esta área y posteriormente presenta las coordenadas en la cuales ocurrió el evento.

Page 88: Guia de Java Version final ver 1_5

Programación en Java - 79

Los métodos implementados en las líneas 80 hasta la 87 igualmente presentan las coordenadas en las que ocurrió el evento, es importante el uso del objeto que tiene la información de cada evento “e”.

El objeto “area2” es de tipo “MiContainer” cuya clase esta implementada en las líneas 98 hasta la 108; podrá darse cuenta del método “dibujar” el mismo que era invocado cuando ocurría el evento “clic” sobre el objeto “area2”.

Resultados de la aplicación.

Page 89: Guia de Java Version final ver 1_5

Programación en Java - 80

Taller de Programación # 7

El desarrollo de Applets(Programación para Internet) es un aspecto muy importante en Java, a continuación de desarrollaremos un Applet utilizando la tecnología “Swing” para el diseño de la interfaz gráfica. Planteamiento de la aplicación Este Applet contiene una tabla con datos de clientes, adicionalmente en un objeto de tipo “JWindow” se presenta el estado en el que se encuentra el Applet en un determinado instante; recomiendo revisar la tabla que se encuentra en la sección 5.6 de la guía didáctica y compararla con los mensajes que presenta dicha ventana de mensajes. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

/* Archivo: MiApplet.java */ /* Fecha: 30 de Julio 2003 */ /* Autor: Guido Riofrio */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.table.*; public class MiApplet extends JApplet { String[] ciudades = {"Quito", "Guayaquil", "Cuenca", "Loja"}; String[] columnas = {"Codigo", "Apellido", "Nombre", "Ciudad"}; Object[][] datos = {{"C001", "Jaramillo", "Diego", ""}, {"C002", "Encalada", "Carlos", ""}, {"C003", "Beltran", "Maria", ""}, {"C004", "Cueva", "Gonzalo", ""}, {"C005", "Maldonado", "Jaime", ""}}; JPanel superior = new JPanel(new FlowLayout(FlowLayout.CENTER,15,15)); JPanel inferior = new JPanel(new FlowLayout(FlowLayout.CENTER,15,15)); JTextField texto = new JTextField(25); JTable tabla = new JTable(datos,columnas); JScrollPane scroll = new JScrollPane(tabla); JButton aceptar = new JButton("Aceptar"); JComboBox dat = new JComboBox(ciudades); String parametro_1; String metodos = "Metodos:"; JWindow mensajes = new JWindow(); JTextField txt_msg = new JTextField(metodos,32); public void init() { parametro_1 = getParameter("param_1"); superior.setBackground(new Color(242,206,245)); inferior.setBackground(new Color(242,237,203)); superior.add(texto); texto.setText(parametro_1);

Page 90: Guia de Java Version final ver 1_5

Programación en Java - 81

40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72

showStatus("Este mensaje esta enviado desde el Applet"); inferior.add(aceptar); tabla.setRowHeight(20); TableColumn tCol_3 = tabla.getColumnModel().getColumn(3); tCol_3.setCellEditor(new DefaultCellEditor(dat)); getContentPane().add(superior,BorderLayout.NORTH); getContentPane().add(scroll,BorderLayout.CENTER); getContentPane().add(inferior,BorderLayout.SOUTH); metodos = metodos + " init(),"; mensajes.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER,15,15)); mensajes.getContentPane().add(txt_msg); mensajes.setBounds(30,600,400,70); mensajes.setVisible(true); } public void start() { metodos = metodos + " start(),"; txt_msg.setText(metodos); } public void stop() { metodos = metodos + " stop(),"; txt_msg.setText(metodos); } public void destroy() { metodos = metodos + " destroy(),"; txt_msg.setText(metodos); } }

Análisis de la aplicación

En las líneas 5 hasta la 8 importamos los paquetes necesarios en la interfaz de usuario.

En la línea 10 declaramos la clase “MiApplet” la misma que hereda las características de los Applets de la clase “JApplet”

En las líneas 11 hasta la 19 definimos 3 arreglos de objetos los mismos que los utilizaremos posteriormente en el objeto de tipo “JTable”.

En la línea 31 creamos un objeto de tipo “JWindow”; este contenedor lo utilizaremos posteriormente para mostrar los métodos del Applet que se están ejecutando, tales como: init(), start(), stop(), paint().

En las líneas 34 hasta la 56 implementamos el método init(); en el cual se construye la interfaz gráfica del Applet; ya que es el primero que se ejecuta.

En la línea 35 se recoge el valor del parámetro denominado “param_1” enviado desde la pagina Web; el valor de este parámetro posteriormente es colocado en el objeto “texto” de tipo “JtextField” (línea 39)

En la línea 40 enviamos un mensaje a la barra de estado del Explorador.

Page 91: Guia de Java Version final ver 1_5

Programación en Java - 82

En las líneas 58 hasta la 61 se implementa el método “start”, en este ejemplo este método actualiza el valor de la variable “metodos” para que posteriormente se presente en el objeto “txt_msg” insertado en el contenedor de tipo “JWindow”.

El mismo proceso de actualización de la variable “metodos” se repite en el método “stop” y “destroy” implementado en las líneas 63 hasta la 66 y 68 hasta la 71 respectivamente.

Resultados de la aplicación.

Page 92: Guia de Java Version final ver 1_5

Programación en Java - 83

Taller de Programación # 8

La programación de hilos en Java es una de las características más sobresalientes y potentes de este lenguaje a continuación desarrollaremos una aplicación básica utilizando hilos. Planteamiento de la aplicación En la siguiente aplicación insertaremos 3 objetos de tipo “TextField” en cada uno de los cuales se ejecutara un hilo diferente, en este caso un contador hasta el número 99 en cada caja de texto. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

/* Archivo: Contadores.java */ /* Fecha: 09 de Agosto 2003 */ /* Autor: Guido Riofrio */ import javax.swing.*; import java.awt.*; public class Contadores extends JFrame { JTextField ind_a = new JTextField("0"); JTextField ind_b = new JTextField("0"); JTextField ind_c = new JTextField("0"); public Contadores() { super("Hilos en Java"); setSize(250,150); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new GridLayout(3,5,10,10)); getContentPane().add(new JLabel("Indicador A")); getContentPane().add(ind_a); getContentPane().add(new JLabel("Indicador B")); getContentPane().add(ind_b); getContentPane().add(new JLabel("Indicador C")); getContentPane().add(ind_c); setVisible(true); Thread A = new Thread (new Indicadores(ind_a)); Thread B = new Thread (new Indicadores(ind_b)); Thread C = new Thread (new Indicadores(ind_c)); A.start(); B.start(); C.start(); } public static void main(String[] args) { new Contadores(); } } class Indicadores implements Runnable { JTextField texto; String s; public Indicadores(JTextField indic) { texto = indic; }

Page 93: Guia de Java Version final ver 1_5

Programación en Java - 84

42 43 44 45 46 47 48 49 50

public void run() { for (int i=0; i<100; i++) { texto.setText(s.valueOf(i)); try { Thread.sleep((int)(Math.random() * 100)); } catch (InterruptedException e) {} } } }

Análisis de la aplicación

En las líneas 9 hasta la 11 creamos tres objetos de tipo “JTextField” en los cuales se visualizaran los contadores.

En las líneas 24 hasta la 26 se crean tres hilos los cuales reciben como parámetros tres objetos que hayan implementado la interfaz “Runnable”.

En las líneas 27 hasta la 29 ejecutamos los hilos utilizando el método “start” el mismo que internamente hace un llamado al método “run” que es donde se encuentra realmente el código a ejecutarse.

En las líneas 36 hasta la 50 implementamos la clase que contiene la implementación del hilo; esta clase debe implementar la interfaz “Runnable” para poder definir en esta el método “run”.

El constructor de esta clase se implementa en las líneas 39 hasta la 41, el mismo que recibe como parámetro un objeto de tipo “JTextField”, dicho parámetro es asignado al atributo “texto” para trabajar sobre éste.

En las líneas 42 hasta la 49 implementamos el método “run”, en el cual se realiza la programación necesaria para que estos contadores presenten los números desde 0 hasta 99, tenga en cuenta que al presentar los valores existe un tiempo de retardo aleatorio comprendido entre 0 y 1000 milisegundos.

Resultados de la aplicación.

Page 94: Guia de Java Version final ver 1_5

Programación en Java - 85

SOLUCIONARIO

Page 95: Guia de Java Version final ver 1_5

Programación en Java - 86

AUTOEVALUACIONES

Primer Bimestre Segundo Bimestre

1 ( v ) 1 ( v ) 2 ( v ) 2 ( v ) 3 ( v ) 3 ( v ) 4 ( f ) 4 ( v ) 5 ( f ) 5 ( v ) 6 ( v ) 6 ( v ) 7 ( v ) 7 ( f ) 8 ( f ) 8 ( v ) 9 ( v ) 9 ( v ) 10 ( v ) 10 ( v ) 11 ( v ) 11 ( v ) 12 ( v ) 12 ( v ) 13 ( v ) 13 ( v ) 14 ( v ) 14 ( v ) 15 ( v ) 15 ( v ) 16 ( v ) 16 ( v ) 17 ( v ) 17 ( v ) 18 ( v ) 18 ( v ) 19 ( v ) 19 ( v ) 20 ( v ) 20 ( v ) 21 ( v ) 21 ( f ) 22 ( f ) 23 ( v ) 24 ( v ) 25 ( v ) 26 ( v ) 27 ( v ) 28 ( v ) 29 ( v ) 30 ( v ) 31 ( v ) 32 ( v )

Page 96: Guia de Java Version final ver 1_5

Programación en Java - 87

GLOSARIO

Page 97: Guia de Java Version final ver 1_5

Programación en Java - 88

Acceso: Propiedad de una clase, método o variable que determina si pueden utilizarla subclases, clases de otros paquetes u otra clase. Java tiene cuatro niveles de acceso: privado, de paquete, protegido y público. Relacionado con ámbito, si bien es de más alto nivel. Algoritmo: Secuencia de instrucciones que puede ejecutar una computadora, en que realiza ciertas acciones y tarde o temprano se interrumpe. Alias: Variable que se refiere al mismo objeto como otro. Sólo las variables de tipo clase pueden ser alias unas de otras. Ámbito: Alcance de una variable que es parte de un programa en que la variable tiene significado y puede usarse. Aplicación: Programa más convencional que un subprograma, diseñado para que se pueda ejecutar en su propia ventana. Aplicación de usuario: La parte de un programa visible para el usuario. Por ejemplo, en un programa que establece una separación lógica de la interfaz de usuario con la porción de procesamiento, la primera sería la aplicación de usuario o interfaz de usuario. Argumento: Conjunto de datos que se envía a un método cuando se lo llama. Los argumentos que aparecen en la definición del método se llaman argumentos formales, y los valores correspondientes, que aparecen en la llamada al método, argumentos reales. Argumento de referencia: En Java, un argumento de método tipo clase, no de tipo primitivo. En términos generales, un argumento de referencia podría considerarse como una dirección, no un valor. Véase también argumento de valor. Argumento de valor: En Java, argumento de tipo primitivo. En términos más generales, un argumento al que se trata en un método generando primero una copia local, que luego se manipula. Un argumento de valor no se modifica después de que el método completa la ejecución. Argumento formal: Uno de los placeholders para información enviada a un método. Véase argumento Argumento real: La información que se envía a un método cuando se lo llama. Véase argumento. Asignación: Operador que asigna un valor o referencias de uno de sus argumentos según el valor o referencia de su otro argumento. Por ejemplo, la expresión x = 3 se valora como 3 y establece 3 como valor de x, como efecto colateral.

Page 98: Guia de Java Version final ver 1_5

Programación en Java - 89

Asociatividad: Orden de evaluación de instancias repetidas de un operador. Por ejemplo, la resta es asociativa a la izquierda, de modo que 5 - 4 - 3 se evalúa como si estuviera escrito ((5 - 4) - 3), mientras que la asignación es asociativa a la derecha, de tal suerte que x = Y = 3 se evaluaría como si se hubiera escrito (x=(y=3)). En Java, todos los operadores binarios son asociativos a la izquierda, excepto la asignación, mientras que todos los operadores unarios lo son a la derecha. Biblioteca: un conjunto e clases útiles o, en lenguajes que no sean Java, métodos útiles. Boolean: Un tipo lógico, que representa los valores true o false. Denominado así en honor de George Boole, lógico del siglo XIX. Búsqueda lineal: Expresión común en programación en que un conjunto de información, como una matriz, se inspecciona en orden lineal hasta que se satisface una condición dada. Byte: Ocho bits. Un byte puede representar cualquiera de 256 valores posibles. Es frecuente que sea la unidad fundamental de organización de la memoria en las computadoras. C: Lenguaje de programación que desarrolló Dennis Ritchie a comienzos del decenio de 1970 en Bell Laboratories. El "abuelo" de Java. C++: Lenguaje de programación que creó Bjarne Stroustrup en la segunda mitad del decenio de 1980. Llamado originalmente C con clases, C++ es una extensión orientada a objetos del lenguaje C. Es el lenguaje "padre" de Java, en el sentido de que este último tiene sintaxis muy similar a la de C++. Campo: En Java, sinónimo de instancia o, menos frecuentemente, variable de clase. Ciclo: Un segmento de código que debe ejecutarse repetidamente. Los ciclos do, while y for son los tres que incluye Java. Clase: Descripción de los datos y métodos para manipular los datos de cada objeto de su tipo. Una clase puede considerarse como plantilla o prototipo de cada uno de sus objetos. Clase abstracta: Clase para la cual es imposible construir un objeto, ya sea porque la clase se define usando la palabra clave abstract o porque uno o más de sus métodos se define sin un objeto de cuerpo de instrucción. Una clase abstracta, como Component, tiene como fin servir a manera de clase madre de una o más clases derivadas, en las cuales se ponen en práctica los métodos vacíos de la clase madre. Similar a interfaz, sin que sean idénticas.

Page 99: Guia de Java Version final ver 1_5

Programación en Java - 90

Clase de adaptador: Clase que modifica la porción de otra clase, interfaz o tipo primitivo que es visible para el programador. Entre los ejemplos clásicos se incluyen MouseAdapter e Integer. También llamada clase envolvente. Clase derivada: La que hereda algunos o todos los métodos y variables de instancia de otra. En la definición de clase class B extends A, B es una clase derivada de A. Clase envolvente: (Véase clase de adaptador.) Clase miembro: Clase que se define en el cuerpo de otra clase. Código de bytes: El producto de un compilador de Java. El intérprete de Java lo traduce y ejecuta para un sistema particular. En teoría, dicho código debe producir el mismo resultado, en lo fundamental, sin importar el sistema en que se interprete. Código fuente: Entrada de datos para un compilador o intérprete. Un programador es un dispositivo que convierte el café y la comida chatarra en código fuente. Código objeto: Código que produce el compilador a partir de la entrada en código fuente. Coerción: Cambio explicito en el tipo de valor de una variable, como en mylnt= (int)- myDouble. Relacionado con la promoción de un valor, como el cambio implícito de tipo en expresión myDouble = mylnt. Comentario: Porción de un programa que aporta información al lector del código fuente, si bien el compilador o intérprete hace caso omiso de ella. Compilador: Programa que toma el código fuente como entrada y produce el código objeto en otro lenguaje como salida. Un compilador de Java traduce el código fuente de Java en código de bytes. Véase también intérprete. Constante: Variable cuyo valor no puede modificarse durante la ejecución. En Java, una variable se vuelve constante al usar la palabra clave final como parte de su declaración. Constructor: Parte opcional de la definición de una clase que describe cómo se inicializa un objeto de la clase. En Java, un constructor se define de manera similar a un método, si bien no se especifica el tipo que devuelve y debe tener el mismo nombre que la clase. Coordenadas: Posiciones horizontal y vertical de un punto en un componente. Las coordenadas se miden desde el extremo superior izquierdo de un componente (coordenadas locales) o de la pantalla de despliegue (coordenadas globales).

Page 100: Guia de Java Version final ver 1_5

Programación en Java - 91

Declaración: Instrucción que establece el almacenamiento de una variable y puede especificar opcionalmente el estado inicial de los datos de esa variable. Definición: Porción de un programa que describe los datos y acción de una clase o método. Los archivos de código fuente de Java consisten exclusivamente en definiciones de clase, declaraciones import y comentarios. Delegación de eventos: Modelo de manejo de eventos en que estos se envían a un método (manejador de eventos) de uno o más objetos en un programa que están registrados como capaces de emprender las acciones apropiadas. Depuración: Proceso de identificación y corrección de errores en un programa. Es la parte más laboriosa del proceso de programación y se puede disminuir, sin que sea posible erradicarla, con hábitos minuciosos. Deprecated: Característica de una versión antigua de Java, que podría no incluirse en versiones futuras. En general, se aplica a clases, métodos o variables. Desarrollo rápido de prototipos: Técnica de diseño de programas en que el primer código producido en la versión es de funciones limitadas, para evaluar su susceptibilidad de utilización, aspecto y funcionalidad definitiva. Desbordamiento: El uso del mismo nombre para dos o más métodos o constructores en una clase, como void setLocation(iint x, int y) void setLocation(Pointp). Devolución de llamada: Método u objeto de una clase que se registra con otra (frecuentemente, en construcción), de modo que se le pueda llamar o usar más adelante. Divide y vencerás: Expresión de diseño cuyo significado es que un programa se soluciona al dividirlo en una o más partes, obtener una solución para cada parte y combinar las soluciones parciales en una solución del problema original. Es frecuente que se ponga en práctica de manera recursiva. Quicksort es un algoritmo del tipo divide y vencerás. Efecto colateral: Acción que genera un operador o método más allá de devolver un valor. Por ejemplo, la expresión x++ devuelve el valor de x y luego lo incrementa, esto último como efecto colateral. Ensamblador/ lenguaje ensamblador: Un ensamblador es un programa que convierte la entrada de datos en lenguaje ensamblador en salida de datos, en lenguaje de máquina. Es usual que cada instrucción en lenguaje ensamblador se traduzca en una instrucción en lenguaje de máquina, de modo que puede considerarse al lenguaje ensamblador como código legible para seres humanos del lenguaje de máquina.

Page 101: Guia de Java Version final ver 1_5

Programación en Java - 92

Error: Que un programa no funcione como se pretende. Un error en tiempo de compilación se debe a que no se apliquen las reglas gramaticales del lenguaje correspondiente (como omitir el punto y coma), un error en tiempo de ejecución resulta de una situación que imposibilita que continúe la ejecución y un error lógico es consecuencia de que no se satisfaga el diseño especificado (como el caso de un programa que debe ordenar una matriz, en vez de la cual deja esta última sin cambio). E/S: Sigla de entrada/salida. Etiqueta: Componente básico del HTML. Una etiqueta consiste en una palabra clave de HTML y otra información opcional, que se incluye entre paréntesis (corchetes) angulares, <>. Evento: Usualmente, una acción que se genera por cierta interacción del usuario con el programa, como hacer clic en un botón o mover el ratón. Exclusión mutua: Permitir que sólo un proceso o hilo tenga acceso a un recurso compartido, como una variable. Firma: Nombre y lista de los tipos de argumentos de un método. Una clase no puede tener dos métodos con la misma firma. Foco: Propiedad de componentes de un programa de Java indicativa de que un componente puede responder a eventos clave. Por ejemplo, en muchos sistemas el indicador visual de que un campo de texto tiene el foco es que dicho campo contiene el cursor de inserción parpadeante. Función: Término usado comúnmente como sinónimo de método. En algunos lenguajes, se distingue entre funciones, que tienen tipos de devolución ajenos a void, y procedimientos, con tipo de devolución void. Guardia: Instrucción o expresión que protege el código subsiguiente contra posibles errores. Por ejemplo, en (( b != 0) && (a / b > 10)), la primera cláusula protege contra la posible división por 0 en la segunda cláusula. GUI: Sigla de Graphic User Interface, interfaz gráfica de usuario. La parte de un programa que es visible para el usuario cuando el programa mismo está en ejecución. Herencia: La característica de los lenguajes orientados a objetos que permite a una clase usar métodos y datos de otra, como si se escribieran de manera explícita como parte de la clase que los hereda. Véase también clase derivada. Herencia múltiple: Situación en que una clase hereda los métodos y variables de dos o más clases, ninguna de las cuales es una superclase de la primera. Es algo permitido en algunos lenguajes como C++, no así en Java.

Page 102: Guia de Java Version final ver 1_5

Programación en Java - 93

HTML: Sigla de Hipertext markup language, lenguaje de marcación de hipertexto. HTML es un conjunto de etiquetas de marcado, como <APPLET>, que utilizan los navegadores Web para controlar los despliegues de texto, gráficos y sonido. IDE: Sigla de Integrate Development Enviroment , entorno de desarrollo integrado. Programa que se usa para facilitar la programación, usualmente al incluir el editor de texto, compilador, depurador y un medio de ejecución de programas en un solo paquete. Identificador: El nombre de una clase, método, argumento o variable. Importación: Una forma de declaración indicativa de que un tipo definido en otro paquete puede usarlo el programa con sólo especificar su nombre mediante la palabra clave import. Inmutable: Objeto que no se puede modificar una vez construido. En Java las cadenas son inmutables. Inspector: En general método usado para determinar el valor de una variable de instancia de un objeto, sin modificar el valor de esa variable. Es frecuente que se asigne un nombre que comienza con “get” como en getLabel(). Instanciación: Proceso de reservar almacenamiento para un objeto y especificar los estados iniciales de algunos de esos datos o todos ellos. Instrucción: La unidad fundamental de ejecución de un programa. En Java, existen instrucciones de expresiones, compuestas y vacías; los ciclos do, while y for, y las instrucciones if, break, return, switch, throw y try. Interfaz: Característica de Java un poco similar a las clases, si bien con implementación vacía de todos sus métodos. Si una clase implementa una interfaz, debe proporcionar cuerpos de instrucciones (aún si no contiene instrucciones) para todos los métodos de la interfaz, Los escuchas de eventos son siempre interfaces. Intérprete: Programa que traduce el código fuente en código objeto, instrucción por instrucción, intercalando la ejecución del código objeto con el proceso de traducción. Ello difiere de un compilador, que traduce el código fuente antes de la ejecución. Invariante de clase: Afirmación que siempre es verdadera para los objetos de una clase, como “la variable de instancia count es mayor o igual que cero”. Lista de argumentos: Lista de pares tipo/nombre que forman parte de la definición de un método.

Page 103: Guia de Java Version final ver 1_5

Programación en Java - 94

Literal: Representación en código fuente del valor una tipo primitivo, String o null. Por ejemplo 3.08 es una literal doble y “foo” es una literal de cadena. Llamada: Invocación de método. Cuando se llama a un método el flujo de ejecución salta a ese método y continúa en él hasta que llegue a una instrucción de regreso o al final del método, en cuyo momento la ejecución regresa al sitio de llamada. Método: Una de las partes activas de una clase. Un método es un conjunto denominado de código que se ejecuta mediante una llamada a su nombre. Método/variable de clase: Método variante que pertenece a una clase, no a cada objeto de la clase. En Java, los métodos y variables de clase se designan con la palabra clave static. Modelo/vista: Estrategia de diseño de programas que pone en relieve la separación entre la representación interna de la información (el modelo) y la forma accesible o visible (la vista) derivada del modelo. Modificador: 1. Palabra clave que se aplica a la definición de un método o variable. Los modificadores en Java son private, protected, public, final, static, transient y volatile. 2. Una tecla como Mayús o Ctrl., que pueden presionarse en combinación con otras. Null: La única literal de tipo clase. Un objeto nulo es uno en estado inicializado. Objeto: Una instancia de una clase. Operador: Característica de un lenguaje que toma uno o más fragmentos de información, los manipula de alguna manera y devuelve un resultado. Difiere en lo sintáctico de un método en que la información utilizada no se presenta como una lista de argumentos. Los símbolos + y <= son ejemplos de operadores. Operador binario: Un operador, como * o &&, que requiere dos operandos. Operador unario: Un operador, como ++, que toma un solo operando. Orientado a objetos: Paradigma de diseño o programación que se basa en el concepto de los objetos como instancias de clases relacionadas por la herencia. Palabra clave: La que tiene un significado predefinido en un lenguaje de programación. En Java, "if", "return" e "int" son ejemplos de palabras clave. Paquete: En Java, carpeta que contiene archivos de definiciones de clases. Los nombres de las clases en un paquete puede usarse en otro archivo mediante la declaración import.

Page 104: Guia de Java Version final ver 1_5

Programación en Java - 95

Parámetro de subprograma: Información, presentada en la etiqueta <APPLET> de un documento HTML, que puede leer el subprograma. Píxel: Contracción de picture element, elemento de imagen. Se refiere a un solo punto desplegable de una imagen o de un dispositivo de despliegue visual, como el monitor de una computadora. Poscondición: Afirmación lógica que deben resultar válida después de la ejecución de un segmento de código, por ejemplo, en: "La matriz a contiene todos los elementos que tenía originalmente, reorganizados en orden numérico de menor a mayor". Precedencia: Orden en que se evalúan los operadores en una expresión, a falta de paréntesis. A manera de ejemplo, en Java la multiplicación tiene precedencia más alta que la suma, de modo que la expresión 2 + 3 * 4 se evalúa realizando la multiplicación antes que la suma, con lo que el resultado es 14. Precondición: Afirmación lógica que debe ser válida antes de la ejecución de un segmento de código, por ejemplo, en: "Se ha declarado la matriz a y debe contener por lo menos N int no negativos". Predicado: Método que devuelve un valor booleano. Es frecuente que el nombre de estos métodos se inicie con la palabra is, como en isVisible. Procedimiento: En algunos lenguajes, sin incluir Java, se usa para referirse al equivalente de lo que se llamaría un método con devolución tipo void. Promoción: Acto, frecuentemente implícito, de considerar información de un tipo como si correspondiera a una categoría más amplia. Por ejemplo, la expresión 3 + 2.817 se evaluaría al promover el entero 3 al tipo double, con lo que se tendría el resultado dóuble 5.817. Véase también coerción. Prueba de intervalo: Proceso usado en Java para verificar que el índice usado en el acceso a una matriz constituye una posición legítima de la matriz. Algunos lenguajes no efectúan este proceso, con lo que sacrifican la seguridad en aras de la eficiencia. Recursión: 1. Llamada a un método, sea directa, o indirecta como parte de la ejecución del código del mismo método. 2. En forma más general, una definición recursiva es la que utiliza un término como parte de la definición de éste. Véase recursión. Representación binaria: Es la codificación de datos como un conjunto de bits. Se usa comúnmente para referirse a un conjunto específico de representación de enteros como suma de potencias de 2, en que se usan 0 y 1 como "dígitos".

Page 105: Guia de Java Version final ver 1_5

Programación en Java - 96

RGB: Sigla red-green-blue, forma de representación de colores en que se utilizan tres valores para representar los componentes rojo, verde y azul de un color. Semántica: Significado y acción de una característica de un lenguaje de programación, en contraste con su sintaxis, que se refiere a la manera en que debe redactarse la característica, de conformidad con las reglas gramaticales del lenguaje en cuestión. Sensible a la caja: Propiedad de un lenguaje consistente en que las versiones en mayúsculas y minúsculas de una misma letra se consideran diferentes. Java es un lenguaje sensible a la caja, ya que las variables sum y Sum serían diferentes, mientras que HTML es insensible a la caja, por lo que procesaría como idénticas las etiquetas <APPLET>, <applet> y <ApPlet>. Serialización: 1. Limitación del acceso a un recurso compartido por un proceso o hilo hasta que otro proceso deje de ocuparlo. 2. Forma muy útil de E/S cuyo análisis rebasa el alcance de esta obra. Sintaxis: Reglas gramaticales que rigen la manera en que debe redactarse una característica de un lenguaje. Véase también semántica. El ejemplo de Noam Chomsky, "Las ideas verdes incoloras duermen furiosamente" [originalmente en inglés], es correcto en lo sintáctico, si bien carece de significado semántico. Sobrecarga: Redefinición de una clase padre en una clase derivada o de un método de interfaz en una clase que incrementa la interfaz. Son ejemplos comunes init (), paint () y actionPerformed(). STUB: Definición de método que tiene cuerpo trivial o vacío. El término se usa frecuentemente en el desarrollo de programas para establecer su organización mientras se posterga su implantación detallada en fecha ulterior. Subclase, superclase: Términos que se refieren a la contención bajo la herencia. En la definición class A extends B (/*...*/), la clase A es una subclase de B, mientras que B es una superclase de A. En este ejemplo B es un tipo más amplio que A, puesto que todo objeto de A también lo es de B, por herencia. Subprograma (applet): Programa de Java diseñado para ejecutarse en un explorador Web u otro entorno similar. Tabla de verdad: Tabla que sirve para determinar el comportamiento de una expresión booleana, la cual presenta de forma tabular todas las combinaciones posibles de valores de variables que componen la expresión. Tipo: El tipo de una variable se caracteriza por el conjunto de valores que puede tomar o ser asignada a la variable y las operaciones que puede

Page 106: Guia de Java Version final ver 1_5

Programación en Java - 97

realizarse con ellos. En Java los tipos se dividen de manera amplia en ocho primitivos y todos los demás (tipos de clases). Tipo de devolución: La especificación de tipo de información, si la hay, que devuelve un método al sitio donde se llamó al método. Tipo de referencia: En Java, sinónimo de tipo de clase. Se aplica más generalmente y de manera más confusa en otros lenguajes. Tipo más amplio: El tipo W es más ancho que el tipo N si puede considerarse que cada N es una W al mismo tiempo que existen W que no son N. Por ejemplo double es un tipo más amplio que int es una double, mientras que existen double, como 3.5, que no sería razonable interpretar como int. Véase también superclase. Tipo primitivo: Un tipo de información en un programa de Java que no es una instancia de una clase. Los primitivos de Java son byte, char, short, int, long, float, double y boolean. Type cast, typecast: (Véase coerción.) URL: Sigla de Uniform Resource Locator, localizador uniforme de recursos. Un ejemplo es la dirección de un documento Web y el protocolo usado para trasmitirlo y recibirlo. Variable: Nombre en un programa que representa un sitio en que puede almacenarse información de un tipo dado. Son tres los tipos de variables en Java, variables de clase, variables de instancias y variables locales. Variable de instancia: Variable de una clase que es parte de un objeto de la clase. Se diferencia de variable de clase, la cual es una variable que comparten todos los objetos de la clase. Variable local: Una que se declara en el cuerpo de un método, en contraste con una variable de instancia. Las declaraciones de variables locales no pueden incluir modificadores5

5 Glosario tomado del libro PROGRAMACION CON JAVA de Decaer Hirshfield, pagina 595