Tutorial de Java

La Aplicación Fecha

Anterior | Siguiente
Ahora se presentará una aplicación un poco más útil que HolaMundo, que hará visible en pantalla la fecha y hora del sistema. Servirá como repaso general a todos los conceptos que se han vertido sobre Java, de forma que se irán recordando según se presenten, ya sobre un ejemplo más práctico que los vistos hasta ahora. Incluso se realizará una introducción muy sencilla a los conceptos fundamentales de la programación orientada a objetos, clases y objetos, a través de esta simple aplicación.
import java.util.Date;
    
class FechaApp {
    public static void main( String args[] ) {
        Date hoy = new Date();
        System.out.println( hoy );
        }
    }

Esta aplicación es una versión modificada de HolaMundoApp de la que difiere porque se importa la clase Date, la aplicación se llama ahora FechaApp en vez de HolaMundoApp, se crea un objeto Date y el mensaje de salida a pantalla es diferente. Esta nueva aplicación se almacenar en el fichero fuente Java, FechaApp.java.

La línea de código:

    class FechaApp {

es el inicio del bloque de la declaración de nuestra clase. Ya se ha dicho que todas las funciones y variables en Java, existen dentro de una clase o un objeto, Java no soporta funciones o variables globales. Por tanto, la declaración de la clase se convierte en el esqueleto de cualquier aplicación Java. La clase, el bloque básico de un lenguaje orientado a objetos como Java, es la plantilla que se utiliza para describir los datos y el entorno asociado a las instancias de esa clase. Cuando se instancia una clase, se crea un objeto del tipo definido por la clase y exactamente igual que cualquier otra instancia realizada de la misma clase. Los datos asociados a la clase u objeto son las variables y el entorno asociado con la clase u objeto son los métodos.

Un ejemplo de clase es la clase que representa un rectángulo. Esta clase contiene las variables que indican las coordenadas del origen del rectángulo y su ancho y alto. La clase puede contener un método para calcular el área de ese rectángulo. Ahora se puede instanciar para muy diferentes propósitos, es decir, se pueden tener objetos rectángulo específicos, así se podrá obtener información de las dimensiones del dormitorio donde se encuentra nuestro lugar de reposo o de las dimensiones de la ventana en donde se está visualizando esta página.

    class NombreDeLaClase {
        . . .
        }

Esta es la forma general de definición de una clase en Java, donde la palabra clave class inicia la definición de la clase NombreDeLaClase. Las variables y métodos de la clase han de ir colocados entre las llaves que delimitan el bloque de definición de la clase. FechaApp no tiene variables y solamente tiene un método llamado main().

Este método, main(), es el cerebro de cualquier aplicación Java. Cuando se ejecuta una aplicación Java utilizando el intérprete Java, se debe especificar el nombre de la clase que se desea ejecutar. El intérprete entonces, invoca al método main() definido dentro de esa clase, que debe controlar el flujo del programa, pedir al sistema los recursos que necesite y ejecutar cualquier otro método necesario para completar la funcionalidad de la aplicación.

La definición del método main() debe estar precedida por tres modificadores:

  • public indica que el método main() puede ser llamado por cualquier objeto
  • static indica que el método main() es un método estático, es decir, un método propio de la clase
  • void indica que el método main() no devolverá ningún valor

El método main() en Java es similar a la función main() de C y C++. Cuando se ejecuta un programa escrito en C o C++, arranca llamando en primer lugar a la función main(), que llamará a las demás funciones necesarias en la ejecución del programa. De forma similar, en el lenguaje Java, cuando se ejecuta una clase con el intérprete Java, el sistema comienza llamando al método main() de la clase, que llamará a los demás métodos necesarios para completar la ejecución de la aplicación. Si se intenta ejecutar una clase con el intérprete Java que no contenga el método main(), el intérprete generará un mensaje de error.

El método main() acepta como argumento un array de Strings:

    public static void main( Strings args[] ) {

Este array de Strings es el mecanismo a través del cual el sistema puede pasar información a la aplicación. Cada una de las cadenas String es un argumento de línea de comandos. Permiten pasar información a la aplicación, para variar su ejecución, sin necesidad de recompilarla. Por ejemplo, si desarrollamos una aplicación de ordenación, se podría permitir al usuario seleccionar el método, ascendente o descendente, en la línea de comandos de ejecución de la aplicación.

    -descendente

La aplicación FechaApp ignora los argumentos de la línea de comandos, pero se volverá sobre ello más adelante. No obstante, los programadores de C y C++ deben tener en cuenta que en Java el número y tipo de argumentos de la línea de comandos es diferente a los que se pasan a la función main() en C y C++.

La aplicación FechaApp es el programa más simple que se puede hacer que realice algo interesante, pero por su misma sencillez no necesita ninguna clase adicional. Sin embargo, la mayoría de los programas que se escriban serán más complejos y necesitarán que se desarrollen otras clases y utilizar las que nos proporciona Java como soporte.

La aplicación FechaApp utiliza dos clases, la clase System y la clase Date, que nos proporciona el entorno de desarrollo de Java. La clase System proporciona un acceso al sistema independiente del hardware sobre el que estemos ejecutando la aplicación y la clase Date proporciona un acceso a las funciones de Fecha independientemente del sistema en que se esté ejecutando la aplicación.

    Date hoy = new Date();

Esta primera línea del método main() declara, instancia e inicializa un objeto de tipo Date, hoy. Date hoy indica al compilador que la palabra hoy será utilizada en adelante para referirse a un objeto cuyo tipo es Date, el operador new instancia un nuevo objeto Date y Date() inicializa el objeto. El constructor utilizado para inicializar al objeto hoy es el constructor por defecto que inicializa a los objetos de tipo Date, que los carga con la fecha y hora actual del sistema.

Las declaraciones pueden aparecer como parte de la creación del objeto como en este caso, o pueden también aparecer solas:

    Date hoy;

De cualquier modo, la declaración de un objeto siempre será de la forma:

    tipo nombre

Donde tipo puede ser un tipo de dato simple como int, float o boolean, o un tipo de datos más complejo como en este caso la clase Date. nombre es la palabra que se utilizará para reconocer la variable. Las declaraciones simplemente informan al compilador de que se usará la palabra nombre para referirse a una variable del tipo tipo. Las declaraciones no realizan la instanciación del objeto, para instanciar un objeto de tipo Date, o cualquier otro objeto, es necesario utilizar el operador new.

El operador new instancia un nuevo objeto reservando memoria para él. Requiere un solo argumento: el método constructor para el objeto que se creará. Es este método constructor el responsable de la inicialización del nuevo objeto.

Las clases deben proporcionar métodos para inicializar nuevos objetos de ese tipo. En una declaración de clase, los constructores se pueden distinguir del resto de métodos porque tienen el mismo nombre de la clase y no devuelven ningún valor. Por ejemplo, el método constructor de objetos Date que se utiliza en FechaApp es:

    Date()

que no tiene ningún argumento, por lo cual recibe el nombre de constructor por defecto. Al igual que Date, la mayoría de las clases tienen al menos un constructor, el constructor por defecto; sin embargo, las clases pueden tener múltiples constructores, todos ellos con el mismo nombre de la clase y distinto número y tipo de argumentos. Por ejemplo, la clase Date soporta un constructor que necesita tres parámetros de entrada:

    Date( int ano,int mes,int dia )

que inicializa el nuevo objeto Date con el año, mes y día que se especifican en esos tres parámetros.

    System.out.println( hoy );

Esta última línea del método main() utiliza la notación de puntos para acceder a las variables o métodos de la clase u objeto, en este caso recurre a la clase System del paquete java.lang para presentar la fecha y hora actuales.

System.out referencia la variable out de la clase System. Como se puede ver, para referenciar métodos y variables estáticas de la clase, se utiliza una sintaxis similar a la que se usa en C y C++ para acceder a los elementos de una estructura. Se unen el nombre de la clase y el nombre del método o variable estática mediante un punto (.).

Observar que la aplicación nunca instancia la clase System y que out es refenciada directamente desde la clase. Esto es así porque out está declarada como variable estática, está asociada con la clase directamente en lugar de con una instancia de la clase. También se pueden asociar métodos con la clase, métodos estáticos, utilizando la palabra clave static.

Los métodos y variables que no se declaran como static, se llaman métodos y variables de instancia. Para poder acceder a las variables y métodos de instancia, hay que inicializar la clase en primer lugar y luego obtener las variables y métodos desde la instancia.

La variable out de System es un objeto, una instancia de la clase PrintStream (del paquete java.io), que implementa la salida estándar del sistema, que suele ser el lugar más conveniente para que una aplicación vaya mostrando sus resultados.

System crea a out y a las demás variables estáticas cuando se carga la clase System en la aplicación. La parte derecha de la sentencia realiza la llamada a uno de los métodos de instancia de out: println().

    out.println()

Como se puede ver, la forma de referirse a variables o métodos de instancia es similar a la utilizada para referirse a variable o métodos estáticos. Se unen el nombre del objeto y el nombre del método o variable de instancia mediante un punto (.).

El compilador de Java permite que se encadenen las referencias a variables y métodos de instancia o estáticos y utilizar el constructor siguiente:

    System.out.println()

Las variables y métodos estáticos se conocen también como variables de la clase o métodos de la clase porque solamente puede haber una variable y un método estático una vez por clase. Las variables y métodos de instancia ocurren una vez por cada instancia de la clase.

Navegador

Home | Anterior | Siguiente | Indice | Correo