Información

Marcar pregunta

Texto informativo

Jerarquía de Figuras - Clase Figura2D

Planteamiento

Queremos modelar y programar una clase Java que me permita representar y trabajar con figuras geométricas en el plano 2D. La clase se llamará Figura2D.

Queremos poder representar círculos y polígonos regulares como cuadrados, rectángulos, triángulos, pentágonos y hexágonos. Queremos hacer un diseño que me permita realizar ampliaciones del tipo de figuras en un futuro.

De todas las figuras estamos interesados en conocer su posición (dada por su centro), su área (el tamaño del espacio que ocupa) y su perímetro (el tamaño de la suma de sus lados).

Modelado de los datos de la clase 

Para poder representar una figura en el plano 2D necesitamos almacenar la siguiente información sobre las figuras:

  • Centro. Será un un Punto2D que registra la posición en el plano en la que se encuentra el centro de la figura.
El atributo deberá tener el modificador de acceso adecuado para el propósito de los mismos. Se quiere que el atributo pueda ser accedido por las subclases de Figura2D en caso de haberlas.

Métodos constructores

Se programarán dos constructores para la clase:

  • Un constructor que recibirá las coordenadas X e Y del punto que marca el centro de la figura.
  • Un constructor que recibe un objeto Punto2D que marca el centro de la figura. Hay que detectar si se le pasa un objeto Punto2D nulo, en cuyo caso, habrá que lanzar la excepción NullPointerException y no crear el objeto.

Los constructores deberán comprobar que los datos suministrados cumplen con las restricciones establecidas para los mismos, si las hubiese. Si alguno no es válido, se lanzará la excepción IllegalArgumentException . Los métodos constructores deberán tener el modificador de acceso adecuado para el propósito de los mismos.

Métodos getter/setter

Se ofrecerá un método getter para el atributo de la clase, que devolverá un objeto Punto2D con el centro de la figura. 

Se ofrecerán dos métodos setter para el atributo de la clase. 

  • Uno de ellos recibirá un objeto Punto2D representando el centro de la figura. Hay que detectar si se le pasa un objeto Punto2D nulo, en cuyo caso, habrá que lanzar la excepción NullPointerException y no modificar el centro del objeto.  

  • El otro recibirá las coordenadas X e Y de dicho centro.

Los métodos setter deberán verificar que se cumplen las restricciones impuestas para los datos correspondientes, si las hubiese. Si el dato no es válido, se lanzará la excepción  IllegalArgumentException

Todos estos métodos deberán tener el modificador de acceso adecuado para el propósito de los mismos.

Otros métodos

  • Programaremos un método llamado desplazarEnX , que recibirá la distancia (un double, positivo, negativo o cero) que se quiere desplazar el centro de la figura en el eje X de coordenadas.
  • Programaremos un método llamado desplazarEnY , que recibirá la distancia (un double, positivo, negativo o cero) que se quiere desplazar el centro de la figura en el eje Y de coordenadas.
  • Programaremos un método llamado desplazarEnXY , que recibirá la distancia (un double, positivo, negativo o cero) que se quiere desplazar el centro de la figura en el eje X de coordenadas y la distancia (un double, positivo, negativo o cero) que se quiere desplazar el centro de la figura en el eje Y de coordenadas.
  • Programaremos un método llamado getArea, que devolverá el área de la figura (un double). Dicho método será definido  para todas las figuras, pero se calcula de manera distinta según el tipo de la figura. Por lo tanto, calcularlo no puede establecerse de manera general para todas las figuras y, además, es distinta para cada tipo de figura. Deberás resolver la implementación usando los conceptos de orientación a objetos adecuados para ello

  • Programaremos un método llamado getPerimetro, que devolverá el perímetro de la figura (un double). Dicho método será definido  para todas las figuras, pero se calcula de manera distinta según el tipo de la figura. Por lo tanto, calcularlo no puede establecerse de manera general para todas las figuras y, además, es distinta para cada tipo de figura.  Deberás resolver la implementación usando los conceptos de orientación a objetos adecuados para ello

Todos los métodos descritos deberán tener el modificador de acceso adecuado para el propósito de los mismos.

Redefinición de métodos heredados

  • Redefine los dos métodos heredados de la clase Object que permiten establecer cuándo dos objetos de la clase Figura2D son iguales, de tal manera que se establezca que serán iguales cuando su centro sea el mismo.

Criterio de Corrección

    • La clase tiene que estar operativa, no conteniendo errores de sintaxis que impidan su compilación y uso. Si no es así, no se puntuará el ejercicio.
    • Errores en la elección de los modificadores de acceso, tanto de atributos como de métodos, será penalizado con hasta un 30% de la puntuación del ejercicio.
    • Errores en la definición de los constructores de los objetos de la clase y la gestión de sus restricciones será penalizado con hasta un 30% de la puntuación del ejercicio.
    • Errores en la definición de los métodos getter/setter y la gestión de sus restricciones será penalizado con hasta un 30% de la puntuación del ejercicio.
    • Errores en los métodos de desplazamiento se penalizará con hasta un 30% del ejercicio.

    • Errores en los métodos getArea y getPerimetro se penalizará con hasta un 60% del ejercicio.

    • Errores en la modificación de los métodos heredados de la clase Object serán penalizados con hasta un 30% de la puntuación del ejercicio.

    Tiempo estimado de realización

    30 minutos