guia de ejercicios de solemne 3.

Anuncio
Guía de ejercicios para la prueba número 3
1. Explique los conceptos
 Polimorfismo
 Herencia
 Modificador final y abstract
 Interfaz
2. Algunas preguntas de teoría
 Qué es una interfaz?
 Cómo se implementa en JAVA una interfaz?
 Qué significa que una clase implementa una interfaz?
 Cuál es la diferencia entre una clase y un objeto?
 En qué consiste la herencia?
 Cómo se indica en JAVA que una clase hereda de otra?
 Qué métodos de la clase padre son visibles desde la clase hija?
 Qué es una clase abstracta?
 Si no pueden instanciarse objetos, qué sentido tiene definir una clase
abstracta?
 Cómo se programa en JAVA una clase abstracta?
 Cómo se invoca desde la clase hija, un método de la clase padre?
 Cómo se invoca, desde la clase hija, un constructor de la clase padre?
3. Cree una jerarquía simple "figura": una clase base llamada Figura y una clases
derivadas llamadas Circulo, Cuadrado, y Triangulo. En la clase base, hay que
hacer una función abstracta llamada dibujar(), y sobreescribirla en las clases
derivadas. Hacer un array de punteros a objetos Figura que se cree en la clase
principal y llenarlo con diversas figuras, posteriormente llamar a dibujar() a
través de la clase base para verificar el comportamiento de las funciones.
4. Cree una jerarquía de herencia de Roedores: Raton, Gerbo, Hamster, etc. En la
clase base, proporcione los métodos que son comunes a todos los roedores, y
redefina aquellos en las clases derivadas para que tengan diferentes
comportamientos dependiendo del tipo específico de roedor. Cree un array de
punteros a Roedor, rellenelo con distintos tipos de roedores y llame a los
métodos de la clase base para ver lo que ocurre.
5. Empezando con la jerarquía anterior de Roedor, herede un HamsterAzul de
Hamster, sobreescriba los métodos de la clase base y muestre que el código que
llama a los métodos de clase base no necesitan cambiar para adecuarse el nuevo
tipo.
6. Modifique Roedor para convertirlo en una clase base pura abstracta.
7. Escriba una clase con tres funciones sobrecargadas. Herede una nueva clase y
sobreescriba una de las funciones. Cree un objeto de la clase derivada. ¿Se
puede llamar a todas las funciones de la clase base a través del objeto derivado?
Haga un cast de la dirección del objeto a la base. ¿Se pueden llamar a las tres
funciones a través de la base? Elimine la definición sobreescrita en la clase
derivada. Ahora ¿Se puede llamar a todas las funciones de la clase base a través
del objeto derivado?
8. Sean las siguientes clases
class Animal {
public void sonido(){ System.out.println("Grunt"); }
}
class Muflon extends Animal {
public void sonido(){ System.out.println("MOOOO!"); }
public void salto() { System.out.println("hop!"); }
}
class Armadillo extends Animal {}
class Guepardo extends Animal {
public void sonido(){ System.out.println("Groar!"); }
}
a) Dado el siguiente programa ¿que instrucciones NO provocan un error de
compilación y porque?
class Test1Animal {
public static void main(String[] args){
adoptaAnimal(new Armadillo());
Object o = new Armadillo();
Armadillo a1 = new Animal();
Armadillo a2 = new Muflon();
}
private static void adoptaAnimal(Animal a){
System.out.println("Ven, cachorrito!");
}
}
b) Dado el siguiente programa ubicado al principio del código
class Test2Animal{
public static void main(String[] args){
Animal a = new Armadillo(); a.sonido();
a = new Muflon(); a.sonido();
a = new Guepardo(); a.sonido();
}
}
I. }¿Cual es el resultado de la ejecución?
II. Siguiendo las reglas de la herencia, ¿que métodos/clases
debe implementar y/o modificar para que cada animal diga
GRUNT?
III. ¿Cómo obligar a que cada Animal tenga un salto propio?
¿Como afecta la modificación propuesta a las clases
derivadas?
9. Ejecute paso a paso el siguiente codigo
class TestMilpies{
public static void main(String[] args){
MilpiesEsquiador m = new MilpiesEsquiador();
}
}
class Milpies{
protected int numeroDePies;
public Milpies(){
numeroDePies = 1000; escribePies();
}
public void escribePies(){
System.out.println("Un Milpiés o Cochinilla tiene "+
numeroDePies+" pies");
}
}
class MilpiesEsquiador extends Milpies{
protected int numeroDePiesRotos;
public MilpiesEsquiador(){ numeroDePiesRotos = 100;}
public void escribePies(){
System.out.println("A un Milpiés esquiador le quedan "+
(numeroDePies - numeroDePiesRotos)+" pies");
}
}
10. Crear una solución JAVA para cada ejercicio con las clases, métodos, campos y
propiedades indicadas:

En este ejercicio se va a trabajar con los conceptos de interfaz, herencia y
clase abstracta, aplicados a una jerarquía de clases para definir figuras
geométricas. Todas las clases que se definan en este ejercicio deben
implementar la interfaz Figura, que se encuentra a continuación:
/* Interfaz Figura */
Public interface Figura
{
/* Devuelve el nombre de la figura*/
Public string Nombre();
/*Calcula la superficie de la figura*/
Public double calcularArea();
/*Calcula el perímetro de la figura*/
Public double calcularPerimetro();
/*Dibujar la figura en la pantalla, en modo texto*/
Public void dibujarTxt();
}
a) La primera clase a implementar representará un rectángulo y se llamará
Rectángulo. Debe implementar todos los métodos de la interfaz Figura,
además de tener un constructor (que reciba como parámetros las dimensiones
del rectángulo), y las variables necesarias. Para representar un rectángulo,
puedes utilizar dos variables enteras: su base y su altura. Por lo tanto, lo más
adecuado es que el constructor tome como parámetros ambas variables. El
método dibujarTxt() debe dibujar la figura en la consola de texto. Por
ejemplo, un rectángulo con base 6 y altura 3 se podría mostrar como:
******
******
******
Para probar la clase rectángulo, debes programar una clase llamada
PruebaFiguras, que en su método Main cree una instancia de la clase
Rectángulo y la muestre en consola, junto con su área y perímetro.
b) Un cuadrado es un rectángulo con base y altura iguales, por lo tanto
cuadrado puede ser definida como clase hija de la clase rectángulo.
Programe la clase cuadrado de forma tal que herede de la clase rectángulo
del apartado anterior. La clase cuadrado sólo necesita un constructor que
reciba un parámetro (el valor del lado), y que llame al constructor del
rectángulo con los parámetros base y altura iguales. Probar esta nueva clase
añadiendo el código necesario a la clase PruebaFiguras.
c) Ahora vamos a definir una nueva figura: el triángulo. En la consola no
podemos representar cualquier triángulo. Por lo tanto, no se puede
implementar en la clase triángulo el método dibujarTxt(). Por ello,
declararemos este método como abstracto y, por tanto, también la clase. El
resto de los métodos sí pueden ser implementados. Por otra parte para definir
un triángulo vamos a utilizar tres variables, lado1, lado2 y ángulo (ángulo
que forman los dos lados anteriores). En este ejercicio debes programar
todos los métodos de la clase Triángulo, excepto dibujarTxt(). Recuerda que
una clase abstracta puede tener constructores, aunque no pueden instanciarse
objetos. Sin embargo, a diferencia del resto de los métodos, estos
constructores no se ejecutan automáticamente al crear objetos de las clases
hijas.
d) Implementar la clase TriánguloRectángulo. En este caso, sí se puede
representar la figura en consola. Dado que la mayoría de los métodos y
variables necesarios ya están implementados en la clase Triángulo,
TriánguloRectángulo debe heredar de la clase anterior, añadiendo el
constructor adecuado (trabajaremos con triángulo rectángulos isósceles, esto
es, con los dos catetos iguales; por tanto, para representar un triángulo
rectángulo sólo necesitas conocer uno de los catetos). Además debes
implementar el método dibujarTxt(), que debe mostrar el triángulo de forma
semejante al siguiente ejemplo (con cateto igual a 5):
*
**
***
****
*****
e) Mejorar la clase PruebaFiguras para que proporcione una interfaz de usuario
en modo texto, que permita al usuario elegir la figura geométrica que desea
pintar, solicite los parámetros adecuados para cada figura, instancia la clase y
pinte la figura en consola.
Utilizar el siguiente menú:
1. Crear rectángulo
2. Crear cuadrado
3. Crear triángulo
4. ver figura
5. salir
Si el usuario selecciona una de las primeras opciones, deberán pedírsele
los datos adecuados. Si selecciona la opción 4, se mostrarán el área y el
perímetro y se dibujará la última figura creada. Debe presentarse el menú
hasta que el usuario seleccione la opción Salir.
No se puede seleccionar la opción 4 hasta tanto no se haya seleccionado
una figura.
11. A través de la herencia implemente la clase Persona. Recuerde que
independientemente de la profesión, todas las personas tienen propiedades
comunes: nombre, fecha de nacimiento, género, estado civil, etc. La siguiente
clasificación debe ser menos general, supongamos que dividimos a todas las
personas en dos grandes clases: empleados y estudiantes (dejaremos de lado a
los estudiantes que además trabajan). Lo importante es decidir qué propiedades
que no hemos incluido en la clase “Persona” son exclusivas de los empleados y
de los estudiantes. Por ejemplo, los ingresos por nómina son exclusivos de los
empleados, la nota media del curso es exclusiva de los estudiantes. Una vez
hecho eso crear dos clases derivadas de Persona: “Empleado” y “Estudiante”.
Hacer una nueva clasificación, ahora de los empleados. Podemos clasificar a los
empleados en ejecutivos y comerciales. De nuevo estableceremos propiedades
exclusivas de cada clase y crearemos dos nuevas clases derivadas de empleado:
“Ejecutivo” y “Comercial”. Cada vez creemos un objeto de cualquier tipo
derivado, por ejemplo de tipo Comercial, estaremos creando un solo objeto un
Comercial, un Empleado y una Persona. Nuestro programa puede tratar a ese
objeto como si fuera cualquiera de esos tres tipos. Es decir, nuestro comercial,
además de las propiedades como comercial, su nómina como empleado y su
nombre, edad y género como persona.
Persona
Persona
Persona
Persona
Persona
12. Implementar el ejercicio anterior usando interfaces y clases abstractas
13. Escriba una jerarquía con herencia para la clase cuadrilátero, trapezoide,
paralelogramo, rectángulo y cuadrado. Use cuadrilátero como la clase base de la
jerarquía. Haga la jerarquía con la mayor profundidad que sea posible. El dato
privado de cuadrilátero debería ser el par de coordenadas para los cuatro puntos
extremos del cuadrilátero. Escriba un programa que instancia los objetos de cada
una de las clases en su jerarquía y salida polimórfica de dimensiones y área de
cada objeto.
14. Corrija el siguiente programa dándole una solución a cada posible excepción
class principalExcepcion {
public static void main(String[] args){
int [] temp=new int[5];
temp[0]=1; temp[1]=-2; temp[2]=3; temp[3]=4; temp[4]=0;
ejercicio.Calculo(2,3,2,0,temp);
}
}
class ejercicio{
static void Calculo(int ind1, int ind2, int ind3, int ind4, int[]temp){
int [] temp2=new int[temp[ind1]5];
temp[ind1]=(temp[ind2]+temp[ind3])/temp[ind4];
}
}
Pruebe ejecutando:
ejercicio.Calculo(2,3,2,8,temp);
ejercicio.Calculo(2,3,2,4,temp);
ejercicio.Calculo(1,3,2,0,temp);
15. Cambie el manejo de excepciones del ejercicio anterior para que sean manejadas
en la clase donde se encuentra el ejecutable.
16. Indique paso a paso, lo que sucede en los programas que realizo en los ejercicios
1 y 2 (indique que valor toma cada variable y si se muestra algo en pantalla
colocar que es lo que se muestra). Para comprobar si esta correcto, muestre en
cada paso lo que sucede por pantalla.
Descargar