Download universidad realistica de mexico

Document related concepts
no text concepts found
Transcript
Benemérita Universidad Autónoma de Puebla
Facultad de Ciencias de la Computación
Programación Avanzada
Práctica No. 4: Herencia y Polimorfismo en JAVA
Nombre: ____________________________________________________________
Fecha:
__________________
Sección: __________________
Texto de la práctica
Contestar las siguientes preguntas
I. ¿Cual es la salida de ejecutar la clase C en (a)?
¿Qué problemas surgen al compilar el programa en (b)?
II. True o
false?
(1) A subclass is a subset of a superclass.
(2) When invoking a constructor from a subclass, its superclass's no-arg constructor is
always invoked.
(3) You can override a private method defined in a superclass.
(4) You can override a static method defined in a superclass.
II.- Identifica los problemas en las siguientes clases.
1
2
3
4
5
6
7
8
9
public class Circle {
private double radius;
public Circle (double radius) {
radius = radius;
}
public double getRadius() {
return radius;
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
}
public double getArea() {
return radius * radius * Math.PI;
}
}
class B extends Circle {
private double length;
B(double radius, double length) {
Circle(radius);
length = length;
}
/** Override getArea() */
public double getArea() {
return getArea() * length;
}
}
III.- Explica la diferencia
entre sobrecarga de métodos y redefinición de métodos.
IV. Resolver el siguiente problema
(The Triangle class) Design a class named Triangle that extends GeometricObject.
The class contains:







Three double data fields named side1, side2, and side3 with default values
1.0 to denote three sides of the triangle.
A no-arg constructor that creates a default triangle.
A constructor that creates a rectangle with the specified side1, side2, and
side3.
The accessor methods for all three data fields.
A method named getArea() that returns the area of this triangle.
A method named getPerimeter() that returns the perimeter of this triangle.
A method named toString() that returns a string description for the triangle.
For the formula to compute the area of a triangle. The toString() method is
implemented as follows:
return "Triangle: side1 = " + side1 + " side2 = " + side2 +
" side3 = " + side3;
Implement the class. Write a test program that creates a Triangle
object with sides 1, 1.5, 1, sets color yellow and filled true, and
displays the area, perimeter, color, and whether filled or not.
V. Ejemplo típico de polimorfismo. Implemente un programa Java para las
clases siguientes.
VI Ejercicio Propuesto [OPCIONAL].
• Impleméntese en Java una clase Vector, que, haciendo uso del
Polimorfismo, permita coleccionar cualquier número y tipo de
Objetos.
� Los objetos deberán estar ordenados ascendentemente
� Se permite (y aconseja) utilizar cualquier clase de la API de JAVA
• Los métodos que han de pertenecer a la interfaz de la clase son, al
menos, los siguientes:
� tamaño: El tamaño dinámico y variable del vector.
� Insertat : Para insertar elementos enteros en el vector.
� Acceder: Para acceder al elemento n-ésimo del vector,
tanto en modo lectura como escritura
� Mostrar: Para escribir todos los elementos del vector
� contiene: Nos indica si el vector contiene o no un elemento
recibido como parámetro.
• Impleméntese la clase Entero para que pueda ser coleccionada
por la clase Vector implementada.
VII
Copia, compila y ejecuta el código que se encuentra a continuación, luego
realiza los ejercicios pedidos:
public class Uno{
private int uno;
private int dos;
public Uno(int u, int d){
uno = u;
dos = d;
}
public void setUno( int nu ){
uno = nu;
}
public int uno(){
return uno;
}
public int dos(){
return dos;
}
public void mostrar(){
System.out.println("Metodo uno: "+uno() );
System.out.println("Metodo dos: "+dos() );
}
}
public class Dos extends Uno{
private int otroDos;
public Dos(int u, int d, int od){
super(u,d);
otroDos = od;
}
public int uno(){
return super.uno()+otroDos;
}
public int dos(){
return otroDos*super.dos();
}
}
public class Tres extends Uno{
private int tres;
public Tres(int u, int d, int t){
super(u,d);
tres = t;
}
public int uno(){
return super.uno()*dos()+tres;
}
public int dos(){
return super.dos()*super.uno();
}
public void mostrar(){
System.out.println("El valor de tres es: "+tres);
super.mostrar();
}
}
.-
public class Programa{
public static void main( String[] args ){
Uno obj1, obj2, obj3;
Dos obj4;
Tres obj5;
obj1 = new Dos(1,2,3);
obj2 = new Tres(4,5,6);
obj3 = new Tres(3,2,1);
obj4 = (Dos)obj1;
obj4.setUno(4);
obj5 = new Tres(-1,-2,-4);
obj1.mostrar();
System.out.println("-------------------------------");
obj2.mostrar();
System.out.println("-------------------------------");
obj3.mostrar();
System.out.println("-------------------------------");
obj4.mostrar();
System.out.println("-------------------------------");
obj5.mostrar();
}
}
a) Construye el diagrama de clases que correspondería a este segmento de
código.
b) Cual es el resultado al ejecutar la clase “Programa”
c) Explica cual es el proceso, las llamadas, paso a paso la manera en la que se
ejecutan las llamadas mostrar(), de la clase Programa.
[OPCIONAL].
En uno de los laboratorios de la Facultad de Ciencias y Tecnología donde es dictan cursos como
son Autocad, VectorWorks, Java – SWING y otros, se desea automatizar el proceso de registro de
tales cursos. Se sabe que en el laboratorio se dictan varios cursos de los cuales interesa almacenar
el nombre, fecha de inicio, fecha fin, horario, instructor, costo. Pero estos cursos pueden ser de dos
tipos, teórico – prácticos y completamente prácticos, en el caso de los cursos teórico – prácticos se
desea conocer además el numero de horas teóricas y de horas practicas, adicionalmente conocer el
numero de aula donde se dictaran las horas teóricas, y del otro tipo de curso interesa, además, el
numero de horas practicas. Otro elemento importante que se desea automatizar es el registro de los
alumnos, de estos interesa conocer el ci, nombre, y su carrera, pero también existen dos tipos de
alumnos, los estudiantes universitarios y los profesionales, en el caso de los estudiantes interesa
saber el semestre el que cursan y de los profesionales la universidad en la cual realizaron sus
estudios (Algunos de estos datos son simplemente para sacar estadísticas). Se pide:
a) Construye el diagrama de clases, con sus atributos y métodos, que represente la
solución de este problema
b) Escribir los constructores de cada clase.
c) Escribir los métodos necesarios para registrar un nuevo curso.
d) Escribir los métodos necesarios para registrar un nuevo alumno a algún curso de
acuerdo a nombre del curso. (Puedes asumir que la capacidad del curso es para 60
personas)
e) Escribir los métodos necesarios para buscar un curso determinado de acuerdo a su
nombre.
f) Escribir los métodos necesarios para buscar el curso que tenga mayor cantidad de
inscritos.
g) Buscar todos los cursos que dicta un instructor X.
h) Buscar a un alumno en todos los cursos dado su nombre.
i) Escribir los métodos necesarios para guardar en archivos todos los datos de los
cursos, incluyendo los inscritos.