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;
}
}