GENERACIÓN DE NÚMEROS ALEATORIOS EN JAVA

La clase Random proporciona un generador de números aleatorios. Es más flexible que la función random de la clase Math. Vamos a ver un repaso de uso de la clase Random con ejemplos y ejercicios resueltos. La generación de números aleatorios adquiere gran relevancia para un programador, pudiendo tener distintas aplicaciones como:

  1. Construcción preliminar de programas, en los que a falta de datos definitivos, introducimos datos aleatorios.
  2. Simulación de procesos aleatorios (número resultante de tirar un dado, elección de un color por parte de una persona, número premiado en un sorteo de lotería, cantidad de personas que entran a un supermercado en una hora…)
  3. Verificación de programas, y en particular lo que en verificación de algoritmos se conoce como verificación aleatoria (probar el programa con distintos supuestos aleatorios).
  4. Otras aplicaciones.

Pasos sintácticos a emplear para crear una secuencia de números aleatorios:

  1. Proporcionar a nuestro programa información acerca de la clase Random. Al principio del programa escribiremos la siguiente sentencia:
import java.util.Random;
  1. Crear un objeto de la clase Random: la clase Random dispone de dos constructores, para crear un objeto. El primer constructor es:
Random  rnd = new Random();

Este constructor crea un generador de números aleatorios cuya semilla es inicializada automáticamente, en base al tiempo actual. Esto conlleva que en cada ejecución la semilla cambie, es decir, que la secuencia de números aleatorios que se genera en cada ejecución siempre será diferente.

El segundo constructor es:

Random rnd = new Random(inicializar_semilla);

Este constructor nos permite inicializar la semilla manualmente con un número entero cualquiera. Si este número es el mismo en cada ejecución, la secuencia de números aleatorios que se genera en cada ejecución será igual.

  1. Llamar a una de las funciones miembro que generan un número aleatorio:

Lo más habitual, para generar un número aleatorio, es usar la función miembro rnd.nextDouble(). El valor devuelto es de tipo double. Un aspecto importante a tener en cuenta, es que el valor devuelto se encuentra en el rango mayor o igual a cero y menor a 1. Es decir, el número devuelto puede ser cero pero no puede ser uno.

    /* Ejemplo uso clase Random() */
    import java.util.Random;
    public class Programa {
        public static void main(String arg[ ]) {
              Random rnd = new Random();
              System.out.println("Número aleatorio real entre [0,1[ : "+rnd.nextDouble());
         }
    }

En el caso de necesitar números aleatorios enteros en un rango determinado, podemos trasladarnos a un intervalo distinto, simplemente multiplicando, aplicando la siguiente fórmula general:

(int) (rnd.nextDouble() * cantidad_números_rango + término_inicial_rango)

donde (int) al inicio, transforma un número decimal double en entero int, eliminando la parte decimal.

VALOR ABSOLUTO DE UN NÚMERO EN JAVA

DESCRIPCIÓN DEL MÉTODO Math.abs()

Método que nos permite calcular el valor absoluto de un número.

SINTAXIS

public static double abs(double a)

public static float abs(float a)

public static int abs(int a)

public static long abs(long a)

PARAMETROS

a, valor numérico al que se necesita calcular el valor absoluto.

EXCEPCIONES

Clase Java a la que aplica

EJEMPLO

// Si queremos |-3|

System.out.println(Math.abs(-3));

MODELO DE REQUISITOS

El modelo de requisitos tiene como objetivo delimitar el sistema y capturar la funcionalidad que ofrecerá desde la perspectiva del usuario. Este modelo puede trabajar como un contrato entre el desarrollador y el cliente, o usuario del sistema, por lo que deberá proyectar lo que el cliente desea según la percepción del desarrollador. Por ello, es esencial que los clientes lo comprendan.

El modelo de requisitos es el primero en desarrollarse, y es la base para formar todos los demás modelos en el desarrollo de software. En general, cualquier cambio en la funcionalidad del sistema es más fácil de hacer, y con menores consecuencias a este nivel que posteriormente. El modelo de requisitos que se desarrollará se basa en la metodología Objectory (Jacobson et al. 1992), que tiene su fundamento en el modelo de casos de uso. Actualmente esta metodología es parte del Proceso unificado racional (RUP) [Rational Unified Process].1 El modelo de casos de uso y el propio modelo de requisitos son la base para los demás modelos.

► Requisitos: El modelo de casos de uso sirve para expresar el modelo de requisitos, el cual se desarrolla en cooperación con otros modelos como se verá más adelante.

► Análisis: La funcionalidad especificada por el modelo de casos de uso se estructura en el modelo de análisis, que es estable con respecto a cambios, lo que lo hace un modelo lógico independiente del ambiente de implementación.

► Diseño: La funcionalidad de los casos de uso, ya estructurada por el análisis, la realiza el modelo de diseño, adaptándose al ambiente de implementación real y refinándose aún más.

► Implementación: Los casos de uso se instrumentan mediante el código fuente en el modelo de implementación.

► Pruebas: Los casos de uso se comprueban a través de las pruebas de componentes y de integración.

► Documentación: El modelo de casos de uso se debe registrar a lo largo de las diversas actividades, dando lugar a distintos documentos como los manuales de usuario, de administración, etcétera.

El propósito del modelo de requisitos es comprender en su totalidad el problema y sus implicaciones. Los demás modelos, análisis, diseño, implementación y pruebas dependen directa o indirectamente del modelo de requisitos. Asimismo, este modelo sirve de base para el desarrollo de las instrucciones operacionales y los manuales, ya que todo lo que el sistema deba hacer se describe aquí desde la perspectiva del usuario. El modelo de requisitos no es un proceso mecánico, el analista debe interactuar constantemente con el cliente para completar la información faltante, y así resolver ambigüedades e inconsistencias. También debe separar los requisitos verdaderos de las decisiones relacionadas con el diseño e implementación. Se deben indicar cuáles aspectos son obligatorios y cuáles opcionales para evitar que se limite la flexibilidad de la implementación. Durante el diseño, se debe extender el modelo de requisitos con las especificaciones de rendimiento y los protocolos de interacción para los sistemas externos, al igual que las provisiones sobre modularidad y futuras extensiones. Incluso, en ciertas ocasiones se pueden incluir aspectos de diseño, como el uso de lenguajes de programación particulares.

Gale Virtual Reference Library – Documento – Modelo de Requisitos Weitzenfeld, Alfredo. “Modelo de Requisitos.” Ingeniería de Software Orientada a Objetos con UML, Java e Internet, Cengage Learning, 2005, pp. [195]-197. Gale Virtual Reference Library, bibliotecavirtual.unad.edu.co:2081/ps/i.do?p=GVRL&sw=w&u=unad&v=2.1&it=r&id=GALE%7CCX3004300051&asid=959aa89a0acb01ba3c88b3e4069a7d13. Accessed 6 Mar. 2017.

BIBLIOTECAS DE JAVA

Java lleva a un nuevo nivel el concepto de bibliotecas o paquetes, éstos proveen una amplia funcionalidad para crear nuevas aplicaciones de Java. Además de servir como bibliotecas, definen una Application Program Interface(API) [interface de aplicación de programa], que permite al desarrollador extender las clases de estos paquetes para adaptarlos a las necesidades básicas de un programa. Java organiza estos paquetes en componentes jerárquicos a partir de dos directorios principales. El primero es java, que es parte esencial de lo que actualmente se conoce como el API 1 de Java.

1.PNG

En la actualidad se cuenta con el API 2 de Java, mejor conocido como Java2, el cual incluye además del paquete java, el paquete javax, donde se encuentran componentes más avanzados, como se muestra en la tabla 5.2.

2.PNG

En Java, cada clase debe ser parte de un paquete (package), y puede ser referida por su nombre completo “calificado”, el cual consiste en la jerarquía del paquete y el nombre de la clase, todos separados por puntos. Los propios nombres de los paquetes generalmente están compuestos de múltiples componentes separados por puntos. Por ejemplo, la clase PixelGrabber que se encuentra en el paquete java.awt.image se ingresaría mediante:

java.awt.image.PixelGrabber

Vale la penar notar que los paquetes se guardan en distintos directorios, donde el “.” realmente corresponde a “/” (“\” en la PC), donde se traduce, por ejemplo java.awt.image a java/awt/image. Por tanto, la clase PixelGrabber estaría guardada dentro del directorio anterior.

Además de los paquetes mencionados en las tablas 5.1 y 5.2, existe un número muy extenso de productos adicionales desarrollados por Sun y otras compañías, como los paquetes para gráficas en dos y tres dimensiones que son también parte de Java, y los paquetes para acceso a bases de datos de Oracle y Sybase.

Gale Virtual Reference Library – Documento – Introducción a JavaWeitzenfeld, Alfredo. “Introducción a Java.” Ingeniería de Software Orientada a Objetos con UML, Java e Internet, Cengage Learning, 2005, pp. [129]-134. Gale Virtual Reference Library, bibliotecavirtual.unad.edu.co:2081/ps/i.do?p=GVRL&sw=w&u=unad&v=2.1&it=r&id=GALE%7CCX3004300042&asid=81fb1d420e8abce85922ab918a53efa4. Accessed 6 Mar. 2017.

EJECUCIÓN EN JAVA

Durante la ejecución se obtiene el bytecode, guardado en los archivos “.class”, que puede estar ya en la plataforma actual o haber sido enviado por la red, como en el caso de un browser. El bytecode se carga en la máquina virtual por el cargador de clases. A continuación este código es procesado por el verificador de bytecode y, dependiendo del hardware con que se cuenta, puede ser interpretado y ejecutado por el procesador virtual de la máquina o traducido al código de un procesador de Java mediante el generador de código.

► Existen dos maneras de ejecutar (y estructurar) un programa dependiendo de su ambiente de ejecución. En el caso de una aplicación “normal” (standalone), se ejecuta mediante el siguiente interpretador de Java, llamado simplemente java:

java ej2

► En el caso de una aplicación que se ejecuta desde un navegador web (web browser), llamado applet, el contenido de los archivos .class que están almacenados en el servidor, se transmiten a través de la red y se ejecutan en la máquina cliente (que puede ser la misma máquina que el servidor). Dado que un browser sólo comprende archivo .html, el applet debe ser relacionado con un archivo llamado, por ejemplo ej.html. Este archivo debe contener la siguiente línea:

<applet code=ej.class width=200 height=200></applet>

Ya que pueden haber múltiples archivos .class, sólo el principal es el que se incluye en la línea anterior. Otra forma adicional de ejecutar el applet es mediante el comando appletviewer, de la siguiente forma:

appletviewer ej.html 

Gale Virtual Reference Library – Documento – Introducción a JavaWeitzenfeld, Alfredo. “Introducción a Java.” Ingeniería de Software Orientada a Objetos con UML, Java e Internet, Cengage Learning, 2005, pp. [129]-134. Gale Virtual Reference Library, bibliotecavirtual.unad.edu.co:2081/ps/i.do?p=GVRL&sw=w&u=unad&v=2.1&it=r&id=GALE%7CCX3004300042&asid=81fb1d420e8abce85922ab918a53efa4. Accessed 6 Mar. 2017.

COMPILACIÓN EN JAVA

Se escribe un programa en código Java utilizando el sufijo “.java”, el cual se compila mediante cualquiera de los compiladores de Java en alguna de las distintas plataformas. En general, debe haber un archivo “.java” por cada clase que exista en el programa, donde el archivo tendrá el mismo nombre que la clase contenida. El compilador genera el código final, conocido como bytecode, a ser interpretado por la máquina virtual de Java. El programa generado tiene como extensión el sufijo “.class”. Se origina un archivo “.class” por cada clase que se tenga en la aplicación.

Por ejemplo, si se tiene una clase llamada “ej”, el nombre del archivo debe ser “ej.java”. El archivo se compilaría mediante algún ambiente de desarrollo o utilizando el comando javac que viene incluido en los kit de desarrollo de Java como Java Development Kit (JDK) o Standard Development Kit (SDK). Por ejemplo, para compilar el archivo anterior se ejecutaría

javac ej.java

Esta compilación resultaría en el archivo “ej.class”.

Gale Virtual Reference Library – Documento – Introducción a JavaWeitzenfeld, Alfredo. “Introducción a Java.” Ingeniería de Software Orientada a Objetos con UML, Java e Internet, Cengage Learning, 2005, pp. [129]-134. Gale Virtual Reference Library, bibliotecavirtual.unad.edu.co:2081/ps/i.do?p=GVRL&sw=w&u=unad&v=2.1&it=r&id=GALE%7CCX3004300042&asid=81fb1d420e8abce85922ab918a53efa4. Accessed 6 Mar. 2017.