|
Se desea construir un editor de dibujo (llamado Paint ) que permita crear dibujos que contengan líneas, rectángulos y figuras ovaladas. Las líneas deben tener asociados un color, un punto inicial, un punto final, un texto, un tipo de letra ( font ), al igual que un ancho y un tipo de línea (punteada, continua, etc.) Los rectángulos deben estar definidos por dos puntos, por un texto con su tipo, por un color de fondo, y por el tipo de línea que debe dibujarse sobre el perímetro. Las figuras ovaladas están definidas por dos puntos, los cuales describen el rectángulo en el cual está incluida la figura, por un texto con su tipo, por un color de fondo y por el tipo de línea del borde del óvalo.
Las opciones que debe ofrecer el programa son: (1) agregar una nueva figura al dibujo sin ningún texto asociado, dando la información necesaria para crearla (los puntos, los colores, etc.), (2) seleccionar una de las figuras que hacen parte del dibujo, (3) eliminar la figura seleccionada del dibujo, (4) cambiar el texto asociado con la figura seleccionada, (5) salvar el dibujo en un archivo y (6) cargar de un archivo un dibujo.
Es importante que cada vez que el usuario vaya a salir del programa sin haber salvado su trabajo o cuando vaya a cargar un nuevo dibujo sin haber hecho persistir las modificaciones del actual, el editor le pregunte al usuario si desea salvar antes de continuar.
La persistencia se debe hacer en archivos secuenciales de texto, utilizando para esto cualquier formato decidido por el programador, pero permitiendo que los archivos se puedan visualizar y modificar desde un editor de texto. Esto puede facilitar en algunos casos la creación de dibujos desde un programa.
La principal restricción del editor es que debe estar construido de manera que sea fácilmente extensible, con nuevas figuras y nuevos requerimientos funcionales.
Restricciones
Se describe a continuación el formato del archivo con el que la aplicación Paint guarda los dibujos realizados en ella.
<número de figuras> <tipo de figura> <x1>;<y1>;<x2>;<y2> <componente rojo línea>;<componente verde línea>;<componente azul línea>; <fuente texto>;<estilo texto>;<tamaño texto> <texto> <ancho>;<tipo de extremo>;<tipo de unión>;<límite ángulo>;<patrón punteo>;<inicio punteo> [<componente rojo fondo>;<componente verde fondo>;<componente azul fondo>;]
A continuación se detalla la información del formato:
- La primera línea indica el número de figuras contenidas en el archivo. De ahí en adelante hay 7 líneas por cada figura rellena y 6 por cada figura no rellena.
- La primera línea de una figura indica su tipo. Puede ser RECTANGULO, OVALO o LINEA.
- La segunda línea de una figura tiene los valores y e x de los dos puntos que definen la figura. Las coordenadas están separados por “;”
- La tercera línea indica los valores de los componentes Rojo, Verde y Azul del color en el sistema RGB de la línea de la figura.
- La cuarta línea indica los atributos de la fuente usada para mostrar el texto. La primera parte indica el nombre de la fuente, la segunda indica el estilo (usando las constantes definidas en la clase java.awt.Font) y la tercera indica el tamaño de la fuente.
- La quinta línea contiene el texto que se muestra en la figura.
- La sexta línea contiene los parámetros para construir el tipo de línea. Los parámetros son:
- Ancho de línea.
- Tipo de extremo o terminación de la línea.
- Tipo de unión cuando dos líneas se encuentran (recta, angular o redonda).
- Si el tipo de unión es angular, el valor que limita la formación del ángulo que se crea entre las líneas.
- Patrón de punteo de la línea. Todos los valores del patrón se separan por espacio en blanco.
- Desfase sobre el patrón de punteo para comenzar a dibujar la línea
Estos parámetros deben tener como valores, los valores esperados por la clase BasicStroke de Java que se encarga de decorar las líneas de las diferentes figuras. Los parámetros se encuentran en el mismo orden que en el constructor de la clase (float width, int cap, int join, float miterlimit, float[] dash, float dash_phase). Los valores del arreglo “dash” se encuentran separados por espacios.
- La séptima línea (contenida sólo en las figuras rellenas) indica los valores de los componentes Rojo, Verde y Azul del color en el sistema RGB del fondo de la figura.
A continuación se presenta un ejemplo del archivo que el editor Paint guarda y lee:
1 RECTANGULO 70;40;312;238 0;0;0 Arial;0;12 Rectángulo 1 1.0;1;1;1.0;10.0 0.0;0.0 153;153;255
Generador de Código
Para cubrir la restricción de extensibilidad, desarrollaremos un nuevo requerimiento funcional que permite seleccionar superclases y crear el esqueleto básico de nuevas subclases.
La extensibilidad es un requerimiento no funcional que debe estar soportado en el diseño de la aplicación pero facilitaremos la implementación a través de este generador.
El generador permite seleccionar la clase de la cual se hereda y crea el código con los atributos y métodos que hacen parte de la herencia (abstractos y protegidos).Permite crear nuevas clases que modelen figuras que pertenezcan a la jerarquía. Se debe hacer reutilización de código de manera que sea una estrategia para la evolución sencilla y a bajo costo.
Interfaz


|