jueves, 2 de octubre de 2014

Elementos de un programa Java

A continuación se describe la definición léxica y sintáctica de los elementos de un programa Java: comentarios, identificadores, variables y valores, tipos primitivos, literales, operadores, expresiones y expresiones aritmético-lógicas.

Comentarios

En un programa Java hay tres tipos de comentarios.

Comentario de bloque. Empieza por /* y termina por */. El compilador ignora todo el texto contenido dentro del comentario.
/* 
* El programa HolaMundo se utiliza para aplicar los 
* métodos System.out.print() y System.out.println() 
*/
Comentario de documentación. Empieza por /** y termina por */. Java dispone de la herramienta javadoc para documentar automáticamente los programas. En un comentario de documentación normalmente se indica el autor y la versión del software.
/**
* Programa HolaMundo 
* @author Fundamentos de Informática 
* @version 1.0 
* @see Referencias 
*/
Comentario de línea. Empieza con //. El comentario comienza con estos caracteres y termina al final de la línea.
// El método System.out.println() salta la línea
El uso de comentarios hace más claro y legible un programa. En los comentarios se debe decir qué se hace, para qué y cuál es el fin de nuestro programa. Conviene utilizar comentarios siempre que merezca la pena hacer una aclaración sobre el programa.

Identificadores

El programador tiene libertad para elegir el nombre de las variables, los métodos y de otros elementos de un programa. Existen reglas muy estrictas sobre los nombres que se utilizan como identificadores de clases, de variables o de métodos.

Todo identificador debe empezar con una letra que puede estar seguida de más letras o dígitos. Una letra es cualquier símbolo del alfabeto y el carácter ‘_’. Un dígito es cualquier carácter entre ‘0’ y ‘9’.

Los identificadores Hola, hola, numero, numeroPar, numeroImpar, numero_impar, numero_par, nombre, apellido1 y apellido2 son válidos. El identificador 1numero no es válido porque empieza con un dígito, no con una letra.

Cualquier identificador que empiece con una letra seguida de más letras o dígitos es válido siempre que no forme parte de las palabras reservadas del lenguaje Java. El lenguaje Java distingue entre letras mayúsculas y minúsculas, esto significa que los identificadores numeroPar y numeropar son distintos.

Existen unas normas básicas para los identificadores que se deben respetar.

  • Los nombres de variables y métodos empiezan con minúsculas. Si se trata de un nombre compuesto cada palabra debe empezar con mayúscula y no se debe utilizar el guión bajo para separar las palabras. Por ejemplo, los identificadores calcularSueldo, setNombre o getNombre son válidos. 
  • Los nombres de clases empiezan siempre con mayúsculas. En los nombres compuestos, cada palabra comienza con mayúscula y no se debe utilizar el guión bajo para separar las palabras. Por ejemplo, HolaMundo, PerimetroCircunferencia, Alumno o Profesor son nombres válidos. 
  • Los nombres de constantes se escriben en mayúsculas. Para nombres compuestos se utiliza el guión bajo para separar las palabras. Por ejemplo, PI, MINIMO, MAXIMO o TOTAL_ELEMENTOS son nombres válidos.

Variables y valores

Un programa Java utiliza variables para almacenar valores, realizar cálculos, modificar los valores almacenados, mostrarlos por la consola, almacenarlos en disco, enviarlos por la red, etc. Una variable almacena un único valor.

Una variable se define por un nombre, un tipo y el rango de valores que puede almacenar.

El nombre de una variable permite hacer referencia a ella. Este nombre debe cumplir las reglas aplicables a los identificadores. El tipo indica el formato de los valores que puede almacenar la variable: cadenas de caracteres, valores lógicos, números enteros, números reales o tipos de datos complejos. El rango indica los valores que puede tomar la variable.

Por ejemplo, una variable de tipo número entero, con nombre mesNacimiento puede almacenar valores positivos y negativos, lo que no tiene sentido cuando se trata de meses del año. El rango válido para esta variable sería de 1 a 12.

Para declarar una variable en Java se indica el tipo y su nombre.
int mesNacimiento;
En este ejemplo se indica que la variable es de tipo entero (int) y su nombre es mesNacimiento. Una vez declarada una variable, se puede utilizar en cualquier parte del programa referenciándola por su nombre. 
Para almacenar un valor en una variable se utiliza el operador de asignación y a continuación se indica el valor, por ejemplo 2.
mesNacimiento = 2;
A partir de este momento la variable mesNacimiento almacena el valor 2 y cualquier referencia a ella utiliza este valor. Por ejemplo, si se imprime el valor de la variable por la consola, muestra el valor 2.
mesNacimiento = 2;
Java permite declarar e inicializar una variable en una sola sentencia.
int diaNacimiento = 20; 
int mesNacimiento = 3;
Si se declara una constante, entonces se debe utilizar el delimitador final y es necesario indicar su valor. En la siguiente declaración se define el valor de la constante pi de tipo double para almacenar un número real.
final double PI = 3.1415926536;
Es conveniente utilizar nombres apropiados para las variables. El nombre de una variable debe indicar para qué sirve. El nombre de una variable debe explicarse por sí mismo para mejorar la legibilidad del programa.

Si se desea declarar más de una variable a la vez se deben separar las variables en la sentencia de la declaración.
int dia=20, mes=2, año=2020;
En este ejemplo se declaran las variables enteras dia, mes y año. La variable día se inicializa con el valor 20, mes con 2 y año con 2020. La siguiente declaración es equivalente a la anterior.
int dia=20; 
int mes=2; 
int año=2020;

Tipos primitivos

Las variables de java pueden ser de un tipo primitivo de datos o una referencia a un objeto. Los tipos primitivos permiten representar valores básicos. Estos tipos se clasifican en números enteros, números reales, caracteres y valores booleanos.

Números enteros. Representan números enteros positivos y negativos con distintos rangos de valores, desde cientos a trillones. Los tipos enteros de Java son byte, int, short y long.

Números reales. Existen dos tipos de números reales en Java, float y double. La diferencia entre ellos está en el número de decimales que tienen capacidad para expresar y en sus rangos de valores.

Caracteres. El tipo char permite representar cualquier carácter Unicode. Los caracteres Unicode contienen todos los caracteres del alfabeto de la lengua castellana.

Booleano. Se utiliza para representar los valores lógicos verdadero y falso. Solo tiene dos valores true y false. 

La siguiente tabla resume los tipos primitivos de Java.

Tipo Descripción Valor mínimo y máximo
byte Entero con signo -128 a 127
short Entero con signo -32768 a 32767
int Entero con signo -2147483648 a 2147483647
long Entero con signo -922117036854775808 a +922117036854775807
float Real de precisión simple ±3.40282347e+38 a ±1.40239846e-45
double Real de precisión doble ±1.7976931348623157e+309 a ±4.94065645841246544e-324
char Caracteres Unicode \u0000 a \uFFFF
boolean Valores lógicos true, false

Literales

Se denomina literal a la manera en que se escriben los valores para cada uno de los tipos primitivos.

Números enteros. Un número entero en Java se puede escribir en decimal, octal o en hexadecimal. Cuando se utiliza el sistema octal es necesario poner el dígito 0 delante del número. Si se utiliza el sistema hexadecimal se debe poner 0x delante del número. Por ejemplo, el número decimal 10 se puede escribir 012 en octal y 0xA en hexadecimal. Los números enteros se supone que pertenecen al tipo int.

Números reales. Un número real en Java siempre debe tener un punto decimal o un exponente. Por ejemplo, el número 0.25 se puede expresar también como 2.5e-1. Los números reales se supone que pertenecen al tipo double.

Booleanos. Los valores lógicos solo pueden ser true y false. Se escriben siempre en minúsculas.

Caracteres. Los valores de tipo carácter representan un carácter Unicode. Se escriben siempre entre comillas simples, por ejemplo 'a', 'A', '0', '9'. En Java un carácter se puede expresar por su código de la tabla Unicode en octal o en hexadecimal. Los caracteres que tienen una representación especial se indican en la siguiente tabla.

Carácter Significado
\b Retroceso
\t Tabulador
\n Salto de línea
\r Cambio de línea
\" Carácter comilla doble
\' Carácter comilla simple
\\ Carácter barra hacia atrás
Textos. Un texto en Java pertenece a la clase String y se expresa como el texto entre comillas dobles. Un texto siempre debe aparecer en una sola línea. Para dividir un texto en varias líneas se debe utilizar el operador + para concatenar textos. 

Un texto puede estar vacío o contener uno o más caracteres. Por ejemplo, “Hola Mundo” es un texto de 10 caracteres, mientras que “” es un texto vacío y tiene 0 caracteres. El texto “a” es diferente del carácter 'a' de tipo char.

Operadores

Cada tipo puede utilizar determinados operadores para realizar operaciones o cálculos.

Números enteros. Al realizar una operación entre dos números enteros, el resultado siempre es un número entero. Con los números enteros se pueden realizar operaciones unarias, aditivas, multiplicativas, de incremento y decremento, relacionales, de igualdad y de asignación.

  • Una operación unaria permite poner un signo delante: +5, -2. 
  • Una operación aditiva se refiere a la suma y la resta: 2+3, 5-2. 
  • Una operación multiplicativa multiplica o divide dos valores: 5*2, 5/2. El operador % calcula el resto de la división entera 5%2. 
  • Un incremento o decremento aumenta o decrementa en 1 el valor de una variable: ++numero, numero++, --numero, numero--. Si el operador va antes de la variable, primero se realiza la operación y se modifica el valor de la variable. Si el operador va después de la variable, su valor se modifica al final. 
  • Un operador relacional permiten comparar dos valores: >, <, >= y <=. El resultado de la comparación es un valor booleano que indica si la relación es verdadera o falsa. 
  • Un operador de igualdad compara si dos valores son iguales o no. El operador == devuelve verdadero si los dos valores son iguales, el operador != devuelve verdadero si son diferentes. El resultado de la 
  • comparación es un valor booleano que indica si la igualdad o desigualdad es verdadera o falsa. 
  • Un operador de asignación permite asignar un valor o el resultado de una operación a una variable: =, +=, -=, *=, /=, %=.
Números reales. Con los números reales se aplican los mismos operadores que con los números enteros. Si se realizan operaciones unarias, aditivas o multiplicativas, el resultado es un número real. También se pueden aplicar los operadores relacionales para comparar dos números reales.

Booleanos. Los operadores que se aplican a los valores lógicos son: negación, Y lógico, O lógico.
  • La negación (!) devuelve true si el operando es false. 
  • El Y lógico (&&) devuelve false si uno de los operandos es false. 
  • El O lógico (||) devuelve true si uno de los operandos es true.

Expresiones

Una expresión permite realizar operaciones entre valores utilizando distintos operadores. Las expresiones son útiles para representar las fórmulas matemáticas que se utilizan para realizar cálculos. 

En Java se pueden definir expresiones tan complejas como sea necesario. Por ejemplo, para convertir una temperatura de grados Fahrenheit a Centígrados se utiliza la fórmula:
C = ((F – 32) * 5) / 9
En este ejemplo C representa la temperatura en grados centígrados y F en grados Fahrenheit. La fórmula en Java, utilizando las variables centigrados y fahrenheit de tipo double.
centigrados = ((fahrenheit – 32.0) * 5.0)) / 9.0;
Toda la expresión se evalúa a un valor. El orden de los cálculos depende del orden de prioridad de los operadores: primero los operadores unarios, después los multiplicativos, de izquierda a derecha, después los operadores aditivos, de izquierda a derecha, después los operadores de relación y por último los operadores de asignación.

Por ejemplo, la expresión x = -3 + 2 * 4 – 12 / 6 + 5 se calcula en el orden siguiente:

Primero se aplica el operador unario (-) a 3 y se obtiene -3. A continuación se evalúan los operadores multiplicativos de izquierda a derecha. Se calcula el producto de 2 * 4 y se obtiene 8, después se divide 12 / 6 y se obtiene 2. Al finalizar estas operaciones la expresión queda x = -3 + 8 – 2 + 5. Por último, se evalúan los operadores aditivos de izquierda a derecha y se obtiene 8.

Cuando se desea modificar el orden de prioridad de los operadores es necesario utilizar paréntesis para indicar el orden de evaluación. Por ejemplo, al calcular el valor de y = -3 + 2 * (14 – 2) / 6 + 5 se obtiene 6.

Expresiones aritmético-lógicas

Una expresión aritmético-lógica devuelve un valor lógico verdadero o falso. En este tipo de expresiones se utilizan operadores aritméticos, operadores relacionales y de igualdad. Por ejemplo, una expresión lógica puede ser:
(10 – 2) > (5 – 3)
En este ejemplo la expresión aritmético-lógica es verdadera porque el lado derecho de la expresión es mayor que el lado izquierdo.

En una expresión aritmético-lógica se pueden combinar varias expresiones con operadores lógicos. La precedecencia de los operadores lógicos es menor que la de los operadores relacionales, por lo que primero se evalúan las desigualdades y después los operadores lógicos. El orden de prioridad de los operadores lógicos es el siguiente: primero la negación, después el Y lógico y por último el O lógico. La prioridad de los operadores de asignación es la menor de todas.

Por ejemplo, la expresión 3 + 5 < 5 * 2 || 3 > 8 && 7 > 6 – 2 se evalúa en el orden siguiente.Primero se evalúan las expresiones aritméticas y se obtiene la expresiónlógica 8 < 10 || 3 > 8 && 7 > 4. A continuación se evalúan los operadores relacionales y se obtiene true || false && true. Ahora se evalúa el operador Y lógico con los operandos false && true y se obtiene false. Por último, se evalúa el operador O lógico con los operandos true || false y se obtiene true, el valor final de la expresión.

Los operadores lógicos && y || se evalúan por cortocircuito. Esto significa que al evaluar a && b, si a es falso, no es necesario evaluar b porque la expresión es falsa. De forma similar, al evaluar a || b, si a es verdadero, no es necesario evaluar b porque la expresión es verdadera.

Conversión de tipos

Muchas veces es necesario realizar conversiones de tipos cuando se evalúa una expresión aritmética. Por ejemplo, si después de realizar el cálculo de conversión de grados Fahrenheit a Centígrados se quiere almacenar el resultado en la variable de tipo entero temperatura, es necesario hacer una conversión de tipos. La fórmula en Java, utilizando las variables centigrados y fahrenheit de tipo double.
centigrados = ((fahrenheit – 32.0) * 5.0)) / 9.0;
Antes de asignar el valor resultante a la variable temperatura, que almacena un valor entero, es necesario convertir el valor de tipo double de la variable centigrados a int.
int temperatura = (int) centigrados;

Las palabras reservadas de Java

En todos los lenguajes de programación existen palabras con un significado especial. Estas palabras son reservadas y no se pueden utilizar como nombres de variables.

abstract final public
assert finally return
boolean float short
break for static
byte if strictfp
case implements super
catch import switch
char instanceof synchronized
class int this
continue interface throw
default long throws
do native transient
double new true
else null try
enum package void
extends private volatile
false protected protected
En realidad, las palabras false, null y true son literales. No son palabras reservadas del lenguaje, pero no se pueden utilizar como identificadores.

0 comentarios:

Publicar un comentario