You are on page 1of 62

Programacin I

Quedan rigurosamente prohibidas, sin la autorizacin escrita


de los titulares del Copyright, bajo las sanciones establecidas en
las leyes, la reproduccin total o parcial de esta obra por cual-
quier medio o procedimiento, comprendidos la reprografa y el
tratamiento informtico, y la distribucin de ejemplares de ella
mediante alquiler o prstamo pblicos. Dirjase a CEDRO (Centro
Espaol de Derechos Reprogrficos, www.cedro.org) si necesita
fotocopiar o escanear algn fragmento de esta obra.
INICIATIVA Y COORDINACIN
Qualiform
COLABORADORES
Realizacin:
ITACA (Interactive Training Advanced Computer Aplications, S.L.)
Colaboradores:
Miguel ngel Lozano
Licenciado en Matemticas
Profesor de Informtica y Coordinador de Calidad en el Instituto Ribera Baixa del Prat de Llobregat
Supervisin tcnica y pedaggica:
Departamento de Enseanza de Planeta DeAgostini Formacin
Coordinacin editorial:
Departamento de Creacin de cursos de Planeta DeAgostini Formacin
Planeta DeAgostini Formacin, S.L.U.
Barcelona (Espaa), 2012
Primera edicin: 2012
ISBN: 978-84-394-8675-6
1
INTRODUCCIN
El camino a recorrer en este mdulo pasa por una serie de captulos que nos irn
introduciendo poco a poco, pero de manera intensa, en el mundo de la progra-
macin. En concreto, aprenderemos herramientas del lenguaje Java, el ms usado
por los programadores en todos los niveles, sobre todo en el mbito empresarial.
En programacin se utilizan dos metodologas: la programacin estructurada y la
programacin orientada a objetos, aunque esta segunda necesita la primera. En
este mdulo vamos a profundizar en la primera de ellas, la programacin relacio-
nada con las estructuras.
En el aprendizaje de cualquier lenguaje de programacin se siguen los pasos que
iremos viendo a lo largo de los captulos de este mdulo. Comenzamos con un pri-
mer captulo general, explicando los conceptos ms signicativos de los programas.
Continuaremos con una descripcin de la sintaxis del lenguaje, viendo cmo se
codican en Java las instrucciones que son comunes a todos los lenguajes de pro-
gramacin, con especial nfasis en la estructuras de control.
Al nal, habremos aprendido la primera de las dos tipologas de programacin
existentes, la programacin estructurada y tendremos la base necesaria para em-
prender el aprendizaje de la programacin orientada a objetos.
2
3
1. Identifcacin de los elementos de un programa informtico
1.1 Estructura y bloques fundamentales
1.2 Utilizacin de los entornos integrados de desarrollo
1.3 Proyectos y soluciones
1.4 Datos: naturaleza y tipos
1.5 Operadores
1.6 Expresiones
1.7 Conversiones de tipo
1.8 Comentarios
2. Uso de estructuras de control
2.1 Estructuras de seleccin
2.2 Estructuras de repeticin
2.3 Estructuras de salto
2.4 Control de excepciones
2.5 Prueba y depuracin
2.6 Documentacin
3. Aplicacin de las estructuras de almacenamiento
3.1 Estructuras
3.2 Creacin de arrays
3.3 Inicializacin
3.4 Arrays multidimensionales
3.5 Cadenas de caracteres
3.6 Listas
3.7 Colecciones
4. Lectura y escritura de la informacin
4.1 Concepto de ujo
4.2 Tipos de ujos: ujos de bytes y de caracteres
4.4 Clases relativas a ujos
4.3 Flujos predenidos
4.5 Utilizacin de ujos
4.6 Entrada desde teclado
4.7 Salida a pantalla
4.8 Aplicaciones del almacenamiento de informacin en cheros
4.9 Ficheros de datos. Registros
4.10 Apertura y cierre de cheros. Modos de acceso
4.11 Escritura y lectura de informacin en cheros
4.12 Almacenamiento de objetos en cheros. Persistencia. Serializacin
4.13 Utilizacin de los sistemas de cheros
4.14 Creacin y eliminacin de cheros y directorios
Esquema de contenido
4
4.15 Creacin de interfaces grcos de usuario utilizando asistente
y herramientas del entorno integrado
4.16 Interfaces
4.17 Concepto de evento
4.18 Creacin de controladores de eventos
4.19 Generacin de programas en entorno grco
Identifcacin de los elementos de un programa informtico
5
1. IDENTIFICACIN DE LOS ELEMENTOS
DE UN PROGRAMA INFORMTICO
El concepto programacin consiste en denir una serie de directrices con las que
se obtiene un resultado que responde a la resolucin de un problema. Un pro-
grama informtico sigue exactamente esta premisa. A travs de los lenguajes de
programacin, podremos denir las directrices que indicarn al ordenador, de un
modo comprensible para su procesador, cmo llegar a la resolucin de un proble-
ma expuesto.
Existen numerosos lenguajes de programacin, todos con sus propias caracte-
rsticas y, por lo tanto, destinados a resolver diferentes tipos de problemas. Cada
lenguaje est especializado en un mbito determinado de la informtica, sin em-
bargo todos ellos parten de una base comn.
Segn su complejidad, podemos distinguir entre lenguajes de alto nivel (C++ o
Java) y de bajo nivel (assembler). Los de alto nivel, permiten desarrollar programas
simplicando el modo en que dirigimos las instrucciones al ordenador, mientras
que los de bajo nivel se basan en instrucciones dirigidas directamente al hardware
interno del ordenador, por lo que presentan una complejidad de control y organi-
zacin muy elevada.
Tanto por su mayor facilidad de aprendizaje y manejo como por su uso ms exten-
dido, este mdulo est centrado en los lenguajes de alto nivel.
A lo largo de los siguientes apartados, aprenderemos a aplicar las instrucciones
comunes a todos los lenguajes de programacin, lo que nos permitir disear un
programa informtico.
1.1 Estructura y bloques fundamentales
Un programa informtico es una secuencia lgica de instrucciones escritas en un
lenguaje de programacin determinado que, al ser interpretadas por un ordena-
dor, dan solucin a un problema mediante la manipulacin de un conjunto de
datos. Una vez denidas, dichas instrucciones dan lugar a lo que denominamos
cdigo fuente.
Todo lenguaje de programacin est sujeto a una serie de normas sintcticas y
estructurales propias. La eleccin del lenguaje que vayamos a usar depender de
Ir a Puesta en situacin del captulo
(e-learning).
Programacin I
6
1.2 Utilizacin de los entornos integrados de desarrollo
El entorno de desarrollo integrado (IDE, Integrated Development Environment) es
un programa informtico que, de una manera atractiva para el usuario, ofrece un
conjunto de herramientas y recursos necesarios para el desarrollo de aplicaciones
informticas en uno o ms lenguajes de programacin (Figura 1.2).
Figura 1.1
Esquema de la estructura bsica
de un programa informtico.
los requerimientos del problema a resolver. Cualquier programa informtico, in-
dependientemente del lenguaje en el que est escrito, puede dividirse en dos
bloques principales (Figura 1.1) que denen su estructura base:
Bloque de declaraciones. Conjunto de datos proporcionados al programa infor-
mtico destinados a ser manipulados a travs de las instrucciones denidas en l.
Dichos datos pueden ser de diferente origen y naturaleza.
Bloque de instrucciones. Conjunto de acciones que usar el programa para
manipular los datos proporcionados y obtener los resultados necesarios para la
resolucin del problema propuesto. El bloque de instrucciones, por tanto, debe
resolver los siguientes problemas:

Entrada. Recogida de los datos externos al programa necesarios para resolver el
problema.

Transformacin. Transformacin de los datos para conseguir el resultado.

Salida. Enviar a su destinatario la solucin al problema, de modo que lo pueda
entender.
Identifcacin de los elementos de un programa informtico
7
El objetivo de un IDE es facilitar el desarrollo de aplicaciones y programas inform-
ticos empaquetando los recursos en un marco de trabajo estable y visual.
Cualquier IDE est formado por los siguientes bloques:

Editor de cdigo. Entorno sobre el que se escribe el cdigo fuente de nuestro
programa. Ofrece ayudas visuales, como el formato textual para resaltar los as-
pectos relevantes del cdigo.

Compilador o intrprete. Herramienta destinada a interpretar el cdigo escrito
y mostrar el resultado del programa.

Depurador. Detecta y solventa los errores que pueden surgir en la escritura del
cdigo.

Constructor de interfaz grfca. Acta como un conjunto de opciones visuales
que permiten la comunicacin entre el usuario y el ordenador a la hora de escri-
bir e interpretar el cdigo escrito.
Figura 1.2
Interfaz de desarrollo
de un IDE.
1.3 Proyectos y soluciones
Durante el proceso de desarrollo de una aplicacin entran en juego muchos fac-
tores y elementos, adems del cdigo fuente, todos importantes para el correcto
funcionamiento del programa. Por esa razn debern organizarse de un modo
que facilite el acceso a ellos. Para tales efectos, los IDE ofrecen soluciones, como
la creacin de proyectos. Ir a contenido prctico (e-learning).
Recuerda
Independientemente
del lenguaje de
programacin que
usemos, la estructura
organizativa del cdigo
fuente ser siempre la
misma.
Programacin I
8
1.4 Datos: naturaleza y tipos
Todos los datos destinados a ser manipulados por un programa informtico se
almacenan en nuestro ordenador dentro de espacios de memoria determinados.
Segn su naturaleza, podemos diferenciar tres clases de datos: variables, constan-
tes y literales. Todos ellos debern estar denidos en el bloque de declaraciones
de nuestro programa.
Para saber ms
Los lenguajes de
programacin
ms utilizados
para el desarrollo
de aplicaciones
informticas son C++
y Java. Se trata de
lenguajes estables y
verstiles, ya que son
capaces de tratar los
datos a un nivel muy
especfco.
A efectos prcticos, un proyecto es la organizacin de los archivos que intervie-
nen en la ejecucin de un programa (Figura 1.3). Cuando creamos un proyecto
para nuestra aplicacin, lo que en realidad estamos haciendo es denir un cuadro
organizativo para todos los recursos que vayamos a necesitar.
As pues, podremos denir una carpeta para archivar las imgenes, otra para archi-
vos de texto, otra para el resto de archivos con cdigo necesario para la aplicacin,
etc... Algunas de las carpetas vendrn denidas por defecto, ya que irn destinadas
a datos internos del programa sobre los que no deberemos actuar. Otras, en cam-
bio, las podremos denir nosotros, bien durante la creacin del proyecto o bien a
medida que sea necesario.
Figura 1.3
Ejemplo de estructura de un
proyecto para lenguaje de
programacion C++.
Ir a contenido prctico (e-learning).
Identifcacin de los elementos de un programa informtico
9
Figura 1.4
Ejemplo de declaracin de
variables denidas en diferentes
lenguajes de programacin.
1.4.1 Variables
Denominamos variable a todo aquel espacio de memoria reservado e identica-
do que, a lo largo de la ejecucin del programa, puede ver alterado el valor que
almacena (Figura 1.4).
Podemos usar una variable tanto para almacenar un valor destinado a ser manipu-
lado, como para almacenar el resultado de una manipulacin de datos.
Para declarar una variable deberemos tener en cuenta los siguientes aspectos:

Toda variable deber estar denida en el bloque de declaraciones del programa,
pero no necesariamente deber contener un valor inicial.

Toda variable deber tener un nombre que la identique como nica en el pro-
grama, es decir, nunca dos variables podrn llamarse de igual modo aun conte-
niendo valores distintos.
1.4.2 Constantes
La constante es aquel espacio de memoria reservado e identicado mediante un nom-
bre que almacenar un valor jo e inalterable a lo largo de la ejecucin del programa.
Por lo general, una constante corresponde a un dato ubicado en la memoria prin-
cipal del ordenador.
Como ejemplo podramos tomar el valor numrico Pi (Figura 1.5), que en algunas
mquinas viene predenido en una zona de memoria con el valor jo 3,14159.
Asimismo, y siguiendo las mismas reglas que se aplican a las variables, podemos crear
nuestras propias constantes asignndoles los valores deseados. No obstante, y a diferen-
cia de una variable, una constante nunca puede declararse sin asignarle un valor inicial.
Programacin I
10
1.4.3 Literales
Una literal es un tipo de dato al que se le asigna un valor con un sentido estricto. Los
compiladores informticos tienen diferentes maneras de interpretar los datos que in-
tervienen en la ejecucin de un programa. Supongamos, por ejemplo, que queremos
almacenar el valor numrico 100 en una variable. Al ejecutar el programa, segn el
lenguaje en el que estemos trabajando, este dato puede ser interpretado por el compi-
lador como 4 en base binaria.
Para evitar este tipo de confusiones a la hora de ejecutar un programa, dichos lenguajes
incluyen la posibilidad de denir los datos de un modo estricto, es decir, si en una literal
almacenamos el numeral 100, signicar 100 exactamente, sin posibilidad de que sea
interpretado de otro modo por el ordenador.
Otro ejemplo de valor literal sera un dato destinado a almacenar un nombre, un con-
junto de letras, o varias palabras. Toda letra o palabra hace referencia a un dato que no
puede interpretarse de otra manera, se trata pues de un dato literal (Figura 1.6).
Figura 1.5
Declaracin y uso de una
constante en lenguaje de
programacin C++.
Recuerda
Para mantener el
cdigo organizado, es
imprescindible dotar a
los datos con nombres
que nos ayuden a
reconocer cmo estn
destinados a ser
manipulados.
Recuerda
Cada lenguaje de
programacin tiene
una sintaxis propia para
declarar los datos que
intervendrn durante
la ejecucin de un
programa. Por tanto,
la manera de defnirlos
y de asignarles valores
variar segn el
lenguaje que estemos
usando.
Figura 1.6
Valores literales asignados
a diferentes variables.
Identifcacin de los elementos de un programa informtico
11
1.4.4 Tipos de datos
Segn el tipo de datos que se dena para guardar un valor, el ordenador reservar un
espacio de memoria y de tamao para su correcto almacenaje. Veamos a continuacin
los tipos de datos principales:

Entero (integer). valores numricos positivos y negativos no decimales.

Real (foat). valores numricos positivos y negativos con parte decimal.

Caracter (char). valores alfanumricos simples, es decir, una letra, un nmero o
un smbolo, siempre que estos tengan una longitud unitaria.

Cadena de caracteres (string). valores alfanumricos que pueden estar com-
puestos por ms de un caracter. Un valor de tipo string, as como uno de tipo
char, hace la funcin de una palabra, es decir, en caso de ser un nmero, ste no
podr actuar en operaciones matemticas.

Valores lgicos (boolean). se utilizan para datos que disponen slo de dos po-
sibles valores: verdadero (true) o falso (false).

Es importante denir el tipo del valor que queremos almacenar (Figura 1.7), pues de ello
depender la cantidad de memoria utilizada por la mquina al ejecutar el programa.
Figura 1.7
Ejemplo de declaracin de
variables que almacenan
distintos tipos de datos en
lenguaje de programacin C++.
1.5 Operadores
Un operador es aquel elemento que permite manipular los datos declarados en
nuestro programa. El operador tiene asociado un smbolo que indica el modo en
que ste manipular los datos.
Ir a contenido prctico (e-learning).
Programacin I
12
Existen diferentes clases de operadores (Figura 1.8):

Operadores aritmticos binarios:
-Suma (+). Suma entre valores.
-Resta (-). Resta entre valores.
-Multiplicacin (*). Multiplicacin entre valores.
-Divisin (/). Cociente de la divisin entre valores.
-Mdulo (resto) (%). Resto de la divisin entre valores.


Operadores aritmticos unarios:
-Incremento (++). Aumenta el valor en una unidad.
-Decremento (--). Disminuye el valor en una unidad.
-Cambio de signo (-). Invierte el signo de un valor de positivo a negativo
o viceversa.

Operadores de asignacin (Figura 1.9):
-Asignacin simple (=). Almacena el valor a la derecha del smbolo en el
dato de la izquierda.
-Suma (+ =). Incrementa un valor tantas unidades como se denan a la
derecha del smbolo.
-Resta (- =). Disminuye un valor tantas unidades como se denan a la de-
recha del smbolo.
-Multiplicacin (* =). Multiplica un valor por el valor de la derecha del smbolo.
-Divisin (/ =). Divide un valor entre el valor de la derecha del smbolo.
-Mdulo (% =). Calcula el resto de la divisin entre los valores a ambos lados.
Figura 1.8
Tabla de los diferentes
operadores aritmticos.
Figura 1.9
Tabla de los diferentes
operadores de asignacin.
Identifcacin de los elementos de un programa informtico
13

Operadores de comparacin (Figura 1.10):
-Igualdad (= =). Compara si dos datos contienen el mismo valor.
-Desigualdad (! =). Compara si dos datos contienen valores distintos.
-Menor que (<). Compara si el valor de la izquierda es menor que el de la derecha.
-Mayor que (>). Compara si el valor de la izquierda es mayor que el de la derecha.
-Menor o igual que (<=). Compara si el valor de la izquierda es menor o igual que
el de la derecha.
-Mayor o igual que (>=). Compara si el valor de la izquierda es mayor o igual
que el de la derecha.
-Divisin (/ =). Divide un valor entre el valor de la derecha del smbolo.
-Mdulo (% =). Calcula el resto de la divisin entre los valores a ambos lados.

Operadores lgicos:
-Y (&& =). La operacin es cierta si los dos valores que tiene a ambos lados son ciertos,
y falsa en cualquier otro caso.
-O (|| =). La operacin es cierta si cualquiera de los dos valores que tiene a ambos
lados es cierto, y falsa en caso de que ambos valores sean falsos.
-NO (! =). Si el valor que tiene a la derecha es falso el resultado de la operacin ser
cierto, si el valor es cierto el resultado ser falso.
Figura 1.10
Tabla de los diferentes
operadores de comparacin.
Para saber ms
Algunos lenguajes de
programacin, como
por ejemplo Java o C++,
pueden manipular los
datos a niveles muy
bajos, incluso de bits,
por lo que incluyen
operadores especfcos
para tales efectos.
1.6 Expresiones
En programacin, una expresin es una combinacin de datos que, al ser evaluada por
el ordenador con la ayuda de operadores, ofrece un resultado en funcin del valor y el
tipo de los datos. El resultado obtenido podr utilizarse para almacenarlo en un nuevo
dato o para realizar una accin determinada segn su valor.
Existen tres tipos bsicos de expresiones de programacin:

Aritmticas. Hacen referencia a todas las operaciones matemticas como su-
mas, restas y divisiones.

Relaciones. Se usan para comparar el valor de dos datos y denir si estos son
iguales, diferentes o, si siendo diferentes, uno es mayor o menor que el otro. Este
tipo de expresiones slo tienen dos resultados posibles: verdadero o falso.
Programacin I
14

Lgicas. Sirven para comprobar si se cumplen dos o ms premisas expuestas.
Igual que las expresiones relacionales, este tipo de expresiones slo tienen dos
resultados posibles: verdadero o falso (Figura 1.11).
Figura 1.11
Tabla referencial de los
distintos tipos de expresiones
de programacin con sus
respectivos resultados.
1.7 Conversiones de tipo
Cada tipo de datos es almacenado de una manera diferente en el ordenador y per-
mite realizar diferentes operaciones, pero a veces es necesario realizar operaciones
sobre un dato que no se corresponde con su tipo. Por ejemplo, un valor numrico
que el usuario ha introducido en forma de cadena debe ser tratado como un n-
mero para participar en una operacin aritmtica.
Las conversiones de tipo (en ingls Cast) nos permiten transformar el valor que
contiene un dato en un valor de tipo distinto.
Una conversin de tipo puede ser implcita si el compilador o intrprete es capaz
de realizarla automticamente. Normalmente se trata de conversiones de un tipo
particular a otro ms general.
Una conversin es explcita si el programa de ordenador la pide expresamente.
Supongamos por un momento que, tras una operacin matemtica, como por
ejemplo una divisin, el resultado obtenido aparece con una parte decimal que
queremos desechar. Dicho valor estar almacenado en una variable de tipo oat.
Identifcacin de los elementos de un programa informtico
15
Usando una conversin de tipo podremos conseguir que el valor numrico alma-
cenado como tipo oat pase a ser de tipo integer, desechando as directamente su
parte decimal (Figura 1.12).
Cada lenguaje de programacin tiene sus propias herramientas para realizar los
cambios de tipo. La ms utilizada es el operador Cast, que utilizan el lenguaje C y
sus derivados, adems de Java y PHP. Por ejemplo, UnNumeroEntero = (int)UnNu-
meroDecimal; es una sentencia que convierte el valor de la variable UnNumeroDe-
cimal en un nmero entero y almacena el resultado en la variable UnNumeroEnte-
ro. El operador es el tipo entre parntesis antes del valor a procesar.
En otros casos se utilizan funciones o mtodos, que son conceptos que veremos
ms adelante.
Figura 1.12
Esquema conceptual de
conversin de un dato de valor
real en otro de valor entero.
Figura 1.13
Ejemplos de comentarios
de cdigo segn diferentes
lenguajes de programacin.
1.8 Comentarios
Un comentario es una instruccin destinada a integrar informacin adicional
dentro del cdigo fuente de un programa. Los comentarios no son interpretados
por el compilador del lenguaje a la hora de ejecutar el programa.
El uso de los comentarios es muy extenso, pueden emplearse tanto para introducir
datos aclaratorios dentro del cdigo como para evitar que el programa active una
cierta instruccin.
Cada lenguaje de programacin tiene una sintaxis propia para denir comentarios
dentro del cdigo (Figura 1.13).
Recuerda
Los comentarios no
tienen ningn efecto
durante la ejecucin
de un programa,
pero siempre nos
ayudarn a mantener
un cdigo organizado y
comprensible.
Programacin I
16
Resumen
En este apartado hemos denido las normas y comportamientos bsicos que se aplican a todo len-
guaje de programacin. A la hora de disear un programa informtico deberemos recordar los si-
guientes pasos bsicos a seguir: identicacin de un problema, denicin de directrices, obtencin
de resultados, depuracin de errores y resolucin del problema.
El entorno de desarrollo integrado (IDE, Integrated Development Environment) nos facilitar las he-
rramientas necesarias para comunicarnos con el ordenador a travs de instrucciones escritas en un
lenguaje de programacin determinado.
Para que nuestro programa sea gil y estable, deberemos tener en cuenta la cantidad de datos que
necesitaremos y el modo en que los almacenaremos en la memoria del ordenador. Los diferentes
tipos de datos nos ayudarn a crear parcelas de almacenaje para cada uno de los datos que usemos.
Los operadores, las expresiones y la conversin de datos, son herramientas que nos permitirn ma-
nipular los datos a lo largo de nuestro programa con el n de proporcionarnos una resolucin al
problema planteado.
Los lenguajes de programacin ofrecen, adems, ciertos recursos para hacer que nuestro cdigo sea
ms versatil y comprensible. Recordemos que herramientas como los comentarios no inuyen en el
resultado nal del programa, pero son imprescindibles para mantener organizado el cdigo de ste.
Ir a los contenidos prcticos del captulo (e-learning).
Uso de estructuras de control
17
2. USO DE ESTRUCTURAS DE CONTROL
Hasta ahora hemos visto cules son los elementos principales que intervienen en
la programacin y hemos aprendido cmo el uso de datos y objetos nos ayudan
a organizar nuestro cdigo. Sin embargo, para la resolucin de problemas com-
plejos, es preciso conocer cules son las sentencias o acciones que se ejecutan, y
en qu momento se ejecutan. Las estructuras de control, o construcciones de
control, controlan la secuencia o ujo de ejecucin de las acciones que realiza
nuestro programa. A lo largo de este captulo, aprenderemos a controlar los suce-
sos que desencadenarn las acciones que deniremos en nuestro cdigo durante
la ejecucin de nuestros programas. La funcin de las estructuras de control es
la de dirigir el ujo de las acciones a lo largo de un programa informtico con el
objetivo de que ste reaccione de un modo u otro segn la situacin. Hay estruc-
turas de varios tipos (seleccin, repeticin, salto y excepcin). Todas ellas gozan de
caractersticas y utilidades distintas. Veamos pues, cules son y en qu situaciones
deberemos usar unas u otras.
2.1 Estructuras de seleccin
Las estructuras de seleccin denen diferentes comportamientos para nuestro
programa basndose en la evaluacin de sentencias o premisas (condiciones) (Fi-
gura 2.1). Existen tres tipos:

Seleccin simple. Su comportamiento se basa en la evaluacin de una senten-
cia y reaccin en consecuencia. Si la premisa se cumple, se desencadenan las
acciones denidas; de lo contrario, el programa sigue su curso. La instruccin
usada es el condicional if (si).

Seleccin doble. Ampla la funcionalidad de las estructuras de seleccin simple
aadiendo un camino alternativo si la premisa evaluada no se cumple. Las ins-
trucciones que las denen son if / else (si / si no).

Seleccin mltiple. Se basan en la evaluacin de colecciones de premisas. El
programa elegir el comportamiento adecuado segn sea la premisa que se
cumpla. La instruccin que las dene se denomina switch (cambia a/seleccio-
na), y los diferentes comportamientos vienen determinados segn las senten-
cias case (caso).
Para ejemplicar su uso, podramos proponer la siguiente situacin: imaginemos
la pgina web de una marca de bebidas alcohlicas en la que el acceso est
vetado a los menores de 18 aos. Cuando un usuario intenta acceder, se le pide
la fecha de nacimiento para realizar la comprobacin de su edad segn el ao
Ir a Puesta en situacin del captulo
(e-learning).
Programacin I
18
en curso. Una vez el programa dene que el usuario es mayor de 18 aos, se le
permite el acceso al contenido de la web; de otro modo, seguir vetado.
2.1.1 Estructuras de seleccin en Java
La sentencia if, o if-else:
if ( <expresin lgica> ) {
<lo que sea>;
} [ else {
<lo que sea>;
} ]
La expresin lgica tiene que producir un resultado lgico, es decir, true o false
(Figura 2.2). La sentencia puede ser simple, acabada en punto y coma, o puede ser
compuesta, siempre encerrada por llaves.
Figura 2.1
Esquema conceptual de una
estructura de seleccin simple.
Figura 2.2
Esquema conceptual de una
estructura de seleccin simple
con doble bifurcacin.
Uso de estructuras de control
19
La seleccin mltiple, sentencia switch case:
switch( <expresin> ) {
case valor1:
<lo que sea>;
break;
case valor2:
< lo que sea >;
break;
[default:
< lo que sea >;]
}
La expresin, que puede ser una variable, debe dar como resultado int o char.
Cada case acaba en un break y esto hace que, despus de cada evaluacin y ejecu-
cin, se vaya al nal. No es obligatorio, lo que har que se ejecuten las siguientes
sentencias hasta un break.
Al nal, si hay un default, el cdigo de dentro se ejecutar cuando no se haya en-
contrado coincidencia anterior (Figura 2.3).
2.2 Estructuras de repeticin
Las estructuras de repeticin se basan en la reiteracin de una accin denida
mientras se cumpla una premisa expuesta. Existen de varios tipos:
Figura 2.3
Esquema conceptual de una
estructura de seleccin mltiple.
Programacin I
20

for. Determina un nmero mximo de repeticiones durante las que se ejecutar
una accin denida. Cuando se alcanza el nmero de repeticiones indicado, el
programa rompe el bucle de la estructura y pasa a la siguiente lnea de cdigo.

while. Su funcionamiento es muy parecido al de las estructuras for. El programa
ejecuta una accin mientras se cumpla una condicin denida. Para que el bucle
se rompa, deber existir en el interior de las acciones denidas, una instruccin
que convierta la condicin en falsa, de otro modo el programa entrara en un
bucle innito y se bloqueara.

do while. Muy prxima a la estructura while, la diferencia es que la comproba-
cin de la premisa se realiza posteriormente a las acciones denidas, es decir, las
acciones se ejecutarn como mnimo una vez.

Todas las estructuras tienen una utilidad y funcin segn la situacin; sin embargo,
son las estructuras for y while las ms usadas de todas ellas (Figura 2.4).
2.2.1 Estructuras de repeticin en Java
La sentencia for:
for ( <inicializacin>; <nalizacin>; <iteracin> ) {
<lo que sea>;
}
La sentencia for ejecuta un grupo de instrucciones repetidamente con las siguien-
tes restricciones (separadas por punto y coma) (Figura 2.5):
Figura 2.4
Esquema conceptual de una
estructura de repeticin.
Uso de estructuras de control
21

Inicializacin. Una expresin que inicializa la variable o variables que se utilizan
en la iteracin. Por ejemplo, Integer i = 0.

Finalizacin. Mientras se cumplan las condiciones que se incluyen, se iran eje-
cutando repetidamente las instrucciones contenidas en el for. Por ejemplo, i < 5.

Iteracin. Incremento o decremento de la variable o variables que a cada itera-
cin se va a actualizar. Por ejemplo, i++ har que a cada vuelta se incremente en
1 la variable i, pero tambin podra ser i--, o i = i +2.
La sentencia while:
[ <inicializacin>; ]
while ( <expresin condicional> ) {
<lo que sea>;
<iteracin>;
}
Esta estructura ejecuta repetidamente las sentencias que encierra mientras la ex-
presin condicional sea verdadera; por lo que, si es inicialmente falsa, no se ejecu-
ta. Por eso se suele inicializar, para que al menos entre una vez, y en las sentencias
de iteracin es donde se cambia algo para que en algn momento no se cumpla
la expresin condicional (Figura 2.6).
Figura 2.5
Esquema conceptual de una
estructura for.
Programacin I
22
Figura 2.6
Esquema conceptual de una
estructura while.
Figura 2.7
Esquema conceptual de una
estructura do-while.
La sentencia do - while:
[<inicializacin>;]
do {
<lo que sea>;
[ <iteracin>; ]
} while ( <expresin condicional> );
Esta estructura ejecuta repetidamente las sentencias que encierra mientras la ex-
presin condicional sea verdadera. Sin embargo, como la condicin est al nal, a
diferencia del while, la primera vez se ejecutar (Figura 2.7).
Uso de estructuras de control
23
2.3 Estructuras de salto
Las estructuras de salto sirven para interrumpir el ujo normal del programa y
desviarlo hacia un punto diferente (Figura 2.8). Podemos destacar tres tipos:

break. Provoca una salida brusca de una sentencia switch o de un bucle for. Tras
ella, contina la ejecucin del resto del programa.

continue. Interrumpe la ejecucin normal de un bucle. Sirve para crear una ex-
cepcin en la sentencia que se evala rompiendo la ejecucin del bloque de
acciones durante una de las repeticiones. Tras la excepcin, el bucle contina
ejecutndose normalmente.

return. Slo se permite su uso dentro de funciones o bloques de instrucciones.
Provoca la salida inmediata del bloque y retorna al punto desde donde haba
sido activado, devolviendo un valor determinado.
Es importante no usar estas acciones ms que en las situaciones denidas. Cual-
quier otro uso forzado podra provocar el colapso del programa.
2.4 Control de excepciones
El control de excepciones es una estructura que se utiliza para evitar que un pro-
grama se colapse cuando intenta ejecutar un cdigo no vlido o que no pueda
interpretar. Una estructura de control de excepciones se compone de tres instruc-
ciones bsicas:
Figura 2.8
Esquema conceptual de las
diferentes estructuras de salto y
sus usos permitidos.
Programacin I
24

try. tras esta instruccin se denen las sentencias a ejecutar. En caso de xito, el
programa sigue su ujo normal, en caso contrario pasa a la siguiente instruccin
catch.

catch. es la instruccin encargada de recoger el error generado en la ejecucin
de sentencias fallida.

throw. muestra el error recogido durante la sentencia catch para ser mostrado o
actuar en consecuencia.
Como ejemplo de uso para una estructura de control de excepciones podramos
tomar una funcin cuyos parmetros sern usados para realizar una divisin. Si al
parmetro denido como divisor se le asignara el valor 0, el programa podra co-
lapsarse al no poder realizar la operacin. Gracias al control de excepciones (Figura
2.9) el programa podr determinar que ha ocurrido un error, actuar en consecuen-
cia, advertir de lo ocurrido al usuario y seguir su curso normal.
2.4.1 Excepciones en Java
try {
<lo que sea>;
} catch(Exception e) {
<lo que sea>;
}
Al ejecutar las sentencias incluidas en el try, si se produce un error, Java crear un
objeto de la clase Exception o de una de sus heredadas. Este objeto ser pasado al
catch y se ejecutarn las sentencias que se incluyen en el mismo.
Se pueden incluir varias clusulas catch con distintos tipos de excepciones. Siem-
pre se deben poner de menor a mayor detalle. Es decir, como la clase Exception
es de donde heredan todas, sta siempre ir la ltima y, por lo tanto, el grupo de
sentencias de su catch siempre se ejecutar si no se ha cazado en una excepcin
ms particular de un catch anterior del mismo trycatch.
Figura 2.9
Esquema conceptual del
proceso de control de
excepciones en una funcin.
Para saber ms
Las estructuras de
control son combinables
entre s y, aunque no
es aconsejable abusar
de ello, si la ocasin lo
requiere, pueden incluso
anidarse las unas con las
otras para crear nuevas
estructuras.
Recuerda
Las estructuras de salto
estn diseadas para ser
introducidas en ciertos
puntos concretos del
cdigo en los que se
requieren. Su uso fuera
de esos puntos no es
aconsejable, salvo que
no se halle una mejor
solucin.
Uso de estructuras de control
25
2.5 Prueba y depuracin
Una vez hemos acabado de escribir el cdigo de nuestro programa llega el mo-
mento de someterlo al proceso de prueba y depuracin. La nalidad de las
pruebas es denir si las acciones que realiza el programa durante su ejecucin
dan como resultado la resolucin del problema para el que ha sido diseado.
Si los resultados obtenidos no son satisfactorios deberemos revisar nuestro c-
digo, detectar en qu puntos se producen errores y depurarlos. La prueba y la
depuracin son procesos que deben hacerse tanto a lo largo de la escritura del
programa, para comprobar la funcionalidad de pequeos bloques de cdigo,
como al nalizar la aplicacin para comprobar su funcionalidad con respecto a
los usuarios. Es en este proceso donde toma mayor importancia la consola de
errores (Figura 2.10), ya que nos ayudar a detectar los puntos donde se produ-
cen errores y conocer de qu tipo son.
2.6 Documentacin
La documentacin es la gua o comunicacin escrita que ayuda a comprender el
uso de un programa y facilita sus futuras modicaciones (mantenimiento). Debe
recoger todos los elementos y material creado en las diferentes fases del desarro-
llo, adems de las normas de instalacin y recomendaciones para su ejecucin.
La documentacin se puede dividir en tres partes:

Documentacin interna. Son los comentarios que se aaden al cdigo fuente
para claricarlo.

Documentacin externa. Es el documento que recoge todo el material creado
y empleado en las diferentes fases del desarrollo del programa. Las bases de los
puntos que debe incluir son:
- Descripcin del problema
- Explicacin de la solucin
- Autores
- Algoritmo (diagrama de ujo o pseudocdigo)
Figura 2.10
Listado de errores mostrados
por la consola durante la
ejecucin de un programa.
Programacin I
26
- Cdigo Fuente (programa)
- Limitaciones del programa (funciones que puede y no puede realizar)

Manual del usuario. Es el documento que describe paso a paso de qu ma-
nera funciona el programa. Su nalidad es que los usuarios entiendan el modo
correcto de usarlo para obtener los resultados deseados.
Recuerda
La documentacin es
uno de los procesos que
suelen pasarse por alto;
sin embargo, supone el
complemento perfecto
para un producto fnal
usable y estable.
Uso de estructuras de control
27
Resumen
Como cualquier lenguaje de programacin, Java debe implementar las estructuras de control que per-
miten cambiar la ejecucin secuencial del programa, y en denitiva, nos ayudan al implementar cual-
quier tipo de algoritmo.
Las estructura de control de seleccin, if else , ejecuta las instrucciones contenidas en el if siempre que
se cumpla la condicin, en otro caso, ejecutar las del else, siempre que se haya explicitado esta palabra
clave.
La estructura de control switch case evala el valor de una variable y ejecuta las instrucciones que se
encuentran en el case correspondiente al valor.
Las estructuras de repeticin son estructuras de control que ejecutan un conjunto de instrucciones repe-
titivamente. En la estructura while, se ejecuta el conjunto mientras se cumpla la condicin. La estructura
do while, ejecuta primero el conjunto de instrucciones y despus evala, repitiendo el proceso mien-
tras se cumpla la condicin. La estructura for(inicializacin;condiciones;incremento) ejecuta el conjunto
inicializando unas variables, mientras se cumplan las condiciones e incrementando o decrementando las
variables de la parte del incremento.
En Java, se puede prever un error y ejecutar unas instrucciones cuando ocurre. Este proceso se denomina
control de excepciones, y se realiza mediante la estructura try catch. Cuando las instrucciones dentro
del try tienen un error mencionado en el catch, se ejecutarn las instrucciones contenidas en el catch.
Los entornos de programacin integrados (IDE el acrnimo en ingls) tienen utilidades para depurar los
programas, es decir, seguirlos paso a paso para encontrar un mal funcionamiento.
Ir a los contenidos prcticos del captulo (e-learning).
Programacin I
28
3. APLICACIN DE LAS ESTRUCTURAS
DE ALMACENAMIENTO
En programacin es tan importante mantener una organizacin estricta de los da-
tos provenientes del exterior de nuestro programa, como de los datos denidos
internamente en l.
Para tal propsito, las estructuras de almacenamiento de la informacin son la
mejor herramienta aliada que nos ofrecen los lenguajes de programacin. En oca-
siones, veremos que las variables simples capaces de almacenar un nico tipo de
dato no sern sucientes para conseguir que el programa cumpla sus propsitos.
Las estructuras de almacenamiento nos ofrecen una serie de objetos capaces de
almacenar varios datos a la vez e incluso que puedan ser stos de distinto tipo. Se
trata de estructuras destinadas a almacenar bloques de informacin compleja de
una manera estructurada y que permita un acceso sencillo y directo a los datos.
Cuando la informacin externa a nuestro programa proviene de registros o bases
de datos, es una buena praxis almacenarla dentro de nuestro programa con una
estructura que imita la original. Para ello, las estructuras de almacenamiento estn
provistas de toda una serie de caractersticas que facilitarn tanto su almacena-
miento como su acceso posterior.
Por otra parte, debemos gestionar vectores de elementos (arrays en Java) con un
tipo de datos determinado. A veces, este tipo de datos ser simple (integer, char...);
pero, en ocasiones, el vector puede contener elementos que son de un tipo de
datos complejo, como por ejemplo objetos de una clase determinada.
Tambin veremos un caso especial de arrays, el de las cadenas de caracteres. En
diversos problemas se nos plantean operaciones con cadenas de caracteres, como
comparacin de cadenas, bsqueda de cadenas dentro de cadenas, ordenacin
de caracteres, y otras operaciones usuales con las que nos podemos encontrar.
3.1 Estructuras
Una estructura es un grupo de elementos relacionados de forma conveniente con
el programador y el usuario del programa. El resultado es un nuevo tipo de dato
que permite una estructura organizativa considerablemente ms compleja que las
que hemos visto hasta el momento. Se trata de una combinacin de varios tipos
de datos, incluyendo otras estructuras que hayamos podido denir previamente.
Ir a Puesta en situacin del captulo
(e-learning).
Aplicacin de las estructuras de almacenamiento
29
En el ejemplo de la gura 3.1, el programa empieza deniendo una estructura con
la palabra clave struct seguida de tres variables sencillas, las cuales representan
sus componentes. Seguidamente, encontramos una variable entrada que est
denida como un vector de 30 posiciones cuyo tipo de datos es esa estructura. Es
decir, cada uno de los elementos del vector entrada tendr en su contenido las tres
variables de la estructura.
En el main, podemos ver cmo asignar el valor de un elemento. Para ello, situados
con ndice 0, se debe dar valor a todo el contenido del elemento; es decir, a todas
las variables de la estructura, tal y como se ve en la gura dentro del main.
En lenguajes orientados a objetos como Java, las estructuras se solucionan con
clases y objetos, pues las propiedades de los mismos cumplen perfectamente con
el cometido de las estructuras.
3.2 Creacin de arrays
En programacin, el trmino ingls array (matriz o vector) dene una zona de
almacenamiento continuo de datos de un mismo tipo. Desde un punto de vista
lgico, una matriz puede entenderse como un conjunto de elementos ordenados
en serie. Las matrices son adecuadas para situaciones en las que el acceso a los
datos deba realizarse de forma aleatoria e impredecible (Figura 3.2).
Todo vector o matriz se compone de un determinado nmero de elementos. Cada
elemento est referenciado por un ndice o posicin que ocupa dentro del vector.
Figura 3.1
Denicin de una estructura
aplicada a dos variables en
lenguaje C++.
Programacin I
30
Existen tres formas de indexar los elementos de una matriz:

Indexacin base-cero (0). El primer elemento del vector recibe el ndice num-
rico 0. En consecuencia, el ltimo elemento del vector recibir un ndice numri-
co igual al nmero de elementos totales menos uno. El lenguaje C es un ejemplo
tpico que utiliza este modo de indexacin.

Indexacin base-uno (1). En esta forma de indexacin, el primer elemento de la
matriz tiene el ndice 1 y el ltimo tiene el ndice igual al nmero de elementos
totales.

Indexacin base-n (n). Se trata de un modo de indexacin en la que el ndi-
ce del primer elemento puede ser elegido libremente. En algunos lenguajes de
programacin se permite que los ndices sean negativos e incluso tambin ca-
denas de caracteres.
Declaracin de arrays en Java:
nombre = new <tipo>[dimensin];
Un ejemplo con un tipo simple.
int[] notas;
notas = new int[10]:
Pero tambin se puede aplicar a objetos, es decir, a tipos de datos complejos:
Persona[] personas = new Persona[];
Figura 3.2
Un array donde el ndice es la
etiqueta y los valores lo que se
guarda en el interior.
Aplicacin de las estructuras de almacenamiento
31
Nota: en este caso, estamos utilizando memoria dinmica, es decir, la
longitud del array (del vector) puede ir amplindose a medida que se necesite.
3.3 Inicializacin
Como toda otra variable, cuando denimos una matriz en nuestro cdigo, sta se
encuentra vaca. La inicializacin de una array es el proceso a travs del cual de-
nimos el nmero de elementos que la conformarn y asignamos datos a cada uno
de ellos. Existen diferentes mtodos para inicializar una matriz (Figura 3.3), todos
ellos el resultado de una coleccin de datos ordenados de manera correlativa, de
la que deberemos escoger el que mejor se ajuste a nuestras necesidades:

Inicializacin directa. Consiste en asignar los datos para cada ndice de la ma-
triz de modo manual, esto es, asignar manualmente un valor a cada uno de los
ndices de la matriz.
En Java, por ejemplo:
<tipo> [] nombreDeTabla = { valor1, valor2, valor3... }

Inicializacin dinmica. La losofa de la inicializacin dinmica es automati-
zar el proceso de asignacin de datos para cada uno de los ndices de la matriz.
Este proceso es especialmente til cuando los datos que debemos almacenar
provienen de una fuente externa al programa, como por ejemplo de un do-
cumento XML. Gracias a la ayuda de una estructura de repeticin (for, while)
seremos capaces de introducir y ordenar directamente los diferentes datos ex-
ternos en la matriz.
Figura 3.3
Inizializacin directa de un
vector de String en Java.
Recuerda
La mejor manera de
recorrer una tabla
es la estructura de
control for for(inte
i=0;i<personas.
length;i++)
Programacin I
32
En Java, para referirnos a un elemento en concreto de la tabla, lo haremos como en
el ejemplo siguiente que imprime el elemento 3 de una tabla de personas:
System.out.println(personas[3]);
Se debe tener en cuenta que el elemento 3, es el de posicin 4 dentro de la tabla,
pues el ndice empieza en 0.
3.4 Arrays multidimensionales
Los arrays multidimensionales son unas estructuras de datos capaces de alma-
cenar valores en diferentes niveles. Los arrays que hemos visto hasta ahora alma-
cenan valores en una nica dimensin, es decir, con un ndice asignado para cada
una de sus posiciones y elementos. Los arrays de dos dimensiones (Figura 3.4)
guardan sus valores en una estructura similar a las las y las columnas de una ta-
bla, por ello se requieren dos ndices para acceder a cada una de las posiciones de
sus datos. En un sentido amplio, podemos entender un array multidimensional
como un array que contiene otro array indexado en cada una de sus posiciones
(Figura 3.5).
Para referenciar un dato contenido en un array multidimensional deberemos in-
dicar dos posiciones numricas, la primera har referencia al ndice de la matriz
principal y la segunda al ndice de la posicin del dato de la matriz contenida en l.
Recuerda
La inicializacin
dinmica de arrays
resulta una herramienta
valiossima en cuanto a
almacenaje de datos se
refere debido al sistema
de automatizacin que
ofrece.
Figura 3.4
Un array de dos dimensiones
necesita dos ndices (la la y la
columna).
Ir a contenido prctico (e-learning).
Aplicacin de las estructuras de almacenamiento
33
En Java, la declaracin de un array bidimensional del tipo hoja de clculo, es decir,
con las y columnas, se efecta de la manera siguiente:
<UnTipo> tabla [][] = new <UnTipo> [unaDimensin][];
En este caso, slo se sabe que los elementos sern del tipo UnTipo y que tendr un
nmero de las igual a unaDimensin.
Pensemos en un hotel que tenga 4 plantas (0, 1, 2 y 3) y en cada planta tiene 5
habitaciones (de la 0 a la 4). Pequeo, pero til para la explicacin.
En cada habitacin podemos tener huspedes alojados de un tipo de datos deter-
minado. Podramos guardar enteros, y entonces tendramos:
int hotel[][] = new int [3][];
hotel[0] = new int [4];
hotel[1] = new int [4];
hotel[2] = new int [4];
hotel[3] = new int [4];
Y para saber el husped de la planta 2 (la 2) segunda habitacin (columna 1)
podemos hacer:
habitacionElegida = hotel[2][1];
Figura 3.5
Un array de tres dimensiones
necesita tres ndices: la,
columna y piso.
Programacin I
34
3.5 Cadenas de caracteres
Las cadenas de caracteres (string) nos permiten almacenar conjuntos seriados de
caracteres. En ese sentido, podemos entender la mayora de datos que almacena-
mos en una variable de tipo string como palabras o texto en general. Sin embargo,
para el compilador de un lenguaje de programacin, una string es tratada como
una serie de caracteres colocados en serie, a los cuales se les asigna una posicin
propia dentro de la variable contenedora. As pues, las cadenas de caracteres son
entendidas por el compilador del lenguaje, no como una entidad en s, sino como
un array de caracteres o letras con posiciones individuales para cada una de ellas.
Del mismo modo que podemos acceder a un dato indexado dentro de una matriz,
podremos tambin acceder a un caracter concreto dentro de una variable de tipo
string indicando su posicin dentro de ella (Figura 3.6).
Las cadenas en Java
Declaracin
En Java, una cadena de caracteres es un String. Su declaracin es:
String str1;
Inicializacin habitual
Caso ms usual:
String str1 = Hola;
Figura 3.6
Los textos son cadenas de
caracteres en las que podremos
buscar y comparar.
Para saber ms
De todas las matrices
multidimendionales, las
de uso ms comn son
las de dos dimensiones.
Sin embargo, a medida
que dotemos un array de
mayores dimensiones,
podremos conseguir
efectos ms complejos
para nuestro programa,
ya sea para almacenar
datos o para representar
objetos grfcos por
pantalla.
Aplicacin de las estructuras de almacenamiento
35
String inicializado a partir de una cadena de caracteres
char t[]={a,b,c};
String str1 = new String(t);
Operaciones (mtodos)
En Java, la clase String proporciona a los objetos creados con dicha clase, es decir
a las variables con ese tipo, operaciones (mtodos) de comparacin, copia y reem-
plazo entre otras.
3.6 Listas
Una lista es un tipo de matriz capaz de incrementar o reducir de forma dinmica
el nmero de elementos que contiene. Al mismo tiempo, los elementos conteni-
dos dentro de una lista no tienen necesidad de ser del mismo tipo (Figura 3.7).
La ventaja principal de una lista con respecto a una matriz corriente, es que sta
puede contener tantos tipos de objetos de datos como el programador necesite.
La instruccin que dene una lista dentro del cdigo es ArrayList. Para inicializar
una lista podemos utilizar dos mtodos, bien denindola como vaca y, por tanto,
sin nmero inicial de elementos, o bien deniendo un nmero determinado de
posiciones iniciales. Ambos sistemas son completamente vlidos, pero es reco-
mendable que, para economizar memoria, si conocemos de antemano el nmero
de elementos mnimos que vayamos a necesitar, lo denamos al declarar la lista.
Figura 3.7
En las listas ,cada elemento
puede ser de un tipo diferente,
incluyendo objetos.
Programacin I
36
En Java, la gestin de listas comprende los siguientes aspectos:
Declaracin
Una lista en Java es un vector de la clase List. Como esta clase es abstract (es decir
no se puede instanciar), entonces debemos utilizar la clase ArrayList a la manera
del ejemplo.
List losTelefonos = new ArrayList();
En este caso, losTelefonos ser un array de string. Pero si, por ejemplo, tenemos
una clase Persona y queremos crear una lista de personas, debemos insertar la
clase a la que nos referimos entre < >. De esta forma:
List<Persona> unasPersonas = new ArraList<Persona>();
Inicializacin habitual
En cualquier caso, se emplea el mtodo add. Por ejemplo:
Persona laPersona = ....;
unasPersonas.add(laPersona);
Operaciones (mtodos)
En Java, un objeto del tipo List, aparte de la operacin aadir descrita, tiene operacio-
nes de borrado, cuenta del nmero de elementos, bsqueda de un elemento, etc.
Por otra parte, la lista proporciona la propiedad Iterator que se utiliza para reco-
rrer la lista.
3.7 Colecciones
Una coleccin, llamada comnmente en ingls Collection, es todo aquel objeto
que se puede recorrer o iterar, y del cual conocemos su tamao (Figura 3.8). Las
operaciones bsicas de una coleccin son las siguientes:

add(T). Aade un elemento.

Iterator(). Obtiene un iterador que permite recorrer la coleccin visitando cada
elemento una vez.

Size(). Obtiene la cantidad de elementos almacenados dentro de una coleccin.
Aplicacin de las estructuras de almacenamiento
37

contains(t). Devuelve un valor booleano (cierto o falso) segn si el elemento
entre parntesis (t) se encuentra dentro de la coleccin o no.
La caracterstica principal de un objeto Collection es la de poder ser recorrido.
Si bien en este punto del proceso no est denido un orden, la nica manera de
denirlo es usando una instruccin iteradora de repeticin, mediante el mtodo
iterator(). Un iterador es un objeto que recorre la extensin de la coleccin y nos
permite obtener todos los objetos contenidos en ella, invocando progresivamente
un mtodo llamado next(). Si la coleccin es modicable, podremos eliminar un
objeto durante el recorrido mediante el mtodo llamado remove() del iterador.
En Java la gestin de colecciones se efecta a travs de la clase Collection, con
declaracin, inicializacin y mtodos similares a las explicadas para la clase List.
Figura 3.8
En las colecciones
podemos aadir elementos
diversos con control.
Programacin I
38
Resumen
Una estructura es un grupo de elementos relacionados entre s, que es el resultado de un nuevo
tipo de dato considerablemente ms complejo que los que hemos utilizado hasta ahora. Se trata
de una combinacin de varios tipos de datos, incluyendo otras estructuras que hayamos denido
previamente.
Un array dene una zona de almacenamiento continuo de datos de un mismo tipo. Desde un punto
de vista lgico, una matriz puede entenderse como un conjunto de elementos ordenados en serie.
Las matrices son adecuadas para situaciones en las que el acceso a los datos deba realizarse de forma
aleatoria e impredecible.
La inicializacin de una array es el proceso a travs del cual denimos el nmero de elementos que
la conformarn y asignamos datos a cada uno de ellos.
Los arrays multidimensionales son estructuras de datos capaces de almacenar valores en diferen-
tes niveles. En ellos se almacenan los valores en una estructura similar a las las y las columnas de
una tabla.
Las cadenas de caracteres (string) nos permiten almacenar conjuntos seriados de caracteres. Para el
compilador de un lenguaje de programacin, una string es tratada como una serie de caracteres co-
locados en serie con una posicin propia para cada uno de ellos. As pues, las cadenas de caracteres
son entendidas como un array de caracteres o letras.
Una lista es un tipo de matriz capaz de incrementar o reducir de forma dinmica el nmero de ele-
mentos que contiene. La ventaja de una lista frente a un array comn, es la capacidad de almacenar
elementos de distinto tipo en su estructura.
Un objeto Collection es el concepto base del que derivan la mayora de las estructuras de almacena-
miento de informacin. Su caracterstica principal es la de poder obtener datos de l y modicarlos a
la vez que se recorre su extensin.
Ir a los contenidos prcticos del captulo (e-learning).
Lectura y escritura de la informacin
39
4. LECTURA Y ESCRITURA
DE LA INFORMACIN
Cuando se empieza en el mundo de la programacin, lo primero que se debe
tener claro es que un programa es la resolucin de un algoritmo cuyo esquema
ms general puede ser:

Entrada de datos

Transformacin de datos

Salida de datos
Por cuestiones pedaggicas, el aprendizaje de la programacin pasa por un pri-
mer momento donde la entrada de datos es siempre por el teclado y la salida es
en la consola (en la pantalla).
Pero existe un gran nmero de situaciones donde nos interesa cambiar la entrada
y/o la salida de datos por cheros. Es decir, leer los datos desde un chero del
sistema y escribir los resultados de nuestro programa en un chero del sistema.
Pero esto no es todo, pues nos dejaramos otro gran nmero de situaciones don-
de la entrada de datos debe realizarse desde un formulario en una ventana del
sistema operativo y, en la salida de nuestro programa, deseamos mostrarla en
esa u otra ventana del sistema operativo.
En este captulo vamos a abordar estos dos tipos de entrada y salida de datos.
En primer lugar, nos dedicaremos a estudiar la entrada y salida de datos sobre
cheros del sistema operativo. En Java, la comunicacin entre nuestro programa
y los cheros se efecta abriendo un ujo de datos (stream) y todo ello se gestio-
na con las clases InputStream y OutputStream (Reader y Writer para caracteres).
Con estas clases y sobre todo, las clases que heredan de ellas.
En segundo lugar, trataremos la entrada y salida grca, es decir hacia y desde
ventanas, estudiando adems los formularios, sus controles y eventos, como por
ejemplo, un botn y el evento al hacer clic. En Java lo haremos mediante las
clases contenidas en paquetes de AWT (Abstract Window Toolkit), un sistema que
permite a nuestros programas Java ser independiente del sistema de grcos y
ventanas del sistema operativo.
Ir a Puesta en situacin del captulo
(e-learning).
Programacin I
40
4.1 Concepto de ujo
En programacin, denimos fujo (stream) a la conexin existente entre un pro-
grama y una fuente o destino de datos. Un fujo dene el protocolo usado por
los lenguajes de programacin para controlar y tratar la entrada (input) y salida
(output) de datos (Figura 4.1). Los fujos de entrada (input) controlan los datos
que uyen hacia un programa para ser procesados. Los fujos de salida (output)
controlan los datos que uyen desde un programa despus de ser procesados.
En programacin, entendemos por dato aquella parte representativa de informa-
cin proporcionada u obtenida del programa. Como ejemplo de entrada de datos
podramos tomar instrucciones del teclado o el ratn, y como ejemplo de salida
de datos podramos tomar la informacin mostrada a travs de la pantalla o un
documento obtenido por impresora.
4.2 Tipos de ujos: ujos de bytes y de caracteres
Existen dos tipos bsicos de ujos de datos y ambos estn destinados a permitir el
uso de cheros externos a nuestro programa:

Flujos de bytes. Incluyen los mtodos e instrucciones usados para manipular da-
tos binarios, es decir, legibles slo por un ordenador (por ejemplo un chero .exe).

Flujos de caracteres. Incluyen los mtodos e instrucciones usados para ma-
nipular datos legibles por humanos (por ejemplo un chero .txt). Un ujo de
caracteres se encarga de traducir los datos emergentes de un chero de texto
Figura 4.1
Esquema conceptual de
entrada y salida de datos en un
programa informtico.
Lectura y escritura de la informacin
41
en datos comprensibles por el ordenador (bytes) para que estos puedan ser uti-
lizados en el programa.
4.3 Flujos predenidos
En Java, los fujos predefnidos, o estndar, denen procesos a nivel interno que
permanecen abiertos a lo largo de la ejecucin de un programa (Figura 4.2). Di-
chos procesos estn dispuestos tanto a recibir datos de entrada como a dirigir
datos de salida hacia el dispositivo (pantalla, impresora...) o elemento (archivo)
designado. Por defecto, el dispositivo de ujo estndar de entrada es el teclado,
y la clase y mtodo para referirnos a l es System.in. Asimismo, el ujo estndar
de salida por defecto es la pantalla, y para referirse a l se usa la clase y mtodo
System.out. Un tercer mtodo de la clase System, llamado System.err, se encarga
de recoger y gestionar los posibles errores generados durante el proceso de ujos
de entrada y salida de datos.
4.4 Clases relativas a ujos
Existen en Java una serie de clases dedicadas a controlar los ujos de entrada y
salida de datos, y que se conocen con el nombre de clases relativas a fujos. Las
Figura 4.2
Los ujos de datos entre el
programa y el exterior son como
los buses de un ordenador.
Recuerda
El fujo es el concepto
que defne el proceso
de entrada y salida
de informacin en un
programa informtico.
Programacin I
42
clases diseadas para tales propsitos son cuatro: dos para ujos de entrada y sa-
lida de bytes y dos para ujos de entrada y salida de caracteres. De ellas se derivan
otras subclases destinadas a realizar funciones ms especcas. Veamos cules son:

Clases relativas a fujos de bytes:
- InputStream. Engloba las funciones y clases encargadas de leer los ujos de
entrada de bytes y convertirlos en los denominados caracteres Unicode para
que puedan ser interpretados por el ordenador.
- OutputStream. Engloba las funciones y clases encargadas de enviar los
ujos de salida de bytes hacia los dispositivos designados, y convertirlos en
caracteres comprensibles por el cerebro humano.

Clases relativas a fujos de caracteres:
- Reader. Implementa todas las funcionalidades de lectura de ujos de
caracteres para que estos puedan ser interpretados y procesados por el
programa.
- Writer. Implementa todas las funcionalidades de escritura de ujos de
caracteres para que estos puedan ser mostrados por pantalla o almacenados
en archivos.
4.5 Utilizacin de ujos
La utilizacin de fujos dene un protocolo a seguir a la hora de trabajar con u-
jos de datos. Este protocolo vara segn sea el ujo de lectura o de escritura:

Lectura de datos:
- Creacin del llamado objeto stream, que se encarga de abrir un ujo a una
fuente entrada de datos (teclado, archivo, socket).
- Lectura de los datos desde el inicio de su ujo hasta su n.
- Fin del proceso, uso del llamado mtodo close, que se encarga de cerrar el
ujo de datos y terminar el proceso, liberando as los sectores de memoria
destinados a l.

Escritura de datos:
- Creacin de un objeto stream para abrir un ujo a una fuente salida de datos
(pantalla, archivo).
- Escritura de los datos desde el inicio hasta el nal de su ujo.
- Fin del proceso con el llamado mtodo close, que se encarga de cerrar el ujo
de datos y terminar el proceso liberando as los sectores de memoria utiliza-
dos para l.
Ir a contenido prctico (e-learning).
Lectura y escritura de la informacin
43
Los ujos estndar son gestionados a nivel interno por el sistema: l se encarga de
su apertura y de su cierre segn sea necesario.
4.6 Entrada desde teclado
En trminos generales, se considera el teclado como el dispositivo principal de
entrada de datos al sistema o al programa.
Los datos enviados desde el teclado del ordenador se gestionan con los paquetes
de clases System.in y InputStream. Ambos sern los encargados de traducir los u-
jos de bytes recogidos cada vez que se pulse una tecla, y de traducirlos a caracteres
interpretables por el ordenador para que puedan ser procesados.
En lenguaje Java se incluyen ya una serie de clases designadas para tales efectos,
sin embargo tenemos tambin la posibilidad de crear nuestras propias clases de
control a partir de ellas, para obtener resultados ms especcos cuando se detec-
te una entrada de teclado en nuestro programa.
La combinacin de todo esto hace que las instrucciones para leer desde el teclado
sean como en el ejemplo siguiente:
BuferedReader br = new BuferedReader(new InputStreamReader(System.in));
String frase = br.readLine();
4.7 Salida a pantalla
Generalmente, se considera la pantalla como el dispositivo principal de salida de
datos del sistema o programa.
Los datos enviados hacia la pantalla por el programa se gestionan con los paque-
tes de clases System.out y OutputStream. Ambos sern los encargados de traducir
los ujos de bytes enviados, y de traducirlos a caracteres o resultados interpreta-
bles por una persona.
Igual que para los ujos de entrada, en lenguaje Java se incluyen una serie de cla-
ses designadas para tales efectos; sin embargo, tenemos tambin la posibilidad de
crear nuestras propias clases de control a partir de ellas.
Por defecto, los ujos de datos de salida se muestran por pantalla a travs de la
consola (Figura 4.3) de nuestro sistema operativo. No obstante, una vez termina-
Para saber ms
Combinando las
funciones que ofrecen la
clases relativas a fujos,
seremos capaces de crear
nuevas funcionalidades
adaptadas a las
necesidades de nuestros
programas.
Programacin I
44
do el programa, podremos denir que dichos datos sean mostrados por pantalla
representados de un modo ms visual (como, por ejemplo, en grcos) e incluso
ofrecer la posibilidad de que sean manipulados por el usuario a travs de entradas
de teclado.
En la prctica, lo ms habitual en Java para escribir en la consola es tal y como se
muestra en el siguiente ejemplo:
System.out.println(Hola mundo);
4.8 Aplicaciones del almacenamiento de informacin en cheros
La losofa de almacenar informacin en fcheros externos a nuestro progra-
ma es la de separar la programacin de la informacin (Figura 4.4). De este modo,
pueden modicarse los datos de entrada a nuestro programa independiente-
mente de cul sea su cdigo. Imaginemos que tenemos un programa diseado
para mostrar una galera de fotos. Para indicar al programa cul es la ubicacin
de cada uno de los archivos de imagen, deberemos especicar una ruta para
cada uno de ellos. Una primera posibilidad es la de incluir la ruta de cada imagen
dentro del mismo cdigo. De este modo, el programa no dejar de ser funcional,
pero su usabilidad y mantenimiento perdern ecacia, ya que cualquier modi-
cacin de la informacin, como el cambio del nombre de un archivo, afectar
directamente al cdigo de la aplicacin. De otro modo, si almacenamos la lista
de rutas en un archivo de texto independiente, realizar el mantenimiento de la
aplicacin se limitar a modicar la informacin de dicho archivo, luego el cdi-
go se encargar de procesarla segn proceda.
Figura 4.3
Informacin mostrada por
pantalla a travs de la consola
de Java.
Recuerda
Se considera que el
teclado y la pantalla
son los dispositivos
principales de entrada
y salida de datos en un
programa informtico;
sin embargo, en
este proceso pueden
intervenir muchos ms
dispositivos, como la
impresora, una webcam
o el ratn.
Lectura y escritura de la informacin
45
4.9 Ficheros de datos. Registros
Las versiones de Java a partir de la versin 1.4 aaden una funcionalidad que
permite controlar, dar formato y publicar mensajes a travs de los llamados re-
gistros (log). Los registros pertenecen a un paquete de clases llamado java.util.
logging. Los registros pueden ser usados para lanzar mensajes de informacin,
estados de los datos o incluso errores ocurridos durante la ejecucin del progra-
ma. Estos procesos pueden beneciar a los usuarios de la aplicacin sea cual sea
su perl. El proceso de utilizacin de los registros de Java es muy simple, slo hay
que seguir los siguientes pasos (Figura 4.5):

Incluir las sentencias de importacin para el paquete de clases logging.

Creacin de una referencia a la clase Logger.

Indicar el mensaje que desea mostrarse y su tipologa.
Figura 4.4
Datos organizados en un
chero externo con formato de
marcado XML.
Programacin I
46
Figura 4.5
Ejemplo de implementacin de
la clase Logger en cdigo Java.
Figura 4.6
Ejemplo de cdigo Java con
implementacin de apertura y
cierre de un archivo.
4.10 Apertura y cierre de cheros. Modos de acceso
Igual que en los procesos designados para controlar la apertura y cierre de ujos
de informacin, existen tambin unos protocolos que rigen la apertura y cierre
de los cheros externos usados en nuestro programa.
A travs del paquete de clases FileReader, Java proporciona toda una serie de
funciones destinadas a la apertura (lectura) y cierre de cheros (Figura 4.6). Por
medio de una ruta denida por un archivo alojado en nuestro disco duro, o por
una URL de Internet, se indica a la clase FileReader cul es el origen de los datos.
Otras clases y funciones como BuferedReader o readLine se encargarn de re-
coger en forma de datos la informacin contenida en los cheros y almacenarla
en variables de nuestro programa.
Una vez terminado el proceso, nalizaremos cerrando el chero y liberando de
la memoria todos los recursos que haban sido utilizados para su tratamiento.
Recuerda
El almacenado de
informacin en
archivos externos de
nuestro programa nos
proporcionar un mayor
control de nuestras
aplicaciones al dejar de
depender nicamente
del cdigo fuente.
Lectura y escritura de la informacin
47
4.11 Escritura y lectura de informacin en cheros
Gracias a las clases FileReader, FileWriter y algunas derivadas de InputStream y
OutputStream de Java, seremos capaces de acceder al contenido almacenado
en archivos externos a nuestro programa para obtener o modicar su informa-
cin (Figura 4.7).
Este proceso nos permitir tener informacin almacenada externamente para
poder acceder a ella en puntos determinados del programa. Tal y como expli-
cbamos en apartados anteriores, este proceso nos permitir separar la progra-
macin de la informacin, pudiendo modicar as los datos de entrada indepen-
dientemente de cul sea nuestro cdigo.
La tipologa de archivos que podr ser utilizada y manipulada por nuestros pro-
gramas es muy diversa, puede tratarse de simples documentos de texto con
extensin .txt, o archivos de informacin estructurada como un .xml, archivos de
imagen, o incluso archivos ejecutables.
Cuando manejamos archivos de texto, se utilizan FileReader y FileWriter, junto
con otras clases tipo Buered para leer y escribir datos (en este caso texto). En
el caso de otro tipo de cheros, donde manejamos bytes, se utilizan las clases
InputStream y OutputStream, adems de sus derivadas.
Figura 4.7
Ejemplo de cdigo Java con
implementacin de lectura y
escritura de un archivo.
Programacin I
48
4.12 Almacenamiento de objetos en cheros.
Persistencia. Serializacin
La serializacin es el proceso a travs del cual pueden almacenarse objetos
directamente en una secuencia de bytes. Se trata de un proceso basado en el
concepto de la persistencia, que permite la posterior reconstruccin de los ob-
jetos guardados como secuencias de bytes (Figura 4.8).
Las clases encargadas de controlar estos procesos son ObjectOuputStream y
ObjectInputStream. La primera se encarga de serializar el objeto convirtindolo
en una secuencia de bytes, la segunda es la encargada de leer e interpretar la
secuencia de bytes de un objeto y reconstruirlo.
A travs de estos mtodos podremos realizar operaciones complejas con nues-
tros objetos como, por ejemplo, enviarlos a travs de la red en formato de bytes
y reconstruirlos de nuevo una vez lleguen a su destinatario.
4.13 Utilizacin de los sistemas de cheros
Un sistema de fcheros es la representacin de todos los elementos incluidos
en nuestro ordenador, ya sean archivos, programas o dispositivos externos, como
impresoras o escners (Figura 4.9).
Java incluye una serie de funcionalidades para poder interactuar con todos ellos. Igual
que podemos detectar una entrada de teclado y registrar una accin a partir de ello,
podremos tambin acceder a mtodos que activen funciones de impresin, modica-
cin de archivos o ejecucin de otros programas complementarios de apoyo.
El sistema de archivos proporciona tambin al lenguaje la organizacin de nues-
tros archivos y directorios en el disco duro, de este modo tendremos la posibilidad
de poder seleccionar un archivo concreto para que sea procesado en tiempo de
ejecucin del programa.
Figura 4.8
Cdigo Java con ejemplo del
proceso de serializacin y
persistencia.
Para saber ms
Los fcheros de registros
son una herramienta
muy valiosa en cuanto a
diseo de aplicaciones
se refere. Suponen
el complemento
perfecto, ya sea para
otros programadores
que intervengan en su
desarrollo como para los
usuarios fnales.
Lectura y escritura de la informacin
49
4.14 Creacin y eliminacin de cheros y directorios
El lenguaje Java ofrece una serie de operativas que permiten la creacin y elimina-
cin de fcheros fsicos en el disco duro. La clase encargada de llevar a cabo estos
procesos se llama File y est incluida dentro del paquete de clases llamado Java IO. El
mtodo que deberemos utilizar es createNewFile, incluido dentro de las funcionalida-
des de dicha clase. El proceso es bien simple, tan slo deberemos incluir dos parme-
tros: el primero indicar la ruta fsica del disco duro donde se quiera crear el archivo; el
segundo indicar el nombre que recibir el archivo creado (Figura 4.10).
El nico factor a tener en cuenta es que la ruta denida para la creacin del archivo
deber existir previamente en nuestro sistema. Hay que sealar que la doble barra
usada en la sentencia es la que le indicar a nuestro cdigo la jerarqua o separacin
de los directorios en la ruta indicada. Una vez creado el chero, bastar con invocar
el mtodo createNewFile, deniendo una estructura de excepcin (IOException), que
se encargar de recoger los posibles errores que aparezcan a lo largo del proceso.
Figura 4.9
Esquema conceptual
de un sistema de cheros.
Figura 4.10
Cdigo Java que adems de
crear identica los permisos.
Programacin
50
Como se ha explicado, en Java, la gestin de un chero o de un directorio se efec-
ta mediante la clase File. Adems del mtodo explicado, otra manera de trabajar
es con los constructores que podemos ver en los ejemplos siguientes:
File f1 = new File(c:\\windows\\notepad.exe); // La barra \ se escribe \\
File f2 = new File(c:\\windows); // Un directorio
File f3 = new File(f2, notepad.exe); // Es igual a f1
La propiedad esttica File.separator nos proporciona el carcter separador del
sistema de archivos donde se est ejecutando nuestro programa. En el ejemplo
anterior, si queremos que nuestro programa funcione en Linux y en Windows, de-
beramos utilizar esta propiedad en cualquier referencia a una ruta del sistema de
cheros. Por ejemplo:
File f1 = new File(directori+File.separator+directori+
Otra utilidad que nos ofrece Java, es la ventana de dilogo del sistema de cheros
para seleccionar un chero o directorio concretos. La gestin de estas ventanas de
dilogo en Java se efecta mediante la clase FileDialog del paquete java.awt.
Una vez se ha creado el objeto File con xito, ya sea un directorio o un chero, el
mtodo delete permite la eliminacin de dicho directorio o chero del disco. El
siguiente ejemplo elimina el chero a.txt del disco, controlando si se ha efectua-
do con xito. En el caso del directorio, se procedera igual:
File c = new File(a.txt);
if (c.delete())
System.out.println(El chero ha sido borrado satisfactoriamente);
else
System.out.println(El chero no puede ser borrado por algn motivo);
4.15 Creacin de interfaces grcos de usuario utilizando
asistentes y herramientas del entorno integrado
En un contexto de interaccin persona-ordenador, la interfaz grfca de usuario
(IGU), se reere al conjunto de herramientas tecnolgicas que posibilitan, a travs
de un lenguaje visual, la interaccin con un sistema informtico.
La interfaz grfca de usuario (en ingls Graphical User Interface, GUI), a travs
de un conjunto de imgenes y objetos grcos (iconos y ventanas), es capaz de
representar la informacin y acciones disponibles en una aplicacin informtica.
Lectura y escritura de la informacin
51
La losofa de una GUI es facilitar la interaccin del usuario con el ordenador a
travs de acciones realizadas mediante la manipulacin directa de los elementos
en pantalla. Una GUI surge de la evolucin de la consola de los primeros sistemas
operativos, que representa la pieza fundamental de todo entorno grco. Como
ejemplo de GUI podemos citar el escritorio del sistema operativo Windows (Figura
4.11). En general, una GUI es el entorno visual que se muestra cuando ejecutamos
un programa informtico.
En Java hay diversas utilidades, paquetes de clases o herramientas, que nos permi-
ten implementar aplicaciones con entorno grco. Estas utilidades nos ofrecen la
gran ventaja con respecto a otros lenguajes de hacer nuestro programa indepen-
diente del GUI del sistema operativo.
Entre otras, podemos utilizar la herramienta AWT (Abstract Window Toolkit) y Swing,
aunque por cuestiones pedaggicas, la entrada para aprender a programar con in-
terfaces grcas es conveniente hacerla por AWT, y eso es lo que desarrollaremos
en los siguientes puntos.
4.16 Interfaces
En programacin, denimos interfaz a aquel entorno que permite establecer una
conexin, a distintos niveles, entre ordenadores y dispositivos de cualquier tipo
(Figura 4.12). El concepto de interfaz puede ser utilizado en diferentes contextos:

Interfaz como instrumento: desde esta perspectiva, se considera una interfaz
una extensin de nuestro cuerpo. Si tomamos el ejemplo de un ratn, podra de-
nirse como un instrumento que extiende las funciones de nuestra mano y las lleva
a la pantalla bajo la forma del cursor. Asimismo, la pantalla de un ordenador fun-
ciona como la interfaz que conecta el usuario con la informacin del disco duro.
Figura 4.11
Escritorio del sistema operativo
Windows como ejemplo de
interfaz grca de usuario.
Programacin I
52

Interfaz como superfcie: en ocasiones se considera que una interfaz funciona
como transmisora de informacin. La supercie de un objeto, por ejemplo, nos
puede proporcionar informacin acerca de su forma, textura, color, etc.

Interfaz como espacio: desde esta perspectiva, una interfaz es el entorno en
el que tiene lugar la interaccin con un programa, el espacio en el que se desa-
rrollan las instrucciones y los intercambios de informacin.
En AWT de Java, el primer concepto para la interfaz grca es la separacin entre
contenedor y componente. La ventana es un contenedor (Frame) y un botn es
un componente (Figura 4.13).
Recuerda
Las Interfaces Grfcas
de Usuario (GUI) son el
soporte principal de
comunicacin sobre
el que se apoyarn los
usuarios para manejar
nuestras aplicaciones.
Su diseo debe ser
intuitivo y estable.
Figura 4.13
Imagen de una ventana de AWT
con una muestra de todos los
componentes de este entorno.
Figura 4.12
Esquema grco en el que
se muestran distintos tipos
de interfaces fsicas para la
comunicacin dispositivo-
usuario.
Lectura y escritura de la informacin
53
Los contenedores de AWT:
Frame (classe java.awt.Frame)
Panel (classe java.awt.Panel)
Como hemos visto, Frame es una ventana y Panel es un contenedor que podemos
colocar dentro de una ventana con el simple propsito de agrupar componentes
dentro de l.
Para organizar los contenidos (contenedores y componentes) dentro de una ven-
tana se utilizan los layout managers. Pensemos que, a diferencia de otros entornos,
no podemos ubicar libremente un componente dentro de una ventana, pero por
el contrario, nuestro programa grco funcionar en cualquier sistema operativo.
Los principales layout managers de AWT:
java.awt.BorderLayout
java.awt.FlowLayout
java.awt.GridLayout
Un BorderLayout divide el contenedor en cinco reas, norte, este, oeste, sur y cen-
tro.
En un FlowLayout, los componentes se van aadiendo a la derecha del anterior y,
si no cabe en la anchura de la ventana, entonces se mostrar en la lnea siguiente.
Un GridLayout corresponde a una tabla con n las por m columnas. Cada compo-
nente que se aade se mostrar en la siguiente columna, empezando nueva la
cuando aquellas se hayan acabado.
Los componentes de AWT, bsicamente controles, son:
Etiqueta (classe java.awt.Label)
Botn (classe java.awt.Button)
Radiobutton / Checkbox (classe java.awt.Checkbox), agrupados o no en
un checkboxgroup (classe java.awt.CheckboxGroup)
Lista (classe java.awt.List)
Desplegable para seleccionar (classe java.awt.Choice)
Campos de texto (classe java.awt.TextField)
reas de texto (classe java.awt.TextArea)
Programacin I
54
4.17 Concepto de evento
El concepto de evento dene toda aquella accin iniciada por un usuario durante
la ejecucin de un programa. Cuando el programa detecta un evento, se crea un
objeto designado a realizar una accin relacionada con l. En Java, la clase dedi-
cada al control de los eventos est incluida dentro del paquete java.awt.Event (Fi-
gura 4.14). Existen muchos tipos de eventos para controlar los diferentes tipos de
interacciones entre el usuario y el programa en ejecucin. Veamos los principales:

Eventos de teclado (KeyEvent). Encargados de registrar acciones lanzadas a
partir del pulsado de una tecla.

Eventos de texto (TextEvent). Encargados de registrar acciones lanzadas a par-
tir del cambio de un texto en alguno de los campos de la aplicacin.

Eventos de ratn (MouseEvent). Encargados de registrar acciones lanzadas a
partir de acciones del ratn (clic, rollOver, rollOut...).

Eventos de foco (FocusEvent). Encargados de registrar acciones lanzadas a par-
tir del cambio de la posicin del foco del cursor en pantalla.

Eventos de accin (ActionEvent). Encargados de registrar acciones lanzadas a par-
tir de la activacin de elementos del programa, como, por ejemplo, pulsar un botn.
4.18 Creacin de controladores de eventos
Un controlador de eventos es un mtodo o funcin designado a lanzar una ac-
cin determinada cuando se registra un evento a lo largo de la ejecucin de un
programa. Los controladores de eventos se aplican directamente sobre los obje-
Figura 4.14
Esquema del proceso de
escucha y activacin de funcin
de un controlador de eventos.
Lectura y escritura de la informacin
55
tos denidos en nuestro cdigo. Al aplicar un controlador sobre un objeto, ste
recibe una funcin de escucha para dicho evento determinado.
Por este motivo los controladores de eventos reciben el nombre de listener. Por
ejemplo, si queremos detectar un clic de ratn en nuestra aplicacin, deberemos
recurrir a los eventos de ratn (MouseEvent) denidos en las clases del lenguaje. El
proceso es el siguiente:

Denicin de un objeto.

Asignacin de un controlador de evento (listener) sobre el objeto.

Denicin de la funcin designada a realizar por el evento.
4.19 Generacin de programas en entorno grco
La funcin de los entornos grfcos de usuario o GUI, es ofrecer un abanico de
herramientas para los programadores destinadas a disear aplicaciones de un
modo visual e intuitivo.
La generacin de programas a partir de entornos grcos nos permite programar
una aplicacin al tiempo que evaluamos visualmente como ser la experiencia
nal del usuario al que ir destinada.
Gracias al entorno visual que facilitan las GUI podremos crear fcilmente una apli-
cacin con slo arrastrar botones y otros componentes de las barras de opciones
del entorno. No obstante, muchas veces el programador lo hace sin recurrir a estos
entornos visuales, pues copia cdigo que ya tiene realizado.
El esquema general para realizar una aplicacin en Java AWT es:

Crear un proyecto Java normal, como se ha hecho hasta ahora, por ejemplo con
NetBeans. No crearemos la clase principal Main.java.

Aadir una nueva clase, por ejemplo Ventana pero tipo Otros / de interfaz gr-
co o AWT GUI y seleccionamos Formulario Frame. Hagamos que se cree tambin
el paquete con el nombre que deseemos.

Ya podemos ejecutar el programa. Si nos pide la clase principal, le decimos el
nombre que le hemos dado a nuestro Formulario Frame. NetBeans nos ha aa-
dido el cdigo necesario.

En este momento, podramos aadir los componentes que nos hicieran falta, y
los eventos sobre ellos. Podramos cambiar el layout, aadir otros contenedo-
res como paneles e incluso otras ventanas. En la parte prctica, haremos algn
ejemplo de ello.
Para saber ms
El dominio de las clases
de los controladores
de eventos es uno
de los pilares de
la programacin
de aplicaciones
informticas, ya que
nos permitir tener un
control preciso de todas
las acciones que tengan
lugar en un programa.
Programacin I
56
El cdigo generado por NetBeans es el siguiente:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* Ventana.java
*
* Created xxx
*/
package as;
/**
*
* @author yyy
*/
public class Ventana extends java.awt.Frame {
/** Creates new form Ventana */
public Ventana() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate=collapsed desc=Generated Code>
private void initComponents() {
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
pack();
}// </editor-fold>
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Lectura y escritura de la informacin
57
Podemos observar lo siguiente:

Nuestra clase principal Ventana hereda de Frame.

Se ha creado un mtodo main, por donde entrar a ejecutarse nuestra aplica-
cin. El cdigo generado (Runnable ...) es para que la ventana se ejecute en un
proceso diferente (Thread). Se ver en un captulo posterior. Debemos dejarlo as
y pensar que se crea un objeto de nuestra clase Ventana.

El constructor se ejecuta cuando creamos el objeto anterior y, por lo tanto, se
llama a initComponents().

El mtodo initComponents aade un listener (el controlador de eventos, el escu-
chador) al contenedor Ventana y caza el evento windowClosing que se produce
cuando cerramos la ventana. Al cazar el evento, llamamos a exitForm.

El mtodo exitForm llama System.exit(0); con lo que el programa naliza.
Pues esto que nos ha creado NetBeans contiene todos los aspectos a considerar
en una aplicacin grca. Se crea un objeto de tipo contenedor, se visualiza, se le
aade un listener y se cazan eventos y adems se ejecutan mtodos cuando se ha
cazado el evento. Y esto se puede ir repitiendo con otros contenedores y compo-
nentes. La estructura es la misma.
new Ventana().setVisible(true);
}
});
}
// Variables declaration - do not modify
// End of variables declaration
}
Programacin I
58
Resumen
El concepto de fujo es una referencia amplia del proceso por el que pasa toda la informacin que
interviene en nuestro programa, desde un punto de entrada hasta un punto de salida. Este proceso
gestiona el estado de dicha informacin en cada uno de los puntos de nuestro programa. En todos
los lenguajes de programacin existe un control de dicho proceso, sin embargo, slo en algunos de
ellos, como Java, se incluye una serie de herramientas destinadas a la gestin de los datos por parte
del programador.
Operar con cheros no es una tarea sencilla de controlar, sin embargo es de gran utilidad en cuanto
a tratamiento de la informacin se reere. El uso de archivos de apoyo en nuestros programas, tanto
para la entrada como para la salida de datos, es una herramienta indispensable que debe dominar
todo programador, sea cual sea el lenguaje en el que se especialice. El uso de cheros nos ofrece unas
ventajas inestimables tanto para organizar la informacin entrante en nuestro programa como para
gestionar la salida de datos o el reporte de errores con respecto a los usuarios nales de la aplicacin.
Gracias a los controladores de eventos podremos controlar de forma precisa qu acciones se desen-
cadenan en puntos concretos de nuestro cdigo, obteniendo as un acceso directo a posibles errores
que puedan surgir en l.
Las interfaces grcas de usuario (GUI) representan una herramienta muy verstil a la hora de disear
aplicaciones, ya que, gracias al entorno visual que ofrecen, permiten programar de un modo slido y,
al mismo tiempo, evaluar la experiencia nal y la usabilidad de la aplicacin diseada.
Ir a los contenidos prcticos del captulo (e-learning).
ndice
59
Introduccin al mdulo 1
Esquema de contenido 3
1. Identifcacin de los elementos de un programa informtico 5
1.1 Estructura y bloques fundamentales ........................................................................................................................................... 5
1.2 Utilizacin de los entornos integrados de desarrollo ........................................................................................................ 6
1.3 Proyectos y soluciones .......................................................................................................................................................................... 7
1.4 Datos: naturaleza y tipos ...................................................................................................................................................................... 8
1.4.1 Variables .............................................................................................................................................................................................. 9
1.4.2 Constantes ........................................................................................................................................................................................ 9
1.4.3 Literales ............................................................................................................................................................................................. 10
1.4.4 Tipos de datos .............................................................................................................................................................................. 11
1.5 Operadores ................................................................................................................................................................................................. 11
1.6 Expresiones ................................................................................................................................................................................................ 13
1.7 Conversiones de tipo ........................................................................................................................................................................... 14
1.8 Comentarios .............................................................................................................................................................................................. 15
2. Uso de estructuras de control 17
2.1 Estructuras de seleccin .................................................................................................................................................................... 17
2.1.1 Estructuras de seleccin en Java ...................................................................................................................................... 18
2.2 Estructuras de repeticin ................................................................................................................................................................... 19
2.2.1 Estructuras de repeticin en Java .................................................................................................................................... 20
2.3 Estructuras de salto ............................................................................................................................................................................... 23
2.4 Control de excepciones ..................................................................................................................................................................... 23
2.4.1 Excepciones en Java ................................................................................................................................................................. 24
2.5 Prueba y depuracin ............................................................................................................................................................................ 25
2.6 Documentacin ...................................................................................................................................................................................... 25
3. Aplicacin de las estructuras de almacenamiento 28
3.1 Estructuras .................................................................................................................................................................................................. 28
3.2 Creacin de arrays .................................................................................................................................................................................. 29
3.3 Inicializacin .............................................................................................................................................................................................. 31
3.4 Arrays multidimensionales ............................................................................................................................................................... 32
3.5 Cadenas de caracteres ........................................................................................................................................................................ 34
3.6 Listas ............................................................................................................................................................................................................... 35
3.7 Colecciones ................................................................................................................................................................................................ 36
ndice
Programacin I
Programacin I
60
ndice
4. Lectura y escritura de la informacin 39
4.1 Concepto de ujo .................................................................................................................................................................................. 40
4.2 Tipos de ujos: ujos de bytes y de caracteres .................................................................................................................... 40
4.4 Clases relativas a ujos ........................................................................................................................................................................ 41
4.3 Flujos predenidos ................................................................................................................................................................................ 41
4.5 Utilizacin de ujos ............................................................................................................................................................................... 42
4.6 Entrada desde teclado ........................................................................................................................................................................ 43
4.7 Salida a pantalla ....................................................................................................................................................................................... 43
4.8 Aplicaciones del almacenamiento de informacin en cheros ................................................................................ 44
4.9 Ficheros de datos. Registros ............................................................................................................................................................. 45
4.10 Apertura y cierre de cheros. Modos de acceso .............................................................................................................. 46
4.11 Escritura y lectura de informacin en cheros .................................................................................................................. 47
4.12 Almacenamiento de objetos en cheros. Persistencia. Serializacin .................................................................. 48
4.13 Utilizacin de los sistemas de cheros ................................................................................................................................... 48
4.14 Creacin y eliminacin de cheros y directorios ............................................................................................................. 49
4.15 Creacin de interfaces grcos de usuario utilizando asistentes y herramientas
del entorno integrado ....................................................................................................................................................................... 50
4.16 Interfaces .................................................................................................................................................................................................. 51
4.17 Concepto de evento .......................................................................................................................................................................... 54
4.18 Creacin de controladores de eventos .................................................................................................................................. 54
4.19 Generacin de programas en entorno grco ................................................................................................................. 55