Fundamentos del lenguaje
Anatomía de un programa
Estamos acostumbrados a decir que «Todo es un objeto en Java». Esto significa que, para escribir cualquier programa, es necesario crear al menos una clase, cuya estructura debe ser la siguiente:
1 public class NombreDeLaClase
2 {
3 //EL CÓDIGO DE SU PROGRAMA
4 public static void main(String[] args)
5 {
6 // EL CÓDIGO DE SU PROGRAMA
7 }
8 // EL CÓDIGO DE SU PROGRAMA
9 }
Para obtener más información sobre cómo crear una clase de este tipo, consulte la sección Primer programa del capítulo Presentación.
El punto de entrada de su programa es el método main, cuya firma debe ser la presentada en el ejemplo de la línea 4. El código para este método está delimitado por las llaves de apertura y cierre de las líneas 5 y 7.
Este método se incluye en una clase cuya declaración se realiza en la línea 1. El código de clase se encuentra entre las llaves de apertura y cierre de las líneas 2 y 9.
Todos los ejemplos en este capítulo respetarán esta organización.
Las variables
1. Introducción
Permiten almacenar en memoria diferentes valores útiles para su correcto funcionamiento. Antes de usar variables en un programa, necesita saber dónde declararlas, qué nombre y qué tipo asignarles. Este es el objetivo de las siguientes secciones.
2. Las ubicaciones
Las variables en Java se pueden declarar en cualquier parte del programa. No hay espacios reservados. Dicho esto, solo hay una regla: las variables deben declararse solo entre las llaves que delimitan las clases, interfaces o enumeraciones. No pueden estar fuera de estos elementos.
Se debe declarar obligatoriamente una variable antes de utilizarla en el código. Según la ubicación de su declaración, una variable pertenecerá a una de las categorías siguientes:
-
Declarada en el interior de una clase, la variable es una variable de instancia. Solo existirá si una instancia de la clase está disponible (dicho de otra manera, un objeto). Cada instancia de clase tendrá su propio ejemplar de la variable.
-
Declarada en el interior de una clase con la palabra clave static, una palabra clave del lenguaje, la variable es una variable de clase. Se puede acceder a ella directamente por el nombre de la clase y existe en un único ejemplar, independientemente del número de objetos creados a partir de esta clase.
-
Declarada en el interior de un método, la variable es una variable local. Solo existe durante la ejecución del método y solo se puede acceder a ella desde el código de esta.
-
Los parámetros de los métodos se pueden considerar como variables locales. La única diferencia reside en la inicialización de la variable efectuada durante la llamada a esta. La estructura del programa permite visualizar la ubicación de sus diferentes categorías de variables:
1 public class UbicacionDeLasVariables
2 {
3 //VARIABLES DE INSTANCIA
4 //VARIABLES DE CLASE
5 ... unMetodo(/*PARAMETROS*/)
6 {
7 //VARIABLES LOCALES
8 }
9 }
3. El nombre
Debe respetar algunas reglas, incluso...
Las constantes
En una aplicación, con frecuencia sucede que se utilizan valores numéricos o cadenas de caracteres, que no se modificarán durante el funcionamiento de la aplicación. Para facilitar la lectura del código, es recomendable definir estos valores en forma de constantes.
La definición de una constante se realiza agregando la palabra clave final antes de la declaración de una variable. Es obligatorio inicializar la constante en el momento de su declaración (este es el único lugar donde es posible hacer una asignación a la constante).
doble final PORCIVA = 1.21;
La constante se puede usar en el código en lugar del valor literal que representa.
precioIVA = precioNeto * PORCIVA;
Las reglas relativas a la vida útil y el alcance de las constantes son idénticas a las relativas a las variables.
El valor de una constante también se puede calcular a partir de otra constante.
final int TOTAL = 100;
final int MEDIO = TOTAL / 2;
Muchas constantes ya están definidas a nivel del lenguaje Java. Se definen como miembros static de las muchas clases del lenguaje. Por convención, los nombres de las constantes se escriben completamente en mayúsculas.
Las enumeraciones
Una enumeración nos permitirá definir un conjunto de constantes que están funcionalmente vinculados entre sí. La declaración se realiza de la siguiente manera. :
public enum Dia
{
DOMINGO,
LUNES,
MARTES,
MIERCOLES,
JUEVES,
VIERNES,
SABADO
}
El primer valor de la enumeración se inicializa a cero. Las siguientes constantes se inicializan con un incremento de uno. Por lo tanto, la declaración anterior se podría haber escrito :
public class Dia
{
public static final int DOMINGO=0;
public static final int LUNES=1;
public static final int MARTES=2;
public static final int MIERCOLES=3;
public static final int JUEVES=4;
public static final int VIERNES=5;
public static final int SABADO=6;
}
Esto es aproximadamente lo que hace el compilador cuando analiza el código de enumeración.
De hecho, la declaración de una enumeración es una declaración de clase «disfrazada». Esta...
Los argumentos de un programa
1. Funcionamiento
Es posible pasar argumentos a un programa para que adapte su comportamiento, de acuerdo con los valores proporcionados.
Los argumentos suministrados están disponibles en el array de cadenas denominadas args en el argumento del método main.
Para pasar argumentos durante la ejecución del programa, simplemente ejecute el programa con la herramienta java y agregue, después del nombre del programa, los argumentos en la misma línea de comando. El separador es el espacio. Por lo tanto, el siguiente comando inicializa el argumento args con un array compuesto por tres celdas:
Java MyProgram arg1 arg2 arg3
El array args contiene las siguientes cadenas: arg1, arg2 y arg3.
Si el valor de un argumento contiene un espacio, es suficiente delimitar el valor con comillas:
Java MyProgram arg1 arg2 "arg 3"
El array args en este caso contiene las siguientes cadenas: arg1, arg2 y arg3.
Si un argumento contiene comillas, simplemente escape con el carácter \:
Java MyProgram arg1 arg2 "arg \" 3 \ ""
El array args en este caso contiene las siguientes cadenas: arg1, arg2 y arg "3".
Para obtener más información sobre el manejo de un array, consulte la sección Los arrays, que hemos tratado con anterioridad en este capítulo.
2. Utilización en Eclipse
Estos son los pasos que hay que seguir para definir argumentos en un programa...
Los operadores
Los operadores son palabras claves del lenguaje que permiten ejecutar operaciones en el contenido de ciertos elementos, en general variables, constantes, valores literales o retornos de funciones. La combinación de uno o varios operadores y elementos en los cuales los operadores van a apoyarse se llama una expresión. Estas expresiones se evalúan en tiempo de ejecución en función de los operadores y de los valores asociados.
Java dispone de dos tipos de operadores:
-
Los operadores unarios, que trabajan solo en un operando.
-
Los operadores binarios, que necesitan dos operandos.
Se pueden distribuir los operadores en siete categorías.
1. Los operadores unarios
Operador |
Acción |
- |
Valor negativo |
~ |
Complemento a 1 (inversión de bits) |
++ |
Incremento |
-- |
Decremento |
! |
Negación |
Solo se puede utilizar el operador ! (exclamación) en variables de tipo boolean o en expresiones que producen un tipo boolean (comparación).
Los operadores unarios se pueden usar con la notación prefijada. En este caso, el operador se coloca antes del operando. Con la notación posterior, en este caso el operador se coloca después del operando. La posición del operador determina cuándo se aplica el operador a la variable. Si el operador tiene el prefijo, se aplica al operando antes de que se use en la expresión. Con la notación fijada, el operador solo se aplica a la variable después de usarla en la expresión. Esta distinción puede influir en el resultado de una expresión.
La ejecución del siguiente ejemplo muestra 3 porque el incremento se ejecuta después del uso de la variable por la instrucción println:
int i;
i = 3;
System.out.println (i ++);
La ejecución del siguiente ejemplo muestra 4 porque el incremento se ejecuta antes del uso de la variable por la instrucción println:
int i;
i = 3;
System.out.println (++ i);
Si la variable no se usa en una expresión, ambas versiones conducen al mismo resultado.
Las dos líneas de código son equivalentes :
i++;
++i;
2. Los operadores de asignación
El único operador disponible en esta categoría es el operador =. Permite asignar un valor a una variable. Se utiliza el mismo operador sea cual sea el tipo de la variable (numérico, cadena de caracteres...)....
Las estructuras de control
1. Presentación
Las estructuras de control permiten controlar la ejecución de las instrucciones en nuestro código. Java dispone de dos tipos de estructuras:
-
Las estructuras de decisión: orientarán la ejecución del código en función de los valores que pueda tomar una expresión de evaluación.
-
Las estructuras de bucle: permiten ejecutar una sección de código cierto número de veces, hasta que o mientras una condición se cumpla.
2. Estructuras de decisión
Existen dos soluciones posibles.
a. Estructura if
Se pueden usar hasta cuatro sintaxis para la instrucción if.
if (condición)instrucción;
Si la condición vale true, la instrucción se ejecuta. La condición debe ser una expresión que, una vez evaluada, debe devolver un valor booleano true o false. Con esta sintaxis, solo la instrucción situada después del if será ejecutada si la condición vale true. Para ejecutar varias instrucciones en función de una condición, debemos utilizar la sintaxis siguiente.
if (condición)
{
instrucción 1;
...
instrucción n;
}
En este caso, se ejecutará el grupo de instrucciones situado entre las llaves si la condición vale true.
También podemos especificar una o varias instrucciones que se ejecutarán si la condición vale false añadiendo un bloque else.
if (condición)
{
instrucción 1;
...
instrucción n;
}
else
{
instrucción 1;
...
instrucción n;
}
También podemos anidar las condiciones en la sintaxis siguiente.
if (condición1)
{
instrucción 1
...
instrucción n
}
else if (condición 2)
{
instrucción...
Ejercicios
1. Ejercicio 1
Crear una tabla de diez cadenas de caracteres y, a continuación, rellenar esta tabla con direcciones de correo electrónico. Calcular seguidamente, a partir de la información incluida en la tabla, el segmento de mercado de cada uno de los proveedores de acceso.
Pista: en una dirección de correo electrónico, el proveedor es la parte de la dirección situada después del carácter @.
2. Ejercicio 2
Generar tres números aleatorios comprendidos entre 0 y 1000 y, a continuación, verificar si se ha obtenido dos números pares seguidos de un número impar. Si no fuera el caso, repetir hasta tener la combinación par, par, impar. Mostrar, a continuación, el número de ensayos realizados para obtener dicha combinación.
Pista: la clase Math Random ofrece un conjunto de métodos que permiten obtener un número aleatorio. Céntrese en el método siguiente leyendo la javadoc:
public int nextInt(int bound)
Para utilizar este método, es necesario tener un objeto de tipo Random:
Random rd = new Random();
rd.nextInt(…);
3. Ejercicio 3
Generar un número aleatorio comprendido entre 0 y 1000. A continuación, pedir al usuario que adivine el número escogido por el ordenador. Para ello, debe introducir un número comprendido entre 0 y 1000. Se compara...
Correcciones
1. Ejercicio 1
A continuación se muestra una propuesta (y esto es solo una propuesta) para resolver este primer ejercicio. El código se complementa con una gran cantidad de comentarios para comprender completamente el enfoque adoptado. El código fue escrito en un solo método para centrarse en el algoritmo. Una mejora puede consistir en dividir este programa en métodos.
import java.util.Arrays;
public class Ejercicio1
{
static String[] direccion;
static String[] listaBrutaProveedores;
static String[] listaProveedoresDistintos;
static int[] numeroClientes;
public static void main(String[] args)
{
//INICIALIZACIÓN DE LA TABLA
direccion=new String[10];
direccion[0]="jpp@sfr.fr";
direccion[1]="tom@gmail.com";
direccion[2]="fred@sfr.fr";
direccion[3]="victor@sfr.fr";
direccion[4]="chris@sfr.fr";
direccion[5]="robert@orange.fr";
direccion[6]="paul@sfr.fr";
direccion[7]="lise@gmail.com";
direccion[8]="thierry@eni.fr";
direccion[9]="marie@eni.fr";
//RECUPERACIÓN DE LOS PROVEEDORES DE CADA DIRECCIÓN
listaBrutaProveedores =new String[10];
for (int i=0;i<direccion.length;i++)
{
//Para cada dirección, recuperación de la cadena después del @:
listaBrutaProveedores[i]=
direccion[i].substring(direccion[i].indexOf('@')+1); ...
Conclusión
Ahora dispone de técnicas básicas para escribir algoritmos (declaración de variables, utilización de operadores disponibles y uso de estructuras de control). Para progresar, es necesario pasar horas descubriendo las funcionalidades que ofrece la API Java. Ahora necesita conocer con rapidez las bases de la programación orientada a objetos para profundizar en sus conocimientos. Este es el objetivo del próximo capítulo.