RSS

Assertions: Habilitacion Selectiva, Usos Apropiados

20 Mar

Sobre versiones:

En el examen siempre estaremos usando la versión 6 del compilador (javac) y la versión 6 del lanzador (java). Si existen preguntas sobre código de versiones anteriores siempre serán en el contexto de compilar y ejecutar código antiguo con la versión 6 de Java.

A partir de la versión J2SE 1.4 assert es una palabra clave.
En versiones anteriores assert podía ser utilizada como identificador al no existir todavía las assertions.

Si quisiéramos compilar código antiguo en el que assert se utiliza como identificador hemos de indicar la versión al compilar con la opción -source:

javac -source 1.3 Assert_Identificador.java

Compilaría ok, aunque con warnings, indicando que assert se utiliza como identificador y ejecutaría ok.

Si ese código antiguo lo compiláramos con la versión 1.4 o con la versión por defecto, 1.6, nos daría error:

javac -source 1.4 Assert_Identificador.java
javac Assert_Identificador.java
javac -source 1.6 Assert_Identificador.java
javac -source 6 Assert_Identificador.java

De la misma forma, si un código que utiliza assert como palabra clave se compilara indicando la versión antigua en la que existía como identificador, también se produciría un error de compilación:

javac -source 1.3 Assert_PalabraClave.java


Habilitación e Inhabilitación selectiva:

En la entrada anterior vimos en un ejemplo cómo habilitabamos las assertions en tiempo de ejecución para un fichero .class en concreto:

java -ea Triangulo

Sin embargo, la habilitación o deshabilitación se puede hacer también:

  • Para todas las clases:
    java -ea           //habilita assertions.
    java -da           //deshabilita assertions.
    java -ea -dsa    //habilita assertions en todas las clases menos las clases de sistema.
  • Para todas las clases de un paquete y sus subpaquetes:
    java -ea: proyecto.utiles… //habilita clases del paquete proyecto.utiles y subpaquetes.
    java -da: proyecto.utiles… //deshabilita clases del paquete y subpaquetes.
  • Usando combinaciones:
    java -ea -da: proyecto.utiles.Calendario //Habilita assertions menos la clase Calendario
    java -da -ea: proyecto.utiles… //Deshabilita assertions menos las clases del paquete y
    //subpaquetes


Usos Inapropiados: 

  • Comprobar argumentos de método público.
    Al ser públicos y poder ser utilizados por terceros se debe garantizar con un control más estricto que las assertions, ya que si las assertions están deshabilitadas no se produce ninguna comprobación. Si los valores de los argumentos de un método público son incorrectos se debe lanzar una excepción.
  • Comprobar argumentos de línea de comandos.
    De la misma forma si los valores pasados como argumentos a un programa se necesitan validar no deben ser comprobados con assertions sino con excepciones.
  • Provocar efectos colaterales.
    Las assertions no deberían provocar cambios en el estado del programa. No deben modificarse datos dependiendo de si están habilitadas o no.


Usos Apropiados: 

  • Comprobar argumentos de método privado.
    Los métodos privados serán llamados desde algún código público en el que ya se haya garantizado la correción de los argumentos pasados. Por lo tanto sí se pueden realizar suposiciones con assertions dentro del código privado.
  • Comprobar casos que nunca se producirán (incluso en métodos públicos).
    En bloques if o switch para verificar que ciertas ramas o casos no se deben alcanzar nunca se coloca un assert(false) para que si estamos equivocados en nuestra suposición falle.

En el siguiente post veremos algunos ejercicios y preguntas sobre assertions.

Anuncios
 
Deja un comentario

Publicado por en 20 marzo, 2012 en Tema 5

 

Etiquetas: , , , , ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: