Activa JavaScript para disfrutar de los vídeos de la Mediateca.
TFG
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Presentación del Trabajo Fin de Grado de Formación Profesional
Buenos días, voy a presentar mi TFG, que es sobre un supermercado que contiene varios alimentos con sus categorías, una cuenta, la cesta, favoritos, un buscador con sus diferentes categorías y descuentos.
00:00:01
Entonces, hay cinco secciones, cinco materias que yo escogí, que es dispositivos móviles, entornos de desarrollo, asesoratos, bases de datos y programación de procesos.
00:00:19
Entonces, la primera categoría, programación de dispositivos móviles.
00:00:31
Gestión de desplazos.
00:00:37
La primera interacción debe ser fluida e implementar una gestión asíncrona para la transición inicial.
00:00:38
En las diferentes diapositivas, yo voy poniendo ejemplos con sus códigos que están dentro de las carpetas de proyecto y en GitHub.
00:00:47
Los flujos de pantallas, yo tengo diferentes pantallas que cuando yo voy a mi página principal y voy a un buscador
00:00:57
Cuando yo selecciono un alimento me muestra la información por ejemplo de una manzana
00:01:06
Me muestra cuantos kilos me van a vender aquella manzana
00:01:14
Y en relación con ellas también me aparecen sugerencias de diferentes alimentos
00:01:17
Vale, otro ejemplo de código es el método que permite que el checkout reconstruya el estado financiero de la compra sin volver a consultar la base de datos.
00:01:28
Eficiencias en listas. ¿Qué pasa? Que cuando yo selecciono diferentes alimentos no tienen
00:01:43
que estar duplicados. Si yo selecciono una manzana y vuelvo a seleccionar otra porque
00:01:52
yo quiero, no tiene que estar duplicado y me mostraría aquí que he comprado dos manzanas.
00:01:57
El adaptador vincula los datos de los modelos con la UIR de forma reactiva.
00:02:05
Y la librería, ¿qué pasa? Que yo al tener mi carpeta con diferentes imágenes para las diferentes categorías que tienen los alimentos, en vez de utilizar URL, yo he utilizado Glide para gestionar el trabajo para que no sea tan pesado.
00:02:13
La descarga ocurre en un hilo separado de la interfaz, y las imágenes ya descargadas se guardan en el disco del móvil para no consumir datos.
00:02:32
En un principio tuve problemas con ello porque hay algunas imágenes que se me cargaban y otras no.
00:02:40
Pero la mayoría sí estuvo funcionando.
00:02:49
Vale, la búsqueda reactiva. ¿Qué pasa con ello?
00:02:53
Que en la sección de categorías, cuando yo busco un plátano, una manzana, agua, una botella de agua, lo que sea,
00:02:56
Me salta un sistema de filtrado que responde a cada pulsación detectada del usuario
00:03:05
Dispara un algoritmo con su búsqueda y actualiza de forma automática con la nueva lista filtrada
00:03:15
El filtrado se realiza sobre la lista original en memoria para asegurar velocidad máxima
00:03:24
Siempre actualiza la vista con los resultados
00:03:33
vale la gestión de inputs
00:03:36
que pasa con esto
00:03:39
que yo al iniciar sesión
00:03:40
me tiene que dar
00:03:43
un mensaje
00:03:45
si yo no tengo registrado
00:03:46
una cuenta de correo
00:03:49
y
00:03:50
igual con la contraseña
00:03:51
que pasa con ello que la pantalla que yo
00:03:54
les voy a mostrar después tiene
00:03:56
inicio de sesión y si yo no tengo
00:03:58
ninguna cuenta vinculada en su momento
00:04:00
pues puedo
00:04:02
registrarlo con otro. Vale, otra categoría que es desarrollo de
00:04:04
interfaz. Sistema de diseño, arquitectura, experiencia.
00:04:12
Vale, el concepto de flashback. ¿Qué pasa con ello? Que yo he utilizado diferentes
00:04:18
fondos y componentes para generar capas visuales que se vean en link.
00:04:22
Uso el comparativo de diferentes diseños para captar la atención del usuario.
00:04:28
La jerarquía plana XML. ¿Qué pasa con ello? Que tiene 21 archivos de diseño XML y ha priorizado arquitectura sin vista sanidad.
00:04:35
Los elementos se posicionan de forma relativa entre ellos y elimina necesidad de capas extra.
00:04:47
La tarjeta de producto. ¿Qué pasa con ello? Que cada ítem del catálogo es un componente desacoplado diseñado con bordes suaves que transmiten modernidad.
00:04:55
Cada una de ellas tiene su diferente tamaño, pero que se acopla al tamaño de diferentes dispositivos que pueden abrirlo en tablets, ordenadores, móviles, se acopla.
00:05:05
acopla. Distribución en el grid, es lo que expliqué
00:05:19
antes. Configurado en las columnas, las categorías que están en la tercera lista, es completa
00:05:23
la pantalla. Y cuando yo selecciono, que cuando ven aquí alimentos tienen más, los kilos
00:05:31
y cuánto vale cada alimento. El feedback, manejo nativo de estados de error
00:05:38
visual en campos de login, mostrando
00:05:45
advertencias directas en rojo
00:05:47
sin romper el diseño o uso
00:05:49
de layouts específicos o
00:05:52
ilustraciones. Ayuda
00:05:53
con el carrito no posee ítems
00:05:55
evita pantalla espacía
00:05:57
como había explicado anteriormente.
00:05:59
Otra categoría que sería
00:06:03
acceso a datos.
00:06:05
Vale.
00:06:11
He sustituido
00:06:11
SQLite clásico
00:06:13
por la librería oficial Room.
00:06:15
me pareció mucho más fácil
00:06:18
para brindar la base de datos local.
00:06:20
No hay SQL, hay seguridad,
00:06:24
es asíncrono, hay GreenCode.
00:06:25
Interfaz DAO.
00:06:30
Esta interfaz actúa como traductor automático
00:06:32
entre Kotlin y SQL.
00:06:35
Si el usuario añade un producto
00:06:37
que ya está en el carrito,
00:06:39
actualiza los datos automáticamente
00:06:41
sin bloquear la base de datos.
00:06:43
¿Qué pasó con ello?
00:06:44
porque en un principio cuando yo quería añadir datos era como que no me sobrescribía,
00:06:45
sino que me duplicaba y me daba muchos errores.
00:06:51
Concurrencia con corrutinas.
00:06:55
Las operaciones de disco son lentas.
00:06:58
Si las ejecutamos en el video principal, que sería en el mail, la app se congela.
00:07:01
Control de conexiones.
00:07:08
Instanciar repetidamente una base de datos local genera fugas de memoria
00:07:09
bloqueos críticos de archivos
00:07:13
¿qué pasa? que yo he utilizado
00:07:15
el patrón siglento
00:07:18
toda la aplicación comparte de forma segura
00:07:19
la misma conexión
00:07:22
patrón data mapper
00:07:23
mapeo de tipos
00:07:26
¿qué pasó con ello? que yo también utilicé
00:07:27
en la búsqueda de
00:07:30
de
00:07:31
alimentos, también puse para filtrar
00:07:33
si yo pongo una B me filtra
00:07:36
todos los alimentos que empiezan por B
00:07:38
si pongo una M
00:07:39
pues en fin, trae todos los elementos que empiezan por M.
00:07:42
Otra categoría que sería las bases de datos, diseño del modelo relacional,
00:07:45
SQL, motores de integridad física y optimización.
00:07:50
Vale, otra categoría, el esquema relacional relativo.
00:07:59
Aquí están diferentes esquemas que se relacionan de finalidad.
00:08:04
En finalidad, un producto de alimentación del catálogo de Day Market puede estar incluido en múltiples líneas de carritos de compra.
00:08:09
El ID, el cart ID, el name, el price.
00:08:17
Vale, estructuras de datos física.
00:08:22
¿Qué pasa con esto? Que yo creé una tabla de productos que tiene su ID, un nombre, el precio, la imagen.
00:08:25
tiene tipado restringido
00:08:31
campos críticos protegidos
00:08:34
a nivel del motor de datos
00:08:36
para impedir que registros vacíos rompan
00:08:37
la lógica de la
00:08:39
antes de todo esto
00:08:40
está metido
00:08:46
en el github en todo el
00:08:46
trabajo, tiene el sql
00:08:49
tiene sus diferentes carpetas
00:08:51
y claves foráneas de integridad
00:08:53
también crea
00:08:56
una tabla que tiene
00:08:58
el producto id
00:08:59
lo que expliqué en un principio con esas dos tablas
00:09:00
también se juntan
00:09:03
tienen una relación
00:09:05
se vincula de manera estricta
00:09:06
con la columna
00:09:09
garantía automatizada
00:09:10
si eliminamos un producto del supermercado
00:09:13
se pulga de forma inmediata y automática
00:09:15
de todos los carritos de compra existentes
00:09:17
¿qué pasa también con ello?
00:09:20
que en un principio lo que me daba
00:09:21
el problema era que yo al seleccionar
00:09:23
diferentes alimentos
00:09:25
y al meterme yo
00:09:27
en la aplicación
00:09:29
se borraba
00:09:32
entonces tuve que
00:09:33
actualizar y tuve que
00:09:36
guardar esos datos por medio de
00:09:38
de las tablas
00:09:40
búsquedas en tiempo constante
00:09:41
¿qué pasa con ello? que las aplicaciones
00:09:45
móviles realizan un escáner completo
00:09:47
de la tabla, ralentiza las
00:09:49
búsquedas cuando el volumen
00:09:51
de esto crece
00:09:53
diferentes personas cuando se unen a la
00:09:54
aplicación
00:09:57
crean un problema
00:09:58
y ralentiza la aplicación.
00:10:01
Y automatización con triggers.
00:10:04
Asegurar que la base de datos
00:10:08
se defienda sola
00:10:09
entre corrupciones de datos
00:10:10
o fallos de código externo.
00:10:13
Implementando triggers.
00:10:15
Vale, y otra categoría
00:10:19
que sería la programación
00:10:20
de procesos y servicios.
00:10:21
Esto es concurrencia avanzada,
00:10:23
sincronización,
00:10:25
comunicación asíncrona,
00:10:26
eficiente. Vale, condiciones de carrera. ¿Qué significa
00:10:27
ello? Es con ello que también crea problemas si otra persona
00:10:33
accede a la aplicación y yo cuando, por ejemplo, señalo la
00:10:38
manzana y esa misma persona señala ese alimento, crea y
00:10:45
ralentiza la aplicación. El peligro en D-Market radica en
00:10:50
los usuarios intentan decrementar la última unidad disponible de un producto de alimentación
00:10:55
exactamente al mismo milisegundo. Y claro, con ello solucionamos el problema.
00:11:01
Sección crítica segura. Implementación de un cerrojo de exclusivo mutuo para reserializar
00:11:09
el acceso a la sección crítica de datos. ¿Qué pasa con ello? Que yo cuando realizo
00:11:17
la compra, me aparece una notificación
00:11:22
en el móvil de que me dice compra
00:11:24
procesada.
00:11:26
Planificación,
00:11:29
que sería con
00:11:30
asignación inteligente de hardware
00:11:31
del dispositivo móvil, dividiendo
00:11:34
los flujos en torno a la ejecución
00:11:36
aislada. Sonexión
00:11:38
por sockets.
00:11:42
Establecimiento de canales
00:11:44
bidireccionales permanentes para mantener
00:11:45
la sincronía del mercado.
00:11:47
Flujos de datos flow.
00:11:55
Sustituye.
00:11:56
sustitución a las perjudiciales
00:11:57
de esperas activas por suscripciones
00:12:00
pasivas o sincronas basadas
00:12:02
en el patrón
00:12:04
transmisión en suspensión
00:12:05
vale aquí son en que en el libro de datos
00:12:07
se emite resultados parciales
00:12:10
del filtrado de búsqueda a medida
00:12:12
que el usuario escribe refrescando
00:12:14
la OI sin parpadear
00:12:16
mensajería en segundo plano
00:12:17
¿qué pasa con ello?
00:12:22
que yo cuando realizo la compra
00:12:24
me van a aparecer notificaciones
00:12:26
de cuánto tiempo me toca esperar para que llegue a la dirección que yo puse en la cuenta
00:12:27
cuando se registra con su cuenta personal.
00:12:38
Vale, implementación de servicios independientes del ciclo de vida de la interfaz visual mediante
00:12:44
de intervención de interbloqueos
00:12:50
¿qué pasa con ello? que el mayor peligro
00:12:56
de la concurrencia es el
00:12:58
bloqueado recíprocamente
00:12:59
internamente
00:13:02
riesgo mediante políticas drásticas
00:13:03
toda petición crítica
00:13:07
de adquisición del multa está gobernada
00:13:08
por un gran de los mil
00:13:10
milisegundos
00:13:12
aunque sea tan poco tiempo
00:13:13
si han habido un montón de
00:13:16
problemas que
00:13:18
cuando seleccionas algún alimento
00:13:19
porque intenté con dos móviles
00:13:24
cuando yo seleccionaba un alimento
00:13:27
que sigo poniendo el mismo ejemplo
00:13:30
es la manzana
00:13:32
y otra persona selecciona a la misma vez
00:13:33
y queda bloqueado por milisegundos
00:13:36
pero en comparación de que pueda ir
00:13:37
más rápido el dispositivo móvil
00:13:39
estaría mejor
00:13:41
seguridad extremo a extremo
00:13:43
¿Qué pasa con ello?
00:13:47
Que cuando se crea una cuenta personal
00:13:51
Ese mensaje llega al dispositivo móvil
00:13:54
Al correo electrónico
00:14:00
Cuando yo también quiero cambiar una contraseña
00:14:01
Me llega un código
00:14:04
Ese código tengo que ponerlo en la aplicación
00:14:05
Y entra para ver la categoría
00:14:08
El menú principal
00:14:11
Y ya está ya
00:14:12
vale, entro a la aplicación
00:14:15
esto es una cuenta ya creada
00:14:19
entonces me meto directamente
00:14:24
es una cuenta que ya está registrada
00:14:26
pero para explicarles y crearme otra cuenta
00:14:36
cierro, la creo
00:14:40
otro nuevo usuario, pongo Dayana145
00:14:43
sigo rellenando los datos
00:14:49
y entro ¿qué pasa con ello? que aquí en la parte de arriba donde está el muñequito
00:14:59
me pone mi nombre de usuario y mi nombre de correo electrónico en detalles es que yo
00:15:05
puedo cambiar mi usuario y pongo 198 y aquí igual en el correo 198 guardo mis cambios
00:15:14
voy a una diferente categoría que es el más o cuando voy a comprar y se me
00:15:24
cambia el usuario y el correo electrónico
00:15:31
vale ahora con una cuenta eso lo explicaré después en un principio la
00:15:35
página principal sería buscando productos de lo que quiera una manzana
00:15:40
en un plátano lo que sea vale qué pasa con la
00:15:46
categoría de después para obtener un 20 por ciento tiene que ser una compra que
00:15:53
sea elevada a 15 dólares entonces para obtener mi código de
00:15:58
promoción de descuento es guardando pero yo tengo que añadir varios alimentos
00:16:04
entonces voy a añadir pollo que sería como tres de estos
00:16:11
y van a estar en mi categoría de la sexta a ella sería 17 con 97 en total le daría
00:16:17
check out qué pasa con ello que también me pone en un principio mi tarjeta en mi
00:16:25
tarjeta bancaria y el código de descuento yo lo aplico por
00:16:31
el momento todo bien y se ha realizado la compra qué pasa que en esta
00:16:39
categoría donde pone la cuenta mis órdenes
00:16:43
ya se han realizado en los diferentes pedidos
00:16:46
también que puedo hacer con ello cancelar me va a preguntar si realmente
00:16:52
quiero cancelar la orden que yo realicé y le pongo cancelar salgo de la página y
00:16:57
otra vez pongo el orden y me sale cancelado cada uno tiene su id
00:17:03
y voy a realizar otra compra pero con las ofertas exclusivas que tienen
00:17:09
descuentos y tienen la parte de arriba un
00:17:14
un descuento por cada alimento entonces voy a añadir
00:17:18
un zumo bueno 4 y le doy a checa no hace falta que yo añada el código de
00:17:24
promoción porque no es elevado a 15 confirmar
00:17:32
la compra y me voy a las órdenes entonces ahí está realizada después vamos a la sección de
00:17:37
la cuenta las notificaciones realmente cuando me llega si tengo internet si tengo nuevas
00:17:47
promociones me llegaría en la parte de arriba vale después en la parte de best selling me
00:17:53
aparece diferentes alimentos en los que son los que se compran normalmente
00:18:06
y hay diferentes sus diferentes imágenes que son remotas y se van cargando a
00:18:15
añadir al buscar que esta es otra sección nueva que son las categorías de
00:18:32
cada alimento pues también puedo buscarlo aquí ve vegeta bols
00:18:36
y me saldría aquí
00:18:41
Vale, entonces me voy a meter en cada sección
00:18:45
Me salen todas completas
00:18:49
Como pueden ver cuando yo tengo un descuento
00:18:51
Que es por ejemplo la manzana o la banana
00:18:53
Tiene tachada los precios en la parte de arriba
00:18:55
Yo puedo seleccionar, puedo hacer lo que sea
00:18:59
Y al tener mi código de promoción
00:19:03
Pues se va quitando por el descuento
00:19:06
Puedo eliminar mis alimentos si no los quiero
00:19:12
Sus diferentes categorías con las diferentes fotos
00:19:18
Y no mucho más, después de una categoría de la cuenta
00:19:22
Puedo meterme en el GPS donde estoy localizada
00:19:35
Y abajo pone los días en los que está abierta la tienda
00:19:39
De lunes a viernes de 8 a 9
00:19:48
El sábado de 9 a 8
00:19:50
Y los domingos de 10 a 6
00:19:52
Después puede añadir su calle para cuando le llegue el pedido
00:19:54
Y también la puedo cambiar
00:20:07
Puedo poner otra calle distinta
00:20:10
Y la puedo guardar
00:20:14
Después también aquí en mi tarjeta de crédito también puedo cambiarla
00:20:19
Puedo poner 700 y todo eso
00:20:24
Puedo poner 420 y ya ahí se me cambiaría por completo
00:20:26
Y no mucho más la verdad
00:20:33
después cuando yo quito el internet
00:20:37
lo malo de esto es que
00:20:40
no, cuando yo cierro
00:20:55
la aplicación
00:20:57
no se mantiene abierto porque yo puse
00:20:58
permitir notificaciones en mi móvil
00:21:03
y no guardé la contraseña
00:21:05
entonces por eso es que se me cierra manualmente
00:21:06
pero
00:21:09
lo que yo quería indicar es que cuando
00:21:09
no tengo internet no se puede añadir
00:21:13
alimentos, le pone
00:21:15
un mensajito de error
00:21:17
y ya, no mucho más
00:21:18
- Idioma/s:
- Materias:
- Programación
- Etiquetas:
- Trabajo Fin de Grado, Desarrollo de Aplicaciones Multimedia
- Autor/es:
- Dayana Estefanía Brito Avalos
- Subido por:
- Dayana Estefanía B.
- Moderado por el profesor:
- Lucia San Miguel López (lucia.sanmiguel)
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 15
- Fecha:
- 18 de mayo de 2026 - 23:46
- Visibilidad:
- Público
- Enlace Relacionado:
- https://mediateca.educa.madrid.org/
- Centro:
- IES FRANCISCO DE QUEVEDO
- Duración:
- 21′ 23″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1280x720 píxeles
- Tamaño:
- 810.36 MBytes