Está en la página 1de 31

Presentación curricular

Ciclo 2
Ruta de aprendizaje 2
MINTIC

Ciclo 2: Programación básica en Java

AÑO 2022
Introducción
El presente documento se ha elaborado en el marco del proyecto MisiónTIC 2022 convenio de
asociación No. 776 del 2021 como insumo para el desarrollo de la ruta de aprendizaje No. 2. Este
documento y la información contenida en él son desarrollos exclusivos para el proyecto y la
implementación de la ruta de aprendizaje No.2 MisionTIC 2022.

La Universidad Sergio Arboleda


La UNIVERSIDAD SERGIO ARBOLEDA es una Institución de educación superior de carácter privado,
sin ánimo de lucro, con Personería Jurídica reconocida mediante las Resoluciones Nos. 16377 de
octubre de 1984, emanadas del Ministerio de Educación Nacional; orientada a formar profesionales
en los distintos campos de la cultura, con proyección hacia la comunidad nacional e internacional,
con sede en las ciudades de Bogotá D.C, Santa Marta y Barranquilla, y a nivel internacional, el Centro
Internacional de Excelencia Internacional ubicado en la ciudad de Madrid – España y en la ciudad de
Miami – U.S.A.. Actualmente cuenta con Acreditación Institucional de Alta Calidad Multi-campus
otorgada mediante Resolución 3659 del 5 de abril de 2019, oferta ciento treinta y tres (133)
programas, más de cuarenta y un (41) programas de pregrado, cuatro (4) programas de tecnología,
sesenta (60) programas de especialización, veintisiete (27) maestrías, un (1) doctorado, y más de
cien (100) programas de educación continuada.

Durante más de 35 años la Universidad Sergio Arboleda ha participado activamente en procesos de


investigación y consultoría tanto en entidades privadas como públicas, en el ámbito nacional e
internacional generando en sus aliados, importantes impactos a nivel de cambio y transferencia de
conocimientos a través de la educación.

Con base en los Estatutos de la Universidad Sergio Arboleda (aprobados por la Resolución 6423 del
5 de agosto de 2011 del Ministerio de Educación Nacional), dentro de los objetivos de la misma se
encuentra: “(…) d. Adelantar y fomentar programas de investigación y extensión en las áreas de su
especialidad y propender por su efectivo aprovechamiento y divulgación (…)”. Adicionalmente, de
conformidad con la naturaleza académica de la Universidad, para el cumplimiento de sus objetivos
y el desarrollo de sus funciones, “podrá crear, dirigir, o administrar en todos los niveles, modalidades
y metodologías, todas las actividades académicas, docentes, investigativas y de extensión o servicio
conducentes a la producción, desarrollo y transmisión del conocimiento y de la cultura en todos los
campos”.

De acuerdo con la Ley 30 de 1992, “La extensión comprende los programas de educación
permanente, cursos, seminarios y demás programas destinados a la difusión de los conocimientos,
al intercambio de experiencias, así ́ como las actividades de servicio tendientes a procurar el bienestar
general de la comunidad y la satisfacción de las necesidades de la sociedad”.
Así las cosas, la Extensión en la Universidad Sergio Arboleda busca, en conjunto con los otros pilares
de la Institución (Docencia, Investigación e Innovación), aportar a la proyección social a través de
servicios, tales como convenios de ciencia, tecnología e innovación.

Con base en lo anterior, la Universidad ha dirigido sus esfuerzos a complementarse –teniendo en


cuenta las necesidades actuales del país-, en las áreas de investigación e innovación que aportan
conocimiento efectivo a las diferentes regiones de Colombia; logrando obtener resultados que han
contribuido con el mejoramiento de la sociedad.
En el recorrido de más de 35 años, la Universidad Sergio Arboleda, se ha caracterizado por un sólido
compromiso con el quehacer de su misión, liderando un proyecto de formación integral que
descansa en cuatro pilares fundamentales: Humanismo, Excelencia Académica, Internacionalización
y Emprendimiento e innovación.

Desde las aulas se han venido forjando individuos con profundos conocimientos en las diversas
ciencias del saber, con un bagaje cultural que les permita identificar sus raíces, velar por los valores
ancestrales y ser cultores del arte y las letras; aptos para participar en procesos de desarrollo aquí
y más allá de las fronteras, y preparados para crear, emprender e innovar, condiciones
indispensables en los profesionales actuales.

Año tras año la Universidad se ha sometido a un riguroso proceso de actualización del proyecto
educativo institucional, de manera que responda a las tendencias y necesidades del mundo
contemporáneo. Así lo evidencia su historia, las acciones presentes y las proyecciones al futuro.

Estrategias pedagógicas de la ruta de


aprendizaje No.2 en coherencia con las
herramientas tecnológicas
Las estrategias pedagógicas planteadas por el programa de formación de la ruta de aprendizaje No.2
se enmarcan en el quehacer de las acciones pedagógicas y didácticas, que facilitan la aprensión del
conocimiento y el desarrollo de competencias digitales y de programación, de manera dinámica,
innovadora y creativa integrando las herramientas tecnológicas y el desarrollo curricular a la
formación de los estudiantes que hacen parte del programa académico.

El programa promueve diferentes estrategias en la planificación y desarrollo que permitan


promover el cambio y la innovación en los métodos de enseñanza bajo criterios tales como:

• Trabajo colaborativo en ambientes multiculturales e Interdisciplinares


• Aplicación de herramientas tecnológicas en pro de la mejora y el aprendizaje
Como soporte al desarrollo pedagógico se cuenta con las siguientes tecnológicas:

• LMS (Learning Management System - sistema para la gestión del aprendizaje) +


herramientas integradas: plataforma en la que se implementará con el fin de hacer más
robusta y eficiente:

ü Las comunicaciones
ü Las interacciones académicas, sincrónicas como asincrónica,
ü La publicación de los materiales y las Guías de Estudio,
ü La participación y evaluación en cada uno de los módulos de aprendizaje.

• Herramientas anti-plagio: Pueden ser usada con fines de revisión o evaluación de


productos académicos.

• Inspección semiautomática de código: permite verificar las reglas de buena calidad que
debe tener un programa orientado por objetos como encapsulamiento, desacoplamiento,
presencia de código duplicado y una buena estructura de los algoritmos.

• Herramientas para videoconferencias: disponible para la interacción, en tiempo real, entre


estudiantes y profesores permitiendo la utilización de aulas presenciales en un esquema
sincrónico por comunicación con voz, video y chat.

Aula Virtual: El Aula Virtual contará con el apoyo de Mastertech, como LMS (Learning Management
System - sistema para la gestión del aprendizaje).

Ciclo 2. Programación básica en Java Justificación


El segundo ciclo de formación, programación básica en Java, tiene como objetivo presentar
a los estudiantes el paradigma de programación orientada por objetos, los fundamentos de
las bases de datos relacionales y el patrón arquitectónico MVC como estrategias para
modelar, diseñar e implementar soluciones de software a problemas reales.
La programación orientada por objetos es un paradigma que permite expresar soluciones
en un lenguaje más cercano al contexto del problema. Es una forma de razonamiento que
facilita la abstracción de los conceptos y permite independizarlos y relacionarlos de una
manera simple, siendo uno de los paradigmas de programación más utilizados en el campo
de la ingeniería de software.
La programación orientada por objetos se complementa con la utilización de las bases de
datos relacionales, las cuales proporcionan una forma intuitiva de modelar y manipular
información representada en tablas que se relacionan entre sí. Este tipo de bases de datos
permiten representar grandes volúmenes de información a través de una estructura lógica
que facilita el acceso y la manipulación de los datos a través del lenguaje de consulta
estructurado (SQL). Las bases de datos relacionales son usadas por organizaciones de todo
tipo y tamaño convirtiéndose una herramienta poderosa para satisfacer la necesidad de
administrar y controlar diferentes fuentes información.
Finalmente, el patrón MVC nos permite definir una arquitectura para las aplicaciones que
desacopla los componentes de la interfaz gráfica, la lógica de negocio y la capa de
persistencia. El patrón MVC facilita la definición de las responsabilidades de los diferentes
componentes, facilitando la escalabilidad y la mantenibilidad de la aplicación. El uso de del
patrón MVC tiene como propósito presentar los conceptos básicos de arquitectura de
software y la importancia de estos conceptos en la etapa de diseño.
En este curso, los estudiantes resolverán diferentes retos de programación combinando el
paradigma de programación orientada por objetos, el uso de bases de datos relaciones y el
patrón MVC que les permitirán adquirir las competencias necesarias en el área de la
ingeniería de software.

Objetivo general
Desarrollar en los estudiantes habilidades en programación mediante estudio del
paradigma de programación orientado por objetos, las bases de datos relaciones y la
arquitectura MVC como parte de su formación como desarrolladores Full Stack.

Competencias por desarrollar


1. Modela e implementa soluciones de software utilizando el paradigma de programación
orientada por objetos.
2. Representa un diseño orientado por objetos mediante el lenguaje UML
3. Captura requisitos funcionales a través de diagrama de casos de uso e historias de
usuario
4. Diseña y ejecuta un conjunto de pruebas unitarias
5. Diseña y manipula bases de datos relaciones a través del lenguaje SQL
6. Utiliza la arquitectura MVC para desacoplar la lógica de negocio y la interfaz gráfica
7. Utiliza librerías y Frameworks para el desarrollo de aplicaciones

Resultados esperados de aprendizaje


1.1. Implementa correctamente atributos, métodos y constructores en un programa
orientado por objetos.

1.2. Aplica correctamente los conceptos de encapsulamiento, interfaz y herencia en un


programa orientado por objetos

1.3. Utiliza colecciones y arreglos de datos en la solución de problemas


2.1. Utiliza diagramas de clases para representar el diseño de un programa orientado por
objetos

2.2. Reconoce las relaciones de dependencia, asociación y composición entre clases

3.1. Identifica los diferentes componentes de un diagrama de casos de uso

3.2. Reconoce las relaciones <<include>> y <<extends>> en un diagrama de casos de uso

3.3. Identifica los componentes de una historia de usuario

3.4. Reconoce el papel de los criterios de aceptación en una historia de usuario

4.1. Diseña pruebas unitarias caracterizando la salida de una función

4.2. Implementa pruebas unitarias para que sean ejecutadas de forma automática

5.1. Modela un conjunto de datos a través de diagrama E/R

5.2. Convierte un modelo E/R a un modelo relacional

5.3. Utiliza el lenguaje SQL para realizar las consultas CRUD a una base de datos

6.1. Reconoce las responsabilidades de cada componente en una arquitectura MVC

6.2. Implementa correctamente la comunicación entre los diferentes componentes de una


arquitectura MVC

6.3. Diseña y desarrolla interfaces de usuario utilizando el lenguaje JAVA

7.2 Utiliza el Framework Spring Data - JDBC para el desarrollo de aplicaciones con
arquitectura MVC

Contenido programático
El contenido del curso está organizado en los siguientes módulos:

• Módulo 1. Introducción a Java: Sesiones 1 a la 5


• Módulo 2. Programación orientada por objetos: Sesiones 6 a la 10
• Módulo 3. Interfaz gráfica con Swing: Sesiones 11 a la 15
• Módulo 4. Bases de datos relacionales con MySQL: Sesiones 16 a la 20
• Módulo 5. Arquitectura MVC: Sesiones 21 a la 25

A continuación, se presentan los temas y contenidos para cada una de las 25 sesiones.
Módulo Sesión Retos Tema Contenido

1 Introducción a java Introducción a java, instalación NetBeans, Tipos de datos, flujos de entrada y salida.
Módulo 1: 2 Condicionales y funciones If If-Else, Switch y funciones
Introducción a 3 Estructuras de repetición For, While, Do-While
JAVA 4 Arreglos y cadenas de caracteres Operaciones entre cadenas; declaración y manipulación de arreglos; ciclo Foreach
5 1 Preparación reto 1 Preparación reto 1
6 Declaración de clases: Métodos y atributos; Instancias: creación y manipulación; Paso de mensajes;
Clases y objetos
Encapsulamiento
Módulo 2: 7 Herencia por especialización y generalización; Polimorfismo por mensaje y herencia;Clases abstractas e
Herencia y polimorfismo
Programación Interfaces
orientada por 8 Colecciones y pruebas unitaria con JUnit ArrayList, HashMap, Pruebas unitarias con JUnit
objetos 9 Diagrama casos de uso, Historias de usuario, Diagrama de clases; composición, agregación, generalización,
Lenguaje UML
definición de atributos
10 2 Preparación reto 2 Preparación reto 2
11 Introducción a Swing, Diseño de interfaces mediante Wireframes (balsamiq
Diseño de interfaz de usuario (UI)
JFrame y JPanel; propiedades generales; Layout
12 Componentes UI Botones, cuadros de dialogo, selección, campos, áreas de texto, etc.
Módulo 3:
Interfaz gráfica 13 Manejo de eventos Captura de eventos: Listeners
con Swing 14 Interfaz gráfica usando Netbeans Diseño de interfaz gráfica utilizando Drag & drop Netbeans
15 3 Refuerzo semana 3 Preparación reto 3
16 Introducción a las bases de datos relacionales Introducción BD relacionales. Bd Relacionales vs NoSQL. Instalación MySQL
17 Modelo E/R y modelo relacional Modelado: Diagrama E/R, Modelo Relacional
Módulo 4:
Bases de datos 18 Introducción a SQL - Parte 1 Creación, eliminación, modificación de tablas
Relacionales
con MySQL 19 Introducción a SQL - Parte 2 CRUD consultas simples - SQL
20 4 Preparación Reto 4 Preparación reto 4
21 Arquitectura MVC Arquitectura de software; Patrón MVC; separación de responsabilidades
22 MVC con Spring Data JDBC - Parte 1 Framework de desarrollo Spring Boot para Java. Conexión con MySQL
Módulo 5:
Arquitectura 23 MVC con Spring Data JDBC - Parte 2 Desarrollo de la vista y el controlador para una aplicación MVC
MVC 24 Preparación reto 5 - Parte 1 Preparación reto 5
25 5 Preparación reto 5 - Parte 2 Preparación reto 5
Metodología
Clase Magistral: el docente hará inducción a los temas, desarrollará ejemplos y ejercicios
complementarios para los estudiantes sobre los temas expuestos.
Recursos en plataforma: el estudiante complementará la información vista en clase,
orientándola hacia el desarrollo de ejercicios en Java disponibles en la plataforma
Mastertech y material complementario como: videos, documentos y ejercicios resueltos.
Desarrollo de tutorías: el estudiante tendrá a su disposición tutores que resolverán las
dudas en sesiones sincrónicas; estas tutorías se enfocan en el desarrollo de ejemplos y
ejercicios que ayuden a afianzar los conceptos vistos en clases magistrales.
Desarrollo de retos: cada módulo estará acompañado por un reto diseñado para probar las
habilidades adquiridas a lo largo del ciclo. Estos retos se desarrollarán de forma incremental
de acuerdo a los contenidos vistos en cada módulo.

Actividades de aprendizaje
50 horas de sesiones sincrónicas acompañadas por un formador específico, cada sesión de
dos horas de duración. Las temáticas asociadas a cada una de las sesiones se presentaron
la sección contenido programático.
120 horas de trabajo independiente de programación entre las cuales podrán solicitar el
acompañamiento de un tutor específico, realizar ejercicios propuestos extra clase y avanzar
en el desarrollo de los retos pedagógicos propuestos.

Evaluación
La evaluación del ciclo 2: programación básica en Java corresponde a la evaluación de los
cinco (5) retos académicos y a la evaluación del curso de inglés. Las evaluaciones se hacen
en la escala de 0.0 al 5.0, donde cero (0.0) es la mínima nota y cinco (5.0) la máxima nota,
la nota mínima aprobatoria del ciclo es de tres (3.0).

La distribución del porcentaje de la nota final se hará de la siguiente manera:

Reto 1: 10%
Reto 2: 10%
Reto 3: 20%
Reto 4: 20%
Reto 5: 20%
Inglés: 10%
Curso habilidades personales: 10%

Recursos
LMS Mastertech
Es una plataforma LMS (Learning Management System, sistema de gestión de aprendizaje)
que ofrece cursos con contenidos actualizados, construidos por expertos y certificados por
la Universidad Sergio Arboleda en convenio con líderes de cada sector. La plataforma ofrece
cursos 100% virtuales, de manera que el estudiante pueda ir a su ritmo y siempre contará
con el apoyo de toda la comunidad o de expertos (Formadores y tutores) para apoyar el
proceso y asegurar que los estudiantes logren sus objetivos de aprendizaje.

Referencias Bibliográficas
Head First Java, 2nd Edition
Sierra, K., & Bates, B. (2013). Head first java. O'Reilly Media, Inc.

Clean code: a handbook of agile software craftsmanship.


Martin, R. C. (2009). Clean code: a handbook of agile software craftsmanship. Pearson Education.

Software Engineering
Sommerville, I. (2016). Software Engineering GE. Pearson Australia Pty Limited.

Bases de datos: diseño, implementación y administración


Coronel, C., Morris, S., & Rob, P. (2011). Bases de datos: diseño, implementación y administración.
Cengage Learning Editores.

UML@ classroom: An introduction to object-oriented modeling


Seidl, M., Scholz, M., Huemer, C., & Kappel, G. (2015). UML@ classroom: An introduction to object-
oriented modeling. Springer.

Plataforma MasterTech
Curso Java para todos. Enlace: https://mastertech.usergioarboleda.edu.co/
Retos académicos propuestos
para el ciclo No.2

Dentro de la propuesta curricular del ciclo académico se contempló el desarrollo de 5 retos de


programación que cuentan con un contexto real. Todos los retos están enmarcados dentro de la
metodología de aprendizaje basado en proyectos. Debido a esto los que los retos 2, 3, 4 y 5 harán
referencia a una misma problemática. El objetivo es en cada reto abordar uno de los componentes
del patrón arquitectónico MVC de forma independiente. De esta forma, en el reto 2 y 3 se enfocarán
en el desarrollo la lógica de negocio a través de un paradigma de programación orientado por
objetos. El reto 4 abordará el diseño e implementación de una base datos relacional para la
aplicación. Finalmente, el reto 5, integrará todos los componentes en una única aplicación con una
arquitectura MVC. A continuación, se presentan una descripción de los contextos para cada uno de
los retos.

Reto No.1 Índice de masa corporal (IMC)


El objetivo de este reto es evaluar el uso básico de java: entrada y salida de datos, operadores
aritméticos, condicionales, estructuras de repetición, manejo de funciones y arreglos de datos. Este
reto busca evaluar el domino de las estructuras básicas de programación en Java

Reto 1. Índice de masa corporal (IMC)


Andrés, un estudiante de primer semestre de Medicina quiere calcular el nivel de riesgo que tiene
sus familiares de sufrir problemas del corazón. Una persona puede estar en riesgo de sufrir estas
enfermedades dependiendo de su edad y su índice de masa corporal (IMC). La siguiente tabla
presenta los diferentes niveles de riesgo

Edad < 45 Edad ≥ $%


IMC < 22 Bajo Medio
IMC ≥ && Medio Alto

Para calcular el índice de masa corporal (IMC) calculamos el cociente entre el peso del individuo
en kilos y el cuadrado de su altura en metros.

Debido a que se requiere analizar la información de varias personas, la mejor alternativa es


construir un programa que realice los cálculos de forma automática. Camilo le pide ayuda a su
hermana que es ingeniera de software y entre ambos logran definir los requerimientos del
programa utilizando las siguientes historias de usuario.
Historia de usuario Título: Ingresar valores de masa, altura y
Nro. 1
edad
COMO: Usuario
Descripción QUIERO: Ingresar los valores de masa, altura y edad
PARA: Poder calcular el IMC
Criterios de § Los valores de masa deben ingresarse en kilogramos.
aceptación § Los valores de altura deben ingresarse en metros
§ Los valores de edad deben ingresarse en años.
§ Los valores de peso, altura y edad deben ingresarse en una sola línea
separada por un espacio

Historia de usuario Título:


2 Calcular IMC y el nivel de riesgo
Nro.
COMO: Usuario
QUIERO: Poder calcular el IMC de los valores de peso, altura y edad
Descripción
disponibles
PARA: Poder conocer el riesgo de una persona
Criterios de § El IMC debe imprimirse con un número decimal
aceptación § Los valores de masa permitidos están entre 0 y 150
§ Los valores de altura permitidos están entre 0.1 y 2.5
§ Los valores de años permitidos están entre 0 y 110
§ Si alguno de los valores está fuera del rango permitido se debe
imprimir un mensaje de error.

Usted es contratado por camilo para construir un programa en Java que cumpla las funcionalidades
requeridas por Camilo teniendo como referencia las historias de usuario presentadas previamente.

Entrada Cada caso de prueba estará formado por una línea formada por 3
valores separados por un espacio:
La masa de la persona en kilogramos
La altura de la persona en metros
La edad de la persona en Años
Salida El programa imprimirá una línea con dos valores:

§ El IMC calculado con un número decimal


§ El nivel de riesgo actual.
En caso de ingresar algún valor de masa, altura o edad fuera de los
rangos permitidos se debe imprimir la palabra “ERROR”
Reto No.2. Sistema de inventario para la
cafetería de la Sergio Arboleda
Reto 2. Una aplicación para la cafetería de la Sergio Arboleda
Una de las cafeterías de la Sergio Arboleda vende frutas, dulces y algunas bebidas. Con el propósito
de mejorar el control sobre las ventas y el inventario de la tienda, la universidad decide construir
una aplicación en Java que le permita almacenar la información de los productos y calcular algunas
estadísticas sobre el inventario. Con el propósito detener una especificación más clara sobre lo que
debería hacer la aplicación, el administrador de la tienda construyen el siguiente diagrama de casos
de uso:

Usted es contratado por la universidad para desarrollar el sistema de inventario con las
funcionalidades presentadas en el diagrama de casos de uso en el lenguaje de programación Java.
Debido a que esta es una etapa inicial en el desarrollo de la aplicación, la base de datos será
representada temporalmente mediante un HashMap llamado listaProductos que tendrá por
llave el código del producto y por valor una instancia de la clase Producto que tendrá como
atributos código, nombre, precio e inventario. La Tabla 1 presenta los productos
disponibles a la fecha en la cafetería.

código nombre precio inventario


1 Manzanas 5000.0 25
2 Limones 2300.0 15
3 Peras 2700.0 33
4 Arandanos 9300.0 5
5 Tomates 2100.0 42
6 Fresas 4100.0 3
7 Helado 4500.0 41
8 Galletas 500.0 8
9 Chocolates 3500.0 80
10 Jamon 15000.0 10
Tabla 1: Productos disponibles en la tienda

Nota: observe que los nombres de los productos no llevan tildes. Esto se hace a propósito y tiene
que ver con el proceso de calificación automática. Evite colocar tildes en los nombres de los
productos en su código.

Su misión es implementar todas las funcionalidades presentadas en el diagrama de casos de uso.


Para esto es necesario construir 3 métodos que representen las operaciones de agregar,
actualizar y eliminar. Estas funciones deben implementarse en una clase con el nombre
BaseDatosProductos que contenga el HashMap listaProductos.

Adicionalmente, el dueño del almacén desea generar un informe que contenga el valor total del
inventario a la fecha. Este se obtiene multiplicando el precio de cada producto por el inventario
disponible y luego sumando todos los resultados. Este método debe llamarse generarInforme
e implementarse en la clase BaseDatosProductos.

Por ejemplo, al generar el informe con los datos disponibles en la Tabla 1 obtendríamos:

• Valor del inventario: 1014100.0

Para evitar errores a la hora de agregar, actualizar y borrar productos, se debe implementar un
método llamado verificarExistencia que permitirá comprobar si el producto existe o no en
la base de datos. Este método debe implementarse en la clase BaseDatosProductos.

Cada uno de los casos de prueba estará compuesto por dos líneas.

§ La primera línea estará formada por una cadena de texto que identifica
Entrada la operación a realizar. En este caso, las operaciones válidas son:
o ACTUALIZAR
o BORRAR
o AGREGAR
§ La segunda línea estará formada por 4 valores (código, nombre,
precio, inventario) que representan el producto sobre el cual
se quiere realizar la operación.
§ En el caso de la operación ACTUALIZAR la segunda línea debe
contener el código y los nuevos valores del producto
§ En el caso de la operación BORRAR se deben especificar todos los
atributos del producto a eliminar
La salida estará representada por una única línea formada por un único valor:
o Valor del inventario
§ Este valor debe imprimirse después de realizar las operaciones
solicitadas en la entrada de datos.
§ El valor del inventario debe imprimirse con un número decimal
Salida § En caso de solicitar ACTUALIZAR o BORRAR un producto que no
existe (es decir, que el código del producto no se encuentra en la base
de datos), se debe imprimir “ERROR”
§ En caso de solicitar AGREGAR un producto cuyo código ya existe en
la base de datos se debe imprimir “ERROR”

Reto No.3. Estadísticas para nuestra tienda


Reto 3: Estadísticas para nuestra tienda
En este reto continuaremos trabajando con la aplicación de inventario para la tienda de la Sergio
Arboleda desarrollada en el Reto 2. A continuación, se presenta nuevamente el contexto del
problema.

Una de las cafeterías de la Sergio Arboleda vende frutas, dulces y algunas bebidas. Con el propósito
de mejorar el control sobre las ventas y el inventario de la tienda. La universidad decide construir
una aplicación en Java que le permita almacenar la información de los productos y calcular algunas
estadísticas sobre el inventario. La Tabla 1 presenta los productos disponibles a la fecha en el
almacén.

código nombre precio inventario


1 Manzanas 5000.0 25
2 Limones 2300.0 15
3 Peras 2700.0 33
4 Arandanos 9300.0 5
5 Tomates 2100.0 42
6 Fresas 4100.0 3
7 Helado 4500.0 41
8 Galletas 500.0 8
9 Chocolates 3500.0 80
10 Jamon 15000.0 10
Tabla 1: Productos disponibles en la tienda

Nota: observe que los nombres de los productos no llevan tildes. Esto se hace a propósito y tiene
que ver con el proceso de calificación automática. Evite colocar tildes en los nombres de los
productos en su código.

Debido a algunos cambios en el modelo de negocio, la gerencia solicita modificar el informe


generado con la información de los productos. En este caso, se requiere actualizar la función
generarInforme desarrollada en el reto anterior para que muestre:

• El nombre del producto con el precio mayor


• El nombre del producto con el precio menor
• El promedio de los precios de los productos

Por ejemplo, al generar el informe con los datos disponibles en la Tabla 1 obtendríamos:

• Producto precio mayor: Jamon


• Producto precio menor: Galletas
• Promedio de precios: 4900.0
Para evitar errores a la hora de agregar, actualizar y borrar productos, se debe implementar un
método llamado verificarExistencia que permitirá comprobar si el producto existe o no en
la base de datos. Este método debe implementarse en la clase BaseDatosProductos.

Cada uno de los casos de prueba estará compuesto por dos líneas.
§ La primera línea estará formada por una cadena de texto que identifica
la operación a realizar. En este caso, las operaciones válidas son:
o ACTUALIZAR
o BORRAR
o AGREGAR
Entrada § La segunda línea estará formada por 4 valores (código,
nombre, precio, inventario) que representan el producto
sobre el cual se quiere realizar la operación.
§ En el caso de la operación ACTUALIZAR la segunda línea debe
contener el código y los nuevos valores del producto
§ En el caso de la operación BORRAR se deben especificar todos los
atributos del producto a eliminar
La salida estará representada por una única línea formada por tres valores
separados por un espacio:
o Nombre del producto con el precio mayor
Salida o Nombre del producto con el precio menor
o Promedio de precios
§ Estos 3 valores deben imprimirse después de realizar las operaciones
solicitadas en la primera línea
§ Los valores numéricos deben imprimirse con un número decimal
§ En caso de solicitar ACTUALIZAR o BORRAR un producto que no
existe (es decir, que el código del producto no se encuentra en la base
de datos), se debe imprimir “ERROR”. En caso de solicitar
AGREGAR un producto cuyo código ya existe en la base de datos se
debe imprimir “ERROR”

Reto No.4. Consulta a nuestra base de datos


Reto 4: Realizando consultas a nuestra base de datos
En este reto continuaremos trabajando con el sistema de inventario para la tienda de víveres
desarrollado en el Reto 2 y 3. Nuestro objetivo es realizar consultas SQL a una base datos que
contiene la información de los productos disponibles en la cafetería. A continuación, se presenta
nuevamente el contexto del problema.

Una de las cafeterías de la Sergio Arboleda vende frutas, dulces y algunas bebidas. Con el propósito
de mejorar el control sobre las ventas y el inventario de la tienda, la universidad decide construir
una aplicación en Java que le permita almacenar la información de los productos y calcular algunas
estadísticas sobre el inventario. En este momento la aplicación tiene una base de datos que cuenta
con una tabla llamada Productos. La información disponible en la tabla se presenta a continuación.

Tabla: Productos

código nombre precio inventario


1 Manzanas 5000.0 25
2 Limones 2300.0 15
3 Peras 2700.0 33
4 Arandanos 9300.0 5
5 Tomates 2100.0 42
6 Fresas 4100.0 3
7 Helado 4500.0 41
8 Galletas 500.0 8
9 Chocolates 3500.0 80
10 Jamon 15000.0 10
Tabla 1: productos

Con el fin de verificar el correcto funcionamiento de la base de datos, usted debe construir consultas
SQL para obtener la siguiente información. (NOTA: Para este caso solo se utilizará consultas de tipo
SELECT)

1. Obtener el nombre y el inventario de los productos con un precio mayor o igual a 9000 en
orden ascendente por nombre
2. Obtener el promedio de precios de todos los productos en la tabla. Utilice el alias
“promedio” para la respuesta obtenida

3. Obtener el nombre y el precio de todos los productos que comienzan con “A” o con “P” en
orden ascendente

4. Obtener el numero total de productos cuyos precios están entre 3000 y 10000. Utilice el
alias “total” para la respuesta obtenida

5. Obtener valor total del inventario. Este valor se obtiene multiplicando el precio de cada
producto por el inventario disponible y luego sumando todos los resultados. Utilice el alias
“total_inventario” para la respuesta obtenida

Reto No.5. Aplicación MVC para nuestra


tienda
Reto 5: Sistema de inventario usando el patrón MVC y
Spring Data JDBC
En este reto continuaremos trabajando con el sistema de inventario para la tienda desarrollado en
el Reto 2 y reto 3. Nuestro objetivo es lograr implementar de forma completa la aplicación utilizando
el patrón MVC y el Framework Spring Data JDBC. A continuación, se presenta nuevamente el
contexto del problema.

Una de las cafeterías de la Sergio Arboleda vende frutas, dulces y algunas bebidas. Con el propósito
de mejorar el control sobre las ventas y el inventario de la tienda, la universidad decide construir
una aplicación en Java que le permita almacenar la información de los productos y calcular algunas
estadísticas sobre el inventario. Con el propósito detener una especificación más clara sobre lo que
debería hacer la aplicación, el administrador de la tienda construyen el siguiente diagrama de casos
de uso:
Parte 1: Creando una base de datos en MySQL
En la primera parte del reto se debe utilizar MySQL para construir una base de datos que almacene
la información de los productos disponibles en la tienda. La base de datos estará formada por una
única tabla llamada Productos que almacenará: el código, el nombre, el precio y el inventario
disponible. La Tabla 1 presenta los productos disponibles a la fecha.

código nombre precio inventario


1 Manzanas 5000.0 25
2 Limones 2300.0 15
3 Peras 2700.0 33
4 Arandanos 9300.0 5
5 Tomates 2100.0 42
6 Fresas 4100.0 3
7 Helado 4500.0 41
8 Galletas 500.0 8
9 Chocolates 3500.0 80
10 Jamon 15000.0 10
Tabla 1: Productos disponibles en la tienda
Estos registros deben ingresarse a la base de datos utilizando MySQL Workbech. Serán utilizados
más adelante para realizar pruebas.

Parte 2: Implementando el controlador con Spring Data


JDBC

Para esta parte debemos seguir los siguientes pasos:

§ Crear un proyecto en NetBeans llamado inventarioAPP.


§ Incluir Spring Boot y agregar “Spring Data JDBC” y “MySQL Driver” como parte de las
dependencias del proyecto
§ Configurar el archivo “application.properties” con las credenciales a la base de datos.
§ Crear 3 paquetes: modelo, vista y controlador
§ En el paquete modelo, declare una clase llamada Producto que representará la tabla en la base
de datos. No olvide agregar las anotaciones a la clase para definir cuál atributo será la llave
primaria.
§ En el paquete modelo declare una interfaz llamada RepositorioProducto que herede de
CrudRepository<Producto, Long>. Este repositorio nos permitirá utilizar las funciones CRUD sin
ninguna implementación adicional.
§ En el Paquete controlador, declare una clase llamada ControladorProducto. Esta clase tendrá
como atributo una instancia de RepositorioProducto.
§ En la clase ControladorProducto implemente los métodos CRUD para la tabla Productos y un
método informe que obtenga el nombre del producto con el precio mayor; el nombre del
producto con el precio menor; el promedio de precios de todos los productos y el valor total del
inventario a la fecha. Este último se obtiene multiplicando el precio de cada producto por el
inventario disponible y luego sumando todos los resultados.
§ Verifique el correcto funcionamiento de los métodos implementados.

Parte 3: Implementando la Vista con Swing

Luego de implementar el modelo y el controlador con la ayuda de Spring Data JDBC, el dueño del
almacén le entrega el siguiente diseño de la interfaz gráfica (ver figura 2). En el diseño se incluyen
las ventanas emergentes que surgen como resultado de realizar algunas validaciones. Esta interfaz
el la misma construida en el reto 3. El código debe alojarse en el paquete vista declarado
anteriormente (Esta interfaz es la misma desarrollada en el reto 3).
Figura 1: Diseño inicial interfaz gráfica

Por ejemplo, si se trata de agregar un producto y existe algún campo vacío, se deberá generar una
ventana emergente que informe que todos los campos son obligatorios. Cundo se agrega, se borra
o se actualiza un producto se debe generar una ventana informando que el proceso fue exitoso. Al
presionar el botón “Actualizar Producto” se generará una ventana emergente con los
campos a actualizar y presentando la información del producto que se encuentra seleccionado en
la tabla. Cada que se realice una operación sobre los datos de la tabla, esta debe actualizarse
nuevamente de manera automática.

Por otro lado, el botón llamado “Informes” genera una ventana emergente con los datos
obtenidos al evaluar el método generar informe. Para cumplir con el patrón MVC debemos
garantizar que los eventos sean capturados por el controlador y no directamente por la vista.

Finalmente, para facilitar el desarrollo de la aplicación, el dueño del almacén le entrega una lista de
verificación con todas las funcionalidades que se espera desarrollar.

Comprobando las funcionalidades


Descripción de la funcionalidad Completado
1 Crear Base de datos en MySQL
2 Insertar los registros Tabla 1 en la Base de
datos
3 Implementar los métodos acceso a datos
utilizando Spring Data JDBC
4 Implementar función para borrarProducto en el
controlador
5 Implementar función para AgregarProducto en el
controlador
6 Implementar función para ActualizarProducto en
el controlador
7 Implementar la interfaz gráfica con Swing
8 Capturar los eventos generados por los botones
“Agregar Producto”, “Borrar producto” y
“actualizar producto” en el controlador
9 Implementar validación sobre campos vacios para
agregar producto
10 Implementar validación sobre campos vacios para
actualizar producto

Evaluación automática de retos


La validación automática de retos en la plataforma MasterTech tiene definida dos fases de acuerdo
con los lineamientos técnicos del proyecto.

● Realización de pruebas unitarias: Permite validar si un reto especificado para un usuario


cumple con los requerimientos funcionales basado en la definición de un conjunto de casos
de prueba.
● Detección de copia: Permite validar sí el código fuente presentado como solución a un reto
especificado por un estudiante, presenta similitudes con las soluciones presentadas por
otros estudiantes.

A continuación, se explica de forma general la estructura de las dos fases de evaluación automática.

1. Realización de Pruebas Unitarias.

La herramienta de evaluación de pruebas unitarias está soportada en el servicio de Pruebas JOBE


Server(Jobe Engine). Jobe es un servidor que admite la ejecución de trabajos de compilación y
ejecución de varios lenguajes de programación. Entre los que se incluyen, Python, Java, etc.

A continuación, se describen las diferentes consideraciones con el fin que el motor de pruebas
pueda funcionar correctamente.
1. Cada curso define una serie de retos que deben desarrollar los estudiantes.

Imagen 1. Imagen tomada por el autor del documento

2. Cada Reto tiene definido un enunciado y unas instrucciones en los cuales se definen los
requerimientos funcionales, que incluyen diferentes casos de prueba.

Imagen 2. Imagen tomada por el autor del documento

3. Cada Reto tiene configurado un conjunto de intentos determinados que puede ser
ejecutado por los estudiantes.
4. En un reto se puede evaluar algoritmos basado en estructuras de control tales como:
secuencia, decisión, repetición. Incluyendo la definición de lectura de datos vía argumentos
del programa (Entradas a un algoritmo) o en su defecto parámetros definidos a una función.
También, el motor de pruebas de MasterTech soporta la evaluación de diferentes funciones
con sus respectivos parámetros en un único reto. Y de acuerdo, a la definición de plantillas
de código se puede evaluar principios de Programación Orientada a objetos.
5. Para el desarrollo del reto. MasterTech presenta al estudiante un editor de código fuente.
Dicho editor es una versión simplificada del editor Monaco provisto por Microsoft
(https://github.com/microsoft/monaco-editor).
6. Para cada reto el estudiante debe especificar el código fuente en el editor, así mismo debe
cargar un archivo de soporte.

En la siguiente figura se presenta la interfaz gráfica que visualiza un estudiante a la hora de


realizar la solución de un reto.

Imagen 3. Imagen tomada por el autor del documento


Imagen 4. Imagen tomada por el autor del documento

7. El motor de pruebas realiza la evaluación y muestra los resultados, indicando las fuentes de
error. Sí la solución del reto cumple con todos los casos de pruebas se presenta los
resultados y la calificación obtenida.

Imagen 5. Imagen tomada por el autor del documento


8. En caso de que se tengan errores de sintaxis se presentan las fuentes de error

Imagen 6. Imagen tomada por el autor del documento

9. Adicionalmente, si la solución es incorrecta se le especifica los resultados errados.

Imagen 7. Imagen tomada por el autor del documento


10. Por último, el estudiante puede consultar los diferentes intentos realizados.

Imagen 8. Imagen tomada por el autor del documento

Definido lo anterior y con el fin de hacer el proceso de integración con Jobe Engine desde
MasterTech se construyó una librería de integración alineado con los fundamentos del motor.
Específicamente:

1. Para cada reto y casos de prueba, el motor de plantillas de MasterTech fusiona la respuesta
enviada por el estudiante con una plantilla de pregunta definida que incluye la invocación
de los casos de prueba. El resultado es un programa ejecutable.
2. El programa ejecutable se envía al servicio de Jobe Server (Un servicio desplegado sobre la
infraestructura de Google Cloud con la posibilidad de escalar horizontalmente)
3. La salida de ejecución del programa ejecutable es tomada y comparada con los resultados
esperados en cada caso de prueba. Tomando en consideración criterios de coincidencia
exacta.
4. A partir de los resultados obtenidos se realiza el proceso de calificación.
5. Se presenta la respuesta al estudiante indicando los parámetros, la salida esperada y la
salida obtenida. Indicando con color verde los casos exitosos y con rojo los casos no
aprobados.

Técnicamente, en MasterTech cada reto se parametriza tomando en consideración los siguientes


elementos.
Parametrización del Reto
Cada Reto se puede adaptar al método de evaluación (tipo de entradas input o función) y especificar
las pruebas unitarias con su respectiva solución.

Parámetros:

● Enunciado: Enunciado del reto.


● Lenguaje: Lenguaje de programación sobre el cual debe ser resuelto y evaluado el reto.
● Puntaje Requerido: Número de 1 a 100, describe el puntaje mínimo para dar como
solucionado el reto.
● Plantilla: Plantilla del ejercicio, se usará para evaluar el reto, reemplazando
“__codigoestudiante__” por la solución del estudiante y “__codigotest__” por las pruebas
unitarias requeridas.
● ExisteFuncion: Booleano que describe sí en la solución del estudiante debe existir una
función principal, se verá reflejado en la forma en la que se evalúa la solución, de ser false
se crea una función interna para evaluar el código del estudiante.
● funciones: el reto puede contener distintas funciones a evaluar. Debe existir por lo menos
1. Cada función tiene sus propios parámetros y casos de prueba.
○ expresión: nombre que toma la función
○ ponderación: número de 1 a 100, describe el porcentaje de importancia y
evaluación que se le da a la función.
nota: la suma de las ponderaciones del total de las funciones debe dar 100.

○ orden: numero, orden de evaluación.


○ retorna: booleano, se usa para validar si la función retorna la respuesta, o la
imprime durante su proceso, se verá reflejado en la forma en la que se evalúa la
solución.
○ casosPrueba: se pueden tener múltiples casos de prueba, pertenecerán a una única
función, cada caso de prueba contiene sus propios parámetros.
■ salidaEsperada: valor de la solución del caso de prueba, la salida de la
solución deberá ser igual a este parámetro.
■ orden: numero, orden de evaluación.
■ visible: boolean, se usará para mostrar al estudiante, de ser verdadero, los
resultados del caso de prueba, en el caso contrario no se les mostrará el
resultado.
■ parametros: cada caso de prueba puede tener múltiples parámetros de
entrada, contiene sus propios parámetros de configuración.
● nombre: nombre del parámetro.
● typeParametro: tipo de parámetro(‘string’, ‘integer’, ‘float’).
● typeParametroEntrada: tipo de entrada (‘input’, ‘paramFuncion’).
● ValorEntrada: valor de entrada.
Detección de Copia
Con el fin de realizar las tareas de validación de similitud de código se realizó la integración con la
herramienta Jscpd (Copy/paste detector for programming source code) disponible en la dirección
electrónica: https://github.com/kucherenko/jscpd

Jscpd permite encontrar bloques duplicados en múltiples documentos, incluyendo programas


construidos en diferentes lenguajes de programación, tales como python, java, etc..

Jscpd permite a partir de un análisis de código detectar similitudes, a partir de la configuración del
mínimo número de token, máximo número de tokens, mínimo número de líneas y número máximo
número de líneas.

● Min Tokens: Tamaño de bloque mínimo de código en tokens a considerar para considerar
copia de código.
● Min Lines: Tamaño mínimo de líneas para considerar copia de código.

El esquema de funcionamiento desde MasterTech se describe a continuación:

1. Los usuarios al solicitar la validación de código, MasterTech almacena la información de


código fuente en la base de datos.
2. Cuando se cierre un reto, el docente invoca la validación de copia de código.
3. El Motor de validación toma los código fuente de los estudiantes para cada curso y hace la
verificación de acuerdo a los parámetros configurados.
4. Jscpd crea un arreglo (clones), que contienen la detección de similitudes en dos documentos
distintos, duplicationA y duplicationB, con el fragmento copiado, líneas de inicio y fin.
5. Un servicio toma la salida entrega por Jscpd y almacena la información para que
posteriormente, el estudiante pueda consultarla.

Si el estudiante no ha realizado copia. MasterTech presenta la siguiente información


Indicando que no se ha presentado copia en el código entregado. Sin embargo, si el estudiante ha
realizado copia. Se presenta la información detallada de la copia realizada. Indicando código
fuente, posición de copia (línea, columna).
Esta información también estará disponible para que el docente pueda tomar las medidas
pertinentes de acuerdo con las reglas de juego definidas desde el inicio del curso.

Inspección semiautomática de código


Con el fin de realizar las tareas de validación de buenas prácticas de java se realizó la integración
con la herramienta “PMD Source Code Analyzer Project” disponible en la dirección electrónica:
https://pmd.github.io/latest/index.html

PMD permite analizar el código fuente estático, principalmente de lenguaje java y Apex pero admite
seis lenguajes más, encontrando malas prácticas de programación comunes; PMD presenta
comprobaciones integradas (reglas) bien documentadas y es flexible para configurar, eliminar y
agregar nuevas reglas de verificación.

PMD es configurable a través de un archivo xml, en el cual se especifican el conjunto de reglas de


buenas que van a hacer parte de la validación de un documento, como por ejemplo:

<rule ref="category/java/bestpractices.xml/AvoidMessageDigestField"/>
<rule ref="category/java/bestpractices.xml/AvoidStringBufferField"/>
<rule ref="category/java/bestpractices.xml/AvoidUsingHardCodedIP"/>
<rule ref="category/java/bestpractices.xml/CheckResultSet"/>
<rule ref="category/java/bestpractices.xml/ConstantsInInterface"/>
<rule ref="category/java/bestpractices.xml/DefaultLabelNotLastInSwitchStmt"/>
<rule ref="category/java/bestpractices.xml/DoubleBraceInitialization"/>
<rule ref="category/java/bestpractices.xml/ForLoopCanBeForeach"/>

Todas las especificaciones de reglas pueden ser encontradas en la dirección electrónica


https://pmd.github.io/latest/pmd_rules_java_bestpractices.html
Posterior a la ejecución de el servicio de validación podemos indicarle y explicarle al estudiante las
buenas practicas que deben ser mejoras:
{
"beginline": 3.0,
"begincolumn": 24.0,
"endline": 28.0,
"endcolumn": 1.0,
"description": "All methods are static. Consider using a utility class instead. A
lternatively, you could add a private constructor or make the class abstract to silence t
his warning.",
"rule": "UseUtilityClass",
"ruleset": "Design",
"priority": 3.0,
"externalInfoUrl": "https://pmd.github.io/pmd-
6.32.0/pmd_rules_java_design.html#useutilityclass"
}

El esquema de funcionamiento desde MasterTech se describe a continuación:

1. Los usuarios al solicitar la validación de código, MasterTech almacena la información de


código fuente en la base de datos.
2. El Motor de validación realiza el proceso de verificación de pruebas unitarias.
3. El Motor de validación consume el servicio de verificación de buenas prácticas (java)
a. guardar código a analizar en nuevo documento
b. ejecutar análisis PMD sobre el documento
c. eliminar documento creado
d. retorna resultado sobre el análisis
4. El Motor de validación guarda la información que retorna el servicio para que posteriormente,
el estudiante pueda consultarla.

Anexos
Anexo No.1: Presentaciones soporte del Ciclo No.2

En este anexo se adjuntan las presentaciones de soporte para cada una de las sesiones sincrónicas.

Anexo No.2: Bitácora ejercicios adicionales Ciclo No.2

En este anexo se incluyen ejercicios adicionales extra-clase que el estudiante podrá realizar
adicionales a los retos académicos y que permiten afianzar sus habilidades y competencias en
programación.

Anexo No.3: Recursos adicionales de consulta en el proceso de formación Ciclo No.2

En este anexo se incluyen los recursos adicionales de consulta para el proceso de desarrollo
curricular del ciclo No. 1

También podría gustarte