Conceptos Básicos de Java

1. Contestad al siguiente test (en el fichero respuestas.txt):

1. Una clase es...

a. Un objeto en memoria
b. La definición de un objeto, especificando campos y métodos
c. Un constructor especial
2. Los campos definen el estado, los métodos definen funciones o cambios, y los constructores definen...
a. Cómo construir un objeto como instancia de una clase
b. Propiedades para poder eliminar luego el objeto de la memoria
c. Un método estático que se llama en tiempo de ejecución
d. Todas las anteriores
3. ¿Para qué sirven los modificadores?
a. Indican permisos de lectura o escritura
b. Indican al compilador si otros paquetes o clases tienen acceso a la variable o método que están modificando
c. Indican si un objeto realiza una copia del elemento que modifican, o si comparten su valor
4. Si creamos un subtipo de la clase A, dicho subtipo hereda...
a. Los métodos de A
b. Los métodos de A y de todas las clases de las que herede A
5. El método main() de una aplicación debe ir...
a. En todas las clases de la aplicación
b. Sólo en la clase principal, la que se vaya a ejecutar
c. En la última clase instanciada


2. Realizad los siguientes cambios sobre el ejercicio Ej2.java (que es el mismo que el ejemplo de cálculo de la hipotenusa), y decid qué pasa en el programa y por qué, contestando en el fichero respuestas.txt. Los cambios no son acumulativos (se realiza cada uno sobre el ejemplo base).

a) Si intentamos cambiar uno de los catetos, haciendo CATETO1 = 70, (en el método main(), no directamente sobre la constante):

CATETO1 = 70;

¿qué pasa en el programa? ¿Por qué? ¿Qué solución hay?

b) Si quitamos el modificador static del método hipotenusa(...) ¿Qué sucede? ¿Por qué? ¿Qué solución hay?

c) A la vista de los resultados anteriores, indicad en qué condiciones y por qué funcionan o no funcionan las siguientes llamadas:

hipotenusa(CATETO1, CATETO2);

Ej2.hipotenusa(CATETO1, CATETO2);

Ej2 e2 = new Ej2();
e2.hipotenusa(CATETO1, CATETO2);


3. Añadid a la clase Ej3.java el código necesario (dentro del método solucion(...)) para que resuelva una ecuación de segundo grado ax² + bx + c = 0, siendo la fórmula general:

El método solucion(...) devuelve un array de dos doubles, que son las dos soluciones al sistema. Si no hubiese solución, se devolvería null.

public double[] solucion(...)
{
   double []sol = new double[2];
   ... //Codigo para resolver el sistema
   return sol;
}

Probad que el ejemplo funciona para cada uno de los casos:

Algunos no tienen soluciones reales, otros tienen coeficientes cero que pueden dar problemas al dividir, etc. Controlar o no cada uno de estos casos se deja como optativo.


4. Añadid a la clase Ej4.java el código necesario para que calcule el factorial de un número. Intentad hacer tanto la versión recursiva como la iterativa:

factorialRec(n) = n · factorialRec(n - 1)

Cuando n sea 0 se devuelve 1 y se termina la recursividad.

Comprobad que los programas devuelven lo mismo, dejando en el main() el código necesario para ver el resultado de los factoriales de 30, 5, 1 y 0, por ejemplo.
 

5. Realizad los siguientes cambios sobre los ficheros de Ej5.zip (que es el ejemplo de herencia de clases visto antes). Los cambios no son acumulativos (se realiza cada uno sobre el ejemplo base).

 

a) Si intentamos hacer en el main:

System.out.println ("p.edad() = " + p.edad());

¿qué sucede? ¿Por qué?

b) Si intentamos hacer en el main():
Persona p2 = new Persona();

¿qué sucede? ¿Por qué?

c) Intentad hacer conversiones cast (como la que hay de Persona):

System.out.println ("A-H " + ((Hombre)a).edad());
¿Cuál es la edad que muestra para esta conversión?¿Por qué?
System.out.println ("H-A" + ((Anciano)h).edad());
¿Qué sucede? ¿Por qué?

d) Convertid el ejemplo para utilizar interfaces en lugar de clases abstractas. Es decir:


Para entregar: Debéis entregar un ZIP e1_1.zip con: