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.
No hay comentarios.:
Publicar un comentario