domingo, 6 de julio de 2014

APO1 - Nivel 2 en C#: La Tienda

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: Vender un producto
2.2 R2: Hacer pedido de un producto
2.3 R3: Calcular estadísticas de ventas
3. Modelo del Mundo del Problema
4. Modelo de la Interfaz Gráfica de Usuario (GUI)
5. Modelo de Pruebas Unitarias
6. Exploración de Código Fuente C#
6.1 Modelo
6.2 GUI
7. Recursos
7.1 Java
7.2 C#
7.2.1 Solución y proyectos
7.2.2 Documentación del código fuente de la aplicación
7.2.3 Aplicación en ejecución
7.2.3.1 Capturas de pantalla
7.2.3.2 Vídeo
8. Cambios
9. Conclusiones
10. Glosario
11. Literatura & Enlaces

0. Introducción

Inicio este nuevo nivel (Nivel 2) con la traducción (Java a C#) de una aplicación que permite administrar los productos de una tienda pequeña. Quiero mencionar que los ejercicios de este nivel incluirá nuevos conceptos (e.g., modelación de características y comportamiento de objetos del mundo [o dominio] del problema, incursión sobre el uso de constantes para representar los valores que puede representar un atributo, expresiones de acceso y modificación del estado de un objeto en un instante del tiempo dado, uso recurrente de construcciones [o sentencias] condicionales simples y compuestas, diseño de funciones [en especial métodos] para construir, calcular, validar, mutar [modificar] el estado de un objeto). ¡Empecemos!


[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

El enunciado original se halla en [4]. Aquí incluyo una versión con el formato descriptivo usado en este blog:

En algunas tiendas, existen procesos de control de inventarios y de control de estadísticas para poder realizar pedidos. Además, se realizan actividades de mercadeo con sus productos más vendidos. Estos procesos y actividades sirven para poder tomar decisiones en cuanto a los productos que se deben vender en la tienda.

En este caso, tenemos una pequeña tienda que vende cuatro productos, para cada uno de los cuales de debe manejar la siguiente información:
  1. Su nombre, 
  2. Su tipo (puede ser un producto de papelería, de supermercado o droguería), 
  3. La cantidad actual del producto en la tienda (número de unidades disponibles para la venta que hay en bodegas), 
  4. El número de productos por debajo del cual se debe hacer un nuevo pedido al proveedor, y
  5. El precio base de venta por unidad.
Para calcular el precio final de cada producto, se deben sumar los impuestos que define la ley. Dichos impuestos dependen del tipo de producto:
  • uno de papelería tiene un IVA del 16%, 
  • uno de supermercado del 4%, y 
  • uno de droguería del 12%
Eso quiere decir, que si un lápiz tiene un precio base de $10, el precio final será de $11.6 considerando que un lápiz es un producto de papelería, y sobre estos se debe pagar el 16% de impuestos.

El programa de manejo de esta tienda debe permitir las siguientes operaciones:
  1. Vender a un cliente un cierto número de unidades de un producto, 
  2. Hacer un pedido de un producto para el cual ya se llegó al tope mínimo definido, y 
  3. Mostrar algunas estadísticas de la tienda. Dichas estadísticas son:
    1. El producto más vendido, 
    2. El producto menos vendido, 
    3. La cantidad total de dinero obtenido por las ventas de la tienda, y 
    4. El promedio de ventas de la tienda (valor total de las ventas dividido por el número total de unidades vendidas de todos los productos).

1.1 Interfaz gráfica de usuario (versión previa en Java)
Latinoamericana: Tienda
Figura 1. Latinoamericana: Tienda (en lenguaje de programación Java).

2. Requerimientos

A continuación se describen cada uno de los requerimientos funcionales necesarios para la construcción de la aplicación de La Tienda en lenguaje de programación C# (fuente [5]):

2.1 R1: Vender un producto

Código: R1

Descripción: Vender un producto.

Resumen: Vender a un cliente un cierto número de unidades de un producto.

Entradas:
  • Nombre del producto
  • Cantidad de unidades a vender
Resultados
  • Si había suficiente cantidad del producto disponible, se vendió al cliente lo que pidió. Sino, se le dio todo lo que se tenía en la bodega de la tienda.
  • En la caja de la tienda se guardó el dinero resultado de la venta.
  • El cliente fue informado de la cantidad que se le vendió.

2.2 R2: Hacer pedido de un producto

Código: R2

Descripción: Hacer pedido de un producto.

Resumen: Hacer un pedido de un producto para el cual ya se llegó al tope mínimo definido. El pedido sólo se puede realizar si la cantidad de productos en bodega es menor que la cantidad mínima del producto.

Entradas:
  • Nombre del producto
  • Cantidad de unidades a pedir
Resultados: Si es posible realizar el pedido, se incrementa la cantidad del producto disponible con el número de unidades que se pidieron.

2.3 R3: Calcular estadísticas de ventas

Código: R3

Descripción: Calcular estadísticas de ventas


Resumen: Mostrar las siguientes estadísticas:

  • El producto más vendido
  • El producto menos vendido
  • La cantidad total de dinero obtenido por las ventas de la tienda
  • El promedio de ventas de la tienda.
Entradas: «Ninguna»

Resultados: Se ha presentado por pantalla la información estadística antes descrita.

3. Modelo del Mundo del Problema


En el diagrama de clases de UML de la Figura 2 se esquematizan todas las entidades integrales del modelo del mundo del problema para la aplicación La Tienda. (El modelo original se encuentra en [6].)
Modelo del mundo del problema
Figura 2. Modelo del mundo del problema.

4. Modelo de la Interfaz Gráfica de Usuario (GUI)


En el diagrama de clases de UML de la Figura 3 se esquematiza el modelo con las clases de componentes (e.g., formularios, diálogos, controles) integrales de la interfaz gráfica de usuario. (Original en [10])
Modelo de la interfaz gráfica de usuario (GUI)
Figura 3. Modelo de la interfaz gráfica de usuario (GUI).

5. Modelo de Pruebas Unitarias

En el diagrama de clases de UML de la Figura 4 se presentan las clases de pruebas unitarias para la aplicación. (Original en [7].)
Modelo de pruebas unitarias.
Figura 4. Modelo de pruebas unitarias.

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

6.1 Modelo
Artefactos del modelo de la aplicación.

6.2 GUI
Artefactos de la interfaz gráfica de usuario.

7.1 Java

Conjunto de recursos del proyecto en su versión original [8]:

7.2 C#

7.2.1 Solución y proyectos

Enlace de descarga de archivo ZIP con la solución y los proyectos integrales de la aplicación.

7.2.2 Documentación del código fuente de la aplicación

Enlace de descarga de la documentación (formato CHM) del código fuente C# de la aplicaicón.

7.2.3 Aplicación en ejecución

7.2.3.1 Capturas de pantalla
Aplicación La Tienda en C#
Figura 5. Aplicación La Tienda en C#.
Aplicación La Tienda en C# (izquierda) y Java (derecha)
Figura 6. Aplicación La Tienda en C# (izquierda) y Java (derecha).
7.2.3.2 Vídeo

8. Cambios

Lista de cambios realizados sobre el modelo del mundo del problema de la aplicación La Tienda:
  • Adición de la enumeración TipoProducto con las siguientes constantes:
    • Papeleria
    • Supermercado
    • Droguería
  • Uso de decimal para representar los precios de los productos, en lugar de double.
  • Las diferentes cantidad porcentuales de IVA se representan como una enumeración -TipoIVA-:
    • IvaPapel
    • IvaFarmacia
    • IvaMercado
  • Uso de propiedades en lugar de métodos para clase Producto:
    • darNombre -> Nombre (solo lectura)
    • darTipo -> Tipo (solo lectura)
    • darValorUnitario -> ValorUnitario (solo lectura)
    • darCantidadBodega -> CantidadBodega (solo lectura)
    • darCantidadMinima -> CantidadMinima (solo lectura)
    • darIva -> Iva (solo lectura)
  • La tienda ofrece hasta cuatro (4) productos que serán almacenados en una estructura de datos secuencial: arreglo.
  • El constructor de Tienda ahora posee dos versiones:
    • Tienda (Producto, Producto, Producto, Producto)
    • Tienda (Producto[])
  • Estos métodos de la clase Tienda se renombran como:
    • darGananciasTotales -> CalcularGananciasTotales
    • darProductoMasVendido -> CalcularProductoMasVendido
    • darProductoMenosVendido -> CalcularProductoMenosVendido
    • darPromedioVentas -> CalcularPromedioVentas
  • El conjunto de métodos darProducto1() hasta darProducto4() queda unificado en un único método, el cual posee la siguiente firma:
    • ObtenerProducto (string)

9. Conclusiones

Hemos iniciado el Nivel 2 de APO1 con la traducción una nueva aplicación de Java a C# útil para la administración de una tienda pequeña. Continuamos en el proceso de afianzar los conocimientos de uso de construcciones del lenguaje de programación C#, y la modelación de entidades que comprenden el dominio (o mundo) del problema. En este último aspecto hacemos hincapié, debido a que comprende un aspecto fundamental en la creación de programas modulares consistentes y robustos. En el próximo ejercicio de traducción crearemos una aplicación para la comercialización de juegos.

10. Glosario

  • Aplicación
  • C#
  • Control
  • Interfaz gráfica de usuario
  • Java
  • Modelo
  • Pruebas unitarias
  • Traducción

11. 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-2/la-tienda
[5]: Requerimientos - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-2/la-tienda/requerimientos-1651
[6]: Modelo Conceptual - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-2/la-tienda/modeloconceptual-n2tienda
[7]: Pruebas - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-2/la-tienda/pruebas-n2tienda
[8] La tienda - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-2/la-tienda
[9]: Shop, Store icon | Icon Search Engine | Iconfinder - https://www.iconfinder.com/icons/61473/shop_store_icon#size=48
[10]: Interfaz - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-2/la-tienda/interfaz-n2tienda


J

No hay comentarios:

Publicar un comentario

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