PR08 - Clase Polinomio

Anuncio
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.
Descargar