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.