Está en la página 1de 23

TALLER DE PROGRAMACIN DISTRIBUIDA

AA02
Programacin Bsica y Programacin Orientada a Objetos

HERRAMIENTAS DE PROGRAMACIN
Lenguaje: Java / IDE: NetBeans

Programacin de Mtodos

La programacin de mtodos consiste en pasar o transcribir


un algoritmo de programacin (que responda a las
necesidades/requerimientos del usuario) a un cdigo en un
lenguaje de programacin orientado a objetos.
En nuestro caso, escribiremos mtodos utilizando el
Lenguaje de Programacin Java trabajando con el IDE
(Entorno de Desarrollo Integrado ) NetBeans.

Se debe tener en cuenta seleccionar el OBJETO y EVENTO


adecuados para programar el comportamiento (mtodo) que
deber tener el objeto.
NOTA: No olvidar que la P.O.O. es una Programacin Basada en EVENTOS
(es decir, Programacin Guiada por Eventos).

CONTROLES JAVA

JFrame
jLabel
jTextField
jButton

jPanel
jRadioButton
jButtonGroup
jComboBox
jFormattedTextField
jSpinner
jCheckBox

Renombrar los nombres por defecto de los objetos:


Por ejemplo: jTextField1 TextNombres

ESTRUCTURAS DE CONTROL DE FLUJO DE PROGRAMAS


Estructura de Seleccin Mltiple
En Lenguaje Java esta estructura se representa con la instruccin:
SWITCH CASE
Sintaxis:

switch <variable> {
case <opcin 1>:
<conj. instr. 1>;
break;
case <opcin 2>:
<conj. instr. 2>;
break;
case <opcin 3>:
<conj. instr. 3>;
break;
case <opcin N>:
<conj. instr. N>;
break;
default:
<conj. instr. N>;
}

Aplicacin Java: Ejemplo07

Control: jComboBox
Ejemplo:

private void ComboNacionalidadActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
//Leer el texto que se seleccion en el ComboBox y pasarlo a un String
String Nacionalidad = (String) ComboNacionalidad.getSelectedItem();
//Evaluando Nacionalidad
switch(Nacionalidad) {
case "Peruana":
case "Colombiana":
case "Argentina":
descuento = (float) 20.00;
break;
case "Espaola":

case "Francesa":
descuento = (float) 25.00;
break;
case "Japonesa":
descuento = (float) 30.00;
break;
default:
descuento = (float) 0.00;
}
TextDescuento.setValue(descuento);
}

Control: jFormattedTextField

Explicacin:
Mscara de Formato: # y 0
25
##.## 25
##.00 25
25.5
##.## 25.5
##.00 25.50
##.#0 25.50

Mtodos de jFormattedTextField:
jTextField1.getText();
jFormattedTextField1.getValue();

Cuando el formato es numrico

jTextField1.setText();
jFormattedTextField1.setValue();

Cuando el formato es numrico

Control: jSpinner (Control Numrico)

Propiedad para configurar el objeto SpinEdad (JSpinner):

Clic para seleccionar

Cambiar los valores (Inicial, Mnimo, Mximo e Incremento)


de acuerdo a los requerimientos, para nuestro caso:

Control: jCheckBox (Casilla de Verificacin)


Objeto booleano cuya funcin es seleccionar y deseleccionar opciones dentro de una aplicacin.
En otros lenguajes, puede ser conocido simplemente como CheckBox. De manera coloquial,
tambin puede llegar a ser conocido como casilla de verificacin.

Inicializando objetos en el formulario:

Activar el foco a otro objeto cuando se presiona ENTER:


En el ejemplo para pasar de la caja Nombres a la caja Apellidos

Cerrar un formulario o ventana:

MANEJO DE FECHAS EN JAVA


_________________________________________________
A partir de la introduccin de la versin Java 8, el manejo de las fechas y el tiempo ha
cambiado en Java. Desde esta versin, se ha creado una nueva API para el manejo de fechas
y tiempo en el paquete java.time, que resuelve distintos problemas que se presentaban
con el manejo de fechas y tiempo en versiones anteriores. Sin embargo, nos podemos
encontrar con la necesidad de tener que trabajar con cdigo que usa versiones anteriores o
que sigue usando la clase Date del paquete java.util.

Clase Date (Paquete java.util)


La clase Date fue de las primeras en este paquete y como tal ha ido sufriendo cambios.
Bastantes mtodos estn deprecados. Un mtodo deprecado (deprecated) es un mtodo
obsoleto de uso no recomendado. Estos mtodos han sufrido mejoras o cambios que se
reflejan en otros mtodos o clases de uso recomendado en lugar del deprecated. Por
compatibilidad se permite el uso de estos mtodos, aunque se recomienda su sustitucin
por otros. El motivo por los que muchos de los mtodos de esta clase son deprecated es
sobre todo por temas de internacionalizacin en el formato de fechas que no se tuvieron
en cuenta en las primeras versiones de Java. A pesar de todo, esta clase permite la
interpretacin de fechas como ao, mes, da, hora, minutos y segundos y contina siendo
bastante usada entre la comunidad de programadores.
Algunas consideraciones que debemos tener en cuenta cuando usemos esta clase es que en
todos los mtodos que acepten o devuelvan aos, meses, das, horas, minutos y segundos
se trabaja de esta manera:
- Un ao y se representa por el entero y 1900. Por ejemplo el ao 1982 se representara
por el entero 1982 1900 = 82. De este modo, 82 representa 1982 y 92 representa 1992.
-

Los meses son representados desde 0 hasta 11, as Enero es 0 y Diciembre es 11.
Los das son normalmente representados desde 1 al 31.
Las horas desde 0 a 23.
Los minutos van desde 0 a 59.
Los segundos normalmente van desde 0 hasta 59. (Excepcionalmente pueden existir los
segundos 60 y 61 para los aos bisiestos).

Ejemplo 01
En el ejemplo que vamos a dar a continuacin veremos cmo se puede usar la clase Date
para representar una fecha determinada. Aprovechando que implementa la interfaz
Comparable<Date>, compararemos 2 fechas para saber cul va antes o despus:
// Ejemplo Clase Date
import java.util.Date;
public class Programa {
public static void main (String []args)

Date fecha1, fecha2;


fecha1 = new Date(82,4,1,10,30,15);
fecha2 = new Date(112,7,7,18,25,12);
System.out.println("Fecha 1 Local: "+fecha1.toLocaleString());
System.out.println("Fecha 2 Local: "+fecha2.toLocaleString());
System.out.println("Fecha 1 en GMT: "+fecha1.toGMTString());
System.out.println("Fecha 2 en GMT: "+fecha2.toGMTString());
System.out.println("Fecha 1: "+fecha1.toString());
System.out.println("Fecha 2: "+fecha2.toString());
System.out.println("Es la fecha 1 posterior a la fecha 2?: "+fecha1.after(fecha2));
}
}

El constructor que hemos utilizado es uno de los disponibles, en concreto Date (int year,
int month, int day, int hrs, int min, int sec) donde el primer nmero representa el ao, el
segundo el mes, el tercero el da, el cuarto las horas, el quinto los minutos y el sexto los
segundos.
Al compilar nuestro Programa en BlueJ (otro IDE para Java) nos saldr probablemente un
mensaje alertando del uso de mtodos deprecados como ya hemos comentado
anteriormente:

Igual sucede si compilamos en NetBeans, nos indica el uso de mtodos deprecados


tachando las clases y sus mtodos, como se observa en la siguiente imagen:

El resultado de ejecucin del programa, en NetBeans y en BlueJ respectivamente, nos


devuelve la siguiente salida:

Como podemos observar en la salida, imprimimos las fechas en varios formatos tanto la
fecha 1, como la fecha 2. El primero es el formato local donde se representa en este caso
las fechas con el formato del pas donde nos encontremos. Esto se debe a que en tiempo de
ejecucin se recupera el formato de fecha correspondiente al ordenador donde se est
ejecutando la aplicacin mediante una propiedad de la mquina virtual de java. Si estamos
en Espaa, recuperaremos la hora de Espaa y si estamos en Mxico la de Mxico, en Chile
la de Chile, etc.
En algunos casos nos interesa crear una fecha partiendo de un String, para ello podemos
utilizar el constructor utilizando la cadena String, pero si la fecha introducida en este caso
no sigue el formato local deberemos de utilizar la clase DateFormat para parsear
(transformar) el String y poder crear la fecha Date correspondiente.
El segundo par de formatos es el formato GMT donde podemos observar que se muestra con
2 horas menos en la salida con BlueJ (diferencia entre la hora local de Espaa que es donde
se hizo el programa y la hora GMT) y 5 horas ms en NetBeans (diferencia entre la hora local
de Per que es donde se hizo este programa y la hora GMT). Mientras que el formato tercero
es el que por defecto muestra Date.

Por ltimo observamos cmo podemos comparar dos fechas, utilizando los mtodos before
o after (en este caso) adems podramos haber utilizado por supuesto el mtodo
compareTo.

Ejemplo 02
Un ejercicio interesante puede ser el calcular la diferencia en das entre dos fechas dadas,
as vamos a realizar este ejercicio:

Las fechas creadas las interpretamos as:


(112, 7, 1, 10, 30, 15): (ao, mes, da, hora, minutos, segundos): ao 1900+112 = 2012,
mes 7 que es agosto (recuerda: el mes cero es enero), da 1, hora 10, minutos 30, segundos
15.

Por tanto la primera fecha es el 1 de agosto de 2012 a las 10 horas 30 minutos 15


segundos.
(112, 7, 7, 18, 25, 12): de la misma forma llegamos a la conclusin de que la fecha
representada es el 7 de agosto de 2012 a las 18 horas 25 minutos 12 segundos.
Entre el 1 de agosto y el 7 de agosto hay 6 das (7-1 = 6).
El mtodo getTime() aplicado sobre un objeto object devuelve un entero largo (long) que
representa el nmero de milisegundos desde el 1 de enero de 1970 a las 0 horas GMT (este
es un valor de referencia que utiliza Java, podra haber sido otra fecha, pero los
desarrolladores de Java eligieron esta). Para pasar de milisegundos a segundos hemos de
dividir por 1000 y para pasar de segundos a das hemos de dividir por 24 horas * (3600
segundos/hora). Resulta una operacin: numero / ( 3600000 *24) de forma que el valor de
milisegundos numero queda transformado en das.
En resumen lo que hacemos es obtener la diferencia en milisegundos entre las dos fechas y
transformarlo a das. El resultado lo almacenamos en un tipo long (entero largo) de forma
que si lleva decimales los decimales quedan truncados.

Nota: No todos los mtodos de la clase Date estn deprecados pero s bastantes de ellos,
por eso se recomienda utilizar para versiones de Java previas a la 8 la
clase DateFormat para formatear y parsear cadenas String a fechas y usar la
clase Calendar para conversiones de fechas y sus campos. Para versiones Java a partir de
la 8 se recomienda usar las clases del paquete java.time.

Paquete java.time
Java.time es un nuevo paquete que existe en Java 8.Este paquete es una extensin a las
clases java.util.Date y java.util. Calendar que vemos un poco limitado para manejo de
fechas, horas y localizacin.
Las clases definidas en este paquete representan los principales conceptos de fecha - hora,
incluyendo instantes, fechas, horas, periodos, zonas de tiempo, etc. Estn basados en el
sistema de calendario ISO, el cual el calendario mundial de-facto que sigue las reglas del
calendario Gregoriano.

Cada instancia de fecha y hora se compone de campos. Para el acceso de nivel inferior a
los campos consulte el paquete java.time.temporal. Cada clase incluye soporte para la
visualizacin y anlisis de todo tipo de fechas y horas. Consulte el paquete
java.time.format para opciones de personalizacin.
El paquete java.time.chrono contiene el API para calendario localizado (neutral):
ChronoLocalDate, ChronoLocalDateTime, ChronoZonedDateTime y Era. Esto es para uso de
aplicaciones que necesitan utilizar calendarios localizados. Se recomienda que las
aplicaciones utilicen la norma ISO-8601 de las clases de fecha y hora de este paquete a
travs de los lmites del sistema, como a la base de datos o en toda la red. La API neutral
calendario debe reservarse para la interaccin con los usuarios.

Fechas y horas
Instant: es esencialmente una marca de tiempo numrico. La instantnea actual puede ser
recuperada de un Clock Esto es til para la tala y la persistencia de un punto en el tiempo
y en el pasado ha sido asociado con almacenar el resultado de System.currentTimeMillis()
LocalDate: almacena una fecha sin hora. Esto almacena una fecha como '2010-12-03' y
podra ser utilizado para almacenar un cumpleaos.
LocalTime: almacena un tiempo sin una fecha. Esto almacena un momento como '11: 30 'y
podra ser utilizado para almacenar una abertura o cierre.
LocalDateTime: almacena una fecha y hora. Este almacena una fecha-hora como "2010-1203T11: 30 '.
ZonedDateTime: almacena una fecha y hora con un huso horario. Esto es til si desea
realizar clculos precisos de fechas y horas, teniendo en cuenta la ZoneId como "Europa /
Pars". Donde sea posible, se recomienda utilizar una clase ms simple sin un huso horario. El
uso generalizado de zonas horarias tiende a aadir una considerable complejidad a una
aplicacin.

Duracin y Perodo
Ms all de las fechas y horas, la API tambin permite el almacenamiento de los perodos y
duraciones de tiempo. Un Duration es una simple medida de tiempo a lo largo de la lnea
de tiempo en nanosegundos. Un Period expresa una cantidad de tiempo en unidades
significativas para los seres humanos, como aos o das.

Tipos de valor adicionales


Month: Almacena un solo mes de ao en forma aislada, como 'diciembre'.

DayOfWeek: lmacena un solo da de la semana en forma aislada, como 'Martes'.


Year: Almacena un solo ao en forma aislada, como '2010'.
YearMonth: Almacena un ao y mes, tales como '2010-12' y podra ser utilizado para una
caducidad de la tarjeta de crdito.
MonthDay: Almacena un mes y das de mes, como '12-03' y podra ser utilizado para
almacenar un evento anual, como un cumpleaos sin almacenar el ao.
OffsetTime: Almacena un tiempo y desplazamiento desde UTC sin fecha. Esto almacena
una fecha como '11: 30 + 01: 00 '. El ZoneOffset es de la forma '01: 00'.
OffsetDateTime: Almacena una fecha y hora y el desplazamiento de UTC. Esto almacena
una fecha-hora como "2010-12-03T11: 30 + 01: 00 '. Esto a veces se encuentra en los
mensajes XML y otras formas de persistencia, pero contiene menos informacin que un huso
horario completo.

Ejemplos:
Clases de fecha
Las clases de fecha como el java.time.LocalDate manejan la fecha, pero, a diferencia del
java.util.Date, es que es solo trabaja fecha, y no hora. Esto nos permitir manipular la
fecha para registrar fechas especficas como el da de cumpleaos o de matrimonio. Aqu
unos ejemplos:
LocalDate date = LocalDate.of(1999, Month.AUGUST, 23);
DayOfWeek dia=date.getDayOfWeek();
System.out.printf("El da que conoc a quien es mi esposa fue el %s y fue
un %s%n",date,dia);

Para representar el mes de un ao especfico, usamos la clase java.time.YearMonth y


tambin podemos obtener la cantidad de das de ese mes, sobre todo cuando jugamos con
los bisiestos:
YearMonth mes = YearMonth.now();
System.out.printf("Este mes es %s y tiene %d das%n", mes,
mes.lengthOfMonth());
mes = YearMonth.of(2004, Month.FEBRUARY);
System.out.printf("El mes %s tuvo %d das,%n", mes, mes.lengthOfMonth());
mes = YearMonth.of(2002, Month.FEBRUARY);
System.out.printf("el mes %s tuvo %d das,%n", mes, mes.lengthOfMonth());
mes = YearMonth.of(2000, Month.FEBRUARY);
System.out.printf("el mes %s tuvo %d das%n", mes, mes.lengthOfMonth());

mes = YearMonth.of(1800, Month.FEBRUARY);


System.out.printf("Pero el mes %s tuvo %d das Sabas que no es
considerado bisiesto?%n", mes, mes.lengthOfMonth());

La clase java.time.MonthDay representa a un da de un mes en particular, tal como decir


que el ao nuevo es el 1 de enero:
MonthDay dia=MonthDay.of(Month.FEBRUARY, 29);
System.out.printf("El da %s %s es vlido para el ao 2010%n",dia,
dia.isValidYear(2010)?"":"no");
//la respuesta ser NO

Y la clase java.util.Year nos permite manipular y conocer sobre un ao en especfico, sin


importar el da o mes:
Year ao = Year.now();
System.out.printf("Este ao es %s y %s es bisiesto%n", ao, ao.isLeap() ?
"s" : "no");

Clase de Hora
La clase java.time.LocalTime es similar a las otras cosas que comienza con el prefijo Local,
pero se centra nicamente en la hora. Esta clase es muy til para representar horas y
tiempos de un da, tales como la hora de inicio de una pelcula o el horario de atencin de
una biblioteca. Se centra nicamente en la hora de un da cualquiera, pero no en una fecha
especfica Se entiende? Con el java.util.Date solo podemos manipular la hora de un da de
un ao en especial, de una zona de horario en especial, pero con el LocalTime solo nos
centramos en la hora en s, sin importar que da sea. Normalmente lo manipularamos con
una cadena y de ah hacemos raros algoritmos para saber si esa cadena est dentro de la
hora actual.
Aqu un pequeo ejemplo de su uso:
LocalTime justoAhora = LocalTime.now();
System.out.printf("En este momento son las %d horas con %d minutos y %d
segundos\n",justoAhora.getHour(),justoAhora.getMinute(),
justoAhora.getSecond());

Como se puede ver, no tiene nada que ver la fecha, solo se manipul la hora.

Clase de hora/fecha
La clase java.time.LocalDateTime manipula la fecha y la hora sin importar la zona horaria.
Esta clase es usada para representar la fecha (ao, mes, da) junto con la hora (hora,

minuto, segundo, nanosegundo) y es - en efecto - la combinacin de LocalDate y LocalTime.


Esta clase puede ser usada para especificar un evento, tal como la final de Champions
League 2014 en la hora local del evento.
Adems del mtodo now() que viene en cada clase vista hasta ahora, la clase LocalDateTime
tiene varios mtodos of (o mtodos con prefijo of) que crean una instancia de
LocalDateTime. Tambin hay un mtodo from que convierte una instancia de otro formato
de tiempo a la instancia LocalDateTime. Tambin hay mtodos para agregar y quitar horas,
minutos, das, semanas y meses. Aqu muestro algunos ejemplos:
LocalDateTime ahora = LocalDateTime.now();
System.out.printf("La hora es: %s%n", ahora);
LocalDateTime algunDia = LocalDateTime.of(1976, Month.MARCH, 27, 6, 10);
System.out.printf("Yo nac el %s%n", algunDia);
System.out.printf("Hace seis meses fue %s%n",
LocalDateTime.now().minusMonths(6));