domingo, 8 de junio de 2014

APO1 - Nivel 1 en C#: Elecciones Cupi2

Tabla de Contenido

0. Introducción
1. Enunciado
1.1 Interfaz gráfica de usuario (vista previa)
2. Requerimiento Funcionales
2.1 R1: Votar por un candidato
2.2 R2: Mostrar el costo de campaña de un candidato
2.3 R3: Vaciar la urna de votación
2.4 R4: Mostrar el total de votos en la urna
2.5 R5: Mostrar el porcentaje de votos de un candidato
2.6 R6: Mostrar el costo promedio de una campañ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 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

Esta aplicación es parte de la serie de la traducción -Java a C#- de los niveles del curso de Algorítmica y Programación Orientada a Objetos 1 (proyecto Cupi2 - Universidad de los Andes). En esta entrega vamos a desarrollar una aplicación de elección de un candidato a un programa ejecutivo en particular. Nuevamente nos enfrentamos al desarrollo de una interfaz gráfica intuitivo y un modelo del mundo del problema conciso y robusto. (Y por supuesto, el afianzamiento del conocimiento del lenguaje de programación C#.)


[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, incluyendo el enlace de referencia. El texto en cursiva indica un extracto literal de la fuente; de lo contrario se dicta explícitamente.]

1. Enunciado

Enunciado del problema a resolver (adaptado de [4]):


Se están realizando las elecciones para la presidencia de Cupi2. Para tal cargo se han postulado tres candidatos, los cuales han realizado una intensa campaña publicitaria utilizando los principales medios de comunicación (Internet, radio, y televisión). Se desea conocer el costo de la campaña calculando el retorno de la inversión realizada en publicidad. Para esto, se determinaron los siguientes valores dependiendo del medio que influenció al votante:

  • Voto influenciado por publicidad en Internet: $100
  • Voto influenciado por publicidad en radio: $500
  • Voto influenciado por publicidad en televisión: $1.000
Lo anterior quiere decir que, por cada voto que reciba un candidato influenciado por publicidad en Internet, su costo de campaña se incrementara en $100, del mismo modo por cada voto influenciado por publicidad en radio, su costo de campaña se incrementara en $500, y finalmente, por cada voto influencia por publicidad en televisión, su costo de campaña se incrementar en $1.000.

Las elecciones para la presidencia de Cupi2 requieren una aplicación que les permita:
  1. Votar por el candidato de su elección, 
  2. Calcular el costo de campaña de un candidato dependiendo de la influencia publicitaria de cada voto, 
  3. Vaciar todas las urnas de la votación, 
  4. Conocer el número total de votos,
  5. Porcentaje de votos obtenidos por cada candidato, y 
  6. Costo promedio de campaña en las elecciones Cupi2.

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


En la Figura 1 se muestra la edición de la interfaz gráfica de la aplicación Elecciones Cupi2 en Java.
Interfaz gráfica de usuario de Elecciones Cupid2 en Java
Figura 1. Interfaz gráfica de usuario de Elecciones Cupid2 en Java.

2. Requerimiento

A continuación el conjunto de requerimientos funcionales (fuente [5]) de la aplicación de Elecciones Cupi2:

2.1 R1: Votar por un candidato

Código: R1

Descripción: Votar por un candidato.

Resumen: Se incrementa un voto al número de votos actuales del candidato. Se debe especificar cuál fue el medio que más influencio a la persona para realizar dicha votación (Internet, radio, o televisión). Dependiendo del medio seleccionado, el candidato recibirá un aumento en el costo de campaña.

Entradas:
  • El número del candidato, siendo opciones válidas candidato 1, 2, o 3.
  • El medio publicitario que influenció en la votación (Internet, radio o televisión).
Resultados:
  • El número total de votos del candidato se incrementó en 1.
  • El costo de campaña del candidato cuyo número se especifica en las entradas se incrementó dependiendo del medio publicitario. Si este fue Internet, se incrementó en $100; si fue radio, incrementó en $500; si fue televisión, se incrementó en $1000.

2.2 R2: Mostrar el costo de campaña de un candidato

Código: R2

Descripción: Mostrar el costo de campaña de un candidato.

Resumen: Se debe informar el costo de campaña de un candidato. El costo de campaña se calcula seg{un el n{umero de votos y la influencia (Internet, radio, o televisión) sobre cada uno de ellos.

Entradas: El número del candidato siendo opciones válidas 1, 2, o 3.

Resultados: Costo de campaña del candidato escogido.

2.3 R3: Vaciar la urna de votación

Código: R3

Descripción: Vaciar la urna de votación

Resumen: Se deben reiniciar los votos y los costos de campaña de todos los candidatos, de tal manera que el número de votos y el costo de campaña queden en cero.

Entradas: «Ninguna»

Resultados:
  • Los votos de los candidatos quedan en cero.
  • Los costos de campaña de los candidatos quedan en cero.

2.4 R4: Mostrar el totol de votos en la urna

Código: R4

Descripción: Mostrar el total de votos en la urna.

Resumen: Se debe informar el total de votos que hay en la urna (la suma dos los votos de cada uno de los candidatos).

Entradas: «Ninguna»

Resultados: Total de votos de la urna.

2.5 R5: Mostrar el porcentaje de votos de un candidato

Código: R5

Descripción: Mostrar el porcentaje de votos de un candidato.

Resumen: Se debe informar el porcentaje de votos obtenido por un candidato, es decir la razón del total de los votos de un candidato y el total de votos en la urna.

Entradas: El número del candidato, siendo opciones válidas 1, 2, ó 3.

Resultados: Porcentaje de votos obtenidos por el candidato sobre todos los votos en la urna.

2.6 R6: Mostar el costo promedio de campaña

Código: R6

DescripciónMostrar el costo promedio de campaña.

Resumen: Se debe informar el promedio del costo de campaña de los tres candidatos, es decir la razón de la sumatoria de los costos de campaña de los candidatos y el número total de candidatos.

Entradas: El número del candidato, siendo opciones válidas candidato 1, 2, o 3.

Resultados: Costo promedio por campaña en las elecciones Cupi2.

3. Modelo del Mundo del Problema


En el diagrama UML de la Figura 2 se muestra las entidades que comprenden el modelo del mundo del problema.
Modelo del mundo del problema
Figura 2. Modelo del mundo del problema.

4. Modelo de la Interfaz Gráfica de Usuario

El diagrama UML mostrado en la Figura 3 describe el modelo de los componentes integrales de la interfaz gráfica de usuario de Elecciones Cupi2.
Modelo de la interfaz gráfica de usuario.
Figura 3. Modelo de la interfaz gráfica de usuario.

5. Modelo de Pruebas Unitarias


En la Figura 4 se muestra las clases que integran el modelo de pruebas unitarias.
Modelo de pruebas unitarias
Figura 4. Modelo de pruebas unitarias.

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

Documentación del código fuente de la solución en formato CHM.

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

7.1 Modelo
Conjunto de entidades del modelo.
Figura 5. Conjunto de entidades del modelo.

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

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

7.2 GUI
Controles integrales de la GUI de la aplicación.
Figura 6. Controles integrales de la GUI de la aplicación.

[Nota: Sólo se muestra el código fuente 

Archivo de código fuente ControlCandidatos.cs [enlace alternativo]:
Archivo de código fuente ControlExtension.cs [enlace alternativo]:
Archivo de código fuente ControlImagen.cs [enlace alternativo]:
Archivo de código fuente Controlurna.cs [enlace alternativo]:
Archivo de código fuente DialogMedioPublicitario.cs [enlace alternativo]:
Archivo de código fuente Principal.cs [enlace alternativo]:

8. Recursos

8.1 Java

A continuación el conjunto de enlaces a los contenidos originales del proyecto desarrollado en Java:

8.3 Aplicación en ejecución
Elecciones Cupi2 en C#
Figura 7. Elecciones Cupi2 en C#.

 
Elecciones Cupi2 en C# y Java
Figura 8. Elecciones Cupi2 en C# y Java.

8.3.2 Vídeo

9. Cambios

Lista de cambios realizado sobre el modelo del mundo del problema:
  • Agregación de la enumeración `MedioPublicatario` para identificar el medio publicitario que influenció el voto.
  • Los métodos ingresarVotoTelevisionCanditato1, ingresarVotoTelevisionCanditato2, ingresarVotoTelevisionCanditato3, ingresarVotoRadioCandidato1, ingresarVotoRadioCandidato2, ingresarVotoRadioCandidato3, ingresarVotoInternetCandidato1, ingresarVotoInternetCandidato2, e ingresarVotoInternetCandidato3 fueron reemplazados por un único método: IngresarVoto(int numerocandidato, MedioPublicitario medio)
  • Arreglo de objetos Candidato para facilitar las manipulaciones de cálculo de porcentajes, voto, &c.
  • Los métodos darCandidato1, darCandidato2, y darCandidtao3 fueron reemplazados por ObtenerCandidato(int numeroCandidato).

10. Conclusiones

El desarrollo de esta traducción (Java a C#) ha resultado en el afianzamiento de los conceptos esenciales de programación orientada a objetos y algorítmica expuestos en artículos y recetas de este mismo blog. Hemos traducido el modelo original agregando y removiendo algunos elementos programas específicos. La interfaz utiliza controles análogos a los disponibles en el lenguaje de programación Java: UserControl en el lugar de JPanel, por ejemplo. La próxima traducción consistirá en la administración de la información de una encuesta.

11. Glosario

  • Campaña
  • Control
  • Formulario
  • Interfaz
  • GUI
  • Modelo
  • Presidencia
  • Votación

12. 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/elecciones/enunciado
[5]: Requerimientos Funcionales - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-1/elecciones/requerimientos-funcionales
[6]: Basic, Green, Question icon | Icon Search Engine | Iconfinder - https://www.iconfinder.com/icons/69755/basic_green_question_icon#size=48
[7]: Accept, Correct, Done, Good, Green, Mark, Ok, Ready, Sign, Success, Tick, Valid, Validation, Verify, Vote, Yes icon | Icon Search Engine | Iconfinder - https://www.iconfinder.com/icons/105257/accept_correct_done_good_green_mark_ok_ready_sign_success_tick_valid_validation_verify_vote_yes_icon#size=48
[8]: Modelo Conceptual - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-1/elecciones/modelo-conceptual
[9]: Interfaz - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-1/elecciones/interfaz
[10]: Pruebas - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-1/elecciones/pruebas
[11]: Visualización de Código - http://cupi2.uniandes.edu.co/sitio/index.php/cursos/apo1/nivel-1/elecciones/visualizacion-de-codigo


J

No hay comentarios:

Publicar un comentario

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