• No results found

The impact of the relatedness between TS and VS on predictive accuracy

In document Genomic prediction in rye (Page 148-150)

5.4 Genomic prediction: validation and implementation

5.4.1 The impact of the relatedness between TS and VS on predictive accuracy

El ciclo de vida de una variable nos permite especificar durante cuánto tiempo el contenido de una variable estará disponible a lo largo de la ejecución de la aplicación.

Para una variable declarada en una función, la duración del ciclo de vida corresponde a la duración de la ejecución de la función. En cuanto termine la ejecución del procedimiento o función, la variable se elimina de la memoria. Volverá a crearse con la próxima llamada a la función. Una variable declarada en el interior de una clase puede utilizarse mientras esté disponible una instancia de la clase. Las variables declaradas con la palabra clave

static

están accesibles durante todo el tiempo de ejecución de la aplicación.

2. Las constantes

En una aplicación puede ocurrir a menudo que se utilicen valores numéricos o cadenas de caracteres que no se modificarán durante la ejecución de la aplicación. Para facilitar la lectura del código, se aconseja crear esos valores bajo la forma de constantes.

La definición de una constante se realiza añadiendo la palabra clave

final

delante de la declaración de una variable. Es obligatorio inicializar la constante en el momento de su declaración (es el único sitio donde se puede asignar valor a la constante).

final double TASAIVA=1.21;

A continuación es posible utilizar la constante en el código en lugar del valor literal que representa.

precioNeto=precioBruto*TASAIVA;

Las reglas relativas al ciclo de vida y al 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 double TOTAL=100; final double SEMI=TOTAL/2;

Existen muchas constantes que ya forman parte del lenguaje Java. Se definen como miembros

static

de las numerosas clases del lenguaje. Por convenio los nombres de las constantes se ortografían totalmente en mayúsculas.

3. Las enumeraciones

Una enumeración nos va a permitir agrupar un conjunto de constantes relacionadas entre sí. La declaración se hace de la siguiente manera:

public enum Días { DOMINGO, LUNES, MARTES, MIÉRCOLES, JUEVES, VIERNES, SÁBADO }

El primer valor de la enumeración se inicializa a cero. A continuación, las constantes siguientes se inicializan con un incremento de uno. Por lo tanto la declaración anterior se hubiera podido escribir:

public class Días {

public static final int DOMINGO=0; public static final int LUNES=1; public static final int MARTES=2; public static final int MIÉRCOLES=3; public static final int JUEVES=4; public static final int VIERNES=5; public static final int SÁBADO=6; }

De manera aproximada, esto es lo que hará el compilador cuando analice el código de la enumeración.

De hecho la declaración de una enumeración es una declaración de clase "disfrazada". Esta clase hereda implícitamente de la clase

java.lang.Enum

. Los elementos definidos en la enumeración son las únicas instancias posibles de esta clase. Como cualquier otra clase, puede contener atributos, constructores y métodos. El siguiente ejemplo de código presenta estas posibilidades.

public enum Daltons {

JOE (1.40, 52), WILLIAM (1.68, 72), JACK (1.93, 83), AVERELL (2.13, 89);

private final double altura; private final double peso;

private Daltons(double altura, double peso) {

this.altura = altura; this.peso = peso; }

private double altura() { return altura; } private double peso() { return peso; } double imc() { return peso/(altura*altura); } }

El constructor se ha utilizado de manera implícita para inicializar las constantes de cada uno de los elementos de la enumeración. El constructor de una enumeración debe, obligatoriamente, declararse como

private

. Existen varios métodos de la clase base (

java.lang.Enum

) que permite obtener información acerca de los elementos de la enumeración. El método

toString

devuelve una cadena de caracteres que representa el nombre de la constante de la enumeración.

Daltons d; d=Daltons.JACK;

System.out.println(d.toString());

El método

valueOf

realiza la operación inversa y devuelve uno de los elementos de la enumeración cuyo nombre indica la cadena de caracteres que se pasa como parámetro.

d=Daltons.valueOf("JOE");

System.out.println("peso: "+ d.peso()); System.out.println("altura: "+ d.altura());

El método

values

devuelve, en forma de tabla, todos los posibles valores de la enumeración.

System.out.println("Hermanos Dalton"); for(Daltons d: Daltons.values()) {

System.out.println(d.toString()); }

Una vez definida, una enumeración se puede utilizar como un nuevo tipo de datos. Podemos declarar una variable con nuestra enumeración para el tipo.

Días referencia;

Por lo tanto se puede utilizar la variable asignándole uno de los valores definidos en la enumeración.

referencia=Días.LUNES;

Al hacer referencia a un elemento de su enumeración, debe estar precedido por el nombre de la enumeración como en el ejemplo anterior. Está prohibido asignar a la variable un tipo distinto a los valores contenidos en la enumeración, y si se intenta se obtiene un error de compilación.

La declaración de una enumeración no se puede llevar a cabo dentro de un procedimiento o de una función. Por el contrario, se puede declarar en una clase pero habrá que prefijar el nombre de la enumeración con el nombre de la clase en la cual se determina su utilización. Para que la enumeración sea autónoma, basta con declararla en su propio fichero.

El alcance de una enumeración sigue las mismas reglas que el de las variables (utilización de las palabras clave

public

,

private

,

protected

).

Una variable de tipo enumeración se puede utilizar fácilmente en una estructura

switch ...

case

. En este caso, no es necesario que el nombre de la enumeración preceda a los miembros de la enumeración.

public static void testDía(Días d) {

switch (d) { case LUNES: case MARTES: case MIÉRCOLES: case JUEVES:

System.out.println("qué duro es trabajar"); break;

case VIERNES:

System.out.println("¡pronto el fin de semana!"); break;

case SÁBADO:

System.out.println("¡por fin!"); break;

case DOMINGO:

System.out.println("¡y vuelta a empezar!"); break;

} }

4. Los arrays

Los arrays nos van a permitir hacer referencia a un conjunto de variables del mismo tipo con el mismo nombre utilizando un índice para diferenciarlas. Un array puede tener una o varias dimensiones. El primer elemento de un array siempre tiene como índice el cero. El número de celdas del array se especifica en el momento de su creación. Por lo tanto el índice más grande de un array es igual al número de celdas menos uno. Después de su creación, no está permitido modificar las características del array (número de celdas, tipo de elementos almacenados en la tabla). La manipulación de un array se realiza en tres etapas:

Declaración de una variable que permite trabajar con el array.

Creación del array (asignación de memoria).

Almacenamiento y manipulación de los elementos del array.

In document Genomic prediction in rye (Page 148-150)