Está en la página 1de 3

Taller de Java.

Unidad 5
13/09/yyyy2008

Estudios de Informática y Multimedia

Taller de Java
Unidad 5
Formato de entrega: La entrega se realizará comprimiendo todos los ficheros en un
único ZIP llamado Apellido1Apellido2Nombre_UNIDAD5.zip. El zip contendrá una
carpeta con el código fuente (no se aceptarán entregas con archivos .class) y un
fichero Readme.txt dónde se explicarán todas las incidencias que hayan surgido en la
práctica y en general cualquier comentario que queráis que el corrector tenga en
cuenta.
Fecha de entrega: 23/09/2008
Es imprescindible respetar este formato de entrega, la no adecuación a estas
especificaciones puede suponer la no evaluación de la Unidad.

Objetivo: En esta unidad obtendréis un dominio básico para poder trabajar con clases.
Requisitos previos:
Para el adecuado funcionamiento de esta unidad deberéis tener correctamente
instalado el JDK 1.5 o posterior (aun que probablemente con versiones anteriores
también os funcione).
Evidentemente, hace falta haber realizado la unidad anterior (en siguientes
unidades daremos como implícito este requisito).  Únicamente para las unidades
2 y siguientes
Debéis leer hasta la página 100 del documento “JAVA como lenguaje de
programación orientada a objetos”.
Razonad la respuesta en todos los ejercicios.

Ejercicio 1

En este ejercicio os proponemos que hagáis la clase Date para modelar fechas.
Como sabéis, una fecha está compuesta por un día, un mes y un año. Id haciendo
los siguientes pasos:
1. Definid una clase Date con tres atributos enteros, uno para el día, otro para
el mes y otro para el año.
2. Cread un constructor que no reciba ningún parámetro y que inicialice los
atributos con una fecha válida. Por ejemplo, día 1, mes 1, año 2008.
3. Implementad los métodos getDay(), getMonth() y getYear() que
devuelvan los valores de día, mes y año respectivamente.
4. Implementad el método getSimpleDate() que devuelva un String con el
formato de fecha simple, por ejemplo: “1/1/2008”, y el método
getExtendedDate() que devuelve un String con formato de fecha extensa,
por ejemplo: “1 de enero de 2008”.

1 de 3
Taller de Java. Unidad 5
13/09/yyyy2008

5. Implementad el método setYear() que modifica el atributo año de la clase


con el valor pasado por parámetro. Haced lo mismo para los métodos
setMonth() y setDay(). Estos métodos van a devolver true si la nueva
fecha es correcta, y false en caso contrario.
 Para la validación de una fecha recordad que ciertos meses tienen 30
días, otros 31 y que febrero tiene 28 días excepto si se tratara de un año
bisiesto, que entonces tuviera 29.
 Un año es bisiesto si se cumple alguna de las siguientes condiciones:
i. es múltiple de 400
ii. es múltiple de 4, pero no de 100.
1. Implementad el método setDate() que dado un día, un mes y un año
modifique los atributos correspondientes de la clase si la nueva fecha es
válida. Devuelve true si es correcta y false en caso contrario.
2. Implementad el método addOneDay() que añada un día ala fecha
representada. Es decir, si representamos la fecha 31/1/2008, al ejecutarse el
método obtendríamos la fecha 1/2/2008. En este caso tenéis que tener en
cuenta también que meses tienen 30 y 31 días, en particular el mes de
febrero y los años bisiestos y posibles cambios de año.
3. Para terminar, cread una clase TestDate. En su main cread una instancia de
la clase Date y la inicializáis con la fecha que mas os guste. Mostrad por
pantalla la fecha extensa de cada día a partir de este día y hasta los
siguientes cien.
Comprobad también que los controles que habéis hecho de fechas funcionen
correctamente. Por ejemplo, las siguientes fechas son incorrectas:
1/13/2008, 32/1/2008, 30/2/2008, 31/1/2007, 31/3/2007, 29/2/2008

Preguntas teóricas:

1. Razona porqué los atributos tienen que ser privados.


2. Explicad porqué cuando definimos el constructor de una clase esta no tiene
un tipo de retorno asociado.
3. Que pensáis que hace la instrucción new? En otros lenguajes de
programación como el C++ existe un operador llamado delete que destruye
los objetos. Tendría sentido un operador como éste en Java? Porqué?

Ejercicio 2

Haced una clase de prueba con este código dentro:

String a = new String ("a");

2 de 3
Taller de Java. Unidad 5
13/09/yyyy2008

String a1 = new String("a");


String a2 = "a";
String a3 = "a";
String b = new String ("b");
String c = new String ("c");
System.out.println ("a+b+c: "+a+b+c);
System.out.println ("a==c: "+(a==c));
System.out.println ("a.equals(c): "+(a.equals(c)));
System.out.println ("a==\"a\": "+(a=="a"));
System.out.println ("a.equals(\"a\"): "+(a.equals("a")));
System.out.println ("a2==\"a\": "+(a2=="a"));
System.out.println ("a==a1: "+(a==a1));
System.out.println ("a3==a2: "+(a3==a2));
LinkedList <String> aa = new LinkedList <String> ();
Object bb;
bb = aa.clone();
System.out.println ("aa==bb: "+(aa==bb));
System.out.println ("aa.equals(bb): "+(aa.equals(bb)));

En la primera linea de vuestro código cuando lo probéis, poned antes de todo esta
linea;
import java.util.LinkedList;

1. Comprobad el resultado y razonad porqué se produce. Sobre todo mirad la


documentación del clone() para intentar entender qué es lo que está
pasando. Mirad también la documentación sobre cómo JAVA trata los String
literales:
String a2 = “a”
2. Qué pasa si ponemos este código? Porqué?
b = a.clone();
System.out.println (a==b);
System.out.println (a.equals(b));

3 de 3

También podría gustarte