Sie sind auf Seite 1von 32

2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?

id=10412

Uso de estructuras de control.

Casoprctico
LosmiembrosdeBKProgramacinestninmersosenelmundodeJava,yaconocenunabuenapartedellenguajeyahoravan
aempezaracontrolarelcomportamientodesusprogramas.

MarapreguntaaJuan:

DimeJuan,lasestructurasdecontrolenJavasonsimilaresalasdecualquierotrolenguaje?

Efectivamente,Mara,comolagranmayoradeloslenguajesdeprogramacin,Javaincorporaestructurasquenospermiten
tomar decisiones, repetir cdigo, etc. Cada estructura tiene sus ventajas, inconvenientes y situaciones para las que es
adecuada.HayquesaberdndeutilizarcadaunadeellasaclaraJuan.

Stockbyte.Usoeducativonocomercialparaplataformas
pblicasdeFormacinProfesionaladistancia.
CDDVDNum.V43

MaterialesactualizadosporelprofesoradodelaJuntadeAndaluca

Avisolegal

MaterialesdesarrolladosinicialmenteporelMinisteriodeEducacin,CulturayDeporte
AvisoLegal

1. Introduccin.
Enunidadesanteriores,haspodidoaprendercuestionesbsicassobreellenguajeJava:definicindevariables,tiposdedatos,asignacinde
valores,usodeliterales,diferentesoperadoresquesepuedenaplicar,conversionesdetipos,insercindecomentarios,etc.Posteriormente,
hemos dado los primeros pasos en la solucin de algoritmos sencillos, que slo requieren ejecutar unas instrucciones detrs de otras, sin
posibilidad de decidir, segn la situacin, ejecutar unas u otras sentencias, ni nada parecido. Todo era una ejecucin secuencial, una
sentenciadetrsdeotra,sinvueltaatrs,nisaltosdeningntipoenelordendeejecucinenqueestabanescritas.

Peroesesosuficiente?

Reflexiona
Piensa en la siguiente pregunta: Cmo un programa puede determinar la aparicin en pantalla de un mensaje de XITO o
ERROR,segnlosdatosdeentradaaportadosporunusuario?

Mostrarretroalimentacin

Comohabrsdeducido,conloquesabemoshastaahoranoessuficiente.Existenmltiplessituacionesquenuestros
programasdebenrepresentaryquerequierentomarciertasdecisiones,ofrecerdiferentesalternativasollevaracabo
determinadasoperacionesrepetitivamentehastaconseguirsusobjetivos.

Sihasprogramadoalgunavezotienesciertosconocimientosbsicossobrelenguajesdeprogramacin,sabesquela
granmayoradelenguajesposeenestructurasquepermitenalosprogramadorescontrolarelflujodelainformacinde
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 todos (con algunos cambios de
sintaxis).Esdecir,siconocassentenciasdecontroldeflujoenotroslenguajes,loquevamosaveralolargode
estaunidadtevaasonarbastante,aunqueseguroqueencuentrasalgunadiferenciaalverlasenJava.

Paraalguienquenohaprogramadonunca,unejemplosencillolevaapermitirentenderquesesodelassentencias
decontroldeflujo. Stockbyte.
Usoeducativonocomercial
paraplataformas
Piensaenunfontanero(programador),principalmentetrabajaconagua(datos)yseencargadehacerquestafluya pblicasdeFormacin
Profesionala
pordondelquiere(programa)atravsdeunconjuntodetuberas,codos,latiguillos,llavesdepaso,etc.(sentencias distancia.
CDDVDNum.V43
de control de flujo). Pues esas estructuras de control de flujo son las que estudiaremos, conoceremos su estructura,
funcionamiento,cmoutilizarlasydnde.Atravsdeellas,alconstruirnuestrosprogramaspodremoshacerquelosdatos(agua)fluyanpor
loscaminosadecuadospararepresentarlarealidaddelproblemayobtenerunresultadoadecuado.

Lostiposdeestructurasdeprogramacinqueseempleanparaelcontroldelflujodelosdatos,encualquierlenguaje,sonlassiguientes:

Secuencial:compuestaspor0,1oNsentenciasqueseejecutanenelordenenquehansidoescritas.Eslaestructuramssencillay
sobrelaqueseconstruirnelrestodeestructuras.Esdehecholaquehemosusadoenlosejerciciosdelatareadelaunidadanterior.
Selectivaocondicional:esuntipodesentenciaespecialquepermitetomardecisiones,depediendodelvalordeunacondicin.Segn
la evaluacin de la condicin se generar un resultado (que suele ser verdadero o falso) y en funcin de ste, se ejecutar una
secuencia de instrucciones u otra (que puede ser no ejecutar ninguna instruccin). Las estructuras selectivas (o de seleccin o
condicionales)podrnser:
Selectivasimple.
Selectivacompuesta.
Selectivamltiple.
Iterativa, repetitiva o cclica: es un tipo de sentencia especial que permite repetir la ejecucin de una secuencia o bloque de
instruccionessegnelresultadodelaevaluacindeunacondicin.Esdecir,lasecuenciadeinstruccionesseejecutarrepetidamentesi
lacondicinarrojaunvalorcorrecto,enotrocasolasecuenciadeinstruccionesdejardeejecutarse,ysepasaraejecutarlasiguiente
sentenciadetrsdelciclo.

Adems de las sentencias tpicas de control de flujo, en esta unidad haremos una revisin de las sentencias de salto, que aunque son
altamentedesaconsejablesenlamayoradecasos,ygeneralmenteresultainnecesariorecurriraellas,esnecesarioconocerlas.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 1/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
altamentedesaconsejablesenlamayoradecasos,ygeneralmenteresultainnecesariorecurriraellas,esnecesarioconocerlas.

Adems,comonuestrosprogramaspodrngenerarerroresysituacionesespeciales,echaremosunvistazoalmanejodeexcepcionesen
Java.Posteriormente,analizaremoslamejormaneradellevaracabolaspruebasdenuestrosprogramasyladepuracindelosmismos.Y
finalmente,aprenderemosavaloraryutilizarlasherramientasdedocumentacindeprogramas.

Vamosentoncesaponernoselmonodetrabajoyacogernuestracajadeherramientas,aversinonosmojamosmucho!

2. Estructura secuencial: sentencias y bloques.

Casoprctico
Adavaloramuypositivamenteenunprogramadorelordenylapulcritud.

Organizar correctamente el cdigo fuente es de vital importancia cuando se trabaja en entornos


colaborativos,enlosquesonvarioslosdesarrolladoresqueformanlosequiposdeprogramacin.Por
ello, incide en la necesidad de recordar a Juan y Mara las nociones bsicas a la hora de escribir
programas.

Stockbyte.
Usoeducativonocomercial
paraplataformaspblicasde
FormacinProfesionaladistancia.
CDDVDNum.CD165

Este epgrafe lo utilizaremos para reafirmar cuestiones que son obvias y que en el transcurso de anteriores unidades se han dado por
sabidas.Aunque,aveces,esconvenienterecordar.LoharemoscomounconjuntodeFAQ:

Cmoseescribeunprogramasencillo?
Siqueremosqueunprogramasencillorealiceinstruccionesosentenciasparaobtenerundeterminadoresultado,esnecesariocolocar
stasunadetrsdelaotra,exactamenteenelordenenquedebenejecutarse.
Podrancolocarsetodaslassentenciasunadetrsdeotra,separadasporpuntosycomasenunamismalnea?
Claroques,peronoesmuyrecomendable.Cadasentenciadebeestarescritaenunalnea,deestamaneratucdigosermuchoms
legibleylalocalizacindeerroresentusprogramassermssencillayrpida,loqueredundarenmenortiempodedesarrolloyde
mantenimiento,loquereducirloscostes.Dehecho,cuandoseutilizanherramientasdeprogramacin,loserroressuelenasociarsea
unnmeroonmerosdelnea.
Puedeunamismasentenciaocuparvariaslneasenelprograma?
S.Existensentenciasque,porsutamao,puedengenerarvariaslneas.Perosiemprefinalizarnconunpuntoycoma.
EnJavatodaslassentenciasseterminanconpuntoycoma?
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
estructuradeestetiponodebecolocarsepuntoycoma.Notepreocupes,loentenderscuandoanalicemoscadaunadeellas.
QueslasentencianulaenJava?
Lasentencianulaesunalneaquenocontieneningunainstruccinyenlaquesloexisteunpuntoycoma.Comosunombreindica,
estasentencianohacenada.Sepuedecolocarencualquiersitiodondelasintaxisdellenguajeexijaquevayaunasentencia,perono
queramosquesehaganada.Normalmentesuusopuedeevitarse,usandounalgicaadecuadaalconstruirlasestructurasdecontrolde
flujo.
Quesunbloquedesentencias?
Es un conjunto de sentencias que se encierra entre llaves y que se ejecutara como si fuera una nica orden. Sirve para agrupar
sentenciasyparaclarificarelcdigo.LosbloquesdesentenciassonutilizadosenJavaenlaprcticatotalidaddeestructurasdecontrol
deflujo,clases,mtodos,etc.Lasiguientetablamuestradosformasdeconstruirunbloquedesentencias.Culdelasdoscreesque
esmsclarayqueportantoserecomiendausar?
Bloquesdesentencias.

Bloquedesentenciasenunasolalnea Bloquedesentenciasdevariaslneas

{
sentencia1
sentencia2
{sentencia1sentencia2...sentenciaN}

sentenciaN
}

Enunbloquedesentencias,stasdebenestarcolocadasconunordenexacto?
Enciertoscasoss,aunquesialfinaldesuejecucinseobtieneelmismoresultado,podranocupardiferentesposicionesennuestro
programa.
Esimportantedocumentarlosprogramas?
Claroques.Msadelanteveremosquesepuedendocumentardediversasformas,perounadeellasesescribirelcdigoconclaridad,
usando indentacin adecuada de las sentencias, eligiendo nombres descriptivos para variables, mtodos y clases, incluyendo
comentariosexplicativos,etc.
Ymetengoquepreocupardelasfaltasdeortografaydegramtica?
Bueno...loprincipalespreocupartedelapropiasintaxisdellenguajeparaquetodofuncionecorrectamente,esoescierto.PeroesMUY
importantequelascadenasliteralesqueseincluyanenelcdigoseancorrectas,porquesonlaprimera,yaveceslanicaimpresin
queelclienteobtendrdelaaplicacin,ysivefaltasdeortografa,difcilmentelovasaconvencerdequealescribirenunlenguajede
programacineresunapersonamscuidadosa.Adems,partedeladocumentacinsegeneraconherramientasautomticasapartir
deloscomentarios,asquelacorreccinenlosmismostambinesfundamental.

Debesconocer
Accedealostresarchivosqueteofrecemosacontinuacinycomparasucdigofuente.Versquelostresobtienenelmismo
resultado,perolaorganizacindelassentenciasqueloscomponenesdiferenteentreellos.

Sentencias,bloquesydiferentesorganizaciones.

Bloquede
sentencias Bloquedesentenciasconelcdigoorganizado
Bloquedesentenciascondeclaracinde
para endeclaracindevariables,entradadedatos,
variables.
ejecucin procesamientoysalida
secuencial.

Sentencias
enorden Sentenciasydeclaracionesdevariables.(0.01 Sentencias,declaracionesyorganizacindel
secuencial.(0.01 MB) cdigo.(0.01MB)
MB)

Enesteprimer Enestesegundoarchivo,sedeclaranalprincipio Enestetercerarchivo,podrsapreciarqueseha


archivo,las lasvariablesnecesarias.EnJavanoes organizadoelcdigoenlassiguientespartes:
sentencias imprescindiblehacerloas,perosqueantesde declaracindevariables,peticindedatosde
estn utilizarcualquiervariablestadebeestar entrada,procesamientodedichosdatosyobtencin
colocadasen previamentedeclarada.Aunqueladeclaracinde delasalida.Estetipodeorganizacinestms
orden dichavariablepuedehacerseencualquierlugar estandarizadayhacequenuestrosprogramasganen
secuencial. denuestroprograma. enlegibilidadyclaridad.

Construyasdeunaformaodeotratusprogramas,enJavadebestenerencuentasiemprelassiguientespremisas:

Declaracadavariableantesdeutilizarla.
Inicializaconunvalorcadavariablelaprimeravezquelautilices.
No es recomendable usar variables no inicializadas en nuestros programas, pueden provocar errores o resultados
imprevistos.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 2/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

Autoevaluacin
Indicaquafirmacineslamscorrecta:

Paracrearunbloquedesentencias,esnecesariodelimitarstasentrellaves.Estebloquefuncionarcomosihubiramos
colocadounanicaorden.

LasentencianulaenJava,sepuederepresentarconunpuntoycomasloenunanicalnea.

ParafinalizarenJavacualquiersentencia,esnecesariohacerloconunpuntoycoma.

Todaslasafirmacionessoncorrectas.

3. Estructuras de seleccin o condicionales.

Casoprctico
Juan est desarrollando un mtodo en el que ha de comparar los valores de las entradas de un
usuarioyunacontraseaintroducidasdesdeelteclado,conlosvaloresalmacenadosenunabasede
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
dedecidirquhacerenfuncindesiambosvaloressoncorrectosono.

Stockbyte.
Usoeducativonocomercial
paraplataformaspblicasde
FormacinProfesionaladistancia.
CDDVDNum.CD109

Alprincipiodelaunidadnoshacamosestapregunta:

Cmo un programa puede determinar la aparicin en pantalla de un mensaje de XITO o ERROR, segn los datos de entrada
aportadosporunusuario?

stayotraspreguntassenosplanteanenmltiplesocasionescuandodesarrollamosprogramas.

Cmo conseguimos que nuestros programas puedan tomar decisiones? Para comenzar, lo haremos a travs de las estructuras de
seleccin. Estas estructuras constan de una condicin que se evala para ver si toma el valor verdadero o falso, y de un conjunto de
secuenciasdeinstrucciones,queseejecutarnonodependiendodesilacondicinseevalucomoverdaderaocomofalsa.Puedehaber
dosbloquesdeinstrucciones,deformaquesiesverdaderalacondicinseejecutaelprimerbloqueysiesfalsa,seejecutaelotrobloque.

Por ejemplo, si el valor de una variable es mayor o igual que 5 (condicin verdadera) se imprime por pantalla la palabra APROBADO
(primer grupo de sentencias, en este caso una sola) y si es menor que 5 (condicin falsa) se imprime SUSPENSO (segundo grupo de
sentencias,tambinconunasolaenestecaso).Paraesteejemplo,lacomprobacindelvalordelavariableserloquenospermitedecidir
qucaminotomaryculeslasiguienteinstruccinaejecutar.LaimpresindelapalabraAPROBADOserunasecuenciadeinstruccionesy
la impresin de la palabra SUSPENSO ser otra. Cada secuencia estar asociada a cada uno de los resultados que puede arrojar la
evaluacindelacondicin.

Curiosidad
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
valorestrue(verdadero)ofalse(falso).

Laevaluacindelascondicionesoexpresionesquecontrolanlasestructurasdeseleccin,devolvernsiempreunvalor
verdaderoofalso.

Lasestructurasdeseleccinsedividenen:

Estructuradeseleccinsimpleoestructuraif.
Estructuradeseleccincompuestaoestructuraifelse.
Estructuradeseleccinbasadaeneloperadorcondicional,representadoenJavapor?.
Estructuradeseleccinmltipleoestructuraswitch.

Acontinuacin,detallaremoslascaractersticasyfuncionamientodecadaunadeellas.Esimportantequeatravsde
losejemplosquevamosaver,puedasdeterminarenqucircunstanciasutilizarcadaunadeestasestructuras.Aunque
unmismoproblemapuedeserresueltocondiferentesestructuras,eincluso,condiferentescombinacionesdestas.

MarcinWichary

3.1. Estructura selectiva simple y selectiva compuesta:


if / ifelse.
Laestructuraifesunaestructuraselectiva,(oestructuradeseleccinoestructuracondicional, ya
que se suele llamar de las tres formas) se refiere a la posibilidad de que al comprobar una condicin
podamos tomar dos caminos alternativos, dependiendo de si la condicin se evalu como verdadera o
comofalsa.Larepresentacinendiagramadeflujoseraladelaimagendeladerecha,queesbastante
explicativa:

Silaexpresinqueseevalaesverdadera,seejecutalasecuenciadeinstrucciones1.
Si es falsa, se ejecuta la secuencia de instrucciones 2. Esta rama, a veces, puede no contener
ningunasentenciaaejecutar.

Enamboscasos,elflujocontinaconlasiguientesentenciaquehayatrasestaestructuracondicional.

Enpseudocdigo,esoseexpresaracomo:

Estructuraife enpseudocdigo
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 3/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
Estructuraifeifelseenpseudocdigo

Estructuracondicionalsimple.(Sientonces) Estructuracondicionaldedoblealternativa.(SientoncesSino).

Siexpresionentonces
Siexpresionentonces secuencia1
secuencia1 Sino
Finsi secuencia2
Finsi

Funcionamiento:
Lasecuenciadeinstruccionessecuencia1seejecutasiysolo Funcionamiento:
sienelcasodequelaexpresionseevalecomoverdadera. Siexpresionesevaluadacomoverdadera,seejecutasecuencia1yen
Nosehacenadaencasocontrario,simplemente"seomite"la casocontrario,noseejecutasecuencia1ysseejecutasecuencia2.
ejecucindesecuencia1.
Fjate que la palabra entonces se pone para delimitar con claridad dnde termina la expresin que se va a evaluar y dnde empieza la
secuencia de instrucciones del primer bloque. En la la parte Sino no es necesario, ya que esa misma etiqueta delimita el final del primer
bloque de instrucciones y el comienzo del segundo. En cualquier caso, siempre es necesario poner un Finsiquedelimitednde acaba la
sentenciacondicional,bienseadelimitandoelfinaldelnicobloquedesentenciasenelcondicionalsimpleobiendelimitandoelsegundo

LaestructuraifpuedepresentarseenJavadelassiguientesformas:

EstructuraifeifelseenJava

Estructuraifsimple. Estructuraifdedoblealternativa(oifelse).

Sintaxisparaelcasodeejecucincondicionalde
Sintaxisparaelcasodeejecucincondicionalde Sintaxisparaelcasodeejecucincondicionalde Sintaxisparaelcasodeejecucincondicionalde
dosramasyunbloquedesentenciasencada
unasolaramaconunasolasentencia unasolaramaconunbloquedesentencias dosramasyunasolasentenciaencadarama
rama

if(expresion_logica){
sentencia1
if<code>(expresion_logica){
if(expresion_logica)
sentencia1 sentenciaN
sentencia1
if<code>(expresion_logica) sentencia2 }else{
else
sentencia1 sentencia1
sentencia2
sentenciaN
} sentenciaN
}

Funcionamiento:
Funcionamiento:
Silaevaluacindelaexpresion_logicaofreceunresultadoverdadero,seejecutarlaprimerasentenciaoel
Silaevaluacindelaexpresion_logicaofreceunresultadoverdadero,seejecutalasentencia1obienel
primerbloquedesentencias.Si,porelcontrario,laevaluacindelaexpresion_logicaofreceunresultado
bloquedesentenciasasociado.Sielresultadodedichaevaluacinesfalso,noseejecutarninguna
falso,noseejecutarlaprimerasentenciaoelprimerbloqueysseejecutarlasegundasentenciaoel
instruccinasociadaalaestructuracondicional.
segundobloque.

AlgunasconsideracionesmsatenerencuentaenJava:

Laclusulaelsedelasentenciaifnoesobligatoria.Enalgunoscasosnonecesitaremosutilizarla,perosserecomiendacuandoes
necesariollevaracaboalgunaaccinenelcasodequelaexpresinlgicanosecumpla.
En aquellos casos en los que no existe clusula else, si la expresin lgica es falsa, simplemente se continuarn ejecutando las
siguientessentenciasqueaparezcanbajolaestructuracondicionalif.

Loscondicionalesifeifelsepuedenanidarse,detalformaquedentrodeunbloquedesentenciaspuedeincluirseotroifoifelse.Elnivel
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
estructurasdeseleccinmsadecuadas.
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, un else estar asociado con el if inmediatamente superior o ms cercano que exista dentro del
mismobloqueyquenoseencuentreyaasociadoaotroelse.

EjercicioResuelto
Vamos a representar en pseudocdigo un programa que realiza el clculo de la nota de un examen de tipo test. Adems de
calcularelvalordelanota,seofrececomosalidalacalificacinnonumricadedichoexamen.Paraobtenerla,secombinarn
lasdiferentesestructurascondicionalesaprendidashastaahora.

Mostrarretroalimentacin

Para completar la informacin que debes saber sobre las estructuras if e ifelse, falta ver cmo se plasma en Java el
pseudocdigoanterior.

Mostrarretroalimentacin

Recomendacin
Buenaprcticadeprogramacin

Utilizalasangraenamboscuerposdeunaestructuraifelse.
Sihayvariosnivelesdesangra,encadaniveldebeaplicarselamismacantidaddeespacioadicional.
Colocarsiemprelasllavesenunainstruccinifelse(ocualquierestructuradecontrol)ayudaaevitarqueseomitande
maneraaccidental,enespecial,cuandoposteriormenteseagreganinstruccionesaunaclusulaifoelse.Paraevitarque
esto suceda, algunos programadores prefieren escribir la llave inicial y final de los bloques antes de escribir las
instruccionesindividualesdentrodeellas.

Erroresdeprogramacin

Olvidarunaolasdosllavesquedelimitanunbloquepuedeprovocarerroresdesintaxisoerroreslgicosenunprograma.
Colocarunpuntoycomadespusdelacondicinenunainstruccinifelseproduceunerrorlgicoenlasinstruccionesif
deseleccinsimple,yunerrordesintaxisenlasinstruccionesifelsedeseleccindoble(cuandolapartedelifcontiene
unainstruccinenelcuerpo).

Autoevaluacin
Cundosemostrarporpantallaelmensajeincluidoenelsiguientefragmentodecdigo?

if(numero%2==0)
System.out.print("Elnmeroespar")

Nunca.

Siempre.

Cuandoelrestodeladivisinentre2delcontenidodelavariablenumero,seacero.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 4/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

3.2. Estructura selectiva mltiple: switch.


Qupodemoshacercuandonuestroprogramadebeelegirentremsdedosalternativas?

Unaposiblesolucinpodraseremplearestructurasifanidadas,aunquenosiempreestasolucineslamseficiente,porqueencasodeque
lassucesivascondicionesquesevanevaluandoseanfalsas,puedesernecesariocomprobartodasantesdesaberconseguiridadenqu
caso nos encontramos. No sera deseable que con una sola comprobacin pudiramos ir directamente al caso apropiado y ejecutar las
instruccionesquelleveasociadas?

Desde luego que s, esto sera ms eficiente, y en algunos casos es posible. Cuando estamos ante estas situaciones podemos utilizar la
estructuradeseleccinmltiple,queenJavaeslasentenciaswitch.

Autoevaluacin
Indicaparacadaafirmacinsiesverdaderaofalsa.

Laestructuratiposwitchresultaimprescindibleencualquierlenguaje,yaquedelocontrarionosepodrantomardecisionesque
implicanlaposibilidaddeseguirpormsdedoscaminos.

Verdadero Falso

Laestructuratiposwitchesmseficientequepararesolverunproblemaconmltiplesposibilidades,queelusodeestructuras
if/elseanidadaspararesolveresemismoproblema.

Verdadero Falso

3.2.1. Estructura switch en pseudocdigo.


Peroveamosprimerocmoserepresentaraestaestructuraenpseudocdigo.

Pseudocdigoparalaestructuraselectivamltiple(Segnsea)

Representacinenpseudocdigo Ejemploenpseudocdigo

Veamoscmoquedaraelpseudocdigoparaelejemplodelascalificacionesdelexamentipotest.Sloincluimoslapartefinaldeprocesamientode
datos,yaquetodoloanterioresidnticoydestacamosennegroloquenosecorrespondeconlasentenciaselectivamltiple.

ProgramaSentencias_condicionales
Segnsea(expresion)
...
Casovalor1:
/*Procesamientodedatos*/
sentencia1_1
nota<((numeroAciertos(numeroErrores/2))*10)/numeroPreguntas
sentencia1_2
SegnSea(nota)
.
Caso0a4:
Casovalor2:
calificacion<"INSUFICIENTE"
sentencia2_1
Caso5:
sentencia2_2
calificacion<"SUFICIENTE"
.<br/>
Caso6:
Caso.
calificacion<"BIEN"
CasovalorN:
Caso7a8:
sentenciaN1
calificacion<"NOTABLE"
sentenciaN2
Caso9a10:
.
calificacion<"SOBRESALIENTE"
[Otroscasos:
Otroscasos:
sentenciaOC1<br/>
escribir("Sehaintroducidounacalificacinerrnea.")
sentenciaOC2]
calificacion<"CALIFICACINERRNEA"
Finsegn
Finsegn
...<br/>Fin

Funcionamiento:

ComenzamosevaluandolaexpresinqueaparecedetrsdeSegnseayquequedadelimitadaporelpropioSegnseayporelcomienzodelaprimeraetiquetadeuncasoposible.
CadaunodeloscasosposiblescomenzarconlaetiquetaCasoypodrserunvalorsinms,seguidodedospuntos(Porejemplo:Caso5:)ounrangodevaloresseguidodedospuntos(Por
ejemplo:Caso0a4:).
Elvalorobtenidodeevaluarlaexpresin,queenprincipiopuedeserdecualquiertipodiscretoyordenado(enteros,cadenasdecaracteres...),locomparamosconlosvaloresorangosdevaloresque
situamoscomoetiquetasdelosdistintoscasosquesepuedendar.
Sevadirectamenteaejecutarlassentenciasdeaquellaetiquetaconlaquecoincidaoencuyorangoestincluidoelvalor.
Lassentenciasquehayqueejecutarencasodeentrarenunaetiquetadeuncasoconcreto,sontodaslasquehayahastalaprximaetiquetaCaso.
Sielvalornocoincidieraconningunaetiquetaniestuvieraincluidoenelrangoestablecidoporninguna,sepasaraalaetiquetaOtroscasos,queesopcionaly(podrnoaparecersinohayotros
casosrelevantesparalosquehayaquehaceralgodiferente)yseejecutaranlassentenciasquecontenga,quequedandelimitadaspor<strong><spanstyle="fontsize:medium"><code>Fin

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 5/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
casosrelevantesparalosquehayaquehaceralgodiferente)yseejecutaranlassentenciasquecontenga,quequedandelimitadaspor<strong><spanstyle="fontsize:medium"><code>Fin
segnqueademsponefinalasentenciadeseleccinmltiple.
TrashaberentradoencualquieretiquetaCasooenOtroscasosyhaberejecutadolassentenciasquecontenga,elcontroldelflujosaltaralasiguientesentenciaquehayadespusdelFinsegn.

Quizs esta sentencia es la que ms diferencias y particularidades presenta para distintos lenguajes de programacin, por lo que el
pseudocdigo,queintentasiemprenoentrarenlosdetallesdesintaxisdellenguaje,puederesultartebastantedistintoalasintaxisdeJava,
peroelplanteamientosiguesiendoelmismo:evaluamosunaexpresin,ysegnsuvalor,cogemosdirectamenteelcaminoquemarcaunade
lasetiquetasqueidentificancadaunodeloscasosposibles,segnesevalor,yseejecutanlassentencias.

Autoevaluacin

Para la estructura tipo switch, el ltimo caso que debe incluirse es siempre la etiqueta Otroscasos, ya que debe
indicarseexpresamentealcompiladorqudebehacerantecualquiervalorresultantedeevaluarlaexpresindistinto
deloscontempladosenlasetiquetasanteriores.Delocontrario,seproduciraunaindefinicin,queprovocaraqueel
programaabortarasisepresentaracualquierotrocasonoprevistoexpresamenteconalgunaetiquetaasociadaalas
instruccionesaejecutar.

Verdadero Falso

3.2.2. Estructura switch en Java.


Enlasiguientetablasemuestratantolasintaxis,comoelfuncionamientodeestaestructuraenellenguajeJava.

EstructuraselectivamltipleenJava.(switch.)

Sintaxis Condiciones

switch(expresion){
casevalor1:
sentencia1_1
sentencia1_2

break Dondeexpresindebeserdeltipochar,byte,shortoint,ylasconstantesdecadacase
casevalor2:
debenserdeestetipoodeuntipocompatible.Slodesdelaversin7dellenguajeJavase
permitenexpresionesdetipoStringenlaexpresin,peroestonofuncionarconversiones
sentencia2_1
anterioresdellenguaje.
sentencia2_2
Laexpresindebeirentreparntesis.
<br/>break<br/>
Cadacasellevarasociadounvalorysefinalizarcondospuntos(:).
Elbloquedesentenciasasociadoalaclusuladefaultpuedefinalizarconunasentenciade
rupturabreakono.Nohaydiferenciadefuncionamiento.Sepermitepormantenerla
casevalorN: estructuradelasdemsetiquetas,peroelcompiladornolonecesitasieldefaultvaalfinal,tal
sentenciaN1 ycomoseveenelcdigo,puestoquelallavedecierredelimitaelfinaldelswitch.
sentenciaN2

break
default:
sentenciasdefault
}

Funcionamiento:

Lasdiferentesalternativasdeestaestructuraestarnprecedidasdelaclusulacasequeseejecutarcuandoelvalorasociadoalcasecoincidacon
elvalorobtenidoalevaluarlaexpresindelswitch.
Enlasclusulascase,nopuedenindicarseexpresionescondicionales,rangosdevaloresolistasdevalores(aunqueotroslenguajesde

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 6/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
Enlasclusulascase,nopuedenindicarseexpresionescondicionales,rangosdevaloresolistasdevalores(aunqueotroslenguajesde
programacinslopermiten).Habrqueasociarunaclusulacaseacadaunodelosvaloresquedebansertenidosencuenta.
Laclusuladefaultserutilizadaparaindicaruncasopordefecto(cualquierotrocasonocontempladoenlasclusulascase,enrealidad),las
sentenciasasociadasalaclusuladefaultseejecutarnsiningunodelosvaloresindicadosenlasclusulascasecoincideconelresultadodela
evaluacindelaexpresindelaestructuraswitch.
Laclusuladefaultpuedenoexistir,yportanto,siningncasehasidoactivadofinalizaraelswitch.
Cadaclusulacasepuedellevarasociadasunaovariassentencias,sinnecesidaddedelimitardichosbloquespormediodellaves.
Enelmomentoenelqueelresultadodelaevaluacindelaexpresincoincideconalgunodelosvaloresasociadosalasclusulascase,se
ejecutarntodaslasinstruccionesasociadashastalaaparicindeunasentenciabreakderuptura(lasentenciabreakseanalizarenepgrafes
posteriores).Estohacequesienunaclusulacasenoseincluyeunbreakparafinalizarla,alentrarenesaclusula,seproducirun"efectoen
cascada",deformaqueseguirejecutandolassentenciasdelasiguienteclusulacase,yassucesivamentelasdetodaslasquesigan,hastaque
enalgunaencuentreunasentenciabreak,ohastaquealcanceelfinaldelasentencia.Estopuedeseraprovechadoparadarlemsversatilidadala
sentenciaswitch,yhaceralgoparecidoalosrangosquespermitenotroslenguajes,aunqueseadeunaforma"nomuylimpia".

En resumen, se ha de comparar el valor de una expresin con un conjunto de valores constantes, si el valor de la expresin coincide con
algunodelosvaloresconstantescontemplados,seejecutarnlosbloquesdeinstruccionesasociadosalmismo.Sinoexistiesecoincidencia,
se podrn ejecutar una serie de instrucciones por defecto, si se ha incluido la clusula default, o se saltar a la sentencia siguiente a esta
estructuraselectiva(traslallavedecierre)sinosehaincluidoesaclusula.

EjercicioResuelto
Accede al siguiente fragmento de cdigo en el que se resuelve el clculo de la nota de un examen de tipo test, utilizando la
estructuraswitch.

Mostrarretroalimentacin

Recomendacin
Errorcomndeprogramacin
Olvidarunainstruccinbreakcuandosenecesitaenunainstruccinswitchesunerrorlgico.

Parasaberms
UnaexplicacinbastantebuenadelasentenciaswitchenJavapuedesencontrarlaenelsiguienteenlace:

SentenciaswitchenJava

UnawebconalgunosejemplostpicosdeusodelasentenciaswitchenJava:

EjemplosdeejerciciosresueltosenJavausandoswitch

4. Estructuras repetitivas, iterativas o cclicas.

Casoprctico
Juan ya tiene claro cmo realizar la comprobacin de los valores de usuario y contrasea
introducidosporteclado,perolesurgeunaduda:

Cmopodracontrolarelnmerodevecesqueelusuariohaintroducidomallacontrasea?

Adaleindicaquepodrautilizarunaestructuraderepeticinquesolicitasealusuariolaintroduccin
de la contrasea hasta un mximo de tres veces. Aunque comenta que puede haber mltiples
solucionesytodasvlidas,loimportanteesconocerlasherramientasquepodemosemplearysaber
cundoaplicarlas.
Stockbyte.
Usoeducativonocomercial
paraplataformaspblicasde

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 7/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
paraplataformaspblicasde
FormacinProfesionaladistancia.
CDDVDNum.V43

Nuestrosprogramasyasoncapacesdecontrolarsuejecucinteniendoencuentadeterminadascondiciones,pero
an hemos de aprender un conjunto de estructuras que nos permita repetir una secuencia de instrucciones
determinadahastaqueseconsigaundeterminadoobjetivoohastaquesecumplaunadeterminadacondicin.

Lafuncindeestasestructurasrepetitivasesrepetirlaejecucindeunaseriedeinstruccionesteniendoen
cuentaunacondicin.

Aestetipodeestructurasselasdenominaestructurasderepeticin,estructurasrepetitivas,buclesoestructuras
iterativas.EnJavaexistencuatroclasesdebucles:

Buclefor(Repitepara). HuBoro
Buclefor/in(Repiteparacada).
BucleWhile(Repitemientras).
BucleDoWhile(Repitehasta).

Losbuclesfory for/inseconsideranbuclescontroladospor contador.Porelcontrario,losbucleswhiley do...while se consideran bucles


controladospor sucesos.

Lautilizacindeunosbuclesuotrosparasolucionarunproblemadependerengranmedidadelassiguientespreguntas:

Sabemos aprioricuntasvecesnecesitamosrepetirunconjuntodeinstrucciones?
Sabemossihemosderepetirunconjuntodeinstruccionessiunacondicinsatisfaceunconjuntodevalores?
Sabemoshastacundodebemosestarrepitiendounconjuntodeinstrucciones?
Sabemossihemosdeestarrepitiendounconjuntodeinstruccionesmientrassecumplaunacondicin?
Sabemossiesasinstruccionessedebenejecutarsiempre,almenosunaprimeravez,conindependenciadelresultadodeevaluarla
condicinquecontrolaelbucle?

stasyotraspreguntastendrnsurespuestaencuantoanalicemoscadaunadelasestructurasrepetitivasendetalle.

Recomendacin
Estudiacadatipodeestructurarepetitiva,conocesufuncionamientoypodrsllegaralaconclusindeque algunosdeestos
buclessonequivalentesentres .Unmismoproblema,podrserresueltoempleandodiferentestiposdebuclesyobtenerlos
mismos resultados. De hecho, sera posible resolver cualquier problema si slo contramos con una estructura de control
repetitiva(unnicotipodebucle),pudiendosercualquieradeellos.Noobstante,segneltipodeproblema,disponerdevarios
tipospodrpermitirnosconstruirsolucionesmssimplesyclaras,loquesiempreresultamuydeseable.

4.1. Estructura repetitiva tipo for.


Hemosindicadoanteriormentequeelbucleforesunbuclecontroladoporcontador.Recuerdasloqueeso
significaba?

Estetipodebucletienelassiguientescaractersticas:

Seejecutaunnmerodeterminadodeveces.
Utilizauncontador(unavariableusadacomocontador)quecontrolalasiteracionesquesevanhaciendo
delbucle.

En general, existen tres operaciones que se llevan a cabo sobre la variable contador que controla la
ejecucinenestetipodebucles:

Seinicializalavariablecontador.
Seevalaelvalordelavariablecontador,pormediodeunacomparacindesuvalorconelnmerodeiteracionesespecificadopara
sabersihayquecontinuarconotranuevaiteracin.
Seactualizaconincrementosodecrementoselvalordelcontador,encadaunadelasiteraciones.

Aspectosimportantes:

Lainicializacindelcontadordeberealizasecorrectamenteparahacerposiblequeelbucleseejecutealmenoslaprimera
repeticindesucdigointerno,aunquepuedehabercasosenlosquenoqueramosejecutarloningunavezsilacondicines
departidafalsa.
Lacondicindeterminacindelbucleesimportanteestablecerlacuidadosamente,yaquesino,podemoscaerenlacreacin
deunbucleinfinito,cuestinquesedebeevitarportodoslosmedios.
Esnecesarioestudiarelnmerodevecesqueserepiteelbucle,puesdebeajustarsealnmerodevecesestipulado.

Autoevaluacin
Rellenaloshuecosconlapalabraadecuada.
En la estructura repetitiva tipo for lo primero que debe hacerse es una correcta de la variable
contadorquecontrolalaejecucindelbucle,luegose elvalordelavariableparacomprobarsisehaalcanzadoel
nmero de que deben realizarse, o si por el contrario debe realizar una nueva .
Finalmente,comoltimopasodecadaiteracin,se elvalordelavariable mediantesentencias
de o .Esimportantequeelcontadorseactualicemodificandosuvalorparaqueenalgn
momento se alcance la de del bucle, ya que de lo contrario podramos caer en un
,quedebeevitarseatodacosta.
Enviar

4.1.1. Estructura tipo for en pseudocdigo.


http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 8/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

4.1.1. Estructura tipo for en pseudocdigo.


Cmopodemosrepresentarenpseudocdigoestaestructuradecontrolrepetitivatipofor?

Yasabesqueenpseudocdigo,loqueprimaeslaclaridad,yquemientrasesosecumpla,escuestindeexpresarlascosasdeformaque
seevitecualquierambigedad.

Unaposiblerepresentacin,queconsigueeseobjetivoseralaproporcionadaenlatablasiguiente:

Pseudocdigoparalaestructurarepetitivatipofor

Representacinenpseudocdigo Ejemploenpseudocdigo

Veamoscmoquedaraelpseudocdigoparaelejemploquepermiterepresentarenpantallalatabladel7.
Sepresentaengrisatenuadotodoelcdigo,salvoeldelaestructuradelbuclefor.

ProgramaRepetitivaTipoFor
/*Enesteejemploseutilizalaestructurarepetitivafor
*pararepresentarenpantallalatablademultiplicardelsiete
*/
Inicio
//Declaracindevariables
numero,contador,resultado:entero

//Inicializacindevariables
numero<7
resultado<0
Seponenennegritalasvariablesyvaloresquecambiarn,ysinnegritalaspartesdelaestructuraqueseranfijas.
//Salidadeinformacin
Para<strong>variableContador</strong><<strong>valorInicial</strong>Hasta<strong>valorFinal</strong>Paso<strong>incremento</strong><br/>Hacer Escribir("Tablademultiplicardel",numero)
<strong>acciones</strong> Escribir("..............................")
Finpara
/*
*Utilizamosahoraelbucletipofor.
*Lacabeceradelbucleincorporalainicializacindelavariable
*decontrol,lacondicindesalida,queimplicallegarmultiplicando
*hastael10yelincremento(Paso)dedichavariabledeunoenunoen
*cadaiteracindelbucle.Enestecasocontadorincrementarenuna
*unidadelvalordedichavariable.
*/
Paracontador<1Hasta10Paso1
Hacer
resultado<contador*numero
Escribir(numero,"x",contador,"=",resultado)
Finpara
Fin

Funcionamiento:

Primeroseinicializalavariabledecontroldelbucle(variableContador)asignndoleelvalorvalorInicial.
SecompruebasivariableContadoresmenoroigualquevalorFinal,ysiesas,sepasaaejecutarlasaccionesquehayenelcuerpodelbucle,entreHaceryFinPara.
Alterminarlaiteracin,automticamenteseincrementaelvalordevariableContadorenlacantidadqueseindiquecomopaso,indicadaporincremento,antesdevolveralpasoanteriorparavolveracomprobarsisiguesinhabersealcanzado
valorFinal,yportanto,sideberealizarseotranuevaiteracin.

4.1.2. Estructura tipo for en Java.


Enlasiguientetabla,podemosverlaespecificacinparaellenguajeJavadelaestructurafor:

Estructurarepetitivafor.
Sintaxis Funcionamiento

Estructuraforconunanicasentencia:

for(inicializacincondicinincremento)
Dondeinicializacinesunaexpresinenlaquese
sentencia
inicializaunavariabledecontrol,queserla
encargadadecontrolarelfinaldelbucle.
Dondecondicinesunaexpresinqueevaluarla
variabledecontrol.Mientraslacondicinsea
Estructuraforconunbloquedesentencias: verdadera,elcuerpodelbucleestarrepitindose.
Cuandolacondicindejedecumplirse,terminar
for(inicializacincondicinincremento){ laejecucindelbucle.
sentencia1 Dondeincrementoindicalamaneraenlaquela
sentencia2
variabledecontrolvacambiandoencadaiteracin
delbucle.Podrserenrealidad,mediante
...
incrementoodecremento,ynosolodeunoenuno.
sentenciaN
}

Debesconocer
Como venimos haciendo para el resto de estructuras, accede al siguiente archivo Java y podrs analizar un ejemplo del
pseudocdigo del apartado anterior, que contena la utilizacin del bucle for para la impresin por pantalla de la tabla de
multiplicardel7.Leeatentamenteloscomentariosincluidosenelcdigo,puesaclaranalgunascuestionesinteresantessobre
estebucle.

Usolaestructurarepetitivafor.(0.01MB)

Autoevaluacin
Cuandoconstruimoslacabeceradeunbuclefor,podemosprescindirdealgunodelostreselementosquelaformane
incluso, podemos utilizar ms de una variable contadora separando stas por comas. Pero, qu conseguiremos si
construimosunbucledelasiguienteforma?

for(){//instrucciones}

Unbucleinfinito.

Nada,darunerror.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 9/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
Unbuclequeseejecutaraunanicavez.

Recomendacin
Errorcomndeprogramacin

Utilizarunoperadorrelacionalincorrectoounvalorfinalincorrectodeuncontadordecicloenlacondicindecontinuacin
deciclodeunainstruccinderepeticinpuedeproducirunerrorpordesplazamientoen1.
Utilizarcomasenvezdelosdossignosdepuntoycomarequeridosenelencabezadodeunainstruccinforesunerror
desintaxis.
Cuandosedeclaralavariabledecontroldeunainstruccinforenlaseccindeinicializacindelencabezadodelfor,sise
utilizalavariabledecontrolfueradelcuerpoforseproduceunerrordecompilacin.

Colocar un punto y coma inmediatamente a la derecha del parntesis derecho del encabezado de un for convierte el
cuerpodeeseforenunainstruccinvaca.Porlogeneral,setratadeunerrorlgico.
No utilizar el operador relacional apropiado en la condicin de continuacin de un ciclo que cuente en forma regresiva
(comousari<=1enlugardei>=1enuncicloquecuenteenformaregresivahastallegara1)esgeneralmenteunerror
lgico.

Buenaprcticadeprogramacin

Utilizarelvalorfinal en la condicin de una instruccin de una instruccinfor(o while) con el operador relacional <= nos
ayudaaevitarerrorespordesplazamientoen1.Porejemplo,parauncicloqueimprimevaloresdel1al10,lacondicinde
continuacindelciclodebesercontador<=10,envezdecontador<10(locualproduceunerrorpordesplazamientoen
uno)ocontador<11(queescorrecto).Muchosprogramadoresprefierenelllamadoconteoconbase0,enelcualpara
contar10veces,contadorseinicializaraaceroylapruebadecontinuacindelcicloseracontador<10.
Limitaeltamaodelosencabezadosdelasinstruccionesdecontrolaunasolalnea,siesposible.

Notasparaprevenirerrores

Losciclosinfinitosocurrencuandolacondicindecontinuacindelcicloenunainstruccinderepeticinnuncasevuelve
false. Para evitar esta situacin en un ciclo controlado por un contador, debes asegurarte que la variable de control se
incremente(odecremente)durantecadaiteracindelciclo.

4.2. Estructura repetitiva for/in.


Juntoalaestructurafor,tenemoslaestructurafor/inquetambinseconsideraunbuclecontroladoporcontador.Estebucleesunamejora
incorporadadesdelaversin5.0.deJava,porloquenofuncionarenversionesmsantiguasdellenguaje.

Este tipo de bucles permite realizar recorridos sobre <span lang="en">arrays</span> y colecciones de objetos. Los <span
lang="en">arrays</span>soncoleccionesdevariablesquetienenelmismotipoysereferencianporunnombrecomnjuntoaunndiceque
indica el lugar que ocupa el elemento dentro del <span lang="en">array</span>. As mismo, las colecciones son recopilaciones de objetos
quesediceson iterables,esdecir,quesepuedeiterarsobreellas.Unacoleccinestambinensmismaunobjeto.

Estebucleesnombradotambincomobucleformejorado,obucleforeach(paracada).Enotroslenguajesdeprogramacinexistenbucles
muyparecidosaste.

Noessustancialmentediferenteenlobsicoacualquierotraestructuratipofor,salvoporelhechodequeconceptualmente,paradecidirsi
hay que hacer otra interaccin ms, en lugar de preguntarse "he hecho ya todas las iteraciones?", en la estructura for/in se hace una
pregunta del tipo "he procesado ya todos los elementos existentes en el array o la coleccin?". Es por ello que prescindimos de
presentarunarepresentacinespecficaenpseudocdigoparalaestructurafor/in. .

LasintaxisenJavaeslasiguiente:

for(declaracin:expresin){
sentencia_1

sentencia_N
}

Dondeexpresinesunarrayounacoleccindeobjetos.
Dondedeclaracinesladeclaracindeunavariablecuyotiposeacompatibleconexpresin.Normalmente,sereltipoyelnombrede
lavariableadeclarar.

Elfuncionamientoconsisteenqueparacadaelementodelaexpresin,guardaelelementoenlavariabledeclaradayrealizalasinstrucciones
contenidas en el bucle. Despus, en cada una de las iteraciones del bucle tendremos en la variable declarada el elemento actual de la
expresin.Portanto,paraelcasodelosarraysydelascoleccionesdeobjetos,serecorrerdesdeelprimerelementoquelosformahastael
ltimo.

Observa el contenido del cdigo representado en la siguiente imagen, puedes apreciar cmo se construye un bucle de este tipo y su
utilizacinsobreunarray.

Ejemplodeusodefor/in

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 10/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
Ejemplodeusodefor/in

Descripcin:cdigodelaimagendeejemplousandofor/in
Losbuclesfor/inpermitirnalprogramadordespreocuparsedelnmerodevecesquesehadeiterar,peronosabremosenquiteracinnos
encontramossalvoqueseaadaartificialmentealgunavariablequeactecomocontadorparaquenospuedaofrecerestainformacin.

Autoevaluacin
Completaloshuecosconlapalabraadecuada.
Laestructurafor/insepuedeusarcon y deobjetos,yelfuncionamientoes:

Se unavariabledeltipodeelementosquecontieneelarrayolacoleccin.
Apartirdeah,sevan todosycadaunodelosobjetosquecontiene.
Alvisitarcadaunodeellos,se comovaloralavariabledeclaradayse las
delcuerpodelcicloparaeseobjeto.
Se pasa al siguiente objeto de la coleccin o del array, y as sucesivamente, hasta que se procesen
.

Enviar

4.3. Estructura repetitiva while.


Enlasiguienteimagenpuedesverundiagramadeflujoquerepresentaelfuncionamientodeestetipodeestructurarepetitiva.

Elbuclewhileeslaprimeraestructuraderepeticincontroladaporsucesosquevamosaestudiar.Lautilizacindeestebuclerespondeal
planteamientodelasiguientepregunta:

Qupodemoshacersilonicoquesabemosesquesehanderepetirunconjuntodeinstruccionesmientrassecumplaunadeterminada
condicin?

Lacaractersticafundamentaldeestetipodeestructurarepetitivaestribaensertilenaquelloscasosenlosquelasinstruccionesque
formanelcuerpodelbuclepodrasernecesarioejecutarlasono.

Esdecir,enelbuclewhilesiempreseevaluarlacondicinquelocontrola,ysidichacondicinescierta,elcuerpodelbucleseejecutaruna
vez,yseseguirejecutandomientraslacondicinseacierta.Perosienlaevaluacininicialdelacondicinstanoesverdadera,elcuerpo
delbuclenoseejecutar.

Esimprescindiblequeenelinteriordelbuclewhileserealicealgunaaccinquemodifiquelacondicinquecontrolalaejecucindelmismo,
encasocontrarioestaramosanteunbucleinfinito,queesalgoquesedebeevitarsiempre.

Autoevaluacin
Delasafirmacionessiguientes,marcalasqueteparezcancorrectas.

Cualquierproblemaquesepuedaresolverconestructurastipofortambinesposibleresolverloconestructurastipowhile.

Los ciclos while son adecuados para aquellos casos en los que sabemos que las instrucciones del cuerpo del bucle se
debenejecutaralmenosunavez.

Paracasosenlosquesabemosexactamentecuntasvecesdebeejecutarseelbloquedesentenciascontenidodelciclo,
whileesmuchomsadecuadoquefor,porqueaunquehacelomismo,permitepresentarelcdigodeunamanerams
simpleyclara.

Loscicloswhilerequierenquedentrodelassentenciasdelbuclehayaalgunaquemodifiqueelvalordelacondicinque
controlaelbucle.

Mostrarretroalimentacin

4.3.1. Estructura while en pseudocdigo.


Cmopodemosrepresentarlaestructuratipowhileenpseudocdigo?

Unavezmselobjetivoeselegirunaformaqueseaclaraparacualquierpersona,yqueevitetodaambigedad.

Nuestrapropuestalapuedesverenlasiguientetabla,dondetambinsemuestraunejemplo.

Pseudocdigoparalaestructurarepetitivatipowhile<br/>
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 11/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
Pseudocdigoparalaestructurarepetitivatipowhile<br/>

Representacinenpseudocdigo Ejemploenpseudocdigo

Veamoscmoquedaraelpseudocdigoparaelejemploquepermiterepresentarenpantallalatabladel7.
Sepresentaengrisatenuadotodoelcdigo,salvoeldelaestructuradelbuclewhile.

ProgramaRepetitivaTipoWhile
/*Enesteejemploseutilizalaestructurarepetitivawhile
*pararepresentarenpantallalatablademultiplicardelsiete
*/
Inicio
/*Declaracindevariables*/
numero,contador,resultado:entero

MientrascondicinHacer <spanstyle="color:#808080"><code>/*Inicializacindevariables*/
sentencia1 numero<7
sentencia2 resultado<0
...
sentenciaN /*Salidadeinformacin<spanstyle="color:#808080"><code>*/
Finmientras Escribir("Tablademultiplicardel",numero)
Escribir("..............................")

/*Utilizamosahoraelbuclewhile.<br/>*Primeroinicializamoslavariablecontador.<br/>*/
contador<1<br/><spanstyle="color:#808080"><code>/*Establecemoslacondicindelbucle<br/>*Fjateenquelaltimasentenciadelbucleesactualizarel<br/>*valordecontador,lavariabledecontroldelbucle.<br/>*/
Mientrascontador<=10Hacer
resultado<contador*numero
Escribir(numero,"x",contador,"=",resultado)
contador<contador+1
Finmientras
Fin

Funcionamiento:

Seevalalacondicindecontroldelbucle.
Siescorrecta,seejecutanlassentenciasquehayenelcuerpodelbucle,ysevuelveacomprobarlacondicinparaversihayqueseguirejecutandolassentencias.
Siesfalsa,seterminalaejecucindelbucleysaltaalasiguientesentenciadetrsdelmismo.

Resumidamente:

Silacondicinesdeentradafalsa,lassentenciasnoseejecutanningunavez.Siescierta,seejecutarnrepetidamente,mientrasquetrascadaiteracinsecompruebequela
condicinsiguesiendoverdadera.Cuandolacondicinseafalsa,elbucletermina.

4.3.2. Estructura while en Java.


AcontinuacinvamosapresentartelasintaxisdeloscicloswhileenJava.

Estructurarepetitivawhile.

Sintaxisparaelcasodeunasolasentenciaenelcuerpodel Sintaxisparaelcasodeununbloquedesentenciasenelcuerpo
buclewhile delbuclewhile

<br/>

while(condicin){
sentencia1
while(condicin)

sentencia
sentenciaN
}

Funcionamiento:

Mientraslacondicinseacierta,elbucleserepetir,ejecutandolasinstruccionesdesuinterior(unaovarias).Enelmomentoenel
quelacondicinnosecumpla,elcontroldelflujodelprogramapasaralasiguienteinstruccinqueexistajustodetrsdelbucle
while.
Lacondicinseevaluarsiemprealprincipio,ypodrdarseelcasodequelasinstruccionescontenidasenlnolleguenaejecutarse
nuncasinosesatisfacelacondicindepartida.

Recomendacin
Errordeprogramacin

Sienelcuerpodeunainstruccinwhilenoseproporcionaunaaccinqueocasionequeenalgnmomentolacondicindeun
whilenosecumpla,porlogeneralseproducirunerrorlgicoconocidocomocicloinfinito,enelqueelciclonuncaterminar

Debesconocer
Accedealsiguientearchivojavaypodrsanalizarunejemplodeutilizacindelbuclewhileparalaimpresinporpantalladela
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
utilizandoelbuclefor.

Usolaestructurarepetitivawhile.(0.01MB)

Autoevaluacin
Utilizandoelsiguientefragmentodecdigoestamosconstruyendounbucleinfinito.

IMPORTANTE! Lee con atencin la retroalimentacin, porque en ella se explican algunos aspectos muy a tener en cuenta
sobrelaformacindeciclosconestetipodecondiciones.

while(true)System.out.println("Imprimiendodesdedentrodelbucle...")

Verdadero Falso

4.4. Estructura repetitiva dowhile.


http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 12/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
4.4. Estructura repetitiva dowhile.
Enlasiguienteimagenpuedesverundiagramadeflujoquerepresentaelfuncionamientodeestetipodeestructurarepetitiva.

Laestructuradowhileesotrotipodeestructurarepetitivacontroladaporsucesos. En este caso, la pregunta que nos planteamos es la


siguiente:

Qupodemoshacersisabemosquesehandeejecutarunconjuntodeinstruccionesalmenosunavez,yquedependiendodelresultado,
puedequedebanseguirrepitindosemientrasquesecumplaunadeterminadacondicin?

Lacaractersticafundamentaldeestetipodeestructurarepetitivaestribaensertilenaquelloscasosenlosquelasinstruccionesqueforman
elcuerpodelbuclenecesitan serejecutadasalmenosunavezyrepetirsuejecucinmientrasquelacondicinseaverdadera.Portanto,en
estaestructurarepetitivaseejecutaelcuerpodelbuclesiempreunaprimeravez .

Como en el caso de while, para dowhile tambin es imprescindible que en el interior del bucle se realice alguna accin que modifique la
condicinquecontrolalaejecucindelmismo,encasocontrarioestaramosanteunbucleinfinito.

Autoevaluacin
Indicaculeslaestructuradecontroldeflujorepetitivaocclicaquegarantizaquelassentenciasdelcuerpodelbucle
seejecutarnalmenosunaprimeravez,conindependenciadelvalordelacondicinenelmomentodecomenzarla
ejecucindelciclo.

dowhile.

for.

while.

for/in.

switch.

4.4.1. Estructura dowhile en pseudocdigo.


Cmopodemosrepresentarlaestructuratipodowhileenpseudocdigo?

Unavezmselobjetivoeselegirunaformaqueseaclaraparacualquierpersona,yqueevitetodaambigedad.

Nuestrapropuestalapuedesverenlasiguientetabla,dondetambinsemuestraunejemplo.

Pseudocdigoparalaestructurarepetitivatipodowhile<br/>

Representacinenpseudocdigo Ejemploenpseudocdigo

Veamoscmoquedaraelpseudocdigoparaelejemploquepermiterepresentarenpantallalatabladel7.
Sepresentaengrisatenuadotodoelcdigo,salvoeldelaestructuradelbucledowhile.

ProgramaRepetitivaTipoDoWhile
/*Enesteejemploseutilizalaestructurarepetitivawhile
*pararepresentarenpantallalatablademultiplicardelsiete
*/
Inicio
/*Declaracindevariables*/
numero,contador,resultado:entero

Hacer <spanstyle="color:#808080"><code>/*Inicializacindevariables*/
sentencia1 numero<7
sentencia2 resultado<0
...
sentenciaN /*Salidadeinformacin<spanstyle="color:#808080"><code>*/
Mientras(condicin) Escribir("Tablademultiplicardel",numero)
Escribir("..............................")

/*Utilizamosahoraelbuclewhile.<br/>*Primeroinicializamoslavariablecontador.<br/>*/
contador<1<br/><spanstyle="color:#808080"><code>/*Establecemoslacondicindelbucle<br/>*Fjateenquelaltimasentenciadelbucleesactualizarel<br/>*valordecontador,lavariabledecontroldelbucle.<br/>*/
Hacer
resultado<contador*numero
Escribir(numero,"x",contador,"=",resultado)
contador<contador+1
<code>Mientrascontador<=10
Fin

Funcionamiento:

Elcuerpodelbucleseejecutalaprimeravez,acontinuacinseevaluarlacondicinysistaesverdadera,elcuerpodelbuclevolverarepetirse,yassucesivamente,hastaque
lacondicinseafalsa.
Elbuclefinalizarportanto,cuandolaevaluacindelacondicinseafalsa.Enesemomento,elcontroldelflujodelprogramapasaralasiguienteinstruccinqueexistajusto
detrsdelbucledowhile.
Lacondicinseevaluarsiempredespusdeunaprimeraejecucindelcuerpodelbucle,porloquenosedarelcasodequelasinstruccionescontenidasenlnolleguena
ejecutarsenunca.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 13/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
ejecutarsenunca.

Resumidamente:

"Primerodisparayluegopregunta".

4.4.2. Estructura dowhile en Java.


EselturnodeverculserlasintaxisdelaestructuradowhileenJava.

Estructurarepetitivadowhile.

Sintaxisparaelcasodeunasolasentenciaenelcuerpodel Sintaxisparaelcasodeunbloquedesentenciasenelcuerpodel
bucledowhile bucledowhile

do{
do sentencia1
sentencia
while(condicin) sentenciaN
}while(condicin)

Funcionamiento:

Elcuerpodelbucleseejecutalaprimeravez,acontinuacinseevaluarlacondicinysistaesverdadera,elcuerpodelbucle
volverarepetirse,yassucesivamente,hastaquelacondicinseafalsa.
Elbuclefinalizarcuandolaevaluacindelacondicinseafalsa,portanto.Enesemomentoelcontroldelflujodelprogramapasar
alasiguienteinstruccinqueexistajustodetrsdelbucledowhile.
Lacondicinseevaluarsiempredespusdeunaprimeraejecucindelcuerpodelbucle,porloquenosedarelcasodequelas
instruccionescontenidasenlnolleguenaejecutarsenunca.

Resumidamente:

"Primerodisparayluegopregunta".

Debesconocer
Accedealsiguientearchivojavaypodrsanalizarunejemplodeutilizacindelbucledowhileparalaimpresinporpantallade
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
utilizandoelbucleforyelbuclewhile.

Usodelaestructurarepetitivadowhile.(0.01MB)

Recomendacin
Buenaprcticadeprogramacin

Incluyesiemprellavesenunainstruccindowhile,ancuandoestasnoseannecesarias.Estoayudaaeliminarambigedad
entrelasinstruccioneswhileydowhilequecontienenunasolainstruccin.

Autoevaluacin
Enlassentenciasdowhile,quhayquetenersiemprepresente?

Lanecesidaddeduplicarelcdigodelassentenciasdecontroldelbuclejustoantesdeentraralmismo,deformaquese
garanticeasquealmenossevanaejecutarunavez.

Lanecesidaddequedentrodelcuerpodelbucleseincluyaalgunasentenciaquemodifiquelavariabledecontroldelciclo,
de forma que pueda verse alterado el valor de verdad de la condicin que controla el bucle de tal manera que
garanticemosqueenalgnmomentosealcancelacondicindesalida,sinentrarenunbucleinfinito.

Laposibilidaddequeelbuclenoseejecutenunca,porloquelasentenciaquemodifiquelavariabledecontroldelbucle
debe ser previa al dowhile, o de lo contrario estaramos dejando la puerta abierta a que nunca se modificara esa
sentencia,yportanto,nuncasealcanzaralacondicindesalida,produciendounbucleinfinito,queesalgoquesiempre
hayqueevitar.

Lasrespuestasanterioressontodasincorrectas.

Autoevaluacin

Unbucletipodowhile,quenocontengaensucuerponingunasentenciacapazdemodificarelvalordeverdaddelacondicin
quecontrolaelciclo,obienseejecutaunasolavez,obienentraenunbucleinfinitoejecutndoseindefinidamente.

Verdadero Falso

Recomendacin
Apartirdeahora,pensamosquenodebemosirmsallconelpseudocdigo,queaestasalturasdebehabercumplidoconsu
cometido fundamental en este curso, que es ayudar a entender las estructuras de control de flujo. Podramos seguir
considerandoestructurasdesaltocondicionalenpseudocdigo,llamadasarutinasoprocedimientos,subprogramas,etc.,pero
apartirdeestepunto,creemosquenoaportaraclaridad,sinotodolocontrario.

Portanto,lonicoquequedaporverdepseudocdigosonalgunosejemplosresueltosquepuedascompararconsusolucin
enJava.EsloqueteofrecemosenelAnexoIalfinaldelaunidad.Puedessaltarallaveresosejemploscuandogustes,pero
pensamosqueahoraesunbuenmomento.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 14/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

5. Estructuras de salto incondicional.

Casoprctico
Juan recuerda que algunos lenguajes de programacin permitan realizar saltos a lo largo de la
ejecucin de los programas, incluso a zonas remotas del cdigo, saltndose los mbitos de las
estructurasdecontroldeflujoincluso,yconocealgunassentenciasqueansesiguenutilizandopara
ello.LepreguntaaAda:

Esposibleprescindirporcompletodelasestructurasdesaltoincondicional?Esposibleprogramar
cualquiersaltoincondicionaldeformaqueseprescindadel,yslosehaganlossaltosligadosalas
estructurasdecontrolcondicionalesocclicas,trascomprobarsuscondiciones?

Ada,mientrastomaunlibrosobreJavadelaestanteradeldespacho,leaconseja:
Stockbyte.
Usoeducativonocomercial
Las instrucciones de salto incondicional a veces han sido mal valoradas por la comunidad de
paraplataformaspblicas
deFormacinProfesionala
programadores,peroenJavaalgunasdeellassontotalmentenecesarias.Tambinesverdadquelas
distancia.CDDVDNum.V43

situaciones en las que resultan o bien tiles o bien necesarias estn muy delimitadas, y que usarlas fuera de esos casos
concretosesengeneralevitable,yademsresultamuydesaconsejable,yaqueproducecdigomenosclaro,difcildeentender
ydemantener,yportantomscostoso,asqueyotevoyapedirquetengasmuyclarocundodebesusarlasycundodebes
evitarlas,porqueenestaempresaqueremoshacersoftwaredecalidadabuenprecio.Mira,enestelibrosehabladelusodelas
sentenciasbreak,continueyreturnenJava.

Vale,voyaempaparmedelasunto.Graciasporellibro.

Saltaronosaltar?Heahlacuestin.

EnlagranmayoradelibrosdeprogramacinypublicacionesdeInternet,siempresenosrecomiendaqueprescindamosdesentenciasde
saltoincondicional,esms,sedesaconsejasuusoporprovocarunamalaestructuracindelcdigoyunincrementoenladificultad
paraelmantenimientodelmismo.

PeroJavaincorporaciertassentenciasoestructurasdesaltoqueesnecesarioconocer,queenalgunoscasossonimprescindibles,yquepor
tantosontilesenalgunaspartesdenuestrosprogramas.

EnJava,lasestructurasdesalto incondicional estn representadas por las sentenciasbreak, continue,lasetiquetasdesalto y la sentencia


return.

No obstante, esos usos deben ser siempre compatibles con los principios de la programacin estructurada, que promueven
seguirunaseriedereglas:

Limitarelusodeestructurasdecontrolalastresestudidashastaahora:secuencial,selectivayrepetitiva.
Mantener el principio de "una entrada una salida". Eso implica que cualquier bloque de cdigo debe tener una nica
entradayunanicasalida.Estodesdeluego,seconsiguelimitandoelusodelastresestructurasanteriores,yaquetodas
tienenunaentradayunasalida,perotambinhayquetenerlopresenteenloscasosenlosquehagamosusodesentencias
de salto. Un buen ejemplo sera la sentencia switch, que requiere usar los break para evita rel efecto de "ejecucin en
cascada",peroquenoporellorompeelprincipiodelaentradanicaysalidanica.
Evitar saltos a regiones remotas de cdigo. Incluso en los casos en los que se estime que usar sentencias de salto
incondicionalpuedemejorarlaclaridaddelcdigo,debenevitarselossaltosaregionesremotasdelcdigo,yaqueresultan
difcilesdeseguiralahoradehacerelmantenimientodelcdigoyportantoproducencdigopococlaro,difcildeentendery
demantener,ycostosodedesarrollar.

EnlossiguientessubepgrafesvamosaanalizarlasintaxisyfuncionamientodelassentenciasdesaltoincondicionalenJava.

5.1. Sentencias break y continue.


Setratadedosinstruccionesquepermitenmodificarelcomportamientodeotrasestructurasosentenciasde
control,simplementeporelhechodeestarincluidasenalgnpuntodesusecuenciadeinstrucciones.

Lasentenciabreakincidirsobrelasestructurasdecontrolswitch,while,forydowhiledelsiguientemodo:

Siapareceunasentenciabreakdentrodelasecuenciadeinstruccionesdecualquieradelasestructuras
mencionadasanteriormente,dichaestructuraterminarinmediatamente.
Siapareceunasentenciabreakdentrodeunbucleanidadoslofinalizarejecucindelbuclemsinterno
enelqueseencuentra,elrestoseejecutadeformanormal.

Esdecir,quebreaksirvepararomperelflujodecontroldeunbucle,aunquenosehayacumplidolacondicin
delbucle.Sicolocamosunbreakdentrodelcdigodeunbucle,cuandosealcanceelbreak,automticamente
sesaldrdelbuclepasandoaejecutarselasiguienteinstruccininmediatamentedespusdel.

Enlasiguienteimagenampliable,puedesapreciarcmoseutilizaralasentenciabreakdentrodeunbuclefor.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 15/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

Descripcin:cdigodelaimagenparaelejemplousandobreak

Recuerda!
Debemos saber cmo funciona break, pero su uso, salvo en el caso del switch, donde es obligado usarlo para evitar una
"ejecucinencascada",sedesaconseja,ysiempreesevitable.
La salida de cualquier ciclo usando break es en general una mala prctica de programacin, que esconde una mala
planificacin de la lgica asociada al ciclo .Lasalida natural y nica de cada ciclo debe ser comprobando la condicin de
controldelmismo,nicopuntodondedebemoscomprobarsihallegadoonoelmomentodeterminarlo.Cualquiercomprobacin
de cualquier condicin de salida dentro del cuerpo del bucle para forzar la salida del bucle desde el interior del mismo usando
break,deberahaberseincorporadoalacondicindecontroldelmismo,ysuponeirabriendopuertastraserasdesalidaquehacen
queelcdigosehagacadavezmscomplicadodeentenderymantener.Evitausarbreaksiemprequeseaposible!!Ysalvoel
casodeswitch,siempreesposible.

Lasentenciacontinueincidirsobrelassentenciasoestructurasdecontrolwhile,forydowhiledelsiguientemodo:

Si aparece una sentencia continue dentro de la secuencia de instrucciones de cualquiera de las sentencias anteriormente indicadas,
dichasentenciadarporterminadalaiteracinactualyseejecutaunanuevaiteracin,evaluandodenuevolaexpresincondicionaldel
bucle.
Siapareceenelinteriordeunbucleanidadosolodetendrlaejecucindelaiteracindelbuclemsinternoenelqueseencuentra,el
restoseejecutaradeformanormal.

Esdecir,lasentenciacontinueforzaraqueseejecutelasiguienteiteracindelbucle,ignorandoysaltndoselasinstruccionesquepudiera
haberdespusdelcontinue,yhastaelfinaldelcdigodelbucle,paraestaiteracin.

En la siguiente imagen, puedes apreciar cmo se utiliza la sentencia continue en un bucle for para imprimir por pantalla slo los nmeros
pares.

Descripcin:cdigodelaimagenparaelejemplousandocontinue

Recuerda!!
Con la sentencia continue, tambin se desaconseja el uso. Igual que pasaba con el uso de break, es en general una mala
prcticadeprogramacin,queescondeunmaldiseodelalgicaasociadaalciclo .Dehecho,lasentenciacontinue,comoenel
ejemplo de la imagen anterior, se pondra dentro de un if para que se ejecute dependiendo de una condicin. La sentencia
continueloquehaceimplcitamentedehecho,esmeterlasdemssentenciasquesiguenapartirdeellaenuna"invisible"clusula
elsedelcondicional,yaqueslosernalcanzablesyejecutablesenelcasodequelacondicinseafalsayportantonoseejecute
continue. Si un grupo de sentencias del bucle deben dejar de ejecutarse bajo ciertas circunstancias, lo que hay que hacer es
incluirlasenuncondicionalquecompruebedichacondicin,yquesesalteesassentenciascuandoseaoportuno.

Para clarificar algo ms el funcionamiento de ambas sentencias de salto, vuelve a mirar detenidamente el diagrama representativo del
comienzodeesteepgrafe.

Reflexiona
Cmoreescribiraselcdigodelosdosejemplosasociadosalasimgenesampliablesdelapartado,paraconseguir
elmismofuncionamiento,perosinusarsentenciasbreaknicontinue?

Mostrarretroalimentacin

Autoevaluacin

La instruccin break puede utilizarse en las estructuras de control switch, while, for y dowhile, pudiendo omitirse en la
clusuladefaultdelaestructuraswitch.

Verdadero Falso

5.2. Etiquetas.
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 16/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
5.2. Etiquetas.
Yaloindicbamosalcomienzodelepgrafededicadoalasestructurasdesalto:

Lossaltosincondicionalesyenespecial,saltosaunaetiquetasontotalmentedesaconsejables.

No obstante, Java permite asociar etiquetas cuando se va a realizar un salto, y por tanto es conveniente saber que
existenycmoseusan.

Lasestructurasdesaltobreaky continue,puedentenerasociadasetiquetas.Esaloquesellamaunbreaketiquetadoo
uncontinueetiquetado.Peroslopodraestarindicadosuusocuandosehacenecesariosalirdebuclesanidadoshacia
diferentesniveles,paraindicaraqunivelnostrasladaunasentenciabreako continue.Noobstante,desdeelmomento
quecualquiersalidaporlapuertatraseradeunbucleusandobreako continuees indeseableyevitable .Silascosasse
hanhechobien,nodeberahabertalessalidas,yportanto,nodeberasernecesariorecurriraetiquetas.
Abrev
Ycmosecreaunsaltoaunaetiqueta?

Enprimerlugar,crearemoslaetiquetamedianteunidentificadorseguidodedospuntos(:).Acontinuacin,seescribenlassentenciasJava
asociadasadichaetiquetaencerradasentrellaves.Porasdecirlo,lacreacindeunaetiquetaescomofijarunpuntodesaltoenelprograma
parapodersaltaraldesdeotrolugardedichoprograma.

Cmosellevaacaboelsalto?

Es sencillo, en el lugar donde vayamos a colocar la sentencia break o continue, aadiremos detrs el identificador de la etiqueta. Con ello,
conseguiremosqueelsaltoserealiceaunlugardeterminado.Lasintaxisserbreak<etiqueta>.

QuizaquieneshayisprogramadoenHTMLossueneestaherramienta,yaquetieneciertasimilitudconlasanclasquepuedencrearseen
elinteriordeunapginaweb,alasquenosllevarelhiperenlaceolinkquehayamosasociado.

TambinparaquieneshayiscreadoalgunavezarchivosporlotesoarchivosbatchbajoMSDOSesprobablequetambinosresultefamiliar
elusodeetiquetas,pueslasentenciaGOTOqueseutilizabaenestetipodearchivos,hacasaltarelflujodelprogramaallugardondese
ubicabalaetiquetaqueseindicaraendichasentencia.

Acontinuacin,teofrecemosunejemplodedeclaracinyusodeetiquetasenunbucle.Comopodrsapreciar,lassentenciasasociadasa
cadaetiquetaestnencerradasentrellavesparadelimitarassumbitodeaccin.

Ejemplodecdigousandoetiquetas.

Descripcin:cdigodelaimagensobreejemplodeusodeetiquetas

5.3. Sentencia return.


Yasabemoscmomodificarlaejecucindebuclesyestructurascondicionalesmltiples,pero,podramosmodificar
la ejecucin de un mtodo? Es posible hacer que stos detengan su ejecucin antes de que finalice el cdigo
asociadoaellos?Sesposible,yenJavaatravsdelasentenciareturnpodremosconseguirlo.

Lasentenciareturnpuedeutilizarsededosformas:

Paraterminarlaejecucindel mtododondeestescrita,conloquetransferirelcontrolalpuntodesde
elquesehizolallamadaalmtodo,continuandoelprogramaporlasentenciainmediatamenteposterior.
Para devolver o retornar un valor, siempre que junto a return se incluya una expresin de un tipo
determinado.Portanto,enellugardondeseinvocalmtodoseobtendrelvalorresultantedelaevaluacin
delaexpresinqueacompaabaalmtodo.

Engeneral,unasentenciareturndebeapareceralfinaldeunmtodo,deestemodoelmtodotendrunaentraday Fudgecrackers34

unasalida,cumpliendoconunodelosprincipiosdelaprogramacinestructurada,deformaquelasalidanaturalparacualquiermtodoser
ejecutarlaltimasentenciaquecontiene,yquedebeserunreturn.Noobstante,tambinesposibleutilizarunasentenciareturnencualquier
puntodeunmtodo,conloquestefinalizarenellugardondeseencuentredichoreturn.Perodeestaforma,estaramoscreando"puertas
traseras"quecomplicaranlacomprensindelcdigo,yloharanmsdifcildeentenderymantener,pudiendogenerarefectoscolaterales
oscurosnoprevistosquederivenenunmalfuncionamiento.

PortantoserecomiendaNOincluirmsdeunreturnenunmtodo,quedeberiralfinaldelmismo,comosalidanatural.

Elvalorderetornoesopcional,silohubieradeberadeserdelmismotipoodeuntipocompatibleconeltipodelvalorderetornodefinidoen
lacabeceradelmtodo,pudiendoserdesdeunenteroaunobjetocreadopornosotros.Sinolotuviera,eltipoderetornoseravoid,y return
serviraparasalirdelmtodosinnecesidaddeaadirleningnvalorniexpresindetrs.

Parasaberms
Enelsiguientearchivo.javaencontrarselcdigodeunprogramaqueobtienelasumadedosnmeros,empleandoparaello
unmtodosencilloqueretornaelvalordelasumadelosnmerosqueselehanpasadocomoparmetros.Prestaatencina
loscomentariosyfjateenlasconversionesaenterodelaentradadelosoperandosporconsola.

Usodereturnenmtodos.(1.70KB)

Autoevaluacin
Quafirmacinescorrecta?

Conreturn,sepuedefinalizarlaejecucindelmtodoenelqueseencuentre.

Conreturn,siempreseretornarunvalordelmismotipoodeuntipocompatiblealdefinidoenlacabeceradelmtodo.

Con return, puede retornarse un valor de un determinado tipo y suele hacerse al final del mtodo. Adems, el resto de
respuestastambinsoncorrectas.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 17/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

6. Excepciones.

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

Para evitar estas situaciones, Ada va a fomentar en Mara y Juan la cultura de la deteccin,
controlysolucindeerroresatravsdelaspoderosasherramientasqueJavalesofrece.
Stockbyte.Usoeducativonocomercial
paraplataformaspblicasde
FormacinProfesionaladistancia.
CDDVDNum.V43

AlolargodenuestroaprendizajedeJavanoshemostopadoenalgunaocasinconerrores,perostossuelenserlosquenoshaindicadoel
compilador.Unpuntoycomaquefaltaporaqu,unnombredevariableincorrectoporall,puedenhacerquenuestrocompiladornosavisede
estosdescuidos.Cuandolosvemos,secorrigenyobtenemosnuestraclasecompiladacorrectamente.

Pero,sloexisteestetipodeerrores?Podranexistirerroresnosintcticosennuestrosprogramas?

Estclaroques,unprogramaperfectamentecompiladoenelquenoexistenerroresdesintaxis,yquenose
detectan por tanto en tiempo de compilacin, puede generar otro tipo de errores que quiz aparezcan
cuando estamos usando nuestro programa, en tiempo de ejecucin. A estos errores se les conoce como
excepciones, y seguramente has experimentado ya los efectos de este tipo de errores en algn pequeo
programa que, por ejemplo, reciba un nmero real o una cadena de caracteres como entrada, cuando el
cdigoestesperandounnmeroentero.Sitodavanohasexperimentadoesto,esunbuenmomentopara
probarloyverqupasa.

Aprenderemosagestionardemaneraadecuadaestasexcepcionesytendremoslaoportunidaddeutilizarel GNUFreeDocumentationLicenseErikvanLeeuwen
potentesistemademanejodeerroresqueJavaincorpora.Lapotenciadeestesistemademanejodeerroresradicaenque:

1.Elcdigoqueseencargademanejarloserrores,esperfectamenteidentificableenlosprogramas.Estecdigopuedeestarseparado
delcdigoquemanejalaaplicacin.
2.Javatieneunagrancantidaddeerroresestndarasociadosamultituddefalloscomunes,comoporejemplodivisionesporcero,
fallosdeentradadedatos,formatonumricoerrneo,ndicefueraderangoenunarrayoenunacadena,argumentosnovlidosenun
mtodo,yunlargoetc.Altenertantasexcepcioneslocalizadas,podemosgestionardemaneraespecficacadaunodeloserroresque
seproduzcan.

EnJavasepuedenprepararlosfragmentosdecdigoquepuedenprovocarerroresdeejecucinparaquesiseproduceunaexcepcin,el
flujodelprogramaseaalterado,transfiriendoelcontrolhaciaciertaszonasorutinasquehansidocreadaspreviamenteporelprogramadory
cuyafinalidadsereltratamientoefectivodedichasexcepciones.Estasrutinassonlanzadas(throw),ytomanelcontroldelasituacin,de
forma que permiten capturar (catch) la excepcin producida, y darle un tratamiento adecuado, o al menos terminar lo ms ordenadamente
posiblelaejecucindelprograma,encasodequesetrataradeunerrorirrecuperable.Sinosecapturalaexcepcin,elprogramasedetendr
contodaprobabilidad,aunquealmenospodrdarunainformacinprecisaydetalladadequtipodeerrorsehaproducido,enqulneade
cdigo, qu secuencia de instrucciones se han ejecutado hasta llegar a esa situacin. Todo ello es informacin til a la hora de corregir el
error.

EnJava,lasexcepcionesestnrepresentadasporclases.Laclasejava.lang.Exceptioncontienetodoslostiposdeexcepciones.Todaslas
excepcionesderivarndelaclaseThrowable,existiendoclasesmsespecficas.PordebajodelaclaseThrowableexistenlasclasesErrory
Exception.

LaclaseErrorseencargardeloserroresqueseproduzcanenlamquinavirtual,noennuestrosprogramas,yqueportanto,quedan
fueradelalcancedeloquenosotrospodemoscorregir.
LaclaseExceptionserlaquenosintereseconocer,puesgestionaloserroresprovocadosennuestrosprogramas.

Java lanzar una excepcin en respuesta a una situacin poco usual. Cuando se produce un error se genera un objeto asociado a esa
excepcin.EsteobjetoesdelaclaseExceptionodealgunadesusherederas.Esteobjetosepasaalcdigoquesehadefinidoparamanejar
laexcepcin.DichocdigopuedemanipularlaspropiedadesdelobjetoException.

El programador tambin puede lanzar sus propias excepciones. Para ello se usa la clusula throw (sin s, no confundir con
throws,cons,yque se ver en el epgrafe dedicado a delegacin deexcepciones).Elusuariopuededefinirexcepcionescomo
subclases de la clase Exception, o de alguna de alguna de sus subclases, y la clusula throw fuerza la generacin del error
invocando al mtodo constructor de un nuevo objeto del tipo de la excepcin que se quiere lanzar... Todo ello, para ser bien
entendido,requiereconocimientosdeprogramacinorientadaaobjetosquetodavanosehanabordadoenestecurso,porloque
seexplicarnuevamenteyyaconmsdetalleenprximasunidades.

LasexcepcionesenJavasernobjetosdeclasesderivadasdelaclasebaseException.Existetodaunajerarquadeclasesderivadadela
clasebaseException,quesedividenendosgruposprincipales:

Lasexcepcionesentiempodeejecucin,queocurrencuandoelprogramadornohatenidocuidadoalescribirsucdigo.
Lasexcepcionesqueindicanquehasucedidoalgoinesperadoofueradecontrol.

EnlasiguienteimagenteofrecemosunaaproximacinalajerarquadelasexcepcionesenJava.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 18/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

6.1. Capturar una excepcin con try.


Parapodercapturarexcepciones,emplearemoslaestructuradecapturadeexcepcionestrycatchfinally.

Bsicamente, para capturar una excepcin lo que haremos ser declarar bloques de cdigo donde es
posiblequeocurraunaexcepcin.

Estoloharemosmedianteunbloquetry(intentar).Siocurreunaexcepcindentrodeestosbloques,selanza
unaexcepcin.Estasexcepcioneslanzadassepuedencapturarpormediodebloquescatch.Serdentrode
estetipodebloquesdondeseharelmanejodelasexcepciones.

Susintaxises: BeatriceMurch

<strong>try</strong>{
cdigoquepuedegenerarexcepciones
}<strong>catch</strong>(Tipo_excepcion_1objeto_excepcion){
instruccionesparamanejarexcepcindeTipo_excepcion_1
}<strong>catch</strong>(Tipo_excepcion_2objeto_excepcion){
<code>instruccionesparamanejarexcepcindeTipo_excepcion_2
}<strong>catch</strong>(...){<br/>...<br/>}<strong>finally</strong>{
instruccionesqueseejecutansiempre
}

Enestaestructura,lapartecatchpuederepetirsetantasvecescomoexcepcionesdiferentessedeseencapturar.Lapartefinallyesopcionaly,
siaparece,solopodrhacerlounasolavez.

Cada catch maneja un tipo de excepcin. Cuando se produce una excepcin, se busca el catch que posea el manejador de excepcin
adecuado,serelqueutiliceelmismotipodeexcepcinquesehaproducido.Estopuedecausarproblemassinosetienecuidado,yaquela
claseExceptioneslasuperclasedetodaslasdems.Porloquesiseprodujo,porejemplo,unaexcepcindetipoAritmethicExceptionyel
primercatchcapturaeltipogenricoException,seresecatchelqueseejecuteynolosdems.

Poresoelltimocatchdebeserelquecaptureexcepcionesgenricasylosprimerosdebenserlosmsespecficos.Lgicamentesivamosa
trataratodaslasexcepciones(seandeltipoquesean)igual,entoncesbastaconunsolocatchquecaptureobjetosException.

EnlabibliografasobreexcepcionesenJava,frecuentementesecuestionalautilidaddelaclusulafinally,debidoaquealserinstrucciones
queseejecutansiempre,bienpodransacarsedelbloquedemanejodelaexcepcin.Esciertoquefinallynoaportalaposibilidaddehacer
nada que no se pueda conseguir hacer de forma igualmente clara sin finally, por lo que en lo que a este curso respecta, su uso queda a
criteriodelgustodequienprograma.Esos,hayquesaberqueexisteycmofunciona.

Ejercicioresuelto
RealizaunprogramaenJava en el que se solicite al usuario la introduccin de un nmero por teclado comprendido
entreel0yel100.

Utilizando manejo de excepciones, debes controlar la entrada de dicho nmero y volver a solicitarlo en caso de que
staseaincorrecta.

Mostrarretroalimentacin

Debesconocer
Sideseasconocerenmayordetalleelmanejodeexcepciones,teaconsejamoselsiguienteenlaceenelquepodrsencontrar
unvdeoilustrativosobresucreacinymanejo.

ExcepcionesenJava.
ResumentextualalternativoparaelvdeosobreexcepcionesJava

Autoevaluacin

Si en un programa no capturamos una excepcin, ser la mquina virtual de Javala que lo har por nosotros, pero
inmediatamentedetendrlaejecucindelprogramaymostraruna trazayunmensajedeerror.

Verdadero Falso

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 19/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

6.2. El manejo de excepciones con catch.


Esobligatorioentonceselmanejodeexcepciones,opodemosdejarquesealapropiamquinavirtualenltimainstanciaquienlascapturey
lastrate?

Comohemoscomentado,siempredebemoscontrolarlasexcepcionesquesepuedanproducirodelocontrarionuestrosoftwarequedar
expuestoafallos.Quelasexcepcioneslastratelapropiamquinavirtual,significahaberdejadoque"ocurralacatstrofe",yqueelprograma
seterminedeformaabrupta,loquenuncaesdeseable.

Lasexcepcionespuedentratarsededosformas:

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 para intentar reconducir la
situacin.
Reanudacin.Sepuedemanejarelerroryregresardenuevoalcdigoqueprovocelerror.

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

Ejemplodeestructuratrycatch

Descripcin:Cdigodelaimagenenarchivodetextoparaelejemplodeusodetrycatch.
Enesteejemplo,atravsdelafuncindegeneracindenmerosaleatorios(delaclaseMathqueincorporaJava),seobtieneelvalordel
ndicei.Condichovalorseaccedeaunaposicindelarrayquecontienecincocadenasdecaracteres.Esteacceso,avecespuedegenerar
unerrordeltipoArrayIndexOutOfBoundsException,quedebemosgestionaratravsdeuncatch.Alestarelbloquecatchdentrodeunwhile,
se seguir intentando el acceso hasta que no haya error, momento en que se mostrar el contenido del array para el ndice elegido, y se
terminarlaejecucindelciclo.

Debesconocer
Enesteenlacepuedesverexplicadoalgnejemplodeexcepciones.

Ejemplocomentadodeexcepciones.

Comolagestindeexcepcionesesunasuntobastanteimportante,teponemosunenlacemsconalgnejemploadicional.

ExcepcionesenJava

6.3. Delegacin de excepciones con throws.


http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 20/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
6.3. Delegacin de excepciones con throws.
Puedehaberproblemasconlasexcepcionesalusarllamadasamtodosennuestrosprogramas?

Efectivamente, si se produjese una excepcin es necesario saber quin ser el encargado de solucionarla.
Puedeserqueseaelpropiomtodollamadooelcdigoquehizolallamadaadichomtodo.

Quizpudiramospensarquedeberaserelpropiomtodoelqueseencarguedesusexcepciones,aunque
esposiblehacerquelaexcepcinsearesueltaporelcdigoquehizolallamada.Cuandounmtodoutiliza
unasentenciaquepuedegenerarunaexcepcin,perodichaexcepcinnoescapturadaytratadaporl,sino
queseencargasugestinaquinllamalmtodo,decimosquesehadelegadolaexcepcinoqueseha Stockbyte.
producidounadelegacindeexcepciones. Usoeducativonocomercial
paraplataformaspblicasde
FormacinProfesionaladistancia.
CDDVDNum.V43
Para establecer esta delegacin, en la cabecera del mtodo se declara el tipo de excepciones que puede
generaryquedebernsergestionadasporquieninvoqueadichomtodo.Utilizaremosparaellolasentenciathrows(cons,noconfundircon
throw, sin s, y que sirve para indicar el punto del cdigo donde se quiere lanzar una excepcin). Tras la palabra throws se indica qu
excepcionespuedeprovocarelcdigodelmtodo.Siocurreunaexcepcinenelmtodo,elcdigoabandonaesemtodoyregresaalcdigo
desdeelquesellamalmtodo.Allseposarenelcatchapropiadoparaesaexcepcin,quelacapturarymanejaradecuadamente.Sino
lohiciera,laexcepcinpuedeseguirpropagndosehastaqueenelpeordeloscasosllegaraalamquinavirtual,quelatrataraprovocando
queelprograma aborte.

Susintaxiseslasiguiente:

publicclassDelegacionDeExcepciones{
...
publicintleeAnio(BufferedReaderlector)<strong>throws</strong><strong>IOException,NumberFormatException</strong>{
Stringlinea=lector.readLine()
ReturnInteger.parseInt(linea)
}
...
}

DondeIOExceptionyNumberFormatException,serandosposiblesexcepcionesqueelmtodoleeAnio()podragenerar,peroquenogestiona.Por
tanto,unmtodopuedeincluirensucabeceraunlistadodeexcepcionesquepuedelanzar,separadasporcomas.

La clusula throws avisa al compilador de que ese mtodo puede generar errores, pero adems avisa al programador de que si usa ese
mtodo,deberacapturarymanejarlaexcepcinquepuedelanzar,yaquedelocontrarioelprogramapuede"abortar".

Debesconocer
Acontinuacintienesunartculomuyinteresantedondeseexplicalagestindeexcepcionesconejemplos.

Gestindeexcepciones

Parasaberms
Sideseassaberalgomssobreladelegacindeexcepciones,teproponemoselsiguienteenlace:

Excepcionesydelegacindestas.

AdemstevolvemosaremitiralvdeodemostrativosobremanejodeexcepcionesenJavaqueseincluyenelepgrafetitulado
"capturarunaexcepcincontry".

Autoevaluacin
Rellenaloshuecosconlaspalabrasadecuadas.
Lacapturaymanejode eslaformaenqueJavacontrolalos entiempode .
Para ello, se definen bloques de cdigo, mediante la palabra reservada seguida de llaves que delimitan el bloque de
cdigoenelquesepuedeproducirelerror.Cuandolaexcepcinseproduceelcontroldelprogramasetransfierealaprimera
clusula queencuentra,paracomprobarsielerroresdeltipodedeexcepcinqueahsecaptura,ysinoloessigue
comparandoconlassiguienesclusulas quepuedahaber.Siencuentracoincidenciaconalguna,ejecutaelbloquede
cdigoquecontenga,ytransfiereelcontrolalaclusula ,silahubiera.Estaclusula,deaparecer,seejecutar
siempre,tantosisehaproducido,capturadoytratadolaexcepcin,comosino.
El usuario puede crear sus propias excepciones, adems de forzar la generacin de alguna excepcin usando la sentencia
.Tambinpuededecidirqueunmtodonocapturenitrateunadeterminadaexcepcin,sinoquela para
que sea tratada por el cdigo que hizo la llamada, avisando de ello al compilador y al programador, con la inclusin de la
clusula seguidadelosnombresdelasexcepcionesque ,separadosporcomas,enlacabeceradela
declaracindelmtodo.
Enviar

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 21/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

7. Prueba de programas.

Casoprctico

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

JuanyMarayaconocandelaexistenciadeciertaspruebasquesesuelenhaceralsoftware,
pero necesitarn aprender bien las tcnicas y utilizar las herramientas que los entornos de
desarrolloofrecenparatalproceso.

Crees que es frecuente que los programas funcionen bien a la primera? Conoces alguna aplicacin que
saquefrecuentementeversionesnuevasparacorregirerroresdelasversionesanteriores?

Aveces,losprogramassoncomplejosyesdifcilhacerquestosfuncionencorrectamente.Laspruebasdel
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
modificacionesnecesariasqueeliminendichoerror.

Noobstante,lastcnicasdepruebadelsoftwarenogarantizanquetodosloserroresvayanasaliralaluz,yanas,habrprogramasde
grantamaoquesiganconteniendoerroresocultosenellos.Detodasmaneras,larealizacindepruebasdesoftwareestconsideradacomo
unaetapadegranimportanciaeneldesarrollodesoftware. Casilamitaddeltiempodedicadoaldesarrollodeunprograma,seempleaenla
realizacindepruebasalmismo .Enalgunasorganizaciones,larealizacindepruebasseconsideratanimportantequeexistenequiposde
desarrollodesoftwareenlosquehaytantosprobadoresdesoftwarecomoprogramadores.

Los procesos de prueba y depuracin requieren una considerable cantidad de tiempo y esfuerzo, hacindose difcil tomar una decisin
acertadaentrecontinuarlapruebadelprogramaoentregarloensuestadoactualalcliente.

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

Enestapartedelaunidadnoscentraremosenlastcnicasdepruebasistemticadeprogramas,verificacinyanlisisdedeficienciasdel
software.

Lastcnicasqueveremosson:

Pruebasdecajanegraotestfuncionales.
Pruebasdecajablancaotestestructurales.
Revisionesorecorridos.
Anlisispasoapasodelcdigoconundepurador(debugger).

Unpequeoprogramaqueconsistesloenunanicaclase,normalmentepuedeserprobadodeunasolavez.Encambio,unprogramade
mayor tamao que incluye ms cantidad de clases, es posible que por su complejidad, deba ser probado por partes. En Java, el tamao
naturaldecadaunadeesaspartesserlaclaseyserconvenienteprobarnuestrosprogramasclaseporclase.EstoesllamadoPruebasde
Unidad,ycuandoserealizanpruebasdefuncionamientoreuniendotodaslaspartesdelprogramacompleto,laspruebasrecibenelnombre
dePruebasdeIntegracinoPruebasdeSistema.

Autoevaluacin
Rellenalosespaciosconlosconceptosadecuados.
Enelprocesode setratadeconfirmarqueelprogramacumpleconsus .
Enviar

7.1. La especificacin.

Cmohacerunbuenprogramasinosabemosbienqudebehacer?

Elpuntodepartidaparacualquierpruebaeslaespecificacin.Nopodemosconsiderarunaprdidadetiempo
elanlisisclarodedichainformacin.Enocasiones,podrasernecesariovolveraentrevistaraunclienteoal
futurousuariodelprograma.

Paraentenderlaimportanciadeesteelemento,supongamoslasiguienteespecificacin:

Esnecesarioescribirunprogramaquesolicitelaentradaalusuariodenmerosatravsdecajasdetexto.Elprogramadebecalculary
mostrarlasumadelosnmeros.

Apriori,estaespecificacinpuedeparecersimpleyclara.Nadamslejosdelarealidad,yaqueexistenlagunascomo:

1.Losnmerossonenterosocomaflotante?
2.Culeselrangoyprecisindedichosnmeros?
3.Puedenincluirsenmerosnegativos?
4.Cuntosnmerosdebenleerseencadacaso?
5.etc.

Siestaspreguntasnosonaclaradasantesdequeelprogramadorolaprogramadoracomiencesutrabajo,puedenproducirsedificultadesen
eldesarrollodelprograma.Ycorregirunprogramaquefuncionamalsiempreesmscostosoqueinvertiralgodetiempoenasegurarsubuen
funcionamiento. Por tanto, ser parte del proceso de programacin el estudio de la especificacin para descubrir cualquier omisin o
confusinyparaconseguirunaespecificacintotalmenteclara.

Acontinuacinsemuestraunaversinmuchomsclaradelaespecificacinanterior:

Esnecesarioescribirunprogramaquesolicitelaentradaalusuariodeunaseriedenmerosenterosatravsdeunacajadetexto.Los
enteros estn en el rango 0 a 10.000. El programa calcula y muestra la suma de los nmeros, y estar pidiendo la introduccin de
nuevosnmeroshastaqueelusuarioindiquequequiereparar.

Comopuedesapreciar,estaespecificacinesmsprecisaalestablecerelrangopermitidodeentradadevalores,porejemplo.

Unavezvaloradalaimportanciadeunacorrectaespecificacin,elprogramadorpuedecomenzarelprocesodepruebasdelsoftwareatravs
delasherramientasquesedetallarnenlossiguientesepgrafesdelaunidad.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 22/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

7.2. Pruebas exhaustivas.

Hedeprobartodaslasposibilidades?

Es una pregunta que puede surgir cuando comenzamos a programar. Podramos pensar en que la realizacin de una
pruebarequeriraprobarnuestrosoftwarecontodoslosposiblesvaloresdeentrada.Estetipodepruebasedenomina
pruebaexhaustiva y significa que seleccionamos todos los posibles valores de entrada, as como todas sus posibles
combinacionesyhacemosquenuestroprogramaopereconellos.Pensemosunmomentoenelampliorangodeposibles
valoresquepuedentomarlosnmerosintdeJava.Teimaginasloquepuedesuponerrealizarunapruebadeestetipo?
Podramosestarhablandodeaos!

Enresumen,lapruebaexhaustiva(aunqueseaparaunprogramapequeo)noesfactible.Esimportantereconocer
quelapruebacompletadeprogramasnoesposible,porloquetendremosqueadoptarotrastcnicasmsadecuadas.

Autoevaluacin

Duranteunapruebaexhaustivahemosdeseleccionarunamuestradelosposiblesvaloresdeentradadelprogramay
hacerquestetomediferentescaminosdeejecucinparaverlosresultadosqueseobtienen.

Verdadero Falso

7.3. Pruebas de caja negra o pruebas funcionales.

Descartadaslaspruebasexhaustivas,unatcnicamsadecuadaparalarealizacindenuestraspruebaseselempleo
de las Pruebas de Caja Negra. Este tipo de pruebas se basa en utilizar unos datos de entrada que pueden ser
representativosdetodoslosposiblesdatosdeentrada.Conellos,seponeenfuncionamientoelprogramayseanaliza
quocurre.

Normalmente tendremos que seleccionar un conjunto de datos que incluyan valores lmite, mximos, mnimos, datos
errneosparavercmoreaccionaelcdigo,etc.,deformaquealprobarelprogramaconeseconjunto,podamosestar
razonablementetranquilosdequetodalacasusticaposiblehasidoprobada.

SellamandeCajaNegraporquenoseutilizaningnconocimientodelfuncionamientointernodelprogramacomopartedelaprueba,slose
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(nocmotrabajainternamente).

Inicialmente,seanotanlosdatosdepruebayelresultadoprevisto,antesdeejecutarlaprueba.Esaloquesedenominaespecificacino
planificacindelaprueba.Posteriormente,seponeelprogramaenfuncionamiento,seintroducenlosdatosyseexaminanlassalidaspara
ver si existen diferencias entre el resultado previsto y el resultado obtenido. Los datos de prueba debern tambin comprobar si las
excepcionessonmanejadasporelprograma,deacuerdoasuespecificacin.Esdecir,tendremosqueponerenaprietosanuestroprograma
atravsdeunosdatosdeentradadeterminados,paracomprobarsireaccionacorrectamentealasespecificacionesquedebacumplir.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 23/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

7.4. Pruebas de caja blanca o pruebas estructurales.

Pero realmente prueban nuestros datos todo el cdigo? Hemos probado todos los posibles caminos y ramificaciones que el
cdigocontiene?

Esteotrotipodepruebassebasaenelconocimientodelfuncionamientointernodelprograma,laestructuradelmismo,para
seleccionarlosdatosdeprueba.Alolargodelaspruebasdecajablancacadadeclaracinqueformapartedelprogramaesejecutadaen
algn momento. Por lo que cada secuencia de instrucciones o camino por el que pueda fluir el programa es ejecutada en alguna ocasin
durantedichaprueba.Considerndosecaminosnulos,sentenciascondicionalessimplesocompuestas,bucles,etc.Lapruebadeberincluir
cualquiercaminodelprogramaquepuedagenerarunaexcepcin.

Estetipodepruebasestmuyligadoalcdigofuentedelprograma,deformaquelapersonaquerealizalaspruebas,debeescogerdistintos
valoresdeentradaparachequearcadaunodelosposiblescaminosdeejecucinqueexistenenelprogramayverificarquelosresultadosde
cadaunodeellossonadecuados.

Autoevaluacin
Rellanalosespaciosconlosconceptosadecuados.
Si nos encontramos realizando pruebas y estamos examinando el funcionamiento de un bucle while, estaremos realizando
PruebasdeCaja .
Enviar

7.5. Otras pruebas.


http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 24/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

Citasparapensar

"Cuatroojosvenmsquedos".

Sabidurapopular

AdemsdelastpicaspruebasdeCajaBlancayNegra,existenotrastcnicasdepruebaquedetallamosacontinuacin:

Revisiones,inspeccionesorecorridos:
Esta tcnica no hace uso del computador para intentar erradicar errores en el cdigo. En un recorrido se estudia el
listadodelprograma(juntoconlaespecificacin)paraintentarhacervisibleslosposibleserrores.Esrecomendableque
quienlleveacaboelrecorridonosealamismapersonaquedesarrollelcdigoarevisar.

Sihasprogramadoalgunavez,quiztesueneestasituacin:

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
encuentraselfallo!Depronto,uncolegareleetucdigomientrassetomauncafyoyesdetrsdetiunavozquedice:
Anda,tefaltaunparntesisah!

Para llevar a cabo este tipo de prueba necesitaremos la especificacin del programa y el cdigo fuente en papel. Las acciones que
suelenrealizarseson:

Inspeccionarlainicializacindevariables.
Realizacindellamadasamtodoscorrectas.
Definicinadecuadadecabecerasdemtodos.
Parmetroscorrectos.
etc.
Posteriormente, se ha de llevar a cabo una revisin de la lgica del programa simulando ejecutar los mtodos como si furamos el
computador. Las pruebas de revisin o recorrido no comprueban el estilo del cdigo, sino posibles deficiencias que pueden provocar
errores.Estdemostradoquelosrecorridossonunavaadecuadaparaencontrarerrores.

Anlisispasoapaso:
ExistenalgunosentornosdedesarrolloparaJavaqueincorporandepuracinpasoapasodelcdigo.Estopermitealprogramadoroala
programadora 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
comprobarsielflujodelprogramaeselcorrecto,silosvaloresdelasvariablesvaranenfuncindelaejecucindelprograma,etc.

Estatcnicasueleconfirmarodesmentirlaexistenciadeundeterminadofallo,aunqueestmscercadeladepuracindeprogramas
quedelapropiapruebadelosmismos.

7.6. Realizacin de pruebas unitarias con JUnit.


Alcomienzodeestapartedelaunidaddedicadaalaspruebasydepuracindesoftware,hablamosdeuntipode
pruebasqueseaplicanacadaunadelasclasesquehayamosdefinido.Eranlas pruebasunitarias .

Es cierto que cualquier cdigo que escribamos debera de ser probado antes de dar por finalizada la
implementacindeunaclase,yaquesinonotendramoslatotalseguridadacercadesucorrectofuncionamiento.
Para verificar que el cdigo no contiene errores de programacin y que adems realiza adecuadamente lo que
esperbamosdel,serealizanunaseriedetestquelocorroboren.

Quin no ha ido escribiendo mensajes de salida de texto a lo largo de su cdigo para saber qu est haciendo
exactamentesuprograma?
Stockbyte.
Usoeducativonocomercial
Estaesunatcnicamuyutilizadaparacontrolarelvalordeciertasvariablesyparaladeteccindeposibleserrores, paraplataformaspblicasde
FormacinProfesionaladistancia..
loqueconfirmaquetodosrealizamospruebasanuestrosprogramasdealgunauotramanera. CDDVDNum.V43

Pero,existenformasmsavanzadas,eficientesysegurasdeprobarelcdigo?

S.PodemosutilizarparaelloJUnit.AtravsdeJUnittendremoslaposibilidadderealizartestanuestrasclasesdeformasencilla,rpiday
elegante,ascomovalidarlosresultadosquenosofrecen.

YquesJUnit?

Es un conjunto de bibliotecas que se utilizan en programacin para hacer pruebas unitarias a aplicaciones Java. El conjunto de clases
(framework)incluidasenJUnitpermitecontrolarlaejecucindelasclasesJava,detalformaquepodremosevaluarsielfuncionamientode
cadaunodelosmtodosdelaclaserealizasutrabajocomodebera.JUnitseempleaparaindicarsilaclaseencuestinhapasadolostest
deprueba,enotrocasosedevolverunanotificacindefalloenelmtodocorrespondiente.

Actualmente,elentornodedesarrolloNetBeanscuentaconpluginsquepermitenlageneracinautomticadeplantillasdepruebasdeclases
Java.

PorquutilizarJUnit?

AcontinuacintedamosalgunasrazonesdepesoporlaqueesteframeworkestmuyextendidoentrelacomunidaddeprogramadoresJava:

AtravsdelostestdeJUnitseincrementalacalidadyvelocidaddegeneracindecdigo.
Laescrituradetestessencilla.
LostestJUnitchequeansuspropiosresultadosyproporcionaninformacinderetornoalinstante.
LostestsJUnitincrementanlaestabilidaddelsoftware.
LostestJUnitseescribenenJava.
JUnitesgratuito.

Parasaberms
ElIDENetBeansenlaactualidadyaincorporaJUnitdesdelainstalacin,porloquepodemosbeneficiarnosdeestaherramienta
de testeo slo con utilizarla desde el IDE. Si quieres conocer cmo realizar los primeros pasos con ella y ver ejemplos de
utilizacin,terecomendamoslossiguientesenlaces:

PrimerospasosconJUnit.

TutorialparacreacindetestusandoJUnitconNetBeans,enlapropiapginaoficialdelproyectoNetBeans(eningls):

WritingJUnitTestsinNetBeansIDE

YuninteresantevdeodondepodrsverunaintroduccinyejemplosconJUnit.

IntroduccinyejemplosconJUnit.
Resumentextualalternativopara"IntroduccinyejemplosconJUnit"

Autoevaluacin
http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 25/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
Autoevaluacin

En versiones anteriores a NetBeans 7.0, para poder trabajar con el FrameWork JUnit era necesario incorporarlo
manualmentealIDE.

Verdadero Falso

8. Depuracin de programas.

Casoprctico

AdayJuanyaconocenlascapacidadesdeldepuradorqueincorporaelentornoNetBeansyvan
aensearaMaralasventajasdeutilizarlo.

Puedes depurar tus programas haciendo dos cosas: creando breakpoints o haciendo
ejecucionespasoapaso,lecomentaJuan.

Mara,queestabacodificandounnuevomtodo,sedetieneunmomentoypregunta:

Entonces,cuandoelprogramallegaalbreakpointpodrsaberquvalortieneunavariabledeterminada?

Efectivamente,Mara,ypodrssaberelvalordeaquellasquetdecidas.Deestemodoatravsdelospuntosderupturayde
lasejecucionespasoapasopodrsdescubrirdndepuedehabererroresentusprogramas.Conocerbienlasherramientasque
eldepuradornosofreceesalgoquepuedeahorrarnosmuchotrabajo,aportaAda.

La depuracin de programas es el proceso por el cual se identifican y corrigen errores de programacin.


Generalmente,enelargotdeprogramacinseutilizalapalabradebugging,quesignificalocalizacinyeliminacinde
bichos(bugs)oerroresdeprograma.Atravsdeesteprocesosedescubrenloserroresyseidentificaquzonasdel
programa los producen. Hay tres etapas por las que un programa pasa cuando ste es desarrollado y que pueden
generarerrores:

Compilacin:unavezquehemosterminadodeafinarunprograma,solemospasargeneralmenteciertotiempo
eliminandoerroresdecompilacin.ElcompiladordeJavamostrarunaseriedechequeosenelcdigo,sacando
alaluzerroresquepuedennoapreciarseasimplevista.Unavezqueelprogramaesliberadodeloserroresde
compilacin,obtendremosdelalgunosresultadosvisiblesperoquiznohagaanloquequeremos.
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 Usoeducativonocomercialpara
Stockbyte.

llamados existen y sus parmetros son correctos en nmero y tipo. As que, los errores de enlazado y de plataformaspblicasde
FormacinProfesionaladistancia.
compilacinsondetectadosantesdelafasedeejecucin. CDDVDNum.V07

Ejecucin:cuandoelprogramaentraenejecucin,esmuyfrecuentequestenofuncionecomoseesperaba.Dehecho,esnormalque
elprogramafalle.Algunoserroresserndetectadosautomticamenteyelprogramadorserinformado,nosreferimosaerrorescomo
acceder a una parte de un array que no existe (error de ndices), por ejemplo. Otros son ms sutiles y dan lugar simplemente a
comportamientosnoesperados,debidoalaexistenciadeerroresocultos(bugs)enelprograma.Deahlostrminosbugydebugging.
Elproblemadeladepuracinesquelossntomasdeunposibleerrorsongeneralmentepococlaros,hayquerecurriraunalaborde
investigacinparaencontrarlacausa.

Ladepuracindeprogramasesalgoascomoserdoctor:existeunsntoma,hemosdeencontrarlacausayentoncesdeterminarelproblema.
Eltrabajodeeliminacindeerrorespuedeserinteresante.Ladepuracinylapruebasuelenrequerirunacantidaddetiempoconsiderableen
comparacinconeltiempodedicadoalaprimeracodificacindelprograma.Peronotepreocupes,esnormalemplearmstiempoeneste
proceso.

Ycmollevamosacaboladepuracindenuestrosprogramas?

PuesatravsdeldebuggerodepuradordelsistemadedesarrolloJavaqueestemosutilizando.Estedepuradorserunaherramientaquenos
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
muestralossiguienteselementosenpantalla:

Elprogramaenfuncionamiento.
Elcdigofuentedelprograma.
Losnombresyvaloresactualesdelasvariablesqueseseleccionen.

Quelementospodemosutilizareneldepurador?

Existenalmenosdoselementosfundamentalesquepodemosutilizarennuestrodebuggerodepurador,sonlossiguientes:

Breakpointsopuntosderuptura:estospuntospuedenserdeterminadosporelpropioprogramadoralolargodelcdigofuentedesu
aplicacin.Unbreakpointesunlugarenelprogramaenelquelaejecucinsedetiene.Estospuntosseinsertanenunadeterminada
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
importanteinformacinparaelprocesodedepuracin.
Ejecucinpasoapaso:eldepuradortambinnospermiteejecutarunprogramapasoapaso,esdecir,lneaporlnea.Atravsdeesta
herramientapodremosseguirelprogresodeejecucindenuestraaplicacinysupervisarsufuncionamiento.Cuandolaejecucinnoes
laesperadaquizestemoscercadelocalizarunerrorobug.Enocasiones,siutilizamosmtodosprocedentesdelabibliotecaestndar
nonecesitaremoshacerunrecorridopasoapasoporelinteriordestosmtodos,yaqueesseguroquenocontendrnerroresinternos
ypodremosahorrartiemponoentrandoensuinteriorpasoapaso.Eldebuggerofrecelaposibilidaddeentraronoendichomtodos.

Debesconocer
Paracompletartusconocimientossobreladepuracindeprogramas,teproponemoslossiguientesenlacesenlosquepodrs
encontrarcmosellevanacabolastareasbsicasdedepuracinatravsdelIDENetBeans.

DepuracinbsicaenNetBeans.

UsobsicodeldepuradorenNetBeans.

Parasaberms
Sideseasconoceralgomssobredepuracindeprogramas,peroaunnivelalgomsavanzado,puedesverelsiguientevdeo.

DebuggingavanzadoenNetBeans.
ResumentextualalternativoparaDebuggingavanzadoenNetBeans.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 26/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

9. Documentacin del cdigo.

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

Qu til y fcil est siendo el acceso a esta documentacin! La verdad es que los que la han
generadoselohancurradobastante.Generarestadocumentacinsellevarmuchotiempo,verdad,
Ada?preguntaJuanmientrasrecogedelaimpresoraladocumentacinimpresa.

Adaprepararpidamenteunaclaseenblancoycomienzaaincorporarleunaseriedecomentarios:

Vers,Juan,documentarelcdigoesvitalysiincorporasatucdigofuenteunoscomentariosenel
formatoquetevoyamostrar,ladocumentacinpuedesergeneradaautomticamenteatravsdela Dreftymac
herramientaJavadoc.ObservarespondeAda.

Llegadosaestepunto,vamosaconsiderarunacuestindegranimportancia,ladocumentacindelcdigofuente.

Piensaenlassiguientescuestiones:

Quincreesqueaccederaladocumentacindelcdigofuente?Puessernlosautoresdelpropiocdigouotrosdesarrolladores.
Porquhemosdedocumentarnuestrocdigo?Porquefacilitaremossumantenimientoyreutilizacin.
Qudebemosdocumentar?Obligatoriamente:clases,paquetes,constructores,mtodosyatributos.Opcionalmente:bucles,partes
dealgoritmosqueestimemosoportunocomentar,...

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?Cuntasvecesnohemosledocdigodeotrosprogramadoresyquiznohayamoscomprendidoquestabanhaciendoen
tal o cual mtodo? Como podrs comprender, la generacin de una documentacin adecuada de nuestros programas puede suponer una
inestimableayudapararealizarciertosprocesosenelsoftware.

Si analizamos la documentacin de las clases proporcionada en los paquetes que distribuye Oracle, nos daremos cuenta de que dicha
documentacinhasidogeneradaconunaherramientallamadaJavadoc.Puesbien,nosotrostambinpodremosgenerarladocumentacinde
nuestrocdigoatravsdedichaherramienta.

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
permitirnposteriormente,navegarpornuestradocumentacinconcualquiernavegadorweb.

Loscomentariosdedocumentacintienenunamarcadecomienzo(/**)yunamarcadefin(*/).Ensuinteriorpodremosencontrardospartes
diferenciadas:unapararealizarunadescripcinyotraenlaqueencontraremosmsetiquetasdedocumentacin.Veamosunejemplo:

/**
*Descripcinprincipal(texto/HTML)
*
*Etiquetas(texto/HTML)
*/

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

Zonadedescripcin:esaquellaenlaqueelprogramadorescribeuncomentariosobrelaclase,atributo,constructoromtodoquese
vaya a codificar bajo el comentario. Se puede incluir la cantidad de texto que se necesite, pudiendo aadir etiquetas HTML que
formateeneltextoescritoyasofrecerunavisualizacinmejoradaalgenerarladocumentacinmedianteJavadoc.
Zonadeetiquetas:enestapartesecolocarunconjuntodeetiquetasdedocumentacinalasqueseasociantextos.Cadaetiqueta
tendrunsignificadoespecialyaparecernenlugaresdeterminadosdeladocumentacin,unavezhayasidogenerada.

Enlasiguienteimagenpuedesobservarunejemplodeuncomentariodedocumentacindeunaclasedelpropiolenguaje.

Citasparapensar

"Donotdocumentbadcode,rewriteit." R.Caron

Reflexiona
Documentar el cdigo de un programa es aadir suficiente informacin como para explicar lo que hace, punto por punto, de
formaquenoslolosordenadoressepanquhacer,sinoqueademsloshumanosentiendanquestnhaciendoyporqu.
Documentarunprogramanoesslounactodebuenhacerdelprogramadorporaquellodedejarlaobrarematada.Esadems
unanecesidadquesloseapreciaensudebidamagnitudcuandohayerroresquerepararohayqueextenderelprogramacon
nuevascapacidadesoadaptarloaunnuevoescenario.

Mostrarretroalimentacin

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 27/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

9.1. Etiquetas y posicin.


Cuandohemosdeincorporardeterminadasetiquetasanuestroscomentariosdedocumentacinesnecesarioconocerdndeyquetiquetas
colocar,segneltipodecdigoqueestemosdocumentandoenesemomento.Existirndostiposgeneralesdeetiquetas:

1.Etiquetasdebloque:sonetiquetasqueslopuedenserincluidasenelbloquededocumentacin,despusdeladescripcinprincipaly
comienzanconelsmbolo@.
2.Etiquetasentexto:sonetiquetasquepuedenponerseencualquierpuntodeladescripcinoencualquierpuntodeladocumentacin
asociadaaunaetiquetadebloque.Sonetiquetasdefinidasentrellaves,delasiguienteforma{@etiqueta}

Enlasiguientetablapodrsencontrarunareferenciasobrelasdiferentesetiquetasysumbitodeuso.

Autoevaluacin
Completaeltextoconlapalabraadecuadaparaadahueco.
EnJavaesposiblegenerardocumentacindeformaautomtica,conunaherramientallamada ,siempreycuando
hayamos tenido la precaucin de incluir de en el cdigo. Los comentarios son
obligadospara , , , y ,ysonopcionalespara
ypartesdealgoritmosquepensemosquenecesitanserexplicadas.
Dichos de , siempre deben comenzar con y terminar con y en su
interiorpuedenllevar puedenserdedostipos:

De .
En .

Enviar

9.2. Uso de las etiquetas.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 28/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

Culessonlasetiquetastpicasysusignificado?

Pasaremos seguidamente a enumerar y describir la funcin de las etiquetas ms habituales a la hora de


generarcomentariosdedocumentacin.

@autortextoconelnombre:estaetiquetasloseadmiteenclaseseinterfaces.Eltextodespusdela
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 Lensim
detrsdeotra.
@deprecatedtexto:indicaquenodeberautilizarse,indicandoeneltextolascausasdeello.Sepuedeutilizarentodoslosapartadosde
ladocumentacin.Siseharealizadounasustitucindeberaindicarsequutilizarensulugar.Porejemplo:

@deprecatedElmtodonofuncionacorrectamente.Serecomiendaelusode{@linkmetodoCorrecto}

@exceptionnombreexcepcintexto:estaetiquetaesequivalentea@throws.
@param nombreatributo texto: esta etiqueta es aplicable a parmetros de constructores y mtodos. Describe los parmetros del
constructor o mtodo. Nombreatributo es idntico al nombre del parmetro. Cada etiqueta @param ir seguida del nombre del
parmetroydespusdeunadescripcindeste.Porejemplo:

@paramfromIndex:Elndicedelprimerelementoquedebesereliminado.

@returntexto:estaetiquetasepuedeomitirenlosmtodosquedevuelvenvoid.Deberaparecerentodoslosmtodosquedevuelvan
algodistintodevoid,haciendoexplcitoqutipooclasedevalordevuelveysusposiblesrangosdevalores.Veamosunejemplo:

/**
*Chequeasiunvectornocontieneelementos.
*@return<code>verdaderosiysolosiestevectornocontienecomponentes,estoes,sutamaoescero
*<code>falsoencualquierotrocaso.
*/
publicbooleanVectorVacio(){
returnelementCount==0
}

@see referencia: se aplica a clases, interfaces, constructores, mtodos, atributos y paquetes. Aade enlaces de referencia a otras
partesdeladocumentacin.Podremosaadiralaetiqueta:cadenasdecaracteres,enlacesHTMLapginasyaotraszonasdelcdigo.
Porejemplo:

*@see"Diseodepatrones:Lareusabilidaddeloselementosdelaprogramacinorientadaaobjetos"
*@see<ahref="http://www.w3.org/WAI/">WebAccessibilityInitiative</a>
*@seeString#equals(Object)equals

@throws nombreexcepcin texto: en nombreexcepcin tendremos que indicar el nombre completo de sta. Podremos aadir una
etiquetaporcadaexcepcinqueselanceexplcitamenteconunaclusulathrows,perosiguiendoelordenalfabtico.Estaetiquetaes
aplicableaconstructoresymtodos,describiendolasposiblesexcepcionesdelconstructor/mtodo.

Autoevaluacin
Quetiquetapodraomitirseenunmtodoquedevuelvevoid?

@param.

@throws.

@return.

9.3. Orden de las etiquetas.


Es importante el orden a la hora de poner las etiquetas en los comentarios de documentacin, o por el
contrarioesindiferente?

Lasetiquetasdebendisponerseenunordendeterminado,eseordeneselsiguiente:

Ordendeetiquetasdecomentariosdedocumentacin.

Etiqueta. Descripcin. Stockbyte.Usoeducativonocomercialpara


plataformaspblicasdeFormacinProfesional
adistancia.CDDVDNum.V07

@autor Enclaseseinterfaces.Sepuedenponervarios.Esmejorponerlasenordencronolgico.

@version Enclaseseinterfaces.

Enmtodosyconstructores.Secolocarntantoscomoparmetrostengaelconstructoro
@param
mtodo.Mejorenelmismoordenenelqueseencuentrendeclarados.

@return Enmtodos.

Enconstructoresymtodos.Mejorenelmismoordenenelquesehandeclarado,oen
@exception
ordenalfabtico.

@throws Esequivalentea@exception.

Podemosponervarios.Comenzaremosporlosmsgeneralesydespuslosms
@see
especficos.

Encualquierpartedeladocumentacin.Marcacdigoquehapasadoaestarobsoleto,
@deprecated paraelqueserecomiendadejardeusarloyeventualmente,sustituirloporalgnotro
mtodo,clase,etc.

Parasaberms
SiquieresconocercmoobteneratravsdeJavadocladocumentacindetusaplicaciones,siguelossiguientesenlaces:

DocumentacinconJavadoc.

DocumentacindeclasesymtodosconJavadoc.

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 29/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412

9.4. Documentacin externa. Requisitos de la


aplicacin: diagramas de clases y de casos de uso.

Debesconocer
En este mdulo nos vamos a centrar en la documentacin interna del cdigo, principalmente mediante comentarios Javadoc,
quehemosvenidoviendoenlosapartadosanteriores,yqueentrarndellenoenelmbitodevuestraactividadprofesionalal
trminodeestecicloformativo.

No obstante, tambin existen todo un conjunto de tcnicas bastante estandarizadas, que permiten aportar documentacin
externa al cdigo. Aunque no va a ser materia en la que profundicemos, s que conviene que conozcas su existencia, y que
cuando veas algunos de los diagramas que se usan para documentar la estructura de clases de nuestros programas, sepis
interpretarlainformacinquecontienen.

Nosetrataportantodeunamateriaquedebisestudiarenprofundidad,perosesimportantequealmenosleislainformacin
queseproporcionaenlossiguientesenlaces.

Requisitos:diagramasdeclases.

ModelodeClases enUML

Requisitos:diagramasdecasosdeuso.

ManualdediagramasdecasosdeusoenUML(384KB)

InformacinbsicasobreUML.

InformacinbsicasobreUMLenWikipedia

Anexo I. Ejemplos resueltos en pseudocdigo y Java.


En este Anexo te vamos a proporcionar algunos ejemplos ms desarrollados en pseudocdigo y en Java, para que puedas compararlos y
usarlosdereferenciaparacuandotengasqueresolvertuspropiosprogramas.

Esperamosqueteresultenclarificadoresytiles.

De momento en estos ejercicios no nos preocupamos (ni nos ocupamos) de controlar la entrada, y asumimos que los datos que recibe el
programa son correctos, segn las especificaciones que se dan en el mismo, sin que se comprueben situaciones de error, ni valores
incorrectos,salvoqueseindiqueexpresamentelocontrarioenelenunciado.

EjemplosresueltosenpseudocdigoyJava

N
Ejercicioy Solucinen Solucin
Enunciado
estructuras pseudocdigo enJava
implicadas

Hacerunprogramaquepermitaelegirentredibujarunarecta,unpuntoounrectngulo,
Java
Ejercicio1 obienterminarsinhacernada. Pseudocdigo
Ejercicio
switch Paraello,debemostrarnosunmenenelquenosproporcionelasopcionesdisponibles, Ejercicio1(1KB)
1(17KB)
ycuyasalidaseasimplementeescribirporpantallaculhasidolaopcinelegida.

Queremoshallarelproductodevariosnmerosenterosnonegativosintroducidospor
teclado. Java
Ejercicio2 Pseudocdigo
Elprocesodebeterminarcuandosemetaunnmeronegativo,mostrandoelproductode Ejercicio
while Ejercicio2(1KB)
losnmeroseindicandocuntosnmerossehanmultiplicado. 2(17KB)
(Solucinusandowhile)

Setratadecalcularlasumaylamediaaritmticaparaunaseriedenmerosenterosno
nulosledosdesdeteclado.Lacantidaddenmerosaleerserloprimeroque
deberemossolicitaralusuario.

Sielvalorfueranegativo,terminarlaejecucinconunmensajeindicandoelerror:
noesposibleleerunacantidadnegativadenmeros,yterminar.
Sielvalorfuera0,nosmandarunmensajeindicandoquenosehaledoningn
nmero,yterminar.
Ejercicio3 Sielvalorfuerapositivo,nosleerlacantidaddenmerosindicada,ycalcularsu Java
Pseudocdigo
while, sumaysumediaaritmtica. Ejercicio
Ejercicio3(2KB)
ifelse<br/> Unavezconocidadichacantidad,serepetirunciclotipowhilequese 3(18KB)
encargardeleerlosnmerosnecesarios,demaneraquesiunnmeroes
negativo,sedescartarysevolveraleerotronmeroensulugar.As,el
programaterminarsuejecucincuandosehayanledotodoslosnmeros
requeridos.Comosalidanosmostrar:

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 30/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
requeridos.Comosalidanosmostrar:
Eltotaldeintentosdelecturaquesehanhecho.
Eltotaldenmeroscorrectos(nonulos)quesehanledo.
Lasumadelosnmerosnonulosledosysumediaaritmtica.

Java
Ejercicio4 Pseudocdigo
Resolverelmismoproblemadelejercicio3anterior,peroenestecaso,usandodowhile. Ejercicio
dowhile Ejercicio4(2KB)
4(18KB)

Resolverelmismoproblemadelejercicio3,peroconunapequeadiferencia.Eneste
casoloqueseleeralcomienzonoserlacantidaddenmerosenterosnonulosque
Java
Ejercicio5 debenleerse,sinoeltotaldeintentosquedebenhacerse.Alfinalizar,seindicarigual Pseudocdigo
Ejercicio
for queanteslosintentosrealizados,eltotaldenmeroscorrectos(nonulos)quesehan Ejercicio5(2KB)
5(18KB)
ledo,lasumadelosmismosysumediaaritmtica.Enestecaso,alserunnmerofijo
deintentosarealizar,lomsadecuadoesresolverlousandofor.

Ejercicio6 Realizarunprogramaquecalculeelndicedemasacorporal(IMC)deunapersonaa Pseudocdigo Java


ifelse (IMC=peso[kg]/altura2[m])eindiqueelestadoenelqueseencuentraesapersonaen Ejercicio6(2KB) Ejercicio
funcindelvalordeIMC. 6(17KB)

DiagnsticosegnIMC
ValordeIMC Diagnstico

<16 Criteriodeingresoenhospital.

de16a17 Infrapeso.

de17a18 Bajopeso.

de18a25 Pesonormal(saludable).

de25a30 Sobrepeso(obesidaddegradoI).

de30a35 Sobrepesocrnico(obesidaddegradoII).

de35a40 Obesidadpremrbida(obesidaddegradoIII).

>40 Obesidadmrbida(obesidaddegradoIV).
Seresolverusandosentenciasifelseanidadas.

Hacerunprogramaqueintercambieelvalordedosvariable,ayb,cuyosvaloressehan
Java
Ejercicio7 ledodesdeteclado. Pseudocdigo
Ejercicio
if Eltipodelasvariables,puedesercualquieraenrealidad,perovaasuponerquees Ejercicio7(2KB)
7(17KB)
entero.

Queremosleerunaseriede10nmerosenterosdesdeteclado,indicandocuntosde
Ejercicio8 Java
ellossonpositivos,cuntosnegativos,ycuntoscero.Tambinsepidecalcularlasuma Pseudocdigo
if Ejercicio
delosnegativosysumedia,lasumadelospositivosysumedia,ylasumadelos100y Ejercicio8(3KB)
for 8(17KB)
sumedia.Sedeseamostrarconvenientementelosvalorescalculados.

Queremoshacerunalgoritmoparacalcularelsueldonetosemanaldeuntrabajadoro
trabajadorayladeduccinporimpuestosaaplicarleenfuncindelashorastrabajadas
enesasemana.
Sesuponequeseintroducenportecladoelnmerodehorastrabajadasenlasemana
(quenopuedesernegativo)juntoalnombredeltrabajadorodelatrabajadora.Sedebe
tenerencuentaque:

Lashorassepaganatarifanormalhastalasprimeras40horas,ycomotarifaextra
Ejercicio9 lasquepasendeesacantidad. Java
Pseudocdigo
ifelse Latarifanormalesde7,5lahora. Ejercicio
Ejercicio9(2KB)
dowhile Latarifaextraesun50%mscaraquelatarifanormal. 9(18KB)
Unavezcalculadoelsueldobrutosecalculanlosimpuestosadeducir,teniendoen
cuentalosiguiente:
Losprimeros150semanalesnopaganimpuestos.
Lossiguientes150paganunatasadeimpuestosdel15%
Elrestodesalariopagaunatasadeimpuestosdel35%
Senecesitaescribircomosalidaelnombredeltrabajadorodelatrabajadora,su
sueldobruto,losimpuestosapagaryelsueldoneto.

Queremoscalcularelfactorialdeunnmeroenterononegativoledodesdeteclado.
Aunqueexisteunasolucin recursivaparaesteproblema,noeslaqueaplicaremos
Ejercicio10 aqu.Ensulugarusaremoslasoluciniterativa.
Elfactorialdeunnmeroenteropositivoonulonserepresentacomon!ysedefine Java
while Pseudocdigo
como: Ejercicio
dowhile Ejercicio10(2KB)
10(18KB)
if
n!=1,sinvale0.
n!=n*(n1)*(n2)*(n3)**2*1,sin>=1

Anexo. Licencias de recursos.

LicenciasderecursosutilizadosenlaUnidaddeTrabajo.

Recurso Recurso
Datosdelrecurso(1) Datosdelrecurso(2)
(1) (2)

Autora:Stockbyte. Autora:Stockbyte.
Licencia:Usoeducativonocomercialparaplataformas Licencia:Usoeducativonocomercialparaplataformaspblicas
pblicasdeFormacinProfesionaladistancia. deFormacinProfesionaladistancia.
Procedencia:CDDVDNum.V43 Procedencia:CDDVDNum.V43

Autora:Stockbyte. Autora:Stockbyte.
Licencia:Usoeducativonocomercialparaplataformas Licencia:Usoeducativonocomercialparaplataformaspblicas
pblicasdeFormacinProfesionaladistancia. deFormacinProfesionaladistancia.
Procedencia:CDDVDNum.V07 Procedencia:CDDVDNum.V07

Autora:YanShuangchun Autora:Crazynorvegian
Licencia:GPL Licencia:GPL

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 31/32
2017623 educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412
Licencia:GPL Licencia:GPL
Procedencia: Procedencia:
http://commons.wikimedia.org/wiki/File:Torchlight_core.png http://commons.wikimedia.org/wiki/File:Glass_box_of_emotion.png

Autora:Dr.TimoMappes
Autora:Lorenzkerscher
Licencia:CCBYSA3.0CCBYSA3.0DEBILDGFDL
Licencia:GNUFreeDocumentationLicense
NEU
Procedencia:Montajesobre
Procedencia:
http://commons.wikimedia.org/wiki/File:Healthy_feet.JPG
http://commons.wikimedia.org/wiki/File:Leitz_117298_frei.jpg

http://educacionadistancia.juntadeandalucia.es/cursos/blocks/recopila/recopila.php?id=10412 32/32

Das könnte Ihnen auch gefallen