Vous êtes sur la page 1sur 49

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Uso de estructuras de control.


Caso prctico
Los miembros de BK Programacin estn inmersos en el mundo de Java, ya conocen una buena parte
del lenguaje y ahora van a empezar a controlar el comportamiento de sus programas.
Mara pregunta a Juan: -Dime Juan, En Java tambin hay condicionales y bucles?
-Efectivamente Mara, como la gran mayora de los lenguajes de programacin, Java incorpora
estructuras que nos permiten tomar decisiones, repetir cdigo, etc. Cada estructura tiene sus ventajas
e inconvenientes y hay que saber dnde utilizar cada una de ellas. - Aclara Juan.

1 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

1.- Introduccin.
En unidades anteriores has podido aprender cuestiones bsicas sobre el lenguaje Java: definicin de variables,
tipos de datos, asignacin de valores, uso de literales, diferentes operadores que se pueden aplicar,
conversiones de tipos, insercin de comentarios, etc. Posteriormente, nos sumergimos de lleno en el mundo de
los objetos. Primero hemos conocido su filosofa, para ms tarde ir recorriendo los conceptos y tcnicas ms
importantes relacionadas con ellos: propiedades, mtodos, clases, declaracin y uso de objetos, libreras, etc.
Vale, parece ser que tenemos los elementos suficientes para comenzar a generar programas escritos en Java,
Seguro?

Reflexiona
Piensa en la siguiente pregunta: Cmo un programa puede determinar la aparicin en pantalla de un
mensaje de XITO o ERROR, segn los datos de entrada aportados por un usuario?

Como habrs deducido, con lo que sabemos hasta ahora no es suficiente. Existen
mltiples situaciones que nuestros programas deben representar y que requieren tomar
ciertas decisiones, ofrecer diferentes alternativas o llevar a cabo determinadas
operaciones repetitivamente para conseguir sus objetivos.
Si has programado alguna vez o tienes ciertos conocimientos bsicos sobre lenguajes
de programacin, sabes que la gran mayora de lenguajes poseen estructuras que
permiten a los programadores controlar el flujo de la informacin de sus programas.
Esto realmente es una ventaja para la persona que est aprendiendo un nuevo lenguaje,
o tienen previsto aprender ms de uno, ya que estas estructuras suelen ser comunes a
sintaxis). Es decir, si conocas sentencias de control
todos (con algunos cambios de
de flujo en otros lenguajes, lo que vamos a ver a lo largo de esta unidad te va a sonar
bastante.
Para alguien que no ha programado nunca, un ejemplo sencillo le va a permitir entender qu es eso de las
sentencias de control de flujo. Piensa en un fontanero (programador), principalmente trabaja con agua (datos) y se
encarga de hacer que sta fluya por donde l quiere (programa) a travs de un conjunto de tuberas, codos,
latiguillos, llaves de paso, etc. (sentencias de control de flujo). Pues esas estructuras de control de flujo son las
que estudiaremos, conoceremos su estructura, funcionamiento, cmo utilizarlas y dnde. A travs de ellas, al
construir nuestros programas podremos hacer que los datos (agua) fluyan por los caminos adecuados para
representar la realidad del problema y obtener un resultado adecuado.
Los tipos de estructuras de programacin que se emplean para el control del flujo de los datos son las
siguientes:
Secuencia: compuestas por 0, 1 o N sentencias que se ejecutan en el orden en que han sido escritas. Es
la estructura ms sencilla y sobre la que se construirn el resto de estructuras.
Seleccin: es un tipo de sentencia especial de decisin y de un conjunto de secuencias de instrucciones
asociadas a ella. Segn la evaluacin de la sentencia de decisin se generar un resultado (que suele ser
verdadero o falso) y en funcin de ste, se ejecutarn una secuencia de instrucciones u otra. Las
estructuras de seleccin podrn ser simples, compuestas y mltiples.
Iteracin: es un tipo de sentencia especial de decisin y una secuencia de instrucciones que pueden ser
repetidas segn el resultado de la evaluacin de la sentencia de decisin. Es decir, la secuencia de
instrucciones se ejecutar repetidamente si la sentencia de decisin arroja un valor correcto, en otro caso
la estructura de repeticin se detendr.
Adems de las sentencias tpicas de control de flujo, en esta unidad haremos una revisin de las sentencias de
salto, que aunque no son demasiado recomendables, es necesario conocerlas. Como nuestros programas
podrn generar errores y situaciones especiales, echaremos un vistazo al manejo de excepciones en Java.
Posteriormente, analizaremos la mejor manera de llevar a cabo las pruebas de nuestros programas y la
depuracin de los mismos. Y finalmente, aprenderemos a valorar y utilizar las herramientas de documentacin
de programas.

2 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Vamos entonces a ponernos el mono de trabajo y a coger nuestra caja de herramientas, a ver si no nos mojamos
mucho!

3 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

2.- Sentencias y bloques.

Caso prctico
Ada valora muy positivamente en un programador el orden y la
pulcritud. Organizar correctamente el cdigo fuente es de vital
importancia cuando se trabaja en entornos colaborativos, en los que
son varios los desarrolladores los que forman los equipos de
programacin. Por ello, incide en la necesidad de recordar a Juan y
Mara las nociones bsicas a la hora de escribir programas.

Este epgrafe lo utilizaremos para reafirmar cuestiones que son obvias y que en el transcurso de anteriores
unidades se han dado por sabidas. Aunque, a veces, es conveniente recordar. Lo haremos como un conjunto de
FAQ:
Cmo se escribe un programa sencillo? Si queremos que un programa sencillo realice instrucciones
o sentencias para obtener un determinado resultado, es necesario colocar stas una detrs de la otra,
exactamente en el orden en que deben ejecutarse.
Podran colocarse todas las sentencias una detrs de otra, separadas por puntos y comas en
una misma lnea? Claro que s, pero no es muy recomendable. Cada sentencia debe estar escrita en una
lnea, de esta manera tu cdigo ser mucho ms legible y la localizacin de errores en tus programas ser
ms sencilla y rpida. De hecho, cuando se utilizan herramientas de programacin, los errores suelen
asociarse a un nmero o nmeros de lnea.
Puede una misma sentencia ocupar varias lneas en el programa? S. Existen sentencias que, por
su tamao, pueden generar varias lneas. Pero siempre finalizarn con un punto y coma.
En Java todas las sentencias se terminan con punto y coma? Efectivamente. Si detrs de una
sentencia ha de venir otra, pondremos un punto y coma. Escribiendo la siguiente sentencia en una nueva
lnea. Pero en algunas ocasiones, sobre todo cuando utilizamos estructuras de control de flujo, detrs de la
cabecera de una estructura de este tipo no debe colocarse punto y coma. No te preocupes, lo entenders
cuando analicemos cada una de ellas.
Qu es la sentencia nula en Java? La sentencia nula es una lnea que no contiene ninguna instruccin
y en la que slo existe un punto y coma. Como su nombre indica, esta sentencia no hace nada.
Qu es un bloque de sentencias? Es un conjunto de sentencias que se encierra entre llaves y que se
ejecutara como si fuera una nica orden. Sirve para agrupar sentencias y para clarificar el cdigo. Los
bloques de sentencias son utilizados en Java en la prctica totalidad de estructuras de control de flujo,
clases, mtodos, etc. La siguiente tabla muestra dos formas de construir un bloque de sentencias.

Bloques de sentencias.
Bloque de sentencias 1

Bloque de sentencias

{
sentencia1;
sentencia2;
{sentencia1; sentencia2;...; sentencia N;}
;
sentenciaN;
}

En un bloque de sentencias, stas deben estar colocadas con un orden exacto? En ciertos casos

4 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

s, aunque si al final de su ejecucin se obtiene el mismo resultado, podran ocupar diferentes posiciones
en nuestro programa.

Debes conocer
Accede a los tres archivos que te ofrecemos a continuacin y compara su cdigo fuente. Vers que
los tres obtienen el mismo resultado, pero la organizacin de las sentencias que los componen es
diferente entre ellos.

Sentencias y bloques.
Sentencias, bloques y diferentes organizaciones

Sentencias en
orden secuencial.
(0.01 MB)

En este primer
archivo,
las
sentencias
estn
colocadas en orden
secuencial.

Sentencias y declaraciones de
variables. (0.01 MB)

En este segundo archivo, se


declaran al principio las variables
necesarias. En Java no es
imprescindible hacerlo as, pero s
que antes de utilizar cualquier
variable
sta
debe
estar
previamente declarada. Aunque la
declaracin de dicha variable puede
hacerse en cualquier lugar de
nuestro programa.

Sentencias, declaraciones y
organizacin del cdigo. (0.01 MB)

En este tercer archivo, podrs


apreciar que se ha organizado el
cdigo en las siguientes partes:
declaracin de variables, peticin de
datos de entrada, procesamiento de
dichos datos y obtencin de la salida.
Este tipo de organizacin est ms
estandarizada y hace que nuestros
programas ganen en legibilidad.

Construyas de una forma o de otra tus programas, debes tener en cuenta siempre en Java las
siguientes premisas:
Declara cada variable antes de utilizarla.
Inicializa con un valor cada variable la primera vez que la utilices.
No es recomendable usar variables no inicializadas en nuestros programas, pueden provocar
errores o resultados imprevistos.

Autoevaluacin
Indica qu afirmacin es correcta:
Para crear un bloque de sentencias, es necesario delimitar stas entre llaves. Este bloque
funcionar como si hubiramos colocado una nica orden.
La sentencia nula en Java, se puede representar con un punto y coma slo en una nica lnea.
Para finalizar en Java cualquier sentencia, es necesario hacerlo con un punto y coma.
Todas las afirmaciones son correctas.

5 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

3.- Estructuras de seleccin.

Caso prctico
Juan est desarrollando un mtodo en el que ha de comparar los
valores de las entradas de un usuario y una contrasea introducidas
desde el teclado, con los valores almacenados en una base de datos.
Para poder hacer dicha comparacin necesitar utilizar una estructura
condicional que le permita llevar a cabo esta operacin, incluso
necesitar que dicha estructura condicional sea capaz de decidir qu
hacer en funcin de si ambos valores son correctos o no.

Al principio de la unidad nos hacamos esta pregunta: Cmo un programa puede determinar la aparicin en
pantalla de un mensaje de XITO o ERROR, segn los datos de entrada aportados por un usuario? Esta y otras
preguntas se nos plantean en mltiples ocasiones cuando desarrollamos programas.
Cmo conseguimos que nuestros programas puedan tomar decisiones? Para comenzar, lo haremos a travs de
las estructuras de seleccin. Estas estructuras constan de una sentencia especial de decisin y de un conjunto de
secuencias de instrucciones.
El funcionamiento es sencillo, la sentencia de decisin ser evaluada y sta devolver un valor (verdadero o falso),
en funcin del valor devuelto se ejecutar una secuencia de instrucciones u otra. Por ejemplo, si el valor de una
variable es mayor o igual que 5 se imprime por pantalla la palabra APROBADO y, si es menor, se imprime
SUSPENSO. Para este ejemplo, la comprobacin del valor de la variable ser la sentencia especial de decisin.
La impresin de la palabra APROBADO ser una secuencia de instrucciones y la impresin de la palabra
SUSPENSO ser otra. Cada secuencia estar asociada a cada uno de los resultados que puede arrojar la
evaluacin de la sentencia especial de decisin.

Recomendacin
En el lenguaje de programacin C, verdadero o falso se representan mediante un literal entero. 0
representar Falso y 1 o cualquier otro valor, representar Verdadero. Como sabes, en Java las
variables de tipo
booleano slo podrn tomar los valores true (verdadero) o false (falso).
La evaluacin de las sentencias de decisin o expresiones que controlan las estructuras de seleccin,
devolvern siempre un valor verdadero o falso.

Las estructuras de seleccin se dividen en:


1. Estructuras de seleccin simples o estructura if .
2. Estructuras de seleccin compuestas o estructura if-else .
3. Estructuras de seleccin basadas en el operador condicional.
4. Estructuras de seleccin mltiples o estructura switch .
A continuacin, detallaremos las caractersticas y funcionamiento de cada una de ellas.
Es importante que a travs de los ejemplos que vamos a ver, puedas determinar en qu
circunstancias utilizar cada una de estas estructuras. Aunque un mismo problema puede

6 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

ser resuelto con diferentes estructuras e incluso, con diferentes combinaciones de


stas.

7 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

3.1.- Estructura if / if-else.


La estructura if es una estructura de seleccin o estructura condicional, en la que se evala una expresin lgica o
sentencia de decisin y en funcin del resultado, se ejecuta una sentencia o un bloque de stas.
La estructura if puede presentarse de las siguientes formas:

Estructura if
Estructura if simple.

Sintaxis:
Sintaxis:

if (expresin-lgica)
{
sentencia1;

if (expresin-lgica)

sentencia2;

sentencia1;

;
sentenciaN;
}

Funcionamiento:
Si la evaluacin de la expresin-lgica ofrece un resultado verdadero, se ejecuta la sentencia1 o bien el bloque
de sentencias asociado. Si el resultado de dicha evaluacin es falso, no se ejecutar ninguna instruccin
asociada a la estructura condicional.
Haciendo una interpretacin cercana al pseudocdigo tendramos que si se cumple la condicin (expresin
lgica), se ejecutar un conjunto de instrucciones y si no se cumple, se ejecutar otro conjunto de instrucciones.
Hay que tener en cuenta que la clusula else de la sentencia if no es
obligatoria. En algunos casos no necesitaremos utilizarla, pero s se
recomienda cuando es necesario llevar a cabo alguna accin en el
caso de que la expresin lgica no se cumpla.
En aquellos casos en los que no existe clusula else, si la expresin
lgica es falsa, simplemente se continuarn ejecutando las siguientes
sentencias que aparezcan bajo la estructura condicional if .
Los condicionales if e if-else pueden anidarse, de tal forma que dentro
de un bloque de sentencias puede incluirse otro if o if-else. El nivel de
anidamiento queda a criterio del programador, pero si ste es
demasiado profundo podra provocar problemas de eficiencia y legibilidad en el cdigo. En otras ocasiones, un
nivel de anidamiento excesivo puede denotar la necesidad de utilizacin de otras estructuras de seleccin ms
adecuadas.
Cuando se utiliza anidamiento de este tipo de estructuras, es necesario poner especial atencin en saber a qu if
est asociada una clusula else. Normalmente, unelseestar asociado con el if inmediatamente superior o ms
cercano que exista dentro del mismo bloque y que no se encuentre ya asociado a otro else.

8 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Debes conocer
Para completar la informacin que debes saber sobre las estructuras if e if-else, accede al siguiente
enlace. En l podrs analizar el cdigo de un programa que realiza el clculo de la nota de un examen
de tipo test. Adems de calcular el valor de la nota, se ofrece como salida la calificacin no numrica
de dicho examen. Para obtenerla, se combinarn las diferentes estructuras condicionales aprendidas
hasta ahora.
Presta especial atencin a los comentarios incorporados en el cdigo fuente, as como a la forma de
combinar las estructuras condicionales y a las expresiones lgicas utilizadas en ellas.
Uso la estructura condicional if e if-else . (0.01 MB)

Autoevaluacin
Cundo se mostrar por pantalla el mensaje incluido en el siguiente fragmento de cdigo?
If (numero % 2 == 0);
System.out.print("El nmero es par /n");

Nunca.
Siempre.
Cuando el resto de la divisin entre 2 del contenido de la variable numero , sea cero.

9 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

3.2.- Estructura switch.


Qu podemos hacer cuando nuestro programa debe elegir entre ms de dos alternativas?, una posible solucin
podra ser emplear estructuras if anidadas, aunque no siempre esta solucin es la ms eficiente. Cuando estamos
ante estas situaciones podemos utilizar la estructura de seleccin mltiple switch. En la siguiente tabla se muestra
tanto la sintaxis, como el funcionamiento de esta estructura.

Estructura switch.
Estructura switch
Sintaxis:
switch (expresion) {
case valor1:
sentencia1_1;
sentencia1_2;

Condiciones:

.
break;
.
.
case valorN:
sentenciaN_1;
sentenciaN_2;
.

Donde expresin debe ser del tipo char ,


byte , short o int , y las constantes de cada
case deben ser de este tipo o de un tipo
compatible.
La expresin debe ir entre parntesis.
Cada case llevar asociado un valor y se
finalizar con dos puntos.
El bloque de sentencias asociado a la
clusula default puede finalizar con una
sentencia de ruptura break o no.

break;
default:
sentencias-default;
}

Funcionamiento:
Las diferentes alternativas de esta estructura estarn precedidas de la clusula case que se ejecutar
cuando el valor asociado al case coincida con el valor obtenido al evaluar la expresin del switch.
En las clusulas case, no pueden indicarse expresiones condicionales, rangos de valores o listas de
valores. (otros lenguajes de programacin s lo permiten). Habr que asociar una clusula case a cada
uno de los valores que deban ser tenidos en cuenta.
La clusula default ser utilizada para indicar un caso por defecto, las sentencias asociadas a la
clusula default se ejecutarn si ninguno de los valores indicados en las clusulas case coincide con el
resultado de la evaluacin de la expresin de la estructura switch.
La clusula default puede no existir, y por tanto, si ningn case ha sido activado finalizara el switch .
Cada clusula case puede llevar asociadas una o varias sentencias, sin necesidad de delimitar dichos
bloques por medio de llaves.
En el momento en el que el resultado de la evaluacin de la expresin coincide con alguno de los
valores asociados a las clusulas case, se ejecutarn todas las instrucciones asociadas hasta la
aparicin de una sentencia break de ruptura. (la sentencia break se analizar en epgrafes posteriores)
En resumen, se ha de comparar el valor de una expresin con un conjunto de constantes, si el valor de la
expresin coincide con algn valor de dichas constantes, se ejecutarn los bloques de instrucciones asociados a
cada una de ellas. Si no existiese coincidencia, se ejecutaran una serie de instrucciones por defecto.

10 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Debes conocer
Accede al siguiente fragmento de cdigo en el que se resuelve el clculo de la nota de un examen de
tipo test, utilizando la estructura switch.
Uso la estructura condicional mltiple switch . (0.01 MB)

11 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

4.- Estructuras de repeticin.

Caso prctico
Juan ya tiene claro cmo realizar la comprobacin de los valores de
usuario y contrasea introducidos por teclado, pero le surge una duda:
Cmo podra controlar el nmero de veces que el usuario ha
introducido mal la contrasea?
Ada le indica que podra utilizar una estructura de repeticin que
solicitase al usuario la introduccin de la contrasea hasta un mximo
de tres veces. Aunque comenta que puede haber mltiples soluciones
y todas vlidas, lo importante es conocer las herramientas que
podemos emplear y saber cundo aplicarlas.

Nuestros programas ya son capaces de controlar su ejecucin teniendo en cuenta


determinadas condiciones, pero an hemos de aprender un conjunto de estructuras
que nos permita repetir una secuencia de instrucciones determinada. La funcin de
estas estructuras es repetir la ejecucin de una serie de instrucciones teniendo en
cuenta una condicin.
A este tipo de estructuras se las denomina estructuras de repeticin, estructuras
repetitivas, bucles o estructuras
iterativas. En Java existen cuatro clases de
bucles:
Bucle for (repite para)
Bucle for/in (repite para cada)
Bucle While (repite mientras)
Bucle Do While (repite hasta)
Los bucles for y for/in se consideran bucles controlados por contador. Por el contrario, los bucles while y
do...while se consideran bucles controlados por sucesos.
La utilizacin de unos bucles u otros para solucionar un problema depender en gran medida de las siguientes
preguntas:
Sabemos
a priori cuntas veces necesitamos repetir un conjunto de instrucciones?
Sabemos si hemos de repetir un conjunto de instrucciones si una condicin satisface un conjunto de
valores?
Sabemos hasta cundo debemos estar repitiendo un conjunto de instrucciones?
Sabemos si hemos de estar repitiendo un conjunto de instrucciones mientras se cumpla una condicin?

Recomendacin
Estudia cada tipo de estructura repetitiva, conoce su funcionamiento y podrs llegar a la conclusin de
que algunos de estos bucles son equivalentes entre s. Un mismo problema, podr ser resuelto
empleando diferentes tipos de bucles y obtener los mismos resultados.

Estas y otras preguntas tendrn su respuesta en cuanto analicemos cada una de estructuras repetitivas en detalle.

12 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

4.1.- Estructura for.


Hemos indicado anteriormente que el bucle for es un bucle controlado por
contador. Este tipo de bucle tiene las siguientes caractersticas:
Se ejecuta un nmero determinado de veces.
Utiliza una variable contadora que controla las iteraciones del bucle.
En general, existen tres operaciones que se llevan a cabo en este tipo de
bucles:
Se inicializa la variable contadora.
Se evala el valor de la variable contador, por medio de una
comparacin de su valor con el nmero de iteraciones especificado.
Se modifica o actualiza el valor del contador a travs de incrementos o
decrementos de ste, en cada una de las iteraciones.

Recomendacin
La inicializacin de la variable contadora debe realizase correctamente para garantizar que el bucle se
lleve a cabo, al menos, la primera repeticin de su cdigo interno.
La condicin de terminacin del bucle debe variar en el interior del mismo, de no ser as, podemos
caer en la creacin de un bucle infinito. Cuestin que se debe evitar por todos los medios.
Es necesario estudiar el nmero de veces que se repite el bucle, pues debe ajustarse al nmero de
veces estipulado.

En la siguiente tabla, podemos ver la especificacin de la estructura for:

Estructura repetitiva for.


Estructura repetitiva for
Sintaxis:
for (inicializacin; condicin; iteracin)
sentencia;

(estructura for con una nica sentencia)


Sintaxis:
for (inicializacin; condicin; iteracin)
{
sentencia1;
sentencia2;
...
sentenciaN;
}

(estructura for con un bloque de sentencias)

13 de 49

Donde inicializacin es una


expresin en la que se
inicializa una variable de
control,
que
ser
la
encargada de controlar el
final del bucle.
Donde condicin es una
expresin que evaluar la
variable de control. Mientras
la condicin sea falsa, el
cuerpo del bucle estar
repitindose. Cuando la
condicin
se
cumpla,
terminar la ejecucin del
bucle.
Donde iteracin indica la
manera en la que la variable
de control va cambiando en
cada iteracin del bucle.
Podr
ser
mediante
incremento o decremento, y
no solo de uno en uno.

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Debes conocer
Como venimos haciendo para el resto de estructuras, accede al siguiente archivo Java y podrs
analizar un ejemplo de utilizacin del bucle for para la impresin por pantalla de la tabla de multiplicar
del siete. Lee atentamente los comentarios incluidos en el cdigo, pues aclaran algunas cuestiones
interesantes sobre este bucle.
Uso la estructura repetitiva for . (0.01 MB)

Autoevaluacin
Cuando construimos la cabecera de un bucle for, podemos prescindir de alguno de los tres elementos
que la forman e incluso, podemos utilizar ms de una variable contadora separando stas por comas.
Pero, Qu conseguiremos si construimos un bucle de la siguiente forma?
for (;;){ //instrucciones }

Un bucle infinito.
Nada, dar un error.
Un bucle que se ejecutara una nica vez.

14 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

4.2.- Estructura for/in.


Junto a la estructura for, for/in tambin se considera un bucle
controlado por contador. Este bucle es una mejora incorporada en la
versin 5.0. de Java.
Este tipo de bucles permite realizar recorridos sobre arrays y
colecciones de objetos. Los arrays son colecciones de variables que
tienen el mismo tipo y se referencian por un nombre comn. As
mismo, las colecciones de objetos son objetos que se dice son
iterables, o que se puede iterar sobre ellos.
Este bucle es nombrado tambin como bucle for mejorado, o bucle foreach. En otros lenguajes de programacin
existen bucles muy parecidos a este.
La sintaxis es la siguiente:

for (declaracin: expresin) {


sentencia1;

sentenciaN;
}

Donde expresin es un array o una coleccin de objetos.


Donde declaracin es la declaracin de una variable cuyo tipo sea compatible con expresin.
Normalmente, ser el tipo y el nombre de la variable a declarar.
El funcionamiento consiste en que para cada elemento de la expresin, guarda el elemento en la variable
declarada y realiza las instrucciones contenidas en el bucle. Despus, en cada una de las iteraciones del bucle
tendremos en la variable declarada el elemento actual de la expresin. Por tanto, para el caso de los arrays y de
las colecciones de objetos, se recorrer desde el primer elemento que los forma hasta elltimo.
Observa el contenido del cdigo representado en la siguiente imagen, puedes apreciar cmo se construye un
bucle de este tipo y su utilizacin sobre un array.
Los bucles for/in permitirn al programador despreocuparse del nmero de veces que se ha de iterar, pero no
sabremos en qu iteracin nos encontramos salvo que se aada artificialmente alguna variable contadora que nos
pueda ofrecer esta informacin.

15 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

4.3.- Estructura while.


El bucle while es la primera de las estructuras de repeticin controladas por sucesos que vamos a estudiar. La
utilizacin de este bucle responde al planteamiento de la siguiente pregunta: Qu podemos hacer si lo nico que
sabemos es que se han de repetir un conjunto de instrucciones mientras se cumpla una determinada condicin?
La caracterstica fundamental de este tipo de estructura repetitiva estriba en ser til en aquellos casos en los que
las instrucciones que forman el cuerpo del bucle podra ser necesario ejecutarlas o no. Es decir, en el bucle while
siempre se evaluar la condicin que lo controla, y si dicha condicin es cierta, el cuerpo del bucle se ejecutar
una vez, y se seguir ejecutando mientras la condicin sea cierta. Pero si en la evaluacin inicial de la condicin
sta no es verdadera, el cuerpo del bucle no se ejecutar.
Es imprescindible que en el interior del bucle while se realice alguna accin que modifique la condicin que
controla la ejecucin del mismo, en caso contrario estaramos ante un bucle infinito.

Estructura repetitiva while.


Estructura repetitiva while
Sintaxis:
Sintaxis:

while (condicin) {
sentencia1;
while (condicin)

sentencia;
sentenciaN;
}

Funcionamiento:
Mientras la condicin sea cierta, el bucle se repetir, ejecutando la/s instruccin/es de su interior. En el
momento en el que la condicin no se cumpla, el control del flujo del programa pasar a la siguiente instruccin
que exista justo detrs del bucle while.
La condicin se evaluar siempre al principio, y podr darse el caso de que las instrucciones contenidas en l
no lleguen a ejecutarse nunca si no se satisface la condicin de partida.
En la siguiente imagen puedes ver un diagrama de flujo que representa el funcionamiento de este tipo de
estructura repetitiva.

Debes conocer
Accede al siguiente archivo java y podrs analizar un ejemplo de utilizacin del bucle while para la
impresin por pantalla de la tabla de multiplicar del siete. Lee atentamente los comentarios incluidos
en el cdigo, pues aclaran algunas cuestiones interesantes sobre este bucle. Como podrs
comprobar, el resultado de este bucle es totalmente equivalente al obtenido utilizando el bucle for.

16 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Uso la estructura repetitiva while. (0.01 MB)

Autoevaluacin
Utilizando el siguiente fragmento de cdigo estamos construyendo un bucle infinito. Verdadero o
Falso?
while (true) System.out.println("Imprimiendo desde dentro del bucle \n");

Verdadero.

17 de 49

Falso.

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

4.4.- Estructura do-while.


La segunda de las estructuras repetitivas controladas por sucesos es do-while. En este caso, la pregunta que
nos planteamos es la siguiente: Qu podemos hacer si lo nico que sabemos es que se han de ejecutar, al
menos una vez, un conjunto de instrucciones y seguir repitindose hasta que se cumpla una determinada
condicin?
La caracterstica fundamental de este tipo de estructura repetitiva estriba en ser til en aquellos casos en los que
las instrucciones que forman el cuerpo del bucle necesitan ser ejecutadas, al menos, una vez y repetir su
ejecucin hasta que la condicin sea verdadera. Por tanto, en esta estructura repetitiva siempre se ejecuta el
cuerpo del bucle una primera vez.
Es imprescindible que en el interior del bucle se realice alguna accin que modifique la condicin que controla la
ejecucin del mismo, en caso contrario estaramos ante un bucle infinito.

Estructura repetitiva do-while.


Estructura repetitiva do-while
Sintaxis:
Sintaxis:

do
{
do

sentencia1;

sentencia;

while (condicin);

sentenciaN;
}
while (condicin);

Funcionamiento:
El cuerpo del bucle se ejecuta la primera vez, a continuacin se evaluar la condicin y, si sta es falsa, el
cuerpo el bucle volver a repetirse. El bucle finalizar cuando la evaluacin de la condicin sea verdadera. En
ese momento el control del flujo del programa pasar a la siguiente instruccin que exista justo detrs del bucle
do-while. La condicin se evaluar siempre despus de una primera ejecucin del cuerpo del bucle, por lo que
no se dar el caso de que las instrucciones contenidas en l no lleguen a ejecutarse nunca.
En la siguiente imagen puedes ver un diagrama de flujo que representa el funcionamiento de este tipo de
estructura repetitiva.

Debes conocer
Accede al siguiente archivo java y podrs analizar un ejemplo de utilizacin del bucle do-while para la
impresin por pantalla de la tabla de multiplicar del siete. Lee atentamente los comentarios incluidos
en el cdigo, pues aclaran algunas cuestiones interesantes sobre este bucle. Como podrs

18 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

comprobar, el resultado de este bucle es totalmente equivalente al obtenido utilizando el bucle for y el
bucle while.
Uso la estructura repetitiva do-while . (0.01 MB)

19 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

5.- Estructuras de salto.

Caso prctico
Juan recuerda que algunos lenguajes de programacin permitan
realizar saltos a lo largo de la ejecucin de los programas y conoce dos
sentencias que an se siguen utilizando para ello.
Ada, mientras toma un libro sobre Java de la estantera del despacho,
le aconseja: -las instrucciones de salto a veces han sido mal valoradas
por la comunidad de programadores, pero en Java algunas de ellas son
totalmente necesarias. Mira, en este libro se habla del uso de las
sentencias break, continue y return.

Saltar o no saltar? he ah la cuestin. En la gran mayora de libros de programacin y publicaciones de Internet,


siempre se nos recomienda que prescindamos de sentencias de salto incondicional, es ms, se desaconseja su
uso por provocar una mala estructuracin del cdigo y un incremento en la dificultad para el mantenimiento de los
mismos. Pero Java incorpora ciertas sentencias o estructuras de salto que es necesario conocer y que pueden
sernos tiles en algunas partes de nuestros programas.
Estas estructuras de salto corresponden a las sentencias break, continue, las etiquetas de salto y la sentencia
return. Pasamos ahora a analizar su sintaxis y funcionamiento.

20 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

5.1.- Sentencias break y continue.


Se trata de dos instrucciones que permiten modificar el
comportamiento de otras estructuras o sentencias de control,
simplemente por el hecho de estar incluidas en algn punto de su
secuencia de instrucciones.
La sentencia break incidir sobre las estructuras de control switch,
while, for y do-while del siguiente modo:
Si aparece una sentencia break dentro de la secuencia de
instrucciones de cualquiera de las estructuras mencionadas anteriormente, dicha estructura terminar
inmediatamente.
Si aparece una sentencia break dentro de un bucle anidado slo finalizar la sentencia de iteracin ms
interna, el resto se ejecuta de forma normal.
Es decir, que break sirve para romper el flujo de control de un bucle, aunque no se haya cumplido la condicin del
bucle. Si colocamos un break dentro del cdigo de un bucle, cuando se alcance el break, automticamente se
saldr del bucle pasando a ejecutarse la siguiente instruccin inmediatamente despus de l.
En la siguiente imagen, puedes apreciar cmo se utilizara la sentencia
break dentro de un bucle for.
La sentencia continue incidir sobre las sentencias o estructuras de
control while, for y do-while del siguiente modo:
Si aparece una sentencia continue dentro de la secuencia de
instrucciones de cualquiera de las sentencias anteriormente
indicadas, dicha sentencia dar por terminada la iteracin actual
y se ejecuta una nueva iteracin, evaluando de nuevo la expresin condicional del bucle.
Si aparece en el interior de un bucle anidado solo afectar a la sentencia de iteracin ms interna, el resto
se ejecutara de forma normal.
Es decir, la sentencia continue forzar a que se ejecute la siguiente iteracin del bucle, sin tener en cuenta las
instrucciones que pudiera haber despus del continue, y hasta el final del cdigo del bucle.
En la siguiente imagen, puedes apreciar cmo se utiliza la sentencia continue en un bucle for para imprimir por
pantalla slo los nmeros pares.
Para clarificar algo ms el funcionamiento de ambas sentencias de salto, te ofrecemos a continuacin un diagrama
representativo.

Autoevaluacin
La instruccin break puede utilizarse en las estructuras de control switch, while, for y do-while, no siendo
imprescindible utilizarla en la clusula default de la estructura switch. Verdadero o Falso?

21 de 49

16/12/2015 1

PROG04_Contenidos

Verdadero.

22 de 49

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Falso.

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

5.2.- Etiquetas.
Ya lo indicbamos al comienzo del epgrafe dedicado a las estructuras de salto, los saltos
incondicionales y en especial, saltos a una etiqueta son totalmente desaconsejables. No
obstante, Java permite asociar etiquetas cuando se va a realizar un salto. De este modo
puede conseguirse algo ms de legibilidad en el cdigo.
Las estructuras de salto break y continue, pueden tener asociadas etiquetas. Es a lo que
se llama un break etiquetado o un continue etiquetado. Pero slo se recomienda su uso
cuando se hace necesario salir de bucles anidados hacia diferentes niveles.
Y cmo se crea un salto a una etiqueta? En primer lugar, crearemos la etiqueta mediante
un identificador seguido de dos puntos (:). A continuacin, se escriben las sentencias
Java asociadas a dicha etiqueta encerradas entre llaves. Por as decirlo, la creacin de
una etiqueta es como fijar un punto de salto en el programa para poder saltar a l desde
otro lugar de dicho programa.
Cmo se lleva a cabo el salto? Es sencillo, en el lugar donde vayamos a colocar la sentencia break o continue,
aadiremos detrs el identificador de la etiqueta. Con ello, conseguiremos que el salto se realice a un lugar
determinado. La sintaxis ser break <etiqueta>.
Quiz a aquellos y aquellas que habis programado en HTML os
suene esta herramienta, ya que tiene cierta similitud con las anclas que
pueden crearse en el interior de una pgina web, a las que nos llevar
el hiperenlace o link que hayamos asociado.
Tambin para aquellos y aquellas que habis creado alguna vez
archivos por lotes o archivos batch bajo MSDOS es probable que
tambin os resulte familiar el uso de etiquetas, pues la sentencia
GOTO que se utilizaba en este tipo de archivos, haca saltar el flujo del programa al lugar donde se ubicaba la
etiqueta que se indicara en dicha sentencia.
A continuacin, te ofrecemos un ejemplo de declaracin y uso de etiquetas en un bucle. Como podrs apreciar,
las sentencias asociadas a cada etiqueta estn encerradas entre llaves para delimitar as su mbito de accin.

23 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

5.3.- Sentencia Return.


Ya sabemos como modificar la ejecucin de bucles y estructuras condicionales mltiples, pero
Podramos modificar la ejecucin de un mtodo? Es posible hacer que stos detengan su
ejecucin antes de que finalice el cdigo asociado a ellos? S es posible, a travs de la sentencia
return podremos conseguirlo.
La sentencia return puede utilizarse de dos formas:
Para terminar la ejecucin del mtodo donde est escrita, con lo que transferir el control al punto desde el
que se hizo la llamada al mtodo, continuando el programa por la sentencia inmediatamente posterior.
Para devolver o retornar un valor, siempre que junto a return se incluya una expresin de un tipo
determinado. Por tanto, en el lugar donde se invoc al mtodo se obtendr el valor resultante de la
evaluacin de la expresin que acompaaba al mtodo.
En general, una sentencia return suele aparecer al final de un mtodo, de este modo el mtodo tendr una entrada
y una salida. Tambin es posible utilizar una sentencia return en cualquier punto de un mtodo, con lo que ste
finalizar en el lugar donde se encuentre dicho return. No ser recomendable incluir ms de un return en un
mtodo y por regla general, deber ir al final del mtodo, como hemos comentado.
El valor de retorno es opcional, si lo hubiera debera de ser del mismo tipo o de un tipo compatible al tipo del valor
de retorno definido en la cabecera del mtodo, pudiendo ser desde un entero a un objeto creado por nosotros. Si
no lo tuviera, el tipo de retorno sera void, y return servira para salir del mtodo sin necesidad de llegar a ejecutar
todas las instrucciones que se encuentran despus del return.

Para saber ms
En el siguiente archivo java encontrars el cdigo de un programa que obtiene la suma de dos
nmeros, empleando para ello un mtodo sencillo que retorna el valor de la suma de los nmeros que
se le han pasado como parmetros. Presta atencin a los comentarios y fjate en las conversiones a
entero de la entrada de los operandos por consola.
Uso de return en mtodos. (0.01 MB)

Autoevaluacin
Qu afirmacin es correcta?
Con return, se puede finalizar la ejecucin del mtodo en el que se encuentre.
Con return, siempre se retornar un valor del mismo tipo o de un tipo compatible al definido en
la cabecera del mtodo.
Con return, puede retornarse un valor de un determinado tipo y suele hacerse al final del
mtodo. Adems, el resto de respuestas tambin son correctas.

24 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

6.- Excepciones.

Caso prctico
Para que las aplicaciones desarrolladas por BK Programacin
mantengan una valoracin positiva a lo largo del tiempo por parte
de sus clientes, es necesario que stas no se vean
comprometidas durante su ejecucin. Hay innumerables
ocasiones en las que programas que aparentemente son
formidables (por su interfaz, facilidad de uso, etc.) comienzan a
generar errores en tiempo de ejecucin que hacen que el
usuario desconfe de ellos da a da.
Para evitar estas situaciones, Ada va a fomentar en Mara y Juan
la cultura de la deteccin, control y solucin de errores a travs de las poderosas herramientas que
Java les ofrece.

A lo largo de nuestro aprendizaje de Java nos hemos topado en alguna


ocasin con Errores, pero stos suelen ser los que nos ha indicado el
compilador. Un punto y coma por aqu, un nombre de variable incorrecto por
all, pueden hacer que nuestro compilador nos avise de estos descuidos.
Cuando los vemos, se corrigen y obtenemos nuestra clase compilada
correctamente.
Pero, Slo existen este tipo de Errores? Podran existir Errores no
sintcticos en nuestros programas? Est claro que s, un programa
perfectamente compilado en el que no existen Errores de sintaxis, puede
generar otros tipos de Errores que quiz aparezcan en tiempo de ejecucin. A estos Errores se les conoce como
excepciones.
Aprenderemos a gestionar de manera adecuada estas excepciones y tendremos la oportunidad de utilizar el
potente sistema de manejo de Errores que Java incorpora. La potencia de este sistema de manejo de Errores
radica en:
1. Que el cdigo que se encarga de manejar los Errores, es perfectamente identificable en los programas.
Este cdigo puede estar separado del cdigo que maneja la aplicacin.
2. Que Java tiene una gran cantidad de Errores estndar asociados a multitud de fallos comunes, como por
ejemplo divisiones por cero, fallos de entrada de datos, etc. Al tener tantas excepciones localizadas,
podemos gestionar de manera especfica cada uno de los Errores que se produzcan.
En Java se pueden preparar los fragmentos de cdigo que pueden provocar Errores de ejecucin para que si se
produce una excepcin, el flujo del programa es lanzado (throw) hacia ciertas zonas o rutinas que han sido
creadas previamente por el programador y cuya finalidad ser el tratamiento efectivo de dichas excepciones. Si no
se captura la excepcin, el programa se detendr con toda probabilidad.
En Java, las excepciones estn representadas por clases. El paquete java.lang.Exceptiony sus subpaquetes
contienen todos los tipos de excepciones. Todas las excepciones derivarn de la clase Throwable, existiendo
clases ms especficas. Por debajo de la clase Throwable existen las clases Error y Exception. Errores una clase
que se encargar de los Errores que se produzcan en la mquina virtual, no en nuestros programas. Y la clase
Exception ser la que a nosotros nos interese conocer, pues gestiona los Errores provocados en los programas.
Java lanzar una excepcin en respuesta a una situacin poco usual. Cuando se produce un Error se genera un
objeto asociado a esa excepcin. Este objeto es de la clase Exception o de alguna de sus herederas. Este objeto
se pasa al cdigo que se ha definido para manejar la excepcin. Dicho cdigo puede manipular las propiedades
del objeto Exception.
El programador tambin puede lanzar sus propias excepciones. Las excepciones en Java sern objetos de
clases derivadas de la clase base Exception. Existe toda una jerarqua de clases derivada de la clase base
Exception. Estas clases derivadas se ubican en dos grupos principales:

25 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Las excepciones en tiempo de ejecucin, que ocurren cuando el programador no ha tenido cuidado al
escribir su cdigo.
Las excepciones que indican que ha sucedido algo inesperado o fuera de control.
En la siguiente imagen te ofrecemos una aproximacin a la jerarqua de las excepciones en Java.

26 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

6.1.- Capturar una excepcin.


Para poder capturar excepciones, emplearemos la estructura de captura de
excepciones try-catch-finally.
Bsicamente, para capturar una excepcin lo que haremos ser declarar
bloques de cdigo donde es posible que ocurra una excepcin. Esto lo
haremos mediante un bloque try (intentar). Si ocurre una excepcin dentro
de estos bloques, se lanza una excepcin. Estas excepciones lanzadas se
pueden capturar por medio de bloques catch. Ser dentro de este tipo de
bloques donde se har el manejo de las excepciones.
Su sintaxis es:

try {
cdigo que puede generar excepciones;
} catch (Tipo_excepcion_1 objeto_excepcion) {
Manejo de excepcin de Tipo_excepcion_1;
} catch (Tipo_excepcion_2 objeto_excepcion) {
Manejo de excepcin de Tipo_excepcion_2;
}
...
finally {
instrucciones que se ejecutan siempre
}

En esta estructura, la parte catch puede repetirse tantas veces como excepciones diferentes se deseen capturar.
La parte finally es opcional y, si aparece, solo podr hacerlo una sola vez.
Cada catch maneja un tipo de excepcin. Cuando se produce una excepcin, se busca el catch que posea el
manejador de excepcin adecuado, ser el que utilice el mismo tipo de excepcin que se ha producido. Esto
puede causar problemas si no se tiene cuidado, ya que la clase Exception es la superclase de todas las dems.
Por lo que si se produjo, por ejemplo, una excepcin de tipo AritmethicException y el primer catch captura el tipo
genrico Exception, ser ese catch el que se ejecute y no los dems.
Por eso el ltimo catch debe ser el que capture excepciones genricas y los primeros deben ser los ms
especficos. Lgicamente si vamos a tratar a todas las excepciones (sean del tipo que sean) igual, entonces basta
con un solo catch que capture objetos Exception.

Ejercicio resuelto
Realiza un programa en Java en el que se solicite al usuario la introduccin de un nmero
por teclado comprendido entre el 0 y el 100. Utilizando manejo de excepciones, debes
controlar la entrada de dicho nmero y volver a solicitarlo en caso de que sta sea
incorrecta.

Debes conocer
Si deseas conocer en mayor detalle el manejo de excepciones, te aconsejamos el siguiente enlace en
el que podrs encontrar un vdeo ilustrativo sobre su creacin y manejo.

27 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Excepciones en Java.

Resumen textual alternativo

Autoevaluacin
Si en un programa no capturamos una excepcin, ser la mquina virtual de Java la que lo
har por nosotros, pero inmediatamente detendr la ejecucin del programa y mostrar una
traza y un mensaje de error. Siendo una traza, la forma de localizar dnde se han producido
errores. Verdadero o Falso?
Verdadero.

28 de 49

Falso.

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

6.2.- El manejo de excepciones.


Como hemos comentado, siempre debemos controlar las excepciones que se puedan producir o de lo contrario
nuestro software quedar expuesto a fallos. Las excepciones pueden tratarse de dos formas:
Interrupcin. En este caso se asume que el programa ha encontrado un error irrecuperable. La operacin
que dio lugar a la excepcin se anula y se entiende que no hay manera de regresar al cdigo que provoc
la excepcin. Es decir, la operacin que origin el error, se anula.
Reanudacin. Se puede manejar el error y regresar de nuevo al cdigo que provoc el error.
Java emplea la primera forma, pero puede simularse la segunda mediante la utilizacin de un bloque try en el
interior de un while, que se repetir hasta que el error deje de existir. En la siguiente imagen tienes un ejemplo de
cmo llevar a cabo esta simulacin.

En este ejemplo, a travs de la funcin de generacin de nmeros aleatorios se obtiene el valor del ndice i. Con
dicho valor se accede a una posicin del array que contiene cinco cadenas de caracteres. Este acceso, a veces
puede generar un error del tipo ArrayIndexOutOfBoundsException, que debemos gestionar a travs de un catch. Al
estar el bloque catch dentro de un while, se seguir intentando el acceso hasta que no haya error.

29 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

6.3.- Delegacin de excepciones con throws.


Puede haber problemas con las excepciones al usar llamadas a mtodos
en nuestros programas? Efectivamente, si se produjese una excepcin es
necesario saber quin ser el encargado de solucionarla. Puede ser que
sea el propio mtodo llamado o el cdigo que hizo la llamada a dicho
mtodo.
Quiz pudiramos pensar que debera ser el propio mtodo el que se
encargue de sus excepciones, aunque es posible hacer que la excepcin
sea resuelta por el cdigo que hizo la llamada. Cuando un mtodo utiliza una
sentencia que puede generar una excepcin, pero dicha excepcin no es
capturada y tratada por l, sino que se encarga su gestin a quin llam al mtodo, decimos que se ha producido
delegacin de excepciones.
Para establecer esta delegacin, en la cabecera del mtodo se declara el tipo de excepciones que puede generar
y que debern ser gestionadas por quien invoque a dicho mtodo. Utilizaremos para ello la sentencia throws y tras
esa palabra se indica qu excepciones puede provocar el cdigo del mtodo. Si ocurre una excepcin en el
mtodo, el cdigo abandona ese mtodo y regresa al cdigo desde el que se llam al mtodo. All se posar en
el catch apropiado para esa excepcin. Su sintaxis es la siguiente:

public class delegacion_excepciones {


...

public int leeao(BufferedReader lector) throws IOException, NumberFormatException


String linea = teclado.readLine();
Return Integer.parseInt(linea);
}
...
}

Donde IOException y NumberFormatException, seran dos posibles excepciones que el mtodo leeao podra
generar, pero que no gestiona. Por tanto, un mtodo puede incluir en su cabecera un listado de excepciones que
puede lanzar, separadas por comas.

Para saber ms
Si deseas saber algo ms sobre la delegacin de excepciones, te proponemos el siguiente enlace:
Excepciones y delegacin de stas.
Adems te volvemos a remitir al vdeo demostrativo sobre manejo de excepciones en Java que se
incluy en el epgrafe anterior, titulado "capturar una excepcin".

30 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

7.- Prueba de programas.

Caso prctico
Continuando con el especial inters de BK Programacin
porque sus aplicaciones sean de verdadera calidad, Ada est
dispuesta a emprender un plan de pruebas de software que sea
capaz de reducir al mnimo posible los errores que puedan
contener las aplicaciones que estn desarrollando.
Juan y Mara ya conocan de la existencia de ciertas pruebas
que se suelen hacer al software, pero necesitarn aprender bien
las tcnicas y utilizar las herramientas que los entornos de
desarrollo ofrecen para tal proceso.

A veces, los programas son complejos y es difcil hacer que stos


funcionen correctamente. Las pruebas del software son un conjunto de
tcnicas utilizadas para verificar que un programa lleva a cabo su tarea
correctamente. Vindolo desde otro punto de vista, podramos decir que la
realizacin de pruebas en nuestros programas intentan revelar la existencia
de errores. Cuando detectamos que existe un error, necesitamos localizarlo
llevando a cabo tcnicas de depuracin de cdigo, para luego acometer las
modificaciones necesarias que eliminen dicho error.
No obstante, las tcnicas de prueba del software no garantizan que todos
los errores vayan a salir a la luz, y an as, habr programas de gran tamao que sigan conteniendo errores ocultos
en ellos. De todas maneras, la realizacin de pruebas de software est considerada como una etapa de gran
importancia en el desarrollo de software. Casi la mitad del tiempo dedicado al desarrollo de un programa, se
emplea en la realizacin de pruebas al mismo. En algunas organizaciones, la realizacin de pruebas se considera
tan importante que existen equipos de desarrollo de software en los que hay tantos probadores de software como
programadores.
Los procesos de prueba y depuracin requieren una considerable cantidad de tiempo y esfuerzo, hacindose
difcil tomar una decisin acertada entre continuar la prueba del programa o entregarlo en su estado actual al
cliente.
Un concepto muy importante con el que vamos a trabajar es el de verificacin de programas. La verificacin de
programas es un proceso por el que se intenta corroborar que un programa hace lo que se espera de l. Se trata
de confirmar que el programa cumple con sus especificaciones.
En esta parte de la unidad nos centraremos en las tcnicas de prueba sistemtica de programas, verificacin y
anlisis de deficiencias del software.
Las tcnicas que veremos son:
Pruebas de caja negra o test funcionales.
Pruebas de caja blanca o test estructurales.
Revisiones o recorridos.
Anlisis paso a paso del cdigo con un depurador (debugger).
Un pequeo programa que consiste slo en una nica clase, normalmente puede ser probado de una sola vez. En
cambio, un programa de mayor tamao que incluye ms cantidad de clases, es posible que por su complejidad,
deba ser probado por partes. En Java, el tamao natural de cada una de esas partes ser la clase y ser
conveniente probar nuestros programas clase por clase. Esto es llamado Pruebas de Unidad, y cuando se
realizan pruebas de funcionamiento reuniendo todas las partes del programa completo, las pruebas reciben el
nombre de Pruebas de Integracin o Pruebas de Sistema.

31 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Autoevaluacin
Rellena los espacios con los conceptos adecuados.
En el proceso de

se trata de confirmar que el programa cumple con sus


.

Enviar

32 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

7.1.- La especificacin.
El punto de partida para cualquier prueba es la especificacin. No podemos
considerar una prdida de tiempo el anlisis claro de dicha informacin. En
ocasiones, podra ser necesario volver a entrevistar a un cliente o al futuro
usuario del programa.
Para entender la importancia de este elemento, supongamos la siguiente
especificacin:
Es necesario escribir un programa que solicite la entrada al usuario
de nmeros a travs de cajas de texto. El programa debe calcular y
mostrar la suma de los nmeros.
A priori, esta especificacin puede parecer simple y clara. Nada ms lejos de la realidad, ya que existen lagunas
como:
1. Los nmeros son enteros o coma flotante?
2. Cul es el rango y precisin de dichos nmeros?
3. Pueden incluirse nmeros negativos?
Si estas preguntas no son aclaradas antes de que el programador comience su trabajo, pueden producirse
dificultades en el desarrollo del programa. Por tanto, ser parte del proceso de programacin el estudio de la
especificacin para descubrir cualesquiera omisiones o confusin y para conseguir una especificacin totalmente
clara.
A continuacin se muestra una versin mucho ms clara de la especificacin anterior:
Es necesario escribir un programa que solicite la entrada al usuario de una serie de nmeros enteros a
travs de una caja de texto. Los enteros estn en el rango 0 a 10.000. El programa calcula y muestra la
suma de los nmeros.
Como puedes apreciar, esta especificacin es ms precisa al establecer el rango permitido de entrada de
valores, por ejemplo.
Una vez valorada la importancia de una correcta especificacin, el programador puede comenzar el proceso de
pruebas del software a travs de las herramientas que se detallarn en los siguientes epgrafes de la unidad.

33 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

7.2.- Pruebas exhaustivas.


He de probar todas las posibilidades? Es una pregunta que puede surgir cuando
comenzamos a programar. Podramos pensar en que la realizacin de una prueba
requerira probar nuestro software con todos los posibles valores de entrada. Este tipo
de prueba se denomina prueba exhaustiva y significa que seleccionamos todos los
posibles valores de entrada, as como todas sus posibles combinaciones y hacemos
que nuestro programa opere con ellos. Pensemos un momento en el amplio rango de
posibles valores que pueden tomar los nmeros int de Java. Te imaginas lo que puede
suponer realizar una prueba de este tipo? Podramos estar hablando de aos!
En resumen, la prueba exhaustiva (aunque sea para un programa pequeo) no es
factible. Es importante reconocer que la prueba completa de programas no es posible,
por lo que tendremos que adoptar otras tcnicas ms adecuadas.

Autoevaluacin
Durante una prueba exhaustiva hemos de seleccionar una muestra de los posibles valores
de entrada del programa y hacer que ste tome diferentes caminos de ejecucin para ver los
resultados que se obtienen.
Verdadero.

34 de 49

Falso.

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

7.3.- Pruebas de Caja Negra o Pruebas Funcionales.


Descartadas las pruebas exhaustivas, una tcnica ms adecuada para la realizacin de
nuestras pruebas es el empleo de las Pruebas de Caja Negra. Este tipo de pruebas se
basa en utilizar unos datos de entrada que pueden ser representativos de todos los
posibles datos de entrada. Con ellos, se pone en funcionamiento el programa y se
analiza qu ocurre.
Se llaman de Caja Negra porque no se utiliza ningn conocimiento del funcionamiento
interno del programa como parte de la prueba, slo se consideran las entradas y las
salidas. El programa se piensa como si fuera una caja negra que recibe datos de
entrada y ofrece unas salidas determinadas. Tambin reciben el nombre de Pruebas Funcionales porque utiliza
solamente el conocimiento de la funcin del programa (no cmo trabaja internamente).
Inicialmente, se anotan los datos de prueba y el resultado previsto, antes de ejecutar la prueba. Es a lo que se
denomina especificacin o planificacin de la prueba. Posteriormente, se pone el programa en funcionamiento, se
introducen los datos y se examinan las salidas para ver si existen diferencias entre el resultado previsto y el
resultado obtenido. Los datos de prueba debern tambin comprobar si las excepciones son manejadas por el
programa, de acuerdo a su especificacin. Es decir, tendremos que poner en aprietos a nuestro programa a
travs de unos datos de entrada determinados, para comprobar si reacciona correctamente a las especificaciones
que deba cumplir.

35 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

7.4.- Pruebas de Caja Blanca o Pruebas Estructurales.


Este otro tipo de pruebas se basa en el conocimiento del funcionamiento interno del
programa, la estructura del mismo para seleccionar los datos de prueba. A lo largo de las pruebas
de caja blanca cada declaracin que forma parte del programa es ejecutada en algn momento. Por
lo que cada secuencia de instrucciones o camino por el que pueda fluir el programa es ejecutada en
alguna ocasin durante dicha prueba. Considerndose caminos nulos, sentencias condicionales
simples o compuestas, bucles, etc. La prueba deber incluir cualquier camino del programa que pueda generar
una excepcin.
Este tipo de pruebas est muy ligado al cdigo fuente del programa, de tal forma, que la persona que realiza las
pruebas debe escoger distintos valores de entrada para chequear cada uno de los posibles caminos de ejecucin
que existen en el programa y verificar que los resultados de cada uno de ellos son adecuados.

Autoevaluacin
Rellano los espacios con los conceptos adecuados.
Si nos encontramos realizando pruebas y estamos examinando el funcionamiento de un bucle while,
estaremos realizando Pruebas de Caja

Enviar

36 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

7.5.- Otras pruebas.


Adems de las tpicas pruebas de Caja Blanca y Negra, existen otras tcnicas de prueba que
detallamos a continuacin:
a. Revisiones, inspecciones o recorridos:
Esta tcnica no hace uso del computador para intentar erradicar errores en el cdigo.
En un recorrido se estudia el listado del programa (junto con la especificacin) para
intentar hacer visibles los posibles errores. Es recomendable que quien lleve a cabo el
recorrido no sea la misma persona que desarroll el cdigo a revisar.
Si has programado alguna vez, quiz te suene esta situacin:
Llevas ms de una hora buscando un error en el cdigo de tu programa, ya que ste te
est generando errores de compilacin o ejecucin. Miras, vuelves a mirar, revisas,
repasas, cambias alguna variable o sentencia, ...-Nada, no encuentro el fallo! -De
pronto, un colega relee tu cdigo mientras se toma un caf y oyes detrs de ti una voz que dice: -Anda, te
falta un parntesis ah!

Citas para pensar


Sabidura popular: "Cuatro ojos ven ms que dos".

Para llevar a cabo este tipo de prueba necesitaremos la especificacin del


programa y el cdigo fuente en papel. Las acciones que suelen realizarse
son: inspeccionar la inicializacin de variables, realizacin de llamadas a
mtodos correctas, definicin adecuada de cabeceras de mtodos,
parmetros correctos, etc. Posteriormente, se ha de llevar a cabo una
revisin de la lgica del programa simulando ejecutar los mtodos como si
nosotros mismos furamos el computador. Las pruebas de revisin o
recorrido no comprueban el estilo del cdigo, sino posibles deficiencias que
pueden provocar errores. Est demostrado que los recorridos son una va
adecuada para encontrar errores.
a. Anlisis paso a paso:
Existen algunos entornos de desarrollo para Java que incorporan depuracin paso a paso del cdigo. Esto
permite al programador ejecutar una a una cada instruccin de su programa. De este modo, es posible ver
qu camino de ejecucin se est tomando, los valores de las distintas variables, etc. Este anlisis paso a
paso est estructurado y automatizado, permitindonos comprobar si el flujo del programa es el correcto,
si los valores de las variables varan en funcin de la ejecucin del programa, etc.
Esta tcnica suele confirmar o desmentir la existencia de un determinado fallo, aunque est ms cerca de
la depuracin de programas que de la propia prueba de los mismos.

37 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

7.6.- Realizacin de Pruebas Unitarias con JUnit.


Al comienzo de esta parte de la unidad dedicada a las pruebas y depuracin de
software, hablamos de un tipo de pruebas que se aplican a cada una de las clases
que hayamos definido. Eran las Pruebas Unitarias.
Es cierto que cualquier cdigo que escribamos debera de ser probado antes de
dar por finalizada la implementacin de una clase, ya que si no no estaramos
totalmente seguros de su correcto funcionamiento. Para verificar que el cdigo no
contiene errores de programacin y que adems realiza adecuadamente lo que
nosotros esperbamos de l, se realizan una serie de test que lo corroboren.
Quin no ha ido escribiendo mensajes de salida de texto a lo largo de su cdigo?
Esta es una tcnica muy utilizada para controlar el valor de ciertas variables y para
la deteccin de posibles errores, lo que confirma que todos realizamos pruebas a nuestros programas de alguna
u otra manera.
Pero, Existen formas ms avanzadas, eficientes y seguras de probar el cdigo? S. Podemos utilizar para ello
JUnit. A travs de JUnit tendremos la posibilidad de realizar test a nuestras clases de forma sencilla, rpida y
elegante, as como validar los resultados que nos ofrecen.
Y qu es JUnit? Es un conjunto de bibliotecas que se utilizan en programacin para hacer Pruebas Unitarias a
aplicaciones Java. El conjunto de clases (framework) incluidas en JUnit permite controlar la ejecucin de las
clases Java, de tal forma que podremos evaluar si el funcionamiento de cada uno de los mtodos de la clase
realiza su trabajo como debera. JUnit se emplea para indicar si la clase en cuestin ha pasado los test de prueba,
en otro caso se devolver una notificacin de fallo en el mtodo correspondiente.
Actualmente, el entorno de desarrollo NetBeans cuanta con plug-ins que permiten la generacin automtica de
plantillas de pruebas de clases Java.
Por qu utilizar JUnit? A continuacin te damos algunas razones de peso por la que este framework est muy
extendido entre la comunidad de programadores Java:
A travs de los test de JUnit se incrementa la calidad y velocidad de generacin de cdigo.
La escritura de test es sencilla.
Los test JUnit chequean sus propios resultados y proporcionan informacin de retorno al instante.
Los tests JUnit incrementan la estabilidad del software.
Los test JUnit se escriben en Java.
JUnit es gratuito.

Para saber ms
El IDE NetBeans 7.0. ya incorpora JUnit desde la instalacin, por lo que podemos beneficiarnos de
esta herramienta de testeo slo con utilizarla desde el IDE. Si quieres conocer cmo realizar los
primeros pasos con ella y ver ejemplos de utilizacin, te recomendamos los siguientes enlaces:
Primeros pasos con JUnit.
Creacin de tests en NetBeans con JUnit.
Introduccin y ejemplos con JUnit.

38 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Resumen textual alternativo

Autoevaluacin
En versiones anteriores a NetBeans 7.0., para poder trabajar con el FrameWork JUnit era necesario
incorporarlo manualmente al IDE.
Verdadero.

39 de 49

Falso.

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

8.- Depuracin de programas.

Caso prctico
Ada y Juan ya conocen las capacidades del depurador que
incorpora el entorno NetBeans y van a ensear a Mara las
ventajas de utilizarlo.
-Puedes depurar tus programas haciendo dos cosas: creando
Breakpoints o haciendo ejecuciones paso a paso -Le comenta
Juan.
Mara, que estaba codificando un nuevo mtodo, se detiene un
momento y pregunta: -Entonces, cuando el programa llega al Breakpoint podr saber qu valor tiene
una variable determinada?
-Efectivamente Mara, y podrs saber el valor de aquellas que t decidas. De este modo a travs de
los puntos de ruptura y de las ejecuciones paso a paso podrs descubrir dnde puede haber errores
en tus programas. Conocer bien las herramientas que el depurador nos ofrece es algo que puede
ahorrarnos mucho trabajo -Aporta Ada.

La Depuracin de programas es el proceso por el cual se identifican y corrigen errores


de programacin. Generalmente, en el argot de programacin se utiliza la palabra
debugging, que significa localizacin y eliminacin de bichos (bugs) o errores de
programa. A travs de este proceso se descubren los errores y se identifica qu zonas
del programa los producen. Hay tres etapas por las que un programa pasa cuando ste
es desarrollado y que pueden generar errores:
Compilacin: Una vez que hemos terminado de afinar un programa, solemos
pasar generalmente cierto tiempo eliminando errores de compilacin. El
compilador de Java mostrar una serie de chequeos en el cdigo, sacando a la
luz errores que pueden no apreciarse a simple vista. Una vez que el programa es
liberado de los errores de compilacin, obtendremos de l algunos resultados
visibles pero quiz no haga an lo que queremos.
Enlazado: Todos los programas hacen uso de libreras de mtodos y otros
utilizan mtodos generados por los propios programadores. Un mtodo es enlazado (linked) slo cuando
ste es llamado, durante el proceso de ejecucin. Pero cuando el programa es compilado, se realizan
comprobaciones para saber si los mtodos llamados existen y sus parmetros son correctos en nmero y
tipo. As que los errores de enlazado son detectados durante la etapa de compilacin.
Ejecucin: Cuando el programa entra en ejecucin, es muy frecuente que ste no funcione como se
esperaba. De hecho, es normal que el programa falle. Algunos errores sern detectados automticamente
y el programador ser informado, como acceder a una parte de un array que no existe (error de ndices)
por ejemplo. Otros son ms sutiles y dan lugar simplemente a comportamientos no esperados, debido a la
existencia de errores ocultos (bugs) en el programa. De ah los trminos bug y debugging. El problema de
la depuracin es que los sntomas de un posible error son generalmente poco claros, hay que recurrir a
una labor de investigacin para encontrar la causa.
La depuracin de programas es algo as como ser doctor: existe un sntoma, hemos de encontrar la causa y
entonces determinar el problema. El trabajo de eliminacin de errores puede ser interesante. La depuracin y la
prueba suelen requerir una cantidad de tiempo considerable en comparacin con el tiempo dedicado a la primera
codificacin del programa. Pero no te preocupes, es normal emplear ms tiempo en este proceso.
Y cmo llevamos a cabo la depuracin de nuestros programas?, pues a travs del debugger o depurador del
sistema de desarrollo Java que estemos utilizando. Este depurador ser una herramienta que nos ayudar a
eliminar posibles errores de nuestro programa. Podremos utilizar depuradores simples, como el jdb propio de
Java basado en lnea de comandos. O bien, utilizar el depurador existente en nuestro IDE (en nuestro caso
NetBeans). Este ltimo tipo de depuradores muestra los siguientes elementos en pantalla: El programa en
funcionamiento, el cdigo fuente del programa y los nombres y valores actuales de las variables que se
seleccionen.

40 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Qu elementos podemos utilizar en el depurador? Existen al menos dos elementos fundamentales que
podemos utilizar en nuestro debugger o depurador, son los siguientes:
Breakpoints o puntos de ruptura: Estos puntos pueden ser determinados por el propio programador a
lo largo del cdigo fuente de su aplicacin. Un Breakpoint es un lugar en el programa en el que la ejecucin
se detiene. Estos puntos se insertan en una determinada lnea del cdigo, entonces el programa se pone
en funcionamiento y cuando el flujo de ejecucin llega hasta l, la ejecucin queda congelada y un puntero
indica el lugar en el que la ejecucin se ha detenido. El depurador muestra los valores de las variables tal y
como estn en ese momento de la ejecucin. Cualquier discrepancia entre el valor actual y el valor que
deberan tener supone una importante informacin para el proceso de depuracin.
Ejecucin paso a paso: El depurador tambin nos permite ejecutar un programa paso a paso, es decir,
lnea por lnea. A travs de esta herramienta podremos seguir el progreso de ejecucin de nuestra
aplicacin y supervisar su funcionamiento. Cuando la ejecucin no es la esperada quiz estemos cerca de
localizar un error o bug. En ocasiones, si utilizamos mtodos procedentes de la biblioteca estndar no
necesitaremos hacer un recorrido paso a paso por el interior de stos mtodos, ya que es seguro que no
contendrn errores internos y podremos ahorrar tiempo no entrando en su interior paso a paso. El
debugger ofrece la posibilidad de entrar o no en dicho mtodos.

Debes conocer
Para completar tus conocimientos sobre la depuracin de programas, te proponemos los siguientes
enlaces en los que podrs encontrar cmo se llevan a cabo las tareas bsicas de depuracin a travs
del IDE NetBeans.
Depuracin bsica en NetBeans.
Uso bsico del depurador en NetBeans.

Para saber ms
Si deseas conocer algo ms sobre depuracin de programas, pero a un nivel algo ms avanzado,
puedes ver el siguiente vdeo.
Debugging avanzado en NetBeans.

Resumen textual alternativo

41 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

9.- Documentacin del cdigo.

Caso prctico
Ada est mostrando a Juan la documentacin sobre una serie de
mtodos estndar que van a necesitar para completar el desarrollo de
una parte de la aplicacin. Esta documentacin tiene un formato
estructurado y puede accederse a ella a travs del navegador web.
-Qu til y fcil est siendo el acceso a esta documentacin! La verdad
es que los que la han generado se lo han currado bastante. Generar
esta documentacin se llevar mucho tiempo, no Ada? -Pregunta Juan
mientras recoge de la impresora la documentacin impresa.
Ada prepara rpidamente una clase en blanco y comienza a
incorporarle una serie de comentarios: -Vers Juan, documentar el
cdigo es vital y si incorporas a tu cdigo fuente unos comentarios en el
formato que te voy a mostrar, la documentacin puede ser generada automticamente a travs de la
herramienta Javadoc. Observa... -Responde Ada.

Llegados a este punto, vamos a considerar una cuestin de gran importancia, la documentacin del cdigo fuente.
Piensa en las siguientes cuestiones:
Quin crees que acceder a la documentacin del cdigo fuente? Pues sern los autores del propio
cdigo u otros desarrolladores.
Por qu hemos de documentar nuestro cdigo? Porque facilitaremos su mantenimiento y reutilizacin.
Qu debemos documentar? Obligatoriamente: clases, paquetes, constructores, mtodos y atributos.
Opcionalmente: bucles, partes de algoritmos que estimemos oportuno comentar, ...
A lo largo de nuestra vida como programadores es probable que nos veamos en la necesidad de reutilizar,
modificar y mantener nuestro propio cdigo o incluso, cdigo de otros desarrolladores. No crees que sera muy
til que dicho cdigo estuviera convenientemente documentado? Cuntas veces no hemos ledo cdigo de
otros programadores y quiz no hayamos comprendido qu estaban haciendo en tal o cual mtodo? Como
podrs comprender, la generacin de una documentacin adecuada de nuestros programas puede suponer una
inestimable ayuda para realizar ciertos procesos en el software.
Si analizamos la documentacin de las clases proporcionada en los paquetes que distribuye Sun, nos daremos
cuenta de que dicha documentacin ha sido generada con una herramienta llamada Javadoc. Pues bien, nosotros
tambin podremos generar la documentacin de nuestro cdigo a travs de dicha herramienta.
Si desde el principio nos acostumbramos a documentar el funcionamiento de nuestras clases desde el propio
cdigo fuente, estaremos facilitando la generacin de la futura documentacin de nuestras aplicaciones. Cmo
lo logramos? A travs de una serie de comentarios especiales, llamados comentarios de documentacin que
sern tomados por Javadoc para generar una serie de archivos HTML que permitirn posteriormente, navegar por
nuestra documentacin con cualquier navegador web.
Los comentarios de documentacin tienen una marca de comienzo (/**) y una marca de fin (*/). En su interior
podremos encontrar dos partes diferenciadas: una para realizar una descripcin y otra en la que encontraremos
ms etiquetas de documentacin. Veamos un ejemplo:

/**
* Descripcin principal (texto/HTML)
*
* Etiquetas (texto/HTML)
*/

42 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Este es el formato general de un comentario de documentacin. Comenzamos con la marca de comienzo en una
lnea. Cada lnea de comentario comenzar con un asterisco. El final del comentario de documentacin deber
incorporar la marca de fin. Las dos partes diferenciadas de este comentario son:
Zona de descripcin: es aquella en la que el programador escribe un comentario sobre la clase, atributo,
constructor o mtodo que se vaya a codificar bajo el comentario. Se puede incluir la cantidad de texto que
se necesite, pudiendo aadir etiquetas HTML que formateen el texto escrito y as ofrecer una visualizacin
mejorada al generar la documentacin mediante Javadoc .
Zona de etiquetas: en esta parte se colocar un conjunto de etiquetas de documentacin a las que se
asocian textos. Cada etiqueta tendr un significado especial y aparecern en lugares determinados de la
documentacin, una vez haya sido generada.
En la siguiente imagen puedes observar un ejemplo de un comentario de documentacin.

Citas para pensar


R. Caron: "do not document bad code - rewrite it".

Reflexiona
Documentar el cdigo de un programa es aadir suficiente informacin como para explicar lo que
hace, punto por punto, de forma que no slo los ordenadores sepan qu hacer, sino que adems los
humanos entiendan qu estn haciendo y por qu. Documentar un programa no es slo un acto de
buen hacer del programador por aquello de dejar la obra rematada. Es adems una necesidad que
slo se aprecia en su debida magnitud cuando hay errores que reparar o hay que extender el
programa con nuevas capacidades o adaptarlo a un nuevo escenario.

43 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

9.1.- Etiquetas y posicin.


Cuando hemos de incorporar determinadas etiquetas a nuestros comentarios de documentacin es necesario
conocer dnde y qu etiquetas colocar, segn el tipo de cdigo que estemos documentando en ese momento.
Existirn dos tipos generales de etiquetas:
1. Etiquetas de bloque: Son etiquetas que slo pueden ser incluidas en el bloque de documentacin,
despus de la descripcin principal y comienzan con el smbolo @ .
2. Etiquetas en texto: Son etiquetas que pueden ponerse en cualquier punto de la descripcin o en
cualquier punto de la documentacin asociada a una etiqueta de bloque. Son etiquetas definidas entre
llaves, de la siguiente forma {@etiqueta}
En la siguiente tabla podrs encontrar una referencia sobre las diferentes etiquetas y su mbito de uso.

44 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

9.2.- Uso de las etiquetas.


Cules son las etiquetas tpicas y su significado? Pasaremos
seguidamente a enumerar y describir la funcin de las etiquetas ms
habituales a la hora de generar comentarios de documentacin.
@autor texto con el nombre :

Esta etiqueta slo se admite en


clases e interfaces. El texto despus de la etiqueta no necesitar un
formato especial. Podremos incluir tantas etiquetas de este tipo
como necesitemos.
@version texto de la versin : El texto de la versin no necesitar
un formato especial. Es conveniente incluir el nmero de la versin y
la fecha de sta. Podremos incluir varias etiquetas de este tipo una
detrs de otra.
@deprecated texto : Indica que no debera utilizarse, indicando en el texto las causas de ello. Se puede
utilizar en todos los apartados de la documentacin. Si se ha realizado una sustitucin debera indicarse
qu utilizar en su lugar. Por ejemplo:

@deprecated El mtodo no funciona correctamente. Se recomienda el uso de {@ling me

@exception nombre-excepcin texto :

Esta etiqueta es equivalente a @throws.


Esta etiqueta es aplicable a parmetros de constructores y mtodos.
Describe los parmetros del constructor o mtodo. Nombre-atributo es idntico al nombre del parmetro.
Cada etiqueta @param ir seguida del nombre del parmetro y despus de una descripcin de ste. Por
ejemplo:
@param nombre-atributo texto :

@param fromIndex: El ndice del primer elemento que debe ser eliminado.

@return texto :

Esta etiqueta se puede omitir en los mtodos que devuelven void . Deber aparecer en
todos los mtodos, dejando explcito qu tipo o clase de valor devuelve y sus posibles rangos de valores.
Veamos un ejemplo:
/**
* Chequea si un vector no contiene elementos.
*

* @return <code>verdadero</code>si solo si este vector no contiene componentes, es


* <code>falso</code> en cualquier otro caso.
*/
public boolean VectorVacio() {
return elementCount == 0;
}

@see referencia : Se aplica a clases, interfaces, constructores, mtodos, atributos y paquetes. Aade
enlaces de referencia a otras partes de la documentacin. Podremos aadir a la etiqueta: cadenas de
caracteres, enlaces HTML a pginas y a otras zonas del cdigo. Por ejemplo:

* @see "Diseo de patrones: La reusabilidad de los elementos de la programacin or


* @see <a href="http://www.w3.org/WAI/">Web Accessibility Initiative</a>
* @see String#equals(Object) equals

@throws nombre-excepcin texto :

En nombre-excepcin tendremos que indicar el nombre completo de


sta. Podremos aadir una etiqueta por cada excepcin que se lance explcitamente con una clusula
throws , pero siguiendo el orden alfabtico. Esta etiquetas es aplicable a constructores y mtodos,
describiendo las posibles excepciones del constructor/mtodo.

45 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Autoevaluacin
Qu etiqueta podra omitirse en un mtodo que devuelve void?
@param.
@throws.
@return.

46 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

9.3.- Orden de las etiquetas.


Las etiquetas deben disponerse en un orden determinado, ese orden es el
siguiente:

Orden de etiquetas de comentarios de


documentacin.
Etiqueta.

Descripcin.

@autor

En clases e interfaces. Se pueden poner varios. Es


mejor ponerlas en orden cronolgico.

@version

@param

@return

@exception

@throws

@see

En clases e interfaces.
En mtodos y constructores. Se colocarn tantos como
parmetros tenga el constructor o mtodo. Mejor en el
mismo orden en el que se encuentren declarados.
En mtodos.
En constructores y mtodos. Mejor en el mismo orden
en el que se han declarado, o en orden alfabtico.
Es equivalente a @exception.
Podemos poner varios. Comenzaremos por los ms
generales y despus los ms especficos.

@deprecated

Para saber ms
Si quieres conocer cmo obtener a travs de Javadoc la documentacin de tus aplicaciones, sigue los
siguientes enlaces:
Documentacin con Javadoc.
Documentacin de clases y mtodos con Javadoc.

47 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Anexo.- Licencias de recursos.


Licencias de recursos utilizados en la Unidad de Trabajo.
Recurso (1)

Datos del recurso (1)

Recurso (2)

Autora: Stockbyte.
Licencia: Uso educativo no comercial para plataformas pblicas de
Formacin Profesional a distancia.
Procedencia: CD-DVD Num. V43

Autora: Stockbyte.
Licencia: Uso educativo no comercial para plataformas pblicas de
Formacin Profesional a distancia.
Procedencia: CD-DVD Num. CD165 stk22466btm

Autora: Marcin Wichary


Licencia:Creative Commons Attribution 2.0 Generic
Procedencia:
http://commons.wikimedia.org
/wiki/File:IBM_1620_Memory_address_register_display_selector.jpg

Autora: HuBoro
Licencia: Dominio pblico
Procedencia:
http://commons.wikimedia.org
/wiki/File:Ambox_deletion_recycle.svg

Autora: Abrev
Licencia: Creative Commons Attribution-Share Alike 3.0 Unported
Procedencia:
http://commons.wikimedia.org
/wiki/File:Textilkennzeichnungab.jpg

Autora: Stockbyte.
Licencia: Uso educativo no comercial para plataformas pblicas de
Formacin Profesional a distancia.
Procedencia: CD-DVD Num. V43

Autora: Beatrice Murch


Licencia: Creative Commons Attribution-Share Alike 2.0 Generic
Procedencia:
http://commons.wikimedia.org
/wiki/File:Meal_worm_in_venus_fly_trap.jpg

48 de 49

16/12/2015 1

PROG04_Contenidos

http://www3.gobiernodecanarias.org/medusa/eforma/campus/pluginf

Autora: Stockbyte.
Licencia: Uso educativo no comercial para plataformas pblicas de
Formacin Profesional a distancia.
Procedencia: CD-DVD Num. V43

Autora: Stockbyte.
Licencia: Uso educativo no comercial para plataformas pblicas de
Formacin Profesional a distancia.
Procedencia: CD-DVD Num. V07

Autora: Yan Shuangchun


Licencia: GPL
Procedencia:
/wiki/File:Torchlight_core.png

http://commons.wikimedia.org

Autora: Dr. Timo Mappes


Licencia: CC-BY-SA-3.0; CC-BY-SA-3.0-DE; BILD-GFDL-NEU;
Procedencia:
http://commons.wikimedia.org
/wiki/File:Leitz_117298_frei.jpg

Autora: Stockbyte.
Licencia: Uso educativo no comercial para plataformas pblicas de
Formacin Profesional a distancia.
Procedencia: CD-DVD Num. V43

Autora: Stockbyte.
Licencia: Uso educativo no comercial para plataformas pblicas de
Formacin Profesional a distancia.
Procedencia: CD-DVD Num. V07

Autora: Lensim
Licencia: Creative Commons Attribution-Share Alike 3.0 Unported
Procedencia:
http://commons.wikimedia.org
/wiki/File:Notebook_with_Post-its.jpg

49 de 49

16/12/2015 1