ELO 329: Diseño y Programación Orientada a Objetos

Proyecto Grupal : Calculadora Android con manejo de complejos

(Ex-BlueChat)


Integrantes: 
                         
                         

Descripción del Problema
 Hoy en día , el uso de celulares es algo indispensable, y la utilidad que se le puede otorgar es inmensa, mas allá de realizar llamadas, existe una gran cantidad de distintas aplicaciones para dipositivos móviles con soporte Android, por ejemplo, juego, calendarios, administradores de archivos, navegadores, administradores de tareas, y una siempre útil Calculadora. Si bien, actualmente todos los vienen con una calculadora incluida, nuestra aplicación consta de la posibilidad de realizar operaciones con manejo de complejos, la cual sería muy útil para escuelas de ingeniería en donde es común su uso.

Análisis
    En un principio, este proyecto estaba orientado al diseño de una aplicación capaz de conectarse vía Bluetooth con otro dispositivo móvil y entablar un "Chat" entre los usuarios de los dispositivos conectados. Uno de los problemas presentados en el análisis del problema, es que el software encargado de simular el dispositivo móvil con Android, no tiene soporte para módulos bluetooth, impidiendo la realización de pruebas por falta de recursos físicos.
    Bajo la intención de mantener el propósito inicial del proyecto, el cual consiste en lograr diseñar una aplicación que pueda ser ejecutada en un celular con dicho sistema y es por ello, que se decidió diseñar una Calculadora con Manejo de Números Complejos.
   
    Para desarrollar una aplicación para el sistema operativo Android es necesario utilizar (por recomendación de los mismos miembros de Google inc.) el plugin disponible para el conocido IDE "Eclipse", y además del kit de desarrollo "Android SDK" facilitado en la página de desarrollo de Google. Para realizar pruebas temporales del paquete se utiliza el simulador AVD (Android Virtual Device).

    Para diseñar la aplicación propuesta se plantean los siguientes Casos de Usos, los cuales intentan cubrir las principales necesidades para una calculadora con manejo de números complejos.

Caso de Uso 1:
Nombre: Suma entre complejos.
Propósito: Sumar dos números complejos.
Actor: Usuario.
Pre-Condición: No existe.
Evento: El Usuario ingresa un número complejo, luego la operación suma y el segundo número complejo.
Post-Condición: Aparece el resultado de la operación.
Tipo: Manual.

Curso Normal de Eventos
Actor Sistema
1. El Usuario ingresa el primer número complejo
2. El Sistema muestra por pantalla el número ingresado
3. El Usuario presiona la tecla operación suma
4. El Sistema espera el siguiente número
5. El Usuario ingresa el segundo número complejo
6. El Sistema muestra por pantalla el número ingresado
7. El Usuario presiona la tecla igualdad
8. El Sistema arroja el resultado por pantalla

Curso Alternativo de Eventos
Actor
Sistema
1. El Usuario ingresa el primer número complejo
2. El Sistema muestra por pantalla el número ingresado
3. El Usuario presiona la tecla porcentaje
4. El Sistema ignora la tecla presionada y espera la operación

Caso de Uso 2:
Nombre: División entre un complejo y una constante.
Propósito: Dividir un número complejo y una constante.
Actor: Usuario.
Pre-Condición: No existe.
Evento: El Usuario ingresa un número complejo, luego la operación división y una constante.
Post-Condición: Aparece el resultado de la operación.
Tipo: Manual.

Curso Normal de Eventos
Actor
Sistema
1. El Usuario ingresa el primer número complejo 2. El Sistema muestra por pantalla el número ingresado
3. El Usuario presiona la tecla operación divisón
4. El Sistema espera el siguiente número
5. El Usuario ingresa una constante
6. El Sistema muestra por pantalla el número ingresado
7. El Usuario presiona la tecla igualdad 8. El Sistema arroja el resultado por pantalla

Curso Alternativo de eventos
Actor
Sistema
1. El Usuario ingresa el primer número complejo 2. El Sistema muestra por pantalla el número ingresado
3. El Usuario presiona la tecla operación división
4. El Sistema espera el siguiente número
5. El Usuario presiona la tecla porcentaje
4. El Sistema ignora la tecla presionada y espera el siguiente número


Caso de Uso 3:
Nombre: Multiplicación entre complejos.
Propósito: Multiplicar un número complejo por otro.
Actor: Usuario.
Pre-Condición: No existe.
Evento: El Usuario ingresa un número complejo, luego la operación multiplicación y otro número complejo.
Post-Condición: Aparece el resultado de la operación.
Tipo: Manual.

Curso Normal de Eventos
Actor
Sistema
1. El Usuario ingresa el primer número complejo 2. El Sistema muestra por pantalla el número ingresado
3. El Usuario presiona la tecla operación multiplicación
4. El Sistema espera el siguiente número
5. El Usuario ingresa el segundo número complejo
6. El Sistema muestra por pantalla el número ingresado
7. El Usuario presiona la tecla igualdad 8. El Sistema arroja el resultado por pantalla


Diagrama de Secuencia, Caso de Uso 3:

Diagrama de Secuencia

 Prueba Caso de Uso 1:
A continuación se presenta una imagen de la aplicación desarrollada, y la visión del resultado de la suma de números complejos en ella:



Prueba Caso de Uso 3:
A continuación se presenta una imagen de la aplicación desarrollada, y la visión del resultado de la multiplicación de números complejos en ella:


Como se puede apreciar, al ingresar un número complejo, aparece, en la parte imaginaria, antepuesta por la letra "i" para indicar el valor de la parte imaginaria. El resultado de la aplicación es satisfactoria, ya que realiza operaciones de suma, resta, multiplicación y división entre complejos y con números reales. Además, puede ejecutar operaciones concadenadas (utilizar el resultado de una operación para realizar otra a continuación).

Diagrama UML de clases:
    Diagrama de Clases
Por simplicidad, se ocultaron los atributos privados de la clase ComplexCalculator. Además, en ésta está incluida la función initControls(), initScreenLayaout() entre otras propias del entorno de trabajo de Android SDK, parecido a las requerimientos en una applet de java.

Código Fuente:   
 
ComplexCalculator        

Dificultades Encontradas:
    Una de las principales dificultades fue comprender la función de los utilitarios adicionales que incorpora el plugin de Android y cómo opera el flujo de un programa en este simulado sistema operativo. Además, el simulador no ofrece detección de hardware local, por lo que no se pueden probar módulos como bluetooth, Wifi, entre otros.

Bugs Conocidos:
    Dentro de las fallas o "bugs" que no se pudieron resolver, se encuentra el hecho de tener que precionar la tecla "C" para realizar otra operación, ya que es necesario resetear las variables que quedan con un valor indefinido luego de presionar la tecla "=".


Implementación en un dispositivo:
    En la parte inferior se muestran imágenes obtenidas de la aplicación funcionando en un dispositivo con sistema operativo Android.

                          
 

Referencias:

http://developer.android.com/index.html