FUNDAMENTOS DE PROGRAMACIÓN PRÁCTICA 8: CLASE POLINOMIO Curso: 2010/11 Versión: 1.0.3 OBJETIVOS Implementar un tipo de datos PolinomioEntero usando la clase Vector de java.util. Motivar la comprensión de la utilidad de los tipos genéricos. EJERCICIOS PROPUESTOS 1. Cree el paquete polinomio y escriba en él la interfaz PolinomioEntero teniendo en cuenta que debe extender a Copiable (que se encuentra en el paquete utiles). Añada import java.util.Vector para que reconozca el tipo Vector<Integer>. Recuerde que se ha definido como propiedad del tipo PolinomioEntero los coeficientes, siendo su representación un vector de tipo entero. Esta propiedad será consultable y modificable. No olvide declarar los otros métodos definidos en las especificaciones (ver transparencias), que nos permitirán trabajar con el tipo PolinomioEntero. 2. Implemente la clase PolinomioEnteroImpl con un atributo denominado coeficientes de tipo Vector de Integer y los siguientes métodos: a) Un constructor sin parámetros que creará un polinomio vacío, inicializando el Vector de coeficientes. b) Un constructor a partir de un array de coeficientes de tipo Integer. Use el método add para ir añadiendo los coeficientes, mientras recorre el array con un for extendido. c) Los métodos propios del atributo, según la especificación dada. d) El método getGrado que devuelve el grado del polinomio. Use el método size de Vector. e) El método getCoeficiente, que lanza una excepción de tipo IllegalArgumentException si el grado no está comprendido entre los valores debidos (mayor o igual que cero y menor o igual que el grado del polinomio). f) El método setCoeficiente, que lanza una excepción de tipo IllegalArgumentException si el grado no está comprendido entre los valores debidos. Use el método set de la clase Vector. g) El método añadeCoeficiente, usando el método add de Vector. h) El método sumaCoeficiente, que recibe dos valores Integer (r y g) y realiza la suma del coeficiente de la potencia g con el valor r. Para su implementación use los métodos getCoeficiente y setCoeficiente definidos anteriormente. i) El método sumar, que recibe un PolinomioEntero y lo suma al objeto que invoca usando el método sumaCoeficiente anterior. Para simplificar el código suponga que los dos polinomios a sumar tienen el mismo grado y lance la correspondiente excepción si no es así. j) Los métodos toString, equals, hashCode y clone. 3. Cree una clase TestPolinomioEntero y en ella varios polinomios con el constructor vacío o a partir de un array de Integer. Use el método añadeCoeficiente y sume dos polinomios (recuerde que deben ser del mismo grado). 4. Implemente ahora el tipo PolinomioRacional con métodos similares PolinomioEntero. Igualmente implemente TestPolinomioRacional para probarla. a 5. Si se quisiera implementar el tipo PolinomioComplejo tendríamos que repetir de nuevo el trabajo realizado en los casos de PolinomioEntero y PolinomioRacional. Práctica 8: Clase Polinomio 2 ¿Qué solución hubiera resultado más adecuada según la filosofía de reutilización de código de Java? Aplique el concepto de tipo genérico explicado en la unidad didáctica 5 e implemente el tipo Polinomio<T>, excluyendo de la interfaz los métodos sumaCoeficiente y sumar. Más adelante se verá la implementación de los tipos PolinomioEntero y PolinomioRacional utilizando el concepto de especialización de tipos. EJERCICIOS ADICIONALES (PARA REALIZAR EN CASA) 6. Modifique el método sumar de ambas clases para que pueda sumar dos polinomios de distinto grado. Para ello deberá comprobar cuál es el polinomio de menor grado, sumar hasta ese grado los coeficientes y después terminar de recorrer el polinomio de mayor grado e ir usando el método añadeCoeficiente para completar la suma. 7. Cree una clase de utilidad PolinomiosEnteros para añadir un método derivar para obtener la derivada de un polinomio de Integer. Recuerde que la derivada de ( 7X^0 -9X^1 -3X^2 0X^3 5X^4 ) sería ( -9X^0 -6X^1 0X^2 20X^3 ). Use el método añadeCoeficiente. Recuerde que la clase PolinomiosEnteros tendrá sus métodos estáticos y, por tanto, la signatura de derivar es: public static PolinomioEntero derivar(PolinomioEntero p) 8. Usando el código desarrollado en ejercicios anteriores, añada a la clase PolinomiosEnteros un método estático sumar con la siguiente signatura: public static PolinomioEntero sumar(PolinomioEntero p, PolinomioEntero q) 9. En las clases de Test pruebe todos los métodos implementados.