Bienvenido al Blog, en esta
oportunidad desarrollaremos un tema de introducci贸n al desarrollo de
programaci贸n orientado a objetos, para entender sobre c贸mo desarrollar un
sistema con el lenguaje java veremos acerca del uso de
operadores y construcciones de toma de decisiones en Java.
Sobre el contenido …
v
El contenido de este blog tiene como fuente el
curso Fundamentos de programaci贸n de Oracle.
v
Con algunos agregados del autor "EL INFORMATICO
IBERO"
Un programa siempre tiene que realizar operaciones y tomar decisiones, estas decisiones previamente est谩n estructuras en condiciones, es decir si cumple tal condici贸n que ejecute tal tarea, sino cumple la condici贸n que realiza una tarea distinta.
Uso de operadores relacionales y condicionales
脴 Una de las tareas que suelen realizar los programas es
evaluar una condici贸n y, en funci贸n del resultado, ejecutar diferentes bloques
o “ramales” de c贸digo.
脴 Por ejemplo, su programa podr铆a comprobar si el valor de
una variable es igual que el valor de otra variable y, en caso
afirmativo, realizar una acci贸n o tarea.
脴 En la figura siguiente se ilustra un tipo
de decisi贸n que las personas toman cada d铆a.
脴 Adem谩s de los operadores aritm茅ticos, como
los de suma (+) e incremento (++), el lenguaje Java proporciona diferentes
operadores relacionales y condicionales que incluyen < y > para expresar
los conceptos menor que y mayor que, y && para expresar uni贸n (AND).
脴 Estos operadores se utilizan cuando se
quiere que los programas ejecuten diferentes bloques o partes del c贸digo en
funci贸n de distintas condiciones como, por ejemplo, comprobar si el valor
de dos variables es el mismo.
脴 Cada uno de estos operadores se utiliza en el contexto de una construcci贸n de toma de decisiones del tipo if o if/else.
Ejemplo de un ascensor |
脴 Ejemplo de un ascensor
o Un ascensor tiene muchas funciones. Las funciones que se citan son:
o A lo largo de este m贸dulo y los m贸dulos
sucesivos tendr谩 ocasi贸n de ver diferentes variaciones de esta clase Elevator,
en algunas de las cuales se ilustra el uso de construcciones de toma de
decisiones.
o Un ascensor tiene muchas funciones. Las
funciones que se citan en este curso son:
眉
Las
puertas del ascensor pueden abrirse.
眉
Las
puertas del ascensor pueden cerrarse.
眉
El
ascensor puede ascender un piso.
眉
El
ascensor puede descender un piso.
o A lo largo de este m贸dulo y los m贸dulos sucesivos tendr谩 ocasi贸n de ver diferentes variaciones de esta clase Elevator, en algunas de las cuales se ilustra el uso de construcciones de toma de decisiones.
- Una clase de prueba similar a la siguiente somete el c贸digo del ascensor a diferentes comprobaciones.
脴 Operadores relacionales
o Los operadores relacionales comparan dos
valores para determinar su relaci贸n.
o En la tabla siguiente figuran las distintas condiciones que pueden comprobarse utilizando este tipo de operadores.
o El resultado de todos los operadores
relacionales es un valor boolean. Los valores booleanos pueden ser true o
false. Por ejemplo, todos los ejemplos de la tabla anterior dan como resultado
el valor true.
o El signo igual (=) se utiliza para realizar asignaciones, no para realizar comparaciones. Para realizar comparaciones recuerde utilizar el doble igual (==).
脴 Comprobaci贸n de la igualdad entre dos
secuencias de caracteres
o Si se utiliza el operador == para comparar
diferentes referencias a objetos String, el operador comprueba si la
direcci贸n contenida en dichas referencias es la misma, no su contenido.
o ¿Son iguales todas las referencias a objetos String siguientes? ¿Qu茅 se imprimir谩 en la pantalla?
- Si quiere verificar la equivalencia entre secuencias de caracteres, por ejemplo, para averiguar si el nombre “Fred Smith” es igual que “Joseph Smith” utilice el m茅todo equals de la clase String. La clase siguiente contiene dos nombres de empleados y un m茅todo para compararlos.
脴 Operadores condicionales
o Tambi茅n
necesitar谩 tener la posibilidad de tomar una sola decisi贸n en funci贸n de varias
condiciones. En tales circunstancias, puede utilizar los operadores
condicionales para evaluar condiciones complejas como un todo.
o En la tabla siguiente figuran los operadores condicionales comunes del lenguaje Java. Por ejemplo todos los ejemplos de la tabla dan como resultado el valor booleano false.
- ¿Qu茅 operadores relacionales y condicionales se reflejan en el p谩rrafo siguiente?
眉 Si el juguete es rojo, lo comprar茅. Sin embargo, si el juguete es amarillo y cuesta menos que uno rojo, tambi茅n lo adquirir茅. Si el juguete es amarillo y cuesta lo mismo o m谩s que otro art铆culo rojo, no lo comprar茅. Por 煤ltimo, si el juguete es verde, no lo comprar茅.
脴 Construcci贸n if
o Una
sentencia o construcci贸n if es aquella que ejecuta un bloque de c贸digo si una
expresi贸n es true.
o Existen diferentes variantes de la construcci贸n if b谩sica. No obstante, la m谩s sencilla es:
o Donde:
眉
La expresi贸n_booleana es una combinaci贸n
de operadores relacionales, operadores condicionales y valores que da como
resultado el valor true o false.
眉 bloque_c贸digo representa las l铆neas de c贸digo que se ejecutan si (if) la expresi贸n es true.
- En primer lugar se eval煤a la expresi贸n_booleana. Si la expresi贸n es true, se ejecuta bloque_c贸digo. Si la expresi贸n_booleana no es true, el programa salta directamente a la llave que marca el fin del bloque de c贸digo de la construcci贸n if.
- La clase ElevatorTest comprueba un objeto Elevator efectuando llamadas a sus m茅todos. Uno de los primeros m茅todos a los que llama la clase ElevatorTest es goDown.
- Llamar al m茅todo goDown antes de que el ascensor haya comenzado a subir genera un problema porque el ascensor empieza en el primer piso y no hay otros pisos por debajo (la constante MIN_FLOORS indica que el primer piso es la planta baja). Cuando se ejecuta, la clase ElevatorTest muestra lo siguiente:
- Dos sentencias if pueden solucionar este problema. El m茅todo goDown siguiente contiene dos construcciones if que determinan si el ascensor deber铆a descender o mostrar un error.:
- Si
el valor de la variable currentFloor es igual que el de la constante
MIN_FLOORS, aparecer谩 en la pantalla un mensaje de error y el ascensor no
descender谩. Si el valor de la variable currentFloor es mayor que el de la
constante MIN_FLOORS, el ascensor baja. Cuando se ejecuta, la clase
ElevatorTest muestra lo siguiente:
脴 Sentencias if anidadas
o En ocasiones, puede ser necesario ejecutar una sentencia if como parte de otra sentencia if. En el ejemplo siguiente se muestra c贸mo usar sentencias if anidadas para comprobar los valores de dos variables.:
o Si
el valor de la variable currentFloor es igual que el de la constante
MIN_FLOORS, aparecer谩 en la pantalla un mensaje de error y el ascensor no
descender谩.
o Si
el valor de la variable currentFloor es mayor que el de la constante MIN_FLOORS
y las puertas est谩n cerradas, el ascensor baja.
o No
utilice las construcciones if/else con demasiada frecuencia porque pueden ser
complicadas de depurar.
脴 Construcci贸n if/else
o A
menudo sucede que se quiere ejecutar un bloque de c贸digo si la expresi贸n es
true y otro bloque de c贸digo cuando la expresi贸n es false.
o Para
estos casos, puede utilizar una construcci贸n if para ejecutar un bloque de
c贸digo si la expresi贸n es true junto con una construcci贸n else que s贸lo
se ejecute en caso de que la expresi贸n sea false.
o La sintaxis de las construcciones if/else es como sigue:
o Donde:
脴
expresi贸n_booleana es una combinaci贸n
de operadores relacionales, operadores condicionales y valores que dan como
resultado el valor true o false.
脴
bloque_c贸digo1 representa las l铆neas de
c贸digo que se ejecutan si la expresi贸n es true y bloque_c贸digo2 representa
las l铆neas de c贸digo que se ejecutan si la expresi贸n es false.
o Puede
utilizar una sentencia if/else para corregir el problema del ascensor que se
dirige a una planta no v谩lida. El m茅todo goDown siguiente contiene una
construcci贸n if que determina si el ascensor deber铆a descender o mostrar un
error.
o Si el valor de la variable currentFloor es igual que el de la constante MIN_FLOORS, aparecer谩 en la pantalla un mensaje de error y el ascensor no descender谩. En caso contrario (else), se considerar谩 que el valor de currentFloor es mayor que el de la constante MIN_FLOORS y el ascensor bajar谩 de planta. Cuando se ejecuta, la clase ElevatorTest muestra lo siguiente:
脴 Construcciones if/else encadenadas
o Es posible encadenar varias construcciones if y else para evaluar sucesivas expresiones que den lugar a diferentes salidas en funci贸n del resultado. La sintaxis de las construcciones if/else encadenadas es como sigue:
o Donde:
眉
expresi贸n_booleana es una combinaci贸n de
operadores relacionales, operadores condicionales y valores que da como
resultado el valor true o false.
眉
bloque_c贸digo1 representa las l铆neas de
c贸digo que se ejecutan si la expresi贸n es true. bloque_c贸digo2 representa
las l铆neas de c贸digo que se ejecutan si la expresi贸n es false y la
condici贸n del segundo if es true. bloque_c贸digo3 representa las l铆neas
de c贸digo que se ejecutan si la expresi贸n del segundo if tambi茅n se
eval煤a como false.
o A continuaci贸n se muestra una clase Fechas con varias construcciones if/else encadenadas que determinan cu谩ntos d铆as tiene un mes.
o El
m茅todo calcularNumDias encadena tres sentencias if/else para determinar el
n煤mero de d铆as que tiene un mes. Aunque el c贸digo es sint谩cticamente correcto, el
encadenamiento de sentencias if/else puede dar como resultado un c贸digo algo
confuso y deber铆a evitarse.
Uso de la construcci贸n switch
脴 Otra
palabra clave utilizada para tomar decisiones en el programa es switch. La
construcci贸n switch ayuda a evitar confusiones en la programaci贸n porque
simplifica la organizaci贸n de los distintos bloques de c贸digo que pueden
ejecutarse.
脴 La sintaxis de la construcci贸n switch es:
脴 Donde:
脴 La
palabra clave switch indica una sentencia switch.
脴 variable
es la variable cuyo valor se quiere verificar. La variable s贸lo puede
ser de los tipos char, byte, short o int.
脴 La
palabra clave case indica un valor que se est谩 comprobando. La
combinaci贸n de la palabra case y un valor_literal se conoce como
etiqueta case.
脴 El
valor_literal es cualquier valor v谩lido que pueda contener una variable.
Es posible tener una etiqueta case por cada valor que se quiera evaluar. Los
valores literales no pueden ser ni variables, ni expresiones ni llamadas a
m茅todos. S铆 pueden ser constantes (variables finales como MAX_NUMBER,
definida anteriormente), literales (como ’A’ o 10) o ambas cosas.
脴 La
sentencia [break;] es una palabra clave opcional que provoca la salida
inmediata de la sentencia switch durante la ejecuci贸n. Sin esta sentencia,
se ejecutar谩n todas las sentencias de bloque_c贸digo que sigan a la sentencia
case aceptada (hasta llegar a una sentencia break o al final de la
construcci贸n switch).
脴 La
palabra clave default indica un bloque_c贸digo predeterminado que se
ejecuta si no se cumple ninguna de las otras condiciones. La etiqueta
default es similar a la construcci贸n else de las sentencias if/else. La palabra
clave default es opcional.
Ejemplo Case |
脴 El
m茅todo calcularNumDias de la clase Fechas utiliza una sentencia switch para
bifurcar el c贸digo en funci贸n del valor de la variable month. Si la variable
month es igual a 1, 3, 5, 7, 8, 10 o 12, el c贸digo salta hasta la etiqueta case
adecuada y desciende para ejecutar la l铆nea que imprime en la pantalla el
mensaje “Ese mes tiene 31 d铆as”.
脴 Cu谩ndo
usar construcciones switch
脴 La
construcci贸n switch s贸lo se utiliza para verificar igualdades, no para
comprobar si los valores son mayores o menores que otro valor. No es posible
usar switch para realizar comprobaciones con respecto a varios valores y s贸lo
puede utilizarse con tipos enteros.
脴 La
construcci贸n switch puede considerarse como una opci贸n v谩lida para:
脴
Pruebas de igualdad
脴
Pruebas con respecto a un solo valor,
como customerStatus
脴
Pruebas con respecto al valor de un tipo int,
short, byte o char
脴 Es posible anidar otras construcciones, como if/else, dentro de las sentencias switch.