Download Enunciado de la práctica
Document related concepts
no text concepts found
Transcript
E1. Práctica UF2406: El ciclo de vida del desarrollo de aplicaciones CALCULADORA Se trata de implementar una aplicación que ofrezca el interfaz y el comportamiento de una calculadora sencilla. El interfaz gráfico de usuario mostrará un aspecto similar al siguiente: El comportamiento de la calculadora también será sencillo. Por ejemplo, podemos ir pulsando la secuencia: 8*4=, obteniendo el resultado 32; posteriormente ir pulsando la secuencia –2=, obteniendo 30 y así sucesivamente. Se desea que la calculadora cumpla las siguientes condiciones: • Diseñada según los principios básicos de la programación orientada a objetos • Utilización amplia de las posibilidades de Java que han sido estudiadas • Los botones pueden definirse de diversos colores • Cuando nos situamos sobre un botón, éste debe cambiar de color y al salir del mismo recuperar el color original. Este comportamiento se debe cumplir tanto al usar el teclado como al usar el ratón • Cuando pulsemos una opción no válida (por ejemplo un dígito después del signo igual, dos operadores seguidos, etc.) nos muestre una indicación de error en el área de resultados y el botón pulsado de color rojo Se deberá entregar: - El código fuente del producto a desarrollar, es decir, la calculadora, que funcione correctamente en un proyecto Eclipse. - Cada equipo deberá hacer una presentación de media hora (aprox.) de el producto desarrollado, explicando la funcionalidad y las características de su proyecto. Se deberá hacer una demo del programa. También se podrá hacer uso de un power point o similar como material de apoyo. - Un documento de proyecto a modo de memoria explicativa en el que se especifiquen: o Las características funcionales y de diseño de la calculadora. Se podrá hacer uso de diagramas de clases y de componentes si fuera necesario y pertinente. o La organización del equipo, la metodología empleada así como las tareas que ha llevado a cabo cada miembro del equipo. Dicha memoria deberá tener como portada el título, los nombres y dos apellidos de los integrantes del equipo y la fecha tope de entrega, Viernes 3 de Julio de 2015 Los criterios de evaluación de la práctica son: Contenido del trabajo debidamente justificado y documentado: Especificaciones y diseño de la solución (25%) Claridad en la exposición (25%) Trabajo en equipo (25%) Demostración del funcionamiento del programa (25%) Asimismo, esta prueba constituirá el 40% de la nota final de la unidad formativa ANEXI 1 – SUGERENCIAS DE DISEÑO Y DE IMPLEMENTACIÓN PUNTO 1.- Diseño del interfaz gráfico de usuario El interfaz gráfico de usuario lo podríamos definir basándonos en tres clases muy sencillas: Dígitos, Operadores y Resultados. El esquema de clases, hasta el momento, quedaría de la siguiente manera: A continuación se muestra un posible diseño de las clases Digitos, Operadores y Resultados: PUNTO 2 .- Diseño del tratamiento de eventos La calculadora que estamos desarrollando en este ejemplo va a atender a tres tipos de eventos diferentes: • Eventos de ventana • Eventos de enfoque • Eventos de ratón Un posible diseño de las clases quedaría de la siguiente manera: PUNTO 3.- Diseño del control Hasta ahora hemos resuelto la manera de visualizar la calculadora y la forma de interactuar con el usuario. Nos queda implementar la lógica de control de la calculadora: utilizar las pulsaciones del usuario como entrada y proporcionar resultados como salida. El esquema completo de clases de la aplicación nos queda de la siguiente manera: Implementación del interfaz gráfico de usuario import import import import java.awt.Button; java.awt.Panel; java.awt.GridLayout; java.awt.Color; public class Digitos { private Panel MiPanel = new Panel(); private final int NUM_DIGITOS=12; private Button[] Digito = new Button[NUM_DIGITOS]; Digitos(Color ColorBotones) { GridLayout LayoutBotones = new GridLayout(4,3); …. Digitos() { } public Panel DamePanel() { public Button[] DameBotones() { Las clases Operadores y Resultados siguen el mismo esquema que Digitos: public class Operadores { public class Resultados { import java.awt.*; public class GUICalculadora1 { GUICalculadora1() { Frame MiMarco = new Frame(); Panel MiPanel = new Panel(); BorderLayout PuntosCardinales = new BorderLayout(); MiPanel.setLayout(PuntosCardinales); Digitos InstanciaDigitos = new Digitos(Color….); … MiMarco.setSize(150,150); MiMarco.setTitle("Calculadora"); MiMarco.setVisible(true); } Ejemplo: public class Calculadora1 { public static void main(String[] args) { GUICalculadora1 MiCalculadora = new GUICalculadora1(); } } Implementación de las clases de tratamiento de eventos La clase controlVentana se encarga de finalizar la aplicación cuando el usuario selecciona una opción de cierre de la ventana import java.awt.event.*; public class ControlVentana extends WindowAdapter { public void windowClosing(WindowEvent EventoQueLlega){ System.exit(0); } } La clase controlFoco se encarga de variar el color de los botones a medida que el usuario se desplaza por los mismos usando el teclado. import java.awt.event.*; import java.awt.*; public class ControlFoco implements FocusListener { private Color ColorBoton; ControlFoco(Color ColorBoton) { this.ColorBoton = ColorBoton; } public void focusGained(FocusEvent EventoQueLlega){ Button Boton = (Button) EventoQueLlega.getSource(); Boton.setBackground(Color.green); } public void focusLost(FocusEvent EventoQueLlega){ Button Boton = (Button) EventoQueLlega.getSource(); Boton.setBackground(ColorBoton); } } public class ControlRaton extends MouseAdapter { public void mouseClicked(MouseEvent EventoQueLlega){ Button Boton = (Button) EventoQueLlega.getSource(); char Car = Boton.getLabel().charAt(0); System.out.print(Car); try { Automata.CaracterIntroducido(Car); } catch(OpcionErronea e) { Resultado.setText(e.getMessage()); Boton.setBackground(Color.red); } } public void mouseEntered(MouseEvent EventoQueLlega){ public void mouseExited(MouseEvent EventoQueLlega){ Implementación del control Para implementar el control de la calculadora, nos podemos basar en el siguiente autómata o diagrama de estados: Podemos numerar los diferentes estados en los que nos podemos encontrar y representar mediante las flechas las transiciones permitidas desde cada uno de esos estados. import java.awt.TextField; public class Automata { private private private private private static static static static static byte Estado=0; TextField Visor; double Operando1=0d; double Operando2=0d; char Operador=' '; Automata(TextField Visor) { this.Visor = Visor; } public static void CaracterIntroducido(char Car) throws OpcionErronea { if (Visor.getText().equals("No valido")) Visor.setText(""); switch(Estado) { case 0: switch(Car) { case '-': Estado=1; Visor.setText(Visor.getText()+Car); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': Estado=2; Visor.setText(Visor.getText()+Car); default: Iniciar(); throw new OpcionErronea(); } break; case 1: switch(Car) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': break; case '9': Estado=2; Visor.setText(Visor.getText()+Car); break; default: Iniciar(); throw new OpcionErronea(); } break; … private static double ObtenerResultado() { switch(Operador) { case '+': return Operando1+Operando2; case '-': return Operando1-Operando2; case '*': return Operando1*Operando2; case '/': return Operando1/Operando2; default: return 0d; } }