Вы находитесь на странице: 1из 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

APRENDIENDO
JAVA
GUíA DIDÁCTICA VIRTUAL

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)
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.
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.
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).
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
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
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


i 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.
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.
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/
Programación en Java - 1

PRIMER MES
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

Analice los siguientes párrafos y elabore su propio concepto sobre los


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:
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
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.
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:
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.
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 //
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 “+”

i 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
Programación en Java - 9

jar 9 Entorno de desarrollo que utilizan la mayoría de


profesionales.
javac 9 Estructura idealizada de Java que se utiliza para
implementar software en vez de Hardware
JDK 9 Se utiliza para ver el Applet con el mismo aspecto que
tendrá cuando lo vea el usuario en una pagina HTML
java 9 Compila y convierte el código fuente escrito en Java a
Java VM bytecode
9 Ejecuta una aplicación Java
AppleViewer 9 Genera archivos comprimidos
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.

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.

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
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 “WINDOWS” Mover Cambia el valor de
dirección “C:\WINDOWS” posición_X, posición_Y.
ancho 120 milímetros cambiar_tamaño Cambia el valor de los
alto 80 milímetros atributos ancho y alto.
posición _X 20 milímetros cambiar_estado Permite a la ventana
posición _Y 32 milímetros cambiar el estado a
estado normal, maximizado o maximizada, minimizada
minimizado o normal
color_fondo “Blanco”

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.
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.
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.
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”

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

i 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
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.
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).

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

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”.
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
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.


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

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()

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.
Programación en Java - 19

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

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

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
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 class Suma {
2 public static void main(String[] param) {
3 int s;
4 if (param.length < 2) {
5 System.out.println("No existen parámetros");
6 }
7 else {
8 String a = param[0], b = param[1];
9 s = Integer.parseInt(a) + Integer.parseInt(b);
10 System.out.println("La suma es: " + s);
11 }
12 }
13 }
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

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.

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 double calculo_de_recargo(double costo, int porcentaje) {


2 double total;
3 total = costo + (costo * porcentaje / 100);
4 return total;
5 }
Programación en Java - 22

6
7 double calculo_de_recargo(double costo) {
8 double total;
9 total = costo + (costo * 12 / 100);
10 return total;
11 }
12
13 double calculo_de_recargo(double costo, double incremento) {
14 return costo + incremento;
15 }

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.

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.

3.12 Control de Excepciones en Java.

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

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) {
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 class Numeros {
2 String texto;
3 int numero;
4 int den = 0;
5 int result;
6
7 public Numeros(String texto) {
8 this.texto = texto;
9 }
10
11 void dividir() {
12 try {
13 numero = Integer.parseInt(texto);
14 result = numero/den;
15 }
16 catch (ArithmeticException e1) {
17 System.out.println("Ha ocurrido un error del
18 Î tipo: " + e1.toString());
19 result = -1;
20 }
21 catch (NumberFormatException e2) {
22 System.out.println("Error el texto ingresado
23 Î tiene espacios");
24 }
25 }
26 }
27
28 public class Excepciones {
29 public static void main(String[] args) {
30 Numeros obj = new Numeros("124 ");
Programación en Java - 24

31 obj.dividir();
32 System.out.println("El resultado de la división es: "
33 Î + obj.result);
34 }
35 }

¾ 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 class Numeros2 {
2 String texto;
3 int numero;
4 int den = 0;
5 int result;
6
7 public Numeros2(String texto) {
8 this.texto = texto;
9 }
10
11 void dividir() throws ArithmeticException,
12 Î NumberFormatException {
13 numero = Integer.parseInt(texto);
14 result = numero/den;
15 }
16 }
17
18 public class Excepciones2 {
19 public static void main(String[] args) {
20 Numeros2 obj = new Numeros2("124 ");
21 try {
22 obj.dividir();
23 }
Programación en Java - 25

24 catch (ArithmeticException e) {
25 System.out.println("Ha ocurrido un Error del
26 Î tipo: " + e.toString());
27 }
28 catch (NumberFormatException e2) {
29 System.out.println("Error el texto ingresado
30 Î tiene espacios");
31 }
32
33 System.out.println("El resultado de la división es: "
34 Î + obj.result);
35 }
36 }

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.

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

i 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 class Operaciones {
2 int a,b;
3 void asignar(int a1, int b1){
4 a = a1;
5 b = b1;
6 }
7 void sumar() {
8 int s;
9 s = a + b;
10 System.out.println("La suma es: " + s);
11 }
12 int producto() {
Programación en Java - 26

13 int p = a * b;
14 return p;
15 }
16 public static void main(String[] args){
17 Operaciones calculo1 = new Operaciones();
18 calculo1.asignar(5,3);
19 calculo1.sumar();
20 System.out.println("El producto es: " +
21 Î calculo1.producto());
22 }
23 }

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


(pregunta anterior), corrija los errores existentes en el mismo:

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

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
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

9 Aplicar los conceptos de POO en las aplicaciones desarrolladas en Java.

4.1 Jerarquía de Clases en Java. La API de Java

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


jerarquía de clases 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.
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:
Programación en Java - 29

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.

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.*;
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.

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.

4.2 Miembros de Instancia y de Clase

Lea la sección: 3.10 Más sobre Miembros de Instancia y Estáticos; en las


paginas 88 - 90 del libro básico

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
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

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

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 class Datos {
2 public static void main(String[] param) {
3 int num;
4 String str;
5 num = Integer.parseInt("128") + 20;
6 str = Integer.toString(35) + "20";
7 System.out.println("Suma: " + num );
8 System.out.println("Concatenación: " + str);
9 }
10 }
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

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.

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.

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

4.5 Herencia en Java. Uso de “super”

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.

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”.
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.

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.

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
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.

i 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
Programación en Java - 35

AUTOEVALUACION, PRIMER MES


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

Un programa es una serie de instrucciones dadas al ordenador


1 ( )
en un lenguaje entendido por él.
Un lenguaje de programación es un medio para indicarle al
2 ( )
ordenador la secuencia de instrucciones que debe efectuar.
Java es un lenguaje independiente de la plataforma; Esto
quiere decir que el código producido por el compilador Java
3 ( )
puede transportarse a cualquier plataforma (Intel, Sparc,
Motorola, etc).
La utilidad “appletviewer” se utiliza para ejecutar las
4 ( )
aplicaciones desarrolladas en Java.
La variable “path” se configura para ejecutar las aplicaciones
5 ( )
con entorno gráfico en Java.
Las “aplicaciones” de Java se ejecutan directamente desde la
6 ( )
línea de comandos.
Para visualizar la ejecución de un “Applet”; éste debe estar
7 ( )
insertado en una pagina Web.
La estructura de un “Applet” y de una “aplicación” es
8 exactamente la misma; es decir en ambos se debe utilizar el ( )
método “main”.
La edición de un programa de Java se puede realizar en
9 cualquier editor, lo importante es que éste se grabe como texto ( )
sin formato.
La programación orientada a objetos (POO) es un modelo de
10 ( )
programación que utiliza objetos para la solución de problemas.
Una “clase” equivale a la generalización de un tipo especifico
11 ( )
de objetos.
Se entiende por objetos a la encapsulación genérica de datos y
12 ( )
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 ( )
Un constructor es un método que se ejecuta automáticamente
16 ( )
cuando se crea un objeto.
El método “main” de una aplicación debe declarar como
17 ( )
parámetro un arreglo de datos de tipo “String”.
Los datos de tipo “double” pertenecen al grupo de datos de los
18 ( )
reales.
19 Para crear objetos se utiliza el operador “new”. ( )
20 En una clase se pueden implementar varios constructores. ( )
Todas las clases poseen por lo menos un constructor por
21 ( )
defecto.
Programación en Java - 36

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


En Java existen dos tipos de de conversión entre tipos de
23 ( )
datos: “Implícita” y “Explicita”.
La sobrecarga de métodos significa declarar varios métodos
24 ( )
con el mismo nombre.
Una excepción es un error que puede ocurrir durante la
25 ( )
ejecución de un programe en java.
Cuando ocurre una excepción se crea un objeto de tipo
26 “Exception” (o de sus subclases) el mismo que contiene ( )
información del error ocurrido.
27 Las excepciones pueden ser: “Explicitas” o “Implícitas” ( )
La clase “Object” es la raíz de todas las clases de la API de
28 ( )
Java.
Cuando desarrollamos aplicaciones sencillas en Java
29 regularmente no se necesita importar el paquete “laja.lang” ya ( )
que este se importa automáticamente.
Los miembros de clase o estáticos se pueden referenciar
30 mediante el nombre de su clase o mediante el nombre de un ( )
objeto.
31 La clase “Integer” encapsula el dato de tipo “int”. ( )
La palabra “super” se utiliza para hacer referencia a métodos o
32 ( )
propiedades de la superclase o clase padre.
Programación en Java - 37

SEGUNDO MES
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
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”.

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.

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.
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).

¾ 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

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 import javax.swing.*;
2 import java.awt.*;
3
4 class Distribucion extends JFrame {
5 Container intermedio = new Container();
6 GridLayout admin = new GridLayout(2, 2, 25, 15);
7 JButton primero = new JButton("Primero");
8 JButton segundo = new JButton("Segundo");
Programación en Java - 41

9 JButton tercero = new JButton("Tercero");


10 JButton cuarto = new JButton("Cuarto");
11
12 Distribucion() {
13 super("Distribucion de objetos en un Contenedor");
14 setBounds(0,0,200,140);
15 intermedio = getContentPane();
16 intermedio.setLayout(admin);
17 intermedio.add(primero);
18 intermedio.add(segundo);
19 intermedio.add(tercero);
20 intermedio.add(cuarto);
21 setVisible(true);
22 }
23
24 public static void main(String[] args) {
25 Distribucion obj = new Distribucion();
26 }
27 }

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.
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.
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.
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


JButton
JTextField
ActionListener JCheckBox addActionListener
JRadioButton
JComboBox
AdjustmentListener JScrollBar addAdjustmentListener
FocusListener Todos los componentes addFocusListener
JButton
JCheckBox
ItemListener addItemListener
JRadioButton
JComboBox
KeyListener Todos los componentes addKeyListener
MouseListener Todos los componentes addMouseListener
MouseMotionListener Todos los componentes addMouseMotionListener
Jframe
WindowListener addWindowListener
JWindow

En la tabla siguiente se detallan los métodos correspondientes a cada Listener:

Tipo de Listener Métodos que implementan Eventos


Hacer clic, presionar
ActionListener actionPerformed(ActionEvent e) “Enter”, seleccionar un
menu
adjustmentValueChanged(Adjustment
AdjustmentListener
Event e)
focusGained(FocusEvent e) Los componentes obtienen
FocusListener
focusLost(FocusEvent e) el foco en el teclado
ItemListener itemStateChanged(ItemEvent e)
keyPressed(KeyEvent e)
KeyListener keyReleased(KeyEvent e)
keyTyped(KeyEvent e)
mouseClicked(MouseEvent e)
mouseEntered(MouseEvent e) Presionar el botón del
MouseListener mouseExited(MouseEvent e) Mouse mientras esta sobre
mousePressed(MouseEvent e) un componente
mouseReleased(MouseEvent e)
mouseDragged(MouseEvent e) Mover el Mouse sobre un
MouseMotionListener
mouseMoved(MouseEvent e) componente
windowActivated(WindowEvent e)
windowClosed(WindowEvent e)
windowClosing(WindowEvent e)
WindowListener windowDeactivated(WindowEvent e) Cerrar una ventana
windowDeiconified(WindowEvent e)
windowIconified(WindowEvent e)
windowOpened(WindowEvent e)
Programación en Java - 45

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.

5.5 Applets

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.

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 <html>
2 <head>
3 <title>Applet con Swing</title>
4 </head>
5 <body>
6 <applet code="MiApplet.class" width=330 height=300>
7 <param name=param_1 value="Lista de Clientes">
8 </applet>
9 </body>
10 </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
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 ….


¾ Se abre por primera vez la página Web.
¾ Se hace clic en el botón “Actualizar” del
Navegador.
public void init() ¾ 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”.
¾ 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
public void paint(Graphics g) 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.
¾ Se abandona la página Web que contiene el
Applet (haciendo clic en los botones “Adelante” y
“Atrás” del Navegador).
public void stop()
¾ 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()
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

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

i 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.
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.
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.
Programación en Java - 50

1 class Hilos extends Thread {


2 public Hilos(String str) {
3 super(str);
4 }
5
6 public void run() {
7 for (int i = 0; i < 10; i++)
8 System.out.println(i + " " + getName());
9 System.out.println("Hilo terminado ==> " + getName());
10 }
11
12 public static void main (String[] args) {
13 Hilos h1 = new Hilos("Quito");
14 Hilos h2 = new Hilos("Cuenca");
15 Hilos h3 = new Hilos("Loja");
16 h1.start();
17 h2.start();
18 h3.start();
19 }
20 }

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 .

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

2
Texto tomado del libro JAVA 2 – Curso de programación de Fco. Javier Cevallos, pagina 641
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.

i 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
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).

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

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:
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 import java.io.*;
2
3 class Flujos {
4 InputStream teclado = System.in;
5 PrintStream pantalla = System.out;
6 String texto = "";
7
8 void leer() throws IOException {
9 int letra;
10 pantalla.print("Ingrese el texto: ");
11 do {
12 letra = teclado.read();
13 texto = texto + (char)letra;
14 } while (letra != '\n' );
15 teclado.close();
16 }
17
18 void escribir() {
19 pantalla.println("El texto ingresado es: " + texto);
20 pantalla.close();
21 }
22
23 public static void main(String[] args) {
24 Flujos datos = new Flujos();
25 try {
26 datos.leer();
27 }
28 catch(IOException ioe) {}
29 datos.escribir();
30 }
31 }

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
Programación en Java - 54

Leer Escribir
Abrir un flujo desde un origen Abrir un flujo hacia un destino
Mientras haya información Mientras haya información
Leer información Escribir información
Cerrar el flujo 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:
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
Programación en Java - 56

1 import java.io.*;
2
3 class EscribirBytes {
4 FileOutputStream datosOut = null;
5 byte[] datos = new byte[72];
6 int nbytes;
7
8 EscribirBytes() {
9 try {
10 System.out.print("Escriba el texto: ");
11 nbytes = System.in.read(datos);
12 datosOut = new FileOutputStream("Datos.txt",
13 Î false);
14 datosOut.write(datos, 0, nbytes - 2);
15 datosOut.close();
16 }
17 catch(IOException e) {
18 System.out.println("Error: " + e.toString());
19 }
20 }
21
22 public static void main(String[] args) {
23 new EscribirBytes();
24 }
25 }

¾ 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 import java.io.*;
2
3 class LeerBytes {
4 FileInputStream datosIn = null;
5 byte[] datos = new byte[72];
6 int nbytes;
7
8 LeerBytes() {
9 try {
Programación en Java - 57

10 datosIn = new FileInputStream("Datos.txt");


11 nbytes = datosIn.read(datos, 0, 72);
12 String str = new String(datos, 0, nbytes);
13 System.out.println(str);
14 datosIn.close();
15 }
16 catch(IOException e) {
17 System.out.println("Error: " + e.toString());
18 }
19 }
20
21 public static void main(String[] args) {
22 new LeerBytes();
23 }
24 }

¾ 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.

i 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
Programación en Java - 58

AUTOEVALUACION, SEGUNDO MES


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

La interfaz gráfica de usuario implica el uso de objetos tales como


1 ( )
botones, cuadros de dialogo, gráficos, etc.
Muchas clases de swing heredan las características de sus
2 ( )
correspondientes en AWT
La clase “JComponent” es la superclase de todas las clase de
3 ( )
“Swing”
Dentro de un objeto contenedor se pueden colocar otros objetos,
4 ( )
incluso contenedores
5 La clase “JApplet” es de tipo contenedor ( )
Los objetos de tipo “JFrame” se caracterizan por tener una franja
6 ( )
para el titulo, botones de minimizar, maximizar, restaurar.
Para añadir objetos o componentes a un contenedor se utiliza el
7 ( )
método “plus”
Los “administradores de diseño” se utilizan para distribuir los
8 ( )
objetos en la interfaz de usuario
Cuando se quiere dividir un contenedor en filas y columnas para
9 ( )
insertar objetos se debe utilizar el “GridLayout”
Cuando implementamos los “listener” en nuestra aplicación; estos
10 detectan los eventos ocurridos sobre el(los) objeto(s) previamente ( )
especificado(s).
Cuando utilizamos interfaces en nuestras aplicaciones se deben
11 ( )
implementar todos los métodos que pertenecen a esta interfaz
El ciclo de vida de un Applet comprende la ejecución de los
12 ( )
siguientes métodos “init()”, “start()”, “paint()”, “stop()”, “destroy()”
El método “getParameter(String str)” de la clase Applet se utiliza
13 ( )
para recoger parámetros enviados desde la pagina Web.
Una forma de crear hilos en Java es desarrollar una clase que
14 ( )
herede de la clase “Thread”
Cuando creamos hilos en Java se debe sobrescribir el método
15 ( )
“run()”
16 Es posible crear hilos implementando la interfaz “Runnable” ( )
Un hilo puede estar en cualquiera de los siguientes estados:
17 ( )
Nuevo, Preparado, En ejecución, Bloqueado, Muerto.
Un flujo es un objeto que se encuentra entre una aplicación Java y
18 ( )
una fuente o destino de datos
El acceso a Escritura o Lectura de datos en un fichero puede ser
19 ( )
de forma aleatoria o secuencial.
Las clase “FileOutputStream” y “FileInputStream” son clases de
20 ( )
acceso secuencial a ficheros
Al implementar flujos se utiliza el método “close()” en el inicio de la
21 ( )
transmisión de datos para optimizar los procesos
Programación en Java - 59

ANEXOS
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 /* Archivo: Ventanas.java */
2 /* Fecha: 13 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 class Ventanas {
6
7 // Declaración de atributos
8 String titulo, direccion;
9 int ancho, alto;
10 int posicion_X, posicion_Y;
11 int estado;
12 static String color_fondo = "Blanco";
13
14 // Implementación del método crear_ventana
15 void crear_ventana(String p_titulo, int posicion_X, int
16 Î posicion_Y, int ancho, int alto, int estado) {
17 titulo = p_titulo;
18 this.posicion_X = posicion_X;
19 this.posicion_Y = posicion_Y;
20 this.ancho = ancho;
21 this.alto = alto;
22 this.estado = estado;
23 }
24
25 // Implementación del método mover
26 void mover(int dX, int dY){
27 posicion_X = posicion_X + dX;
28 posicion_Y = posicion_Y + dY;
29 }
30
31 // Implementación del método cambiar_tamaño
32 void cambiar_tamaño(int ancho1, int alto){
33 ancho = ancho + ancho1;
34 this.alto = this.alto + alto;
35 }
36
37 // Implementación del método presentar_informacion
38 void presentar_informacion(){
39 System.out.println("El titulo de la ventana es: " +
40 Î titulo);
41 System.out.println("La posición es: X = " + posicion_X
42 Î + ", Y = " + posicion_Y);
Programación en Java - 61

43 System.out.println("El tamaño es: Ancho = " + ancho +


44 Î " Alto = " + alto);
45 switch (estado){
46 case 0: System.out.println("Ventana
47 Î MINIMIZADA\n");
48 break;
49 case 1: System.out.println("Ventana NORMAL\n");
50 break;
51 case 2: System.out.println("Ventana
52 Î MAXIMIZADA\n");
53 break;
54 }
55 }
56
57 // Implementación del método principal de la clase Ventanas
58 public static void main(String[] parametros) {
59 Ventanas miPc = new Ventanas();
60 miPc.crear_ventana("Mi PC", 120, 180, 80, 50, 1);
61 miPc.presentar_informacion();
62 miPc.mover(-30,20);
63 miPc.cambiar_tamaño(10, 15);
64 miPc.estado = 2;
65 miPc.presentar_informacion();
66 }
67 }

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.
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.
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 /* Archivo: Basicas.java */
2 /* Fecha: 23 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 // Implementación de la clase Parrafos
6 class Parrafos {
7 String texto;
8 String tipo_letra;
9 int tamaño_letra;
10
11 Parrafos(String texto, String tipo_letra, int tamaño_letra)
12 Î {
13 this.texto = texto;
14 this.tipo_letra = tipo_letra;
15 this.tamaño_letra = tamaño_letra;
16 }
17
18 String insertar(int posicion, String texto_nuevo) {
19 String txt1, txt2;
20 txt1 = texto.substring(0, posicion);
21 txt2 = texto.substring(posicion, texto.length());
22 texto = txt1 + texto_nuevo + txt2;
23 return texto;
24 }
25
26 void eliminar(int pos_inicio, int pos_fin) {
27 String txt1, txt2;
28 txt1 = texto.substring(0, pos_inicio);
29 txt2 = texto.substring(pos_fin, texto.length());
30 texto = txt1 + txt2;
31 }
32
33 int eliminar(String txt_out) {
34 int indice;
35 indice = texto.indexOf(txt_out);
36 if (indice != -1)
Programación en Java - 64

37 eliminar(indice, indice + txt_out.length());


38 return indice;
39 }
40
41 void remplazar(String txt_old, String txt_new) {
42 int indice;
43 indice = eliminar(txt_old);
44 if (indice != -1)
45 insertar(indice, txt_new);
46 }
47
48 int buscar(String txt_find) {
49 return texto.indexOf(txt_find);
50 }
51 }
52
53 // Implementación de la clase principal llamada "Basicas"
54 class Basicas {
55 public static void main(String[] parametros) {
56 Parrafos refran = new Parrafos("Muchas cosas que se
57 Î pueden averiguar pensando hay que vivirlas",
58 Î "Arial", 12);
59 System.out.println("\nREFRAN INICIAL: " +
60 Î refran.texto);
61 System.out.println("\nREFRAN LUEGO DE INSERTAR: " +
62 Î refran.insertar(13, "y realidades "));
63 refran.eliminar(50, 59);
64 System.out.println("\nREFRAN LUEGO DE ELIMINAR 1: " +
65 Î refran.texto);
66 refran.eliminar("cosas y ");
67 System.out.println("\nREFRAN LUEGO DE ELIMINAR 2: " +
68 Î refran.texto);
69 refran.remplazar("que se pueden averiguar","del
70 Î conocimiento");
71 System.out.println("\nREFRAN LUEGO DE REMPLAZAR: " +
72 Î refran.texto);
73 System.out.println("\nLA PALABRA \"del\" SE ENCUENTRA
74 Î EN LA POSICION: " + refran.buscar("del"));
75 System.out.println("\nEL REFRAN TIENE " +
76 Î refran.texto.length() + " LETRAS");
77 }
78 }

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”.
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”.
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.
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 /* Archivo: Matematicas.java */
2 /* Fecha: 24 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 import javax.swing.*;
6 import java.awt.*;
7
8 class Matematicas extends JFrame {
9 String[] columnas = {"Función de Java", "Operación",
10 Î "Resultado"};
11 Object[][] datos = {
12 Î {"abs(-12.56)", "Valor absoluto de un número", new
13 Î Double(Math.abs(-12.56))},
14 {"cos(Math.PI)", "Coseno de un ángulo dado en
15 Î Radianes", new Double(Math.cos(Math.PI))},
16 {"log(5)", "Logaritmo de un número", new
17 Î Double(Math.log(5))},
18 {"max(12, 56)", "El valor máximo de dos cantidades",
19 Î new Integer(Math.max(12,56))},
20 {"pow(4, 3)", "Potenciación", new
21 Î Double(Math.pow(4,3))},
22 {"random()", "Numeros Aleatorios", new
23 Î Double(Math.random())},
24 {"round(19.8)", "Redondeo de una cantidad", new
25 Î Double(Math.round(19.8))},
26 {"sqrt(81)", "Raíz cuadrada", new
27 Î Double(Math.sqrt(81))},
28 {"toDegrees(Math.PI)","Angulo de Radianes a grados",
29 Î new Double(Math.toDegrees(Math.PI))},
30 {"toRadians(180)", "Angulo de Grados a Radianes", new
31 Î Double(Math.toRadians(180))}};
32 JTable tabla = new JTable(datos,columnas);
33 JScrollPane scrollPane = new JScrollPane(tabla);
34
35 Matematicas() {
36 super("Uso de la clase Math de JAVA");
37 setBounds(0,0,600,300);
38 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
39 getContentPane().setLayout(new GridLayout(1,1,10,10));
40 getContentPane().add(scrollPane);
Programación en Java - 68

41 setVisible(true);
42 }
43
44 public static void main(String[] args) {
45 Matematicas obj = new Matematicas();
46 }
47 }

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.
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 /* Archivo: Herencia.java */
2 /* Fecha: 24 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 import javax.swing.*;
6 import java.awt.*;
7
8 class Punto extends JFrame {
9 int x;
10 int y;
11
12 Punto(int x, int y) {
13 super("Implementación de las clases: Punto, Circulo,
14 Î Elipse");
15 this.x = x;
16 this.y = y;
17 setBounds(0,0,200,200);
18 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
19 setVisible(true);
20 }
21 void dibujar() {
22 Graphics grf;
23 grf = getGraphics();
24 paint(grf);
25 }
26 void mover(int dx, int dy) {
27 Graphics grf;
28 grf = getGraphics();
29 x = x + dx;
30 y = y + dy;
31 paint(grf);
32 }
33 void get_X(String clase) {
34 System.out.println("La coordenada X del objeto de tipo
35 Î " + clase + " es: " + x);
36 }
37 void get_Y(String clase) {
38 System.out.println("La coordenada Y del objeto de tipo
39 Î " + clase + " es: " + y);
Programación en Java - 70

40 }
41 public void paint(Graphics g) {
42 setBackground(new Color(191,206,237));
43 g.setColor(Color.black);
44 g.fillOval(x,y,4,4);
45 }
46 }
47
48 class Circulo extends Punto {
49 int radio;
50
51 Circulo(int x, int y, int radio) {
52 super(x, y);
53 this.radio = radio;
54 }
55 void get_Radio() {
56 System.out.println("El radio del objeto perteneciente
57 Î a la clase Circulo es: " + radio);
58 }
59 public void paint(Graphics g) {
60 setBackground(new Color(232,241,217));
61 g.setColor(Color.blue);
62 g.fillOval(x,y,radio,radio);
63 }
64 }
65
66 class Elipse extends Punto {
67 int radioMay;
68 int radioMen;
69
70 Elipse(int x, int y, int radioMay, int radioMen) {
71 super(x, y);
72 this.radioMay = radioMay;
73 this.radioMen = radioMen;
74 }
75 void get_RadioMay() {
76 System.out.println("El radio mayor del objeto de tipo
77 Î Elipse es: " + radioMay);
78 }
79 void get_RadioMen() {
80 System.out.println("El radio menor del objeto de tipo
81 Î Elipse es: " + radioMen);
82 }
83 public void paint(Graphics g) {
84 setBackground(new Color(245,213,242));
85 g.setColor(Color.red);
86 g.fillOval(x,y,radioMay,radioMen);
87 }
88 }
89
90 public class Herencia {
91 public static void main(String[] args) {
92 /******* Clase Punto *******/
93 Punto obj1 = new Punto(100,120);
94 obj1.dibujar();
95 obj1.mover(40, -20);
96 obj1.get_X("Punto");
97 obj1.get_Y("Punto");
Programación en Java - 71

98 /****** Clase Circulo ******/


99 Circulo obj2 = new Circulo(90, 90, 40);
100 obj2.dibujar();
101 obj2.mover(40, -20);
102 obj2.get_X("Circulo");
103 obj2.get_Y("Circulo");
104 obj2.get_Radio();
105 /****** Clase Elipse *******/
106 Elipse obj3 = new Elipse(90, 90, 50, 30);
107 obj3.dibujar();
108 obj3.mover(-30, 25);
109 obj3.get_X("Elipse");
110 obj3.get_Y("Elipse");
111 obj3.get_RadioMay();
112 obj3.get_RadioMen();
113 }
114 }

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”.
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.
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 /* Archivo: Interfaz.java */
2 /* Fecha: 28 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 import javax.swing.*;
6 import java.awt.*;
7
8 class HolaSwing extends JFrame {
9 String[] dias = { "Lunes", "Martes", "Miercoles",
10 Î "Jueves", "Viernes", "Sabado", "Domingo" };
11 String[] meses = { "Enero", "Febrero", "Marzo",
12 Î "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre",
13 Î "Octubre", "Noviembre", "Diciembre"};
14 Container intermedio = new Container();
15 JButton aceptar = new JButton("Aceptar");
16 ImageIcon imagen = new ImageIcon("middle.gif");
17 JButton cancelar = new JButton("Cancelar",imagen);
18 JSlider control = new JSlider(20, 80);
19 JComboBox opciones_1 = new JComboBox(dias);
20 JList opciones_2 = new JList(meses);
21 JScrollPane scroll_opc_2 = new JScrollPane(opciones_2);
22 JLabel etiqueta = new JLabel("Etiqueta");
23 JLabel picture = new JLabel(new
24 Î ImageIcon("Dog.gif"));
25
26 HolaSwing() {
27 super("Interfaz Gráfica de Usuario");
28 setBounds(0,0,360,260);
29 intermedio = getContentPane();
30 intermedio.setLayout(new FlowLayout());
31 intermedio.add(aceptar);
32 intermedio.add(cancelar);
33 intermedio.add(control);
34 intermedio.add(opciones_1);
35 opciones_2.setVisibleRowCount(4);
36 intermedio.add(scroll_opc_2);
37 intermedio.add(etiqueta);
38 intermedio.add(picture);
39 setVisible(true);
40 }
Programación en Java - 74

41 }
42
43 public class Interfaz {
44 public static void main(String[] args) {
45 HolaSwing obj = new HolaSwing();
46 }
47 }

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.
Programación en Java - 75

Resultados de la aplicación.
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 /* Archivo: Eventos.java */
2 /* Fecha: 30 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 import javax.swing.*;
6 import java.awt.*;
7 import java.awt.event.*;
8
9 class Eventos extends JFrame implements WindowListener,
10 Î ActionListener, MouseListener {
11 Container intermedio = new Container();
12 FlowLayout admin = new FlowLayout(10,10,10);
13 JPanel panel1 = new JPanel(admin);
14 MiContainer area2 = new MiContainer();
15 JPanel panel3 = new JPanel(admin);
16 JButton aceptar = new JButton("Aceptar");
17 JButton cancelar = new JButton("Cancelar");
18 JTextField texto = new JTextField("Digite su
19 Î nombre.",20);
20 JTextField msgbox = new JTextField(25);
21
22 Eventos() {
23 super("Control de Eventos");
24 setSize(310,300);
25 intermedio = getContentPane();
26 intermedio.setLayout(new BorderLayout());
27 admin.setAlignment(FlowLayout.CENTER);
28 panel1.setBackground(new Color(234,207,255));
29 panel3.setBackground(new Color(176,231,176));
30 panel1.add(aceptar);
31 panel1.add(cancelar);
32 panel1.add(texto);
33 panel1.setPreferredSize(new Dimension(300,80));
34 panel3.add(msgbox);
35 intermedio.add(panel1,BorderLayout.NORTH);
36 intermedio.add(area2,BorderLayout.CENTER);
Programación en Java - 77

37 intermedio.add(panel3,BorderLayout.SOUTH);
38 addWindowListener(this);
39 aceptar.addActionListener(this);
40 cancelar.addActionListener(this);
41 texto.addActionListener(this);
42 area2.addMouseListener(this);
43 setVisible(true);
44 }
45
46 /* Metodos pertenecientes a la interfaz "WindowListener" */
47
48 public void windowActivated(WindowEvent e) {}
49 public void windowClosed(WindowEvent e) {}
50 public void windowClosing(WindowEvent e) {
51 System.exit(0);
52 }
53 public void windowDeactivated(WindowEvent e) {}
54 public void windowDeiconified(WindowEvent e) {}
55 public void windowIconified(WindowEvent e) {}
56 public void windowOpened(WindowEvent e) {}
57
58 /* Metodos pertenecientes a la interfaz "ActionListener" */
59
60 public void actionPerformed(ActionEvent e) {
61 if (e.getSource() == aceptar) {
62 msgbox.setText(msgbox.getText() + " Aceptar");
63 }
64 if (e.getSource() == cancelar) {
65 msgbox.setText(msgbox.getText() + " Cancelar");
66 }
67 if (e.getSource() == texto) {
68 msgbox.setText(" ¡ Hola " + texto.getText() + "
69 Î! ");
70 }
71 }
72
73 /* Metodos pertenecientes a la interfaz "MouseListener" */
74
75 public void mouseClicked(MouseEvent e) {
76 area2.dibujar(e.getX(), e.getY());
77 msgbox.setText("Clic en: X = " + e.getX() + " Y = " +
78 Î e.getY());
79 }
80 public void mouseEntered(MouseEvent e) {
81 msgbox.setText("metodo mouseEntered en: " + e.getX() +
82 Î " Y = " + e.getY());
83 }
84 public void mouseExited(MouseEvent e) {
85 msgbox.setText("metodo mouseExited en: " + e.getX() +
86 Î " Y = " + e.getY());
87 }
88 public void mousePressed(MouseEvent e) {}
89 public void mouseReleased(MouseEvent e) {}
90
91 /* Metodo principal de la clase "Eventos" */
92
93 public static void main(String[] args) {
94 Eventos obj = new Eventos();
Programación en Java - 78

95 }
96 }
97
98 class MiContainer extends Container {
99 int x,y;
100 void dibujar(int x, int y) {
101 this.x = x;
102 this.y = y;
103 repaint();
104 }
105 public void paint(Graphics g) {
106 g.fillOval(x, y, 6, 6);
107 }
108 }

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.
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.
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 /* Archivo: MiApplet.java */
2 /* Fecha: 30 de Julio 2003 */
3 /* Autor: Guido Riofrio */
4
5 import javax.swing.*;
6 import java.awt.*;
7 import java.awt.event.*;
8 import javax.swing.table.*;
9
10 public class MiApplet extends JApplet {
11 String[] ciudades = {"Quito", "Guayaquil", "Cuenca",
12 Î "Loja"};
13 String[] columnas = {"Codigo", "Apellido", "Nombre",
14 Î"Ciudad"};
15 Object[][] datos = {{"C001", "Jaramillo", "Diego", ""},
16 {"C002", "Encalada", "Carlos", ""},
17 {"C003", "Beltran", "Maria", ""},
18 {"C004", "Cueva", "Gonzalo", ""},
19 {"C005", "Maldonado", "Jaime", ""}};
20 JPanel superior = new JPanel(new
21 Î FlowLayout(FlowLayout.CENTER,15,15));
22 JPanel inferior = new JPanel(new
23 Î FlowLayout(FlowLayout.CENTER,15,15));
24 JTextField texto = new JTextField(25);
25 JTable tabla = new JTable(datos,columnas);
26 JScrollPane scroll = new JScrollPane(tabla);
27 JButton aceptar = new JButton("Aceptar");
28 JComboBox dat = new JComboBox(ciudades);
29 String parametro_1;
30 String metodos = "Metodos:";
31 JWindow mensajes = new JWindow();
32 JTextField txt_msg = new JTextField(metodos,32);
33
34 public void init() {
35 parametro_1 = getParameter("param_1");
36 superior.setBackground(new Color(242,206,245));
37 inferior.setBackground(new Color(242,237,203));
38 superior.add(texto);
39 texto.setText(parametro_1);
Programación en Java - 81

40 showStatus("Este mensaje esta enviado desde el


41 Î Applet");
42 inferior.add(aceptar);
43 tabla.setRowHeight(20);
44 TableColumn tCol_3 =
45 Î tabla.getColumnModel().getColumn(3);
46 tCol_3.setCellEditor(new DefaultCellEditor(dat));
47 getContentPane().add(superior,BorderLayout.NORTH);
48 getContentPane().add(scroll,BorderLayout.CENTER);
49 getContentPane().add(inferior,BorderLayout.SOUTH);
50 metodos = metodos + " init(),";
51 mensajes.getContentPane().setLayout(new
52 Î FlowLayout(FlowLayout.CENTER,15,15));
53 mensajes.getContentPane().add(txt_msg);
54 mensajes.setBounds(30,600,400,70);
55 mensajes.setVisible(true);
56 }
57
58 public void start() {
59 metodos = metodos + " start(),";
60 txt_msg.setText(metodos);
61 }
62
63 public void stop() {
64 metodos = metodos + " stop(),";
65 txt_msg.setText(metodos);
66 }
67
68 public void destroy() {
69 metodos = metodos + " destroy(),";
70 txt_msg.setText(metodos);
71 }
72 }

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.
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.
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 /* Archivo: Contadores.java */
2 /* Fecha: 09 de Agosto 2003 */
3 /* Autor: Guido Riofrio */
4
5 import javax.swing.*;
6 import java.awt.*;
7
8 public class Contadores extends JFrame {
9 JTextField ind_a = new JTextField("0");
10 JTextField ind_b = new JTextField("0");
11 JTextField ind_c = new JTextField("0");
12 public Contadores() {
13 super("Hilos en Java");
14 setSize(250,150);
15 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
16 getContentPane().setLayout(new GridLayout(3,5,10,10));
17 getContentPane().add(new JLabel("Indicador A"));
18 getContentPane().add(ind_a);
19 getContentPane().add(new JLabel("Indicador B"));
20 getContentPane().add(ind_b);
21 getContentPane().add(new JLabel("Indicador C"));
22 getContentPane().add(ind_c);
23 setVisible(true);
24 Thread A = new Thread (new Indicadores(ind_a));
25 Thread B = new Thread (new Indicadores(ind_b));
26 Thread C = new Thread (new Indicadores(ind_c));
27 A.start();
28 B.start();
29 C.start();
30 }
31 public static void main(String[] args) {
32 new Contadores();
33 }
34 }
35
36 class Indicadores implements Runnable {
37 JTextField texto;
38 String s;
39 public Indicadores(JTextField indic) {
40 texto = indic;
41 }
Programación en Java - 84

42 public void run() {


43 for (int i=0; i<100; i++) {
44 texto.setText(s.valueOf(i));
45 try {
46 Thread.sleep((int)(Math.random() * 100));
47 } catch (InterruptedException e) {}
48 }
49 }
50 }

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.
Programación en Java - 85

SOLUCIONARIO
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 )
Programación en Java - 87

GLOSARIO
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.
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.
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).
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.
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.
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.
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.
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".
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
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

Вам также может понравиться