domingo, 22 de junio de 2014

APO1 - Nivel 1 en C#: Alcancía

Tabla de Contenido

0. Introducción
1. Enunciado
1.1 Interfaz gráfica de usuario (versión previa en Java)
2. Requerimientos
2.1 R1: Guardar una moneda de una denominación
2.2 R2: Contar cuántas monedas hay en la alcancía de cada denominación
2.3 R3: Calcular el total de dinero ahorrado
2.4 R4: Romper la alcancía
2.5 R5: Crear una nueva alcancía
3. Modelo del Mundo del Problema
4. Modelo de la Interfaz Gráfica de Usuario
5. Modelo de Pruebas Unitarias
6. Documentación del Código Fuente de la Aplicación
7. Exploración de Código Fuente C#
7.1 Modelo
7.2 GUI
8. Recursos
8.1 Java
8.2 C#
8.3 Aplicación en ejecución
8.3.1 Capturas de pantalla
8.3.2 Vídeo
9. Cambios
10. Conclusiones
11. Glosario
12. Literatura & Enlaces

0. Introducción

Vamos a crear (traducir [Java a C#]] una aplicación que permite ahorrar monedas de diferentes denominaciones. En cualquier momento podremos romper el marranito para extraer nuestros preciados ahorros. Aprenderemos nuevos conceptos de controles de interfaz de usuario, como por ejemplo, la interacción de imágenes como objetos de selección (las diferentes denominaciones de moneda) y la pulsación sobre una imagen que representa el objeto de rompimiento de la alcancía. Ante todo, progresaremos en nuestro avance en el dominio del lenguaje de programación C#, el uso de herramientas de desarrollo (Visual Studio 2013, en especial); además la promoción de las tecnologías de desarrollo Microsoft (lenguaje de programación, IDE, Framework .NET, entre otras más). ¡Bienvenidos!


[Nota: Se respetará cada uno de los elementos que pertenecen al proyecto de Cupi2 del Departamento de Ingeniería de Sistemas y Computación de la Universidad de los Andes. El texto en cursiva indica un extracto literal de la fuente; en caso contrario, se dicta explícitamente.]

1. Enunciado

Este es el enunciado del problema a resolver (original en [4]):

En la alcancía es posible guardar monedas de las siguientes denominaciones:
  • $20
  • $50
  • $100
  • $200
  • $500
No se guardan ni billetes ni monedas de otras denominaciones.

Al dueño de la alcancía le parece muy útil conocer cuánto tiene en la alcancía sin necesidad de romperla, es más, él quiere conocer cuántas monedas tiene en cada denominación para así romper la alcancía sólo cuando quiera disponer de todo su dinero ahorrado.

Se quiere un programa que ilustre el manejo de la alcancía. El programa debe permitir:
  1. Agregar una moneda de una de las denominaciones indicadas.
  2. Contar cuántas monedas tiene de cada denominación.
  3. Calcular el total de dinero ahorrado
  4. Romper la alcancía vaciando su contenido.
  5. Comenzar una nueva alcancía.

1.1 Interfaz gráfica de usuario (versión previa en Java)

En la Figura 1 se muestra la edición de la aplicación Alcancía creada en el lenguaje de programación Java.
Alcancía (en Java)
Figura 1. Alcancía (en Java).

2. Requerimientos

A continuación se enumeran todos los requerimientos funcionales exigidos en el enunciado del problema (fuente [5]):

2.1 R1: Guardar una moneda de una denominación dada

Código: R1

Descripción: Guardar una moneda de una denominación dada.

Resumen: Se adiciona a la alcancía una moneda de alguna de las denominaciones establecidas. No se puede guardar monedas de denominaciones diferentes. La alcancía no puede estar rota.

Entradas: Denominación de la moneda:
  • $20
  • $50
  • $100
  • $200
  • $500
Resultados: La alcancía tiene una moneda más de la denominación indicada.

2.2 R2: Contar cuántas monedas hay en la alcancía de cada denominación

Código: R2

Descripción: Contar cuántas monedas hay en la alcancía de cada de denominación.

Resumen: Decir cuántas monedas hay de cada una de las denominaciones.

Entradas: «Ninguna»

Resultados:
  • Total de monedas de $20
  • Total de monedas de $50
  • Total de monedas de $100
  • Total de monedas de $200
  • Total de monedas de $500

2.3 R3: Calcular el total de dinero ahorrado

Código: R3

Descripción: Calcular el total de dinero ahorrado

Resumen: Sumar todo el dinero que hay en la alcancía.

Entradas: «Ninguna»

Resultados: Total de dinero ahorrado.

2.4 R4: Romper la alcancía

Código: R4

Descripción: Romper la alcancía.

ResumenSe rompe la alcancía y se retiran todas las monedas.

Entradas: «Ninguna»

Resultados: La alcancía queda rota y vacía.

2.5 R5: Crear una nueva alcancía

Código: R5

Descripción: Crear una nueva alcancía.

Resumen: Una nueva alcancía es creada y no tiene monedas en su interior.

Entradas: «Ninguna»

Resultados: Se comienza una nueva alcancía.

3. Modelo del Mundo del Problema

En el diagrama UML de la Figura 2 se esquematiza el modelo del mundo del problema para la aplicación Alcancia. (En la sección 9 se resaltan los cambios realizados sobre el modelo original hallado en [6])
Modelo del mundo del problema
Figura 2. Modelo del mundo del problema.

4. Modelo de la Interfaz Gráfica de Usuario

En la Figura 3 se esquematiza el diagrama UML con los artefactos que componen la interfaz gráfica de usuario. (Este modelo es una adaptación de la versión original [7] a los artefactos lógicos que provee Microsoft .NET Framework para la composición de interfaces gráficas de usuario.)
Modelo interfaz gráfica de usuario
Figura 3. Modelo interfaz gráfica de usuario.

5. Modelo de Pruebas Unitarias

El diagrama UML esquematizado en la Figura 4 esquematiza el modelo de pruebas unitarias de la aplicación Alcancía.
Modelo pruebas unitarias
Figura 4. Modelo pruebas unitarias.

6. Documentación del Código Fuente de la Aplicación

En este enlace se puede descargar la documentación (formato CHM) del código fuente de la aplicación.

7. Exploración de Código Fuente C#

7.1 Modelo
Conjunto de artefactos del modelo.

Archivo de código fuente Moneda.cs [enlace alternativo]:

7.2 GUI

Archivo de código fuente ControlAlcancia.cs [enlace alternativo]:
Archivo de código fuente ControlBotones.cs [enlace alternativo]:
Archivo de código fuente ControlMonedas.cs [enlace alternativo]:
Archivo de código fuente Principal.cs [enlace alternativo]:

8. Recursos

8.1 Java

Conjunto de recursos del proyecto en su versión original:
Enlace de descarga de archivo ZIP con la solución y los proyectos integrales.

8.3 Aplicación en ejecución

8.3.1 Capturas de pantalla

Aplicación Alcancía en C#
Figura 5. Aplicación Alcancía en C#.


Aplicación Alcancía en C# (izquierda) y Java (derecha)
Figura 6. Aplicación Alcancía en C# (izquierda) y Java (derecha).

8.3.2 Vídeo


9. Cambios

Lista de cambios efectuados sobre el modelo del mundo problema:
  • En la clase Alcancia se removieron los siguientes métodos a razón de simplificar y crear una representación más intuitiva y natural:
    • inicializar()
    • agregarMoneda100()
    • agregarMoneda20()
    • agregarMoneda200()
    • agregarMoneda50()
    • agregarMoneda500()
    • darEstadoAlcancia()
    • darNumeroMonedas100()
    • darNumeroMonedas20()
    • darNumeroMonedas200()
    • darNumeroMonedas50()
    • darNumeroMonedas500()
    • estaRota()
  • Los métodos anteriores se reemplazaron o convergieron en propiedades nuevos métodos. (En la Figura 2 se esquematiza la nueva representación de la clase Alcancia.)
  • Se agregó la enumeración Moneda para representar las diferentes denominaciones de las monedas. Esta enumeración facilita tener un conjunto de constantes que corresponden con las monedas que se pueden poner dentro de la alcancía; se restringe además, el intento de color monedas de otras denominaciones).

10. Conclusiones

Creamos (traducimos) una aplicación que permite poner monedas en una alcancía, además de permitir romperla cuando queremos invertir nuestros ahorros. Este ejercicio de traducción resultó muy interesante: se usaron nuevas características de composición de interfaces gráficas como la parametrización de controles RadioButton como botones de selección exclusivo para las monedas. Se agregó además un nuevo estado de imagen a la alcancía: la alcancía cuando no tiene monedas y está rota, debe mostrarse vacía. Con esta traducción finalizamos el Nivel 1, por lo tanto la siguiente semana pasaremos al Nivel 2 con la traducción de una aplicación que permite manejar una tienda pequeña.

Glosario

  • Alcancía
  • Diagrama
  • Enumeración
  • GUI
  • Modelo
  • Pruebas unitarias
  • UML

Literatura & Enlaces

[1]: Universidad de los Andes - http://www.uniandes.edu.co
[2]: Departamento de Ingeniería de Sistemas y Computación - http://sistemas.uniandes.edu.co
[3]: Proyecto Cupi2 - http://cupi2.uniandes.edu.co/sitio
[4]: Enunciado - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-1/alcancia
[5]: Requerimientos - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-1/alcancia/requerimientos-2042
[6]: Modelo Conceptual - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-1/alcancia/modeloconceptual-n1alcancia
[7]: Interfaz - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-1/alcancia/interfaz-n1alcancia
[8]: Bank, Banking, Cash, Cheapest, Coin, Currency, Deal, Dollar, Dollars, Economy, Finance, Financial, Money, Moneybox, Offer, Payment, Pig, Piggy, Price, Save, Saving icon | Icon Search Engine | Iconfinder - https://www.iconfinder.com/icons/131957/bank_banking_cash_cheapest_coin_currency_deal_dollar_dollars_economy_finance_financial_money_moneybox_offer_payment_pig_piggy_price_save_saving_icon#size=48
[9]: Pruebas - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-1/alcancia/pruebas-n1alcancia
[10]: JavaDoc - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-1/alcancia/javadoc-n1alcancia
[11]: Visualización Código - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-1/alcancia/visualizacion-codigo


J

1 comentario:

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.