Tabla de Contenido
0. Introducción1. 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:
- Su nombre,
- Su tipo (puede ser un producto de papelería, de supermercado o droguería),
- La cantidad actual del producto en la tienda (número de unidades disponibles para la venta que hay en bodegas),
- El número de productos por debajo del cual se debe hacer un nuevo pedido al proveedor, y
- 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:
- Vender a un cliente un cierto número de unidades de un producto,
- Hacer un pedido de un producto para el cual ya se llegó al tope mínimo definido, y
- Mostrar algunas estadísticas de la tienda. Dichas estadísticas son:
- El producto más vendido,
- El producto menos vendido,
- La cantidad total de dinero obtenido por las ventas de la tienda, y
- 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)
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].)
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])
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].)
Figura 4. Modelo de pruebas unitarias. |
6. Exploración de Código Fuente C#
6.1 Modelo
6.2 GUI
Archivo C# ControlCalculos.cs [enlace alternativo]:
Archivo C# ControlOperaciones.cs [enlace alternativo]:
Archivo C# ControlProductos.cs [enlace alternativo]:
Archivo C# FormCantidad.cs [enlace alternativo]:
Archivo C# FormProducto.cs [enlace alternativo]:
Archivo C# Principal.cs [enlace alternativo]:
Archivo C# ControlOperaciones.cs [enlace alternativo]:
Archivo C# ControlProductos.cs [enlace alternativo]:
Archivo C# FormCantidad.cs [enlace alternativo]:
Archivo C# FormProducto.cs [enlace alternativo]:
Archivo C# Principal.cs [enlace alternativo]:
7. Recursos
7.1 Java
Conjunto de recursos del proyecto en su versión original [8]:
- Visitar: http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-2/la-tienda
- Demo: http://cupi2.uniandes.edu.co/sitio/images/cursosCupi2/apo1/ejemplos/demos/n2_tienda_demo.zip
- Archivo ZIP: http://cupi2.uniandes.edu.co/sitio/images/cursosCupi2/apo1/ejemplos/codigos/n2_tienda.zip
- Examen escrito: http://cupi2.uniandes.edu.co/sitio/images/cursosCupi2/apo1/ejemplos/examenes/n2_tienda_examen_escrito.doc
- Examen práctico: http://cupi2.uniandes.edu.co/sitio/images/cursosCupi2/apo1/ejemplos/examenes/n2_tienda_examen_laboratorio.doc
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
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.