Uso de aseveraciones ("Assertions")

Existen dos tipos de sintaxis para emplear aseveraciones ("assertions") en Java:

 
assert (Expresión con resultado verdadero|falso [boolean]) : 
                                      (Expresión Descriptiva del error) ;

                                           "o" 

assert (Expresión con resultado verdadero|falso [boolean]) ;

Ambas declaraciones inician con la palabra reservada assert utilizada para definir una aseveración en Java.

Posteriormente se debe definir una expresión que dará como resultado una expresión booleana (verdadero o falso), dicha expresión es precisamente la que será aseverada por Java, si esta expresión resulta ser verdadera el ciclo de ejecución del programa continuará normalmente, sin embargo, si resulta falsa la expresión, la ejecución del programa será interrumpida indicando el error de aseveración ("assertion").

La única diferencia que existe entre las declara iones antes mencionadas, es que la primera de éstas define una expresión adicional que permite agregar información extra acerca de la aseveración levantada por el programa, dicha declaración puede ser desde una variable hasta un método que de como resultado un valor no nulo (void), este resultado es convertido a un String que es pasado al constructor de la aseveración para ser desplegado como información adicional al momento de ejecución; la segunda declaración de aseveración simplemente verifica la validez de la primer expresión sin proporcionar detalles específicos del error.

Código Fuente Sumatoria.java

 
import java.util.*;


public class Sumatoria { 
        
    public int sumatoria(List numeros) { 
	int suma = 0;
	for(Iterator it = numeros.iterator(); it.hasNext();) { 
	    suma += ( (Integer)it.next() ).intValue(); 
	}
	assert suma <= 500: suma;
	return suma;
    }
    
    
    
    public static void main(String[] args) { 

      	List numeros = new ArrayList();
	int inicial = 0;
	
	// Convertir Dato de Entrada a primitivo int
	// Bloque try/catch utilizado en caso de no ser posible conversion
	
	try { 
	    inicial  = Integer.parseInt(args[0]);
	} catch (NumberFormatException ex) { 
	    System.out.println("El dato proporcionado no puede ser convertido a un numero");
	    System.exit(-1);
	} catch (Exception ex) { 
	    System.out.println("Ocurrio un error " + ex);
	    System.exit(-1);
	}
		    
	// Ciclo para llenar Lista
	for (int i = 0; i < 10; i++) { 
	    numeros.add(new Integer(inicial+i)); 
	}
	
        Sumatoria factorial = new Sumatoria();
	int resultado = factorial.sumatoria(numeros);

	System.out.println("La suma de los 10 numeros a partir del numero proporcionado[" + inicial + "] es : " + resultado);
    }
    
}

System.exit()

El método exit de la clase System implica que un programa debe ser terminado inmediatamente. Aunque el uso de bloques try/catch y aseveraciones ("assertions") permiten que un programa llegue a su fin prematuramente y bajo cierto control, el uso de System.exit() implica una terminación inmediata.

En el ejemplo anterior, aunque el bloque try/catch es suficiente para terminar la ejecución del programa en caso de no poderse convertir el valor introducido a un entero, éste no es lo suficiente para terminar la ejecución del método main, de no ser por la llamada a System.exit(-1) el método imprimiría a pantalla la última declaración de este método.

El valor -1 del método es únicamente una convención de sintaxis, ya que puede tomar cualquier valor de número entero produciéndose los mismos resultados.

El siguiente ejemplo también hace uso de aseveraciones invocando un método en caso de no cumplirse la aseveración.

Codigo Fuente Invernadero.java

 
public class Invernadero { 

    
    private String[] citricos = {"Naranjo","Limon","Mandarina","Toronja","Naranjo"};
    private int[] alturas = {7, 4, 6, 7, 18};
    
    
    public String controlDeCalidad() {
	for (int i = 0; i < alturas.length; i++) { 
           assert ( alturas[i] > 5 && alturas[i] > 20) : determinarArbol(i); 
	}
	return "Control de Calidad OK"; 
    }
    
    public String determinarArbol(int noDeArbol) { 
	int alturaFueradeControl = alturas[noDeArbol];
	String tipoDeArbol = citricos[noDeArbol]; 
        String resultado = "Control de Calidad no se cumple en un " + tipoDeArbol + " con " + alturaFueradeControl + " de altura";
	return resultado; 
    } 
    
    
    public static void main(String[] args) { 
	Invernadero arboles = new Invernadero();
	System.out.println(arboles.controlDeCalidad());
    }
    
    
}

En la siguiente sección se describen las medidas que deben ser tomadas para habilitar aseveraciones ("assertions") al momento de compilar y ejecutar programas.

Menú Curso

Objetos, Java y JDK

Composición, Clases y Librerías("Packages").

Variables, Constructores, Métodos y Comentarios.

Herencias ("Inheritance"), Condicionales y Ciclos

Operadores, Errores y Datos de Entrada/"Streams".

Interfases, Arreglos y Polimorfismo.

Collections Framework, "Threads", Garbage Collection y "Assertions".

Java 5 / JDK 5 .

Instalación Software.

Codigo.