Proyectos: Programación Multihilo y Corrutinas en Kotlin
Cada uno de los siguientes proyectos está diseñado para aplicar los conceptos aprendidos sobre programación multihilo, sincronización y corrutinas en Kotlin. Estos proyectos combinarán conocimientos de gestión de hilos, corrutinas, interfaces gráficas y desarrollo multiplataforma.
Dos de los proyectos deben desarrollarse como aplicaciones Kotlin Multiplatform (KMP) con versiones para escritorio (Windows) y Android. Los otros dos proyectos serán exclusivamente para Android.
Proyecto 1: Monitor de Descargas Paralelas Multiplataforma 🌐
Plataformas: Kotlin Multiplatform (Escritorio Windows + Android)
Descripción
Desarrolla una aplicación multiplataforma que permita gestionar descargas de archivos desde Internet de forma paralela, con control avanzado de velocidad, pausado/reanudación, prioridades y estadísticas en tiempo real. La aplicación debe tener una interfaz gráfica atractiva y moderna tanto en escritorio como en Android.
Funcionalidades obligatorias
Gestión de descargas
-
Añadir descargas:
- Introducir URL manualmente o pegar desde portapapeles
- Detectar automáticamente el nombre y tamaño del archivo
- Asignar categoría (Documentos, Multimedia, Software, Otros)
- Establecer prioridad (Alta, Media, Baja)
-
Control de descargas:
- Iniciar/pausar/reanudar descargas individuales
- Cancelar descargas
- Eliminar descargas completadas o canceladas
- Pausar/reanudar TODAS las descargas simultáneamente
- Límite configurable de descargas simultáneas (1-10)
-
Visualización:
- Lista de descargas activas con:
- Icono según la categoría
- Barra de progreso con porcentaje
- Velocidad de descarga actual (KB/s, MB/s)
- Tamaño descargado / Tamaño total
- Tiempo transcurrido
- Tiempo estimado restante
- Estado (Esperando, Descargando, Pausada, Completada, Error)
- Panel de estadísticas globales:
- Total de archivos descargados en la sesión
- Total de datos descargados (MB/GB)
- Velocidad media global
- Descargas activas / En cola / Completadas
- Lista de descargas activas con:
-
Funcionalidades avanzadas:
- Cola de descargas (las que esperan a ser iniciadas)
- Reordenar prioridades mediante drag & drop
- Límite de velocidad configurable por descarga y global
- Historial de descargas completadas
- Reanudación automática de descargas interrumpidas
- Verificación de integridad con MD5 o SHA-256 (opcional)
Requisitos técnicos de concurrencia
-
Corrutinas:
- Usar
asyncpara gestionar múltiples descargas en paralelo - Implementar
Flowpara emitir progreso de cada descarga - Usar
StateFlowpara el estado global de la aplicación Dispatchers.IOpara operaciones de red y archivosDispatchers.Mainpara actualizaciones de UI
- Usar
-
Sincronización:
- Gestionar acceso thread-safe a la cola de descargas
- Semáforo o mecanismo similar para limitar descargas simultáneas
- Evitar race conditions al actualizar estadísticas globales
- Manejo robusto de cancelaciones y excepciones
-
Gestión de recursos:
- Liberación correcta de conexiones HTTP
- Cancelación cooperativa de corrutinas
- Manejo de memoria eficiente (evitar leaks)
Interfaz gráfica
Versión Escritorio (Compose for Desktop):
- Ventana principal con lista de descargas
- Panel lateral con estadísticas y configuración
- Menú superior con opciones (Añadir, Pausar todas, Configuración)
- Ventanas secundarias para:
- Añadir nueva descarga
- Configuración (límites, directorios, etc.)
- Historial de descargas
- Tema claro/oscuro
Versión Android (Jetpack Compose):
- Pantalla principal con lista de descargas (LazyColumn)
- FloatingActionButton para añadir descargas
- Bottom sheet para detalles de descarga
- Pestañas para: Activas / Completadas / En cola
- Notificación persistente mostrando descargas activas
Entregables específicos
-
Versión Windows:
- Archivo
.exeejecutable (usando jpackage o similar) - O instalador
.msipara instalación completa - Debe ejecutarse sin requerir JVM instalado
- Archivo
-
Versión Android:
- Archivo
.apkpara instalación - Probado en dispositivos con API 26+ (Android 8.0+)
- Archivo
-
Vídeo demostrativo:
- Duración: 5-8 minutos
- Mostrar funcionamiento en ambas plataformas
- Demostrar todas las funcionalidades principales
- Puede estar comentado o con subtítulos explicativos
-
Código fuente:
- Proyecto Kotlin Multiplatform organizado
- Módulos:
shared,desktop,android - README con instrucciones de compilación
Proyecto 2: Simulador de Mercado Bursátil en Tiempo Real 📈
Plataformas: Kotlin Multiplatform (Escritorio Windows + Android)
Descripción
Desarrolla una aplicación multiplataforma que simule un mercado bursátil con múltiples acciones que cambian de precio en tiempo real, permitiendo a los usuarios comprar/vender acciones, gestionar un portfolio, ver gráficos de evolución y recibir alertas de precios. El simulador debe ejecutar operaciones de mercado en paralelo usando hilos y corrutinas.
Funcionalidades obligatorias
Motor de simulación de mercado
-
Generación de precios en tiempo real:
- 15-20 acciones de empresas ficticias con precios iniciales
- Cada acción tiene un hilo/corrutina que actualiza su precio cada 1-3 segundos
- Cambios de precio aleatorios pero realistas (-5% a +5%)
- Factores que influyen en el precio:
- Tendencia general del mercado (alcista/bajista)
- Noticias aleatorias que afectan a sectores
- Volatilidad por acción (algunas más estables, otras más volátiles)
- Horario de mercado: abre/cierra en horarios configurables
-
Información de acciones:
- Nombre de la empresa
- Símbolo (ticker)
- Sector (Tecnología, Energía, Banca, Comercio, Salud)
- Precio actual
- Precio de apertura del día
- Precio máximo/mínimo del día
- Variación en € y en %
- Volumen de transacciones
- Historial de precios (últimos 100 valores)
-
Eventos de mercado:
- Generación aleatoria de noticias que afectan al mercado:
- "Tecnología en auge: +3%"
- "Crisis energética: Energía -4%"
- "Subida de tipos de interés: Banca +2%"
- Los eventos afectan a todas las empresas de un sector simultáneamente
- Mostrar eventos en un panel de noticias en tiempo real
- Generación aleatoria de noticias que afectan al mercado:
Gestión de portfolio
-
Cuenta de usuario:
- Dinero disponible inicial: 10.000€
- Saldo actual
- Valor total del portfolio (cash + acciones)
- Beneficio/pérdida total (€ y %)
- Historial de transacciones
-
Compra/venta de acciones:
- Comprar acciones al precio de mercado actual
- Vender acciones que se poseen
- Validaciones:
- No comprar sin dinero suficiente
- No vender más acciones de las que se poseen
- Comisión por transacción (0.5%)
- Confirmación antes de ejecutar
-
Portfolio de acciones:
- Lista de acciones que se poseen con:
- Cantidad de acciones
- Precio de compra medio
- Precio actual de mercado
- Valor total actual
- Beneficio/pérdida (€ y %)
- Actualización en tiempo real del valor del portfolio
- Ordenar por beneficio, pérdida, valor, etc.
- Lista de acciones que se poseen con:
-
Historial de transacciones:
- Registro de todas las compras/ventas realizadas
- Fecha y hora
- Tipo (compra/venta)
- Acción
- Cantidad
- Precio por acción
- Total
- Comisión
- Exportar a CSV
Análisis y visualización
-
Gráficos:
- Gráfico de líneas con evolución de precio de cualquier acción
- Gráfico de tarta con distribución del portfolio por sector
- Gráfico de barras con beneficios/pérdidas por acción
- Gráfico de evolución del valor total del portfolio
- Actualizaciones en tiempo real
-
Tabla de cotizaciones:
- Lista de todas las acciones disponibles
- Ordenar por: nombre, precio, variación %, sector
- Filtrar por sector
- Código de colores:
- Verde: precio subió
- Rojo: precio bajó
- Gris: sin cambios
- Animación al cambiar precio
-
Alertas de precios:
- Configurar alertas para acciones específicas
- Tipos de alerta:
- Precio sube por encima de X€
- Precio baja por debajo de Y€
- Variación supera Z%
- Notificación visual y sonora cuando salte alerta
- Historial de alertas activadas
Funcionalidades avanzadas
-
Estrategias automáticas (opcional):
- Compra automática si precio baja X%
- Venta automática si beneficio supera Y%
- Stop-loss: venta automática si pérdida supera Z%
-
Estadísticas:
- Mejor/peor transacción
- Acción más rentable
- Tasa de éxito (% transacciones con beneficio)
- Rentabilidad media
-
Persistencia:
- Guardar estado del portfolio en archivos JSON
- Cargar portfolio al iniciar
- Guardar historial de precios
- Exportar/importar portfolio
Requisitos técnicos de concurrencia
-
Hilos y corrutinas:
- Cada acción tiene una corrutina que actualiza su precio periódicamente
- Thread pool para gestionar múltiples actualizaciones
- Corrutina para generar eventos de mercado aleatorios
Flowpara emitir cambios de preciosStateFlowpara estado global del mercadoDispatchers.Defaultpara cálculosDispatchers.Mainpara UI
-
Sincronización:
- ConcurrentHashMap para precios actuales de las acciones
- Acceso thread-safe al portfolio del usuario
- Locks para operaciones de compra/venta (evitar race conditions)
- Evitar deadlocks al actualizar múltiples acciones
- AtomicInteger para IDs de transacciones
-
Manejo de estado:
- Cancelación correcta de todas las corrutinas al cerrar
- Pausar/reanudar simulación
- Acelerar tiempo de simulación (modo rápido)
Interfaz gráfica
Versión Escritorio (Compose for Desktop):
- Ventana principal dividida en secciones:
- Tabla de cotizaciones (izquierda)
- Gráfico de acción seleccionada (centro)
- Portfolio y noticias (derecha)
- Barra superior con:
- Saldo actual
- Valor portfolio
- Beneficio/pérdida
- Estado del mercado (ABIERTO/CERRADO)
- Ventanas secundarias para:
- Comprar/vender acciones
- Configurar alertas
- Ver historial de transacciones
- Estadísticas
- Tema claro/oscuro
Versión Android (Jetpack Compose):
- Pestañas:
- Mercado (lista de acciones con precios)
- Portfolio (mis acciones)
- Gráficos
- Alertas
- FloatingActionButton para comprar/vender
- Notificaciones para alertas de precios
- Swipe para ver detalles de acción
Entregables específicos
-
Versión Windows:
- Archivo
.exeejecutable - O instalador
.msi
- Archivo
-
Versión Android:
- Archivo
.apk
- Archivo
-
Vídeo demostrativo:
- 6-10 minutos
- Mostrar mercado en funcionamiento (precios cambiando)
- Realizar compras y ventas
- Configurar alertas y que salten
- Ver gráficos y estadísticas
- Demostrar en ambas plataformas
-
Código fuente:
- Proyecto Kotlin Multiplatform organizado
- Módulos:
shared,desktop,android
Proyecto 3: Editor de Imágenes con Procesamiento Paralelo 🎨
Plataforma: Solo Android
Descripción
Desarrolla una aplicación Android de edición de imágenes que aplique filtros y transformaciones de forma paralela usando corrutinas, permitiendo previsualizar los resultados en tiempo real y procesar múltiples imágenes simultáneamente con progreso individual. La app debe tener una UI moderna con Jetpack Compose siguiendo Material Design 3.
Funcionalidades obligatorias
Gestión de imágenes
-
Carga de imágenes:
- Seleccionar imágenes de la galería del dispositivo
- Capturar foto con cámara
- Soportar formatos: JPG, PNG
- Vista previa de imagen original
- Historial de imágenes editadas (guardadas localmente)
-
Procesamiento por lotes:
- Seleccionar múltiples imágenes (hasta 10)
- Aplicar los mismos filtros a todas
- Procesamiento paralelo con progreso individual por imagen
- Barra de progreso global e individual
- Posibilidad de cancelar procesamiento
- Estimación de tiempo restante
Filtros y transformaciones
-
Filtros básicos:
- Escala de grises
- Sepia
- Negativo
- Brillo (ajustable con slider -100 a +100)
- Contraste (ajustable con slider -100 a +100)
- Saturación (ajustable con slider -100 a +100)
-
Filtros avanzados:
- Blur (desenfoque) con diferentes intensidades
- Sharpen (enfoque)
- Detección de bordes
- Posterización (reducir número de colores)
- Viñeta (oscurecer esquinas)
-
Transformaciones:
- Rotar 90°, 180°, 270°
- Voltear horizontal/vertical
- Recortar (crop) con proporción libre o fija (1:1, 4:3, 16:9)
- Redimensionar por porcentaje (25%, 50%, 75%) o píxeles
-
Composición:
- Aplicar múltiples filtros en secuencia
- Cada filtro se ejecuta en una corrutina independiente
- Pipeline de procesamiento (filtro1 → filtro2 → filtro3)
- Ver preview de cada paso
Visualización en tiempo real
-
Preview interactivo:
- Aplicar filtros y ver resultado inmediatamente
- Usar corrutinas para no bloquear UI
- Cancelar procesamiento anterior si se cambia de filtro
- Indicador de "procesando..." mientras se aplica filtro
- Comparación lado a lado: original vs. editada (slider)
-
Histograma:
- Mostrar histograma de colores (RGB) de la imagen
- Actualizar en tiempo real al aplicar filtros
- Calcular en background con corrutinas
-
Información de la imagen:
- Resolución (ancho x alto)
- Tamaño en disco (KB/MB)
- Formato
- Reducción de tamaño tras aplicar filtros
Procesamiento paralelo avanzado
-
Estrategia de paralelización:
- Dividir imagen en bloques (tiles) de NxN píxeles
- Procesar cada bloque en una corrutina independiente
- Pool de corrutinas limitado para no saturar CPU
- Usar
Dispatchers.Defaultpara procesamiento intensivo - Recomponer imagen final cuando todos los bloques estén listos
-
Optimización:
- Caché de imágenes ya procesadas (LRU Cache)
- Redimensionar imagen para preview (menor resolución)
- Procesamiento completo solo al guardar
- Liberar memoria cuando no se usan imágenes
-
Gestión de recursos:
- Limitar número de imágenes en memoria (máx. 3-5)
- Comprimir imágenes no visibles
- Cancelar operaciones pendientes al salir
Guardado y exportación
-
Guardar imagen editada:
- Guardar en galería del dispositivo
- Elegir calidad de compresión (baja, media, alta)
- Guardar manteniendo metadatos EXIF (opcional)
- Nombre automático o personalizado
-
Compartir:
- Compartir imagen editada con otras apps
- Compartir múltiples imágenes simultáneamente
-
Exportación por lotes:
- Guardar todas las imágenes procesadas
- Crear ZIP con todas (opcional)
- Progreso de guardado
-
Persistencia local:
- Guardar preferencias de usuario en archivos de preferencias
- Historial de proyectos de edición (archivos JSON)
- No usar BD, solo archivos JSON/XML simples
Requisitos técnicos de concurrencia
-
Corrutinas:
viewModelScopepara operaciones del ViewModelasync/awaitpara procesamiento paralelo de bloques de imagenFlowpara emitir progreso de procesamientoStateFlowpara estado de la UI (imagen actual, filtros aplicados)Dispatchers.Defaultpara procesamiento de imágenesDispatchers.IOpara operaciones de archivosDispatchers.Mainpara actualizaciones de UI
-
Sincronización:
- Mutex para acceso a imágenes compartidas
- Channel para comunicación entre corrutinas de procesamiento
- Evitar race conditions al recomponer bloques de imagen
- Cancelación cooperativa de todas las corrutinas
-
Arquitectura:
- MVVM (Model-View-ViewModel)
- Repository pattern para acceso a imágenes
- Use cases para aplicar filtros
- No usar inyección de dependencias (opcional)
-
Persistencia:
- SharedPreferences o DataStore para configuración
- Archivos JSON para historial de proyectos
- Archivos de imagen en la carpeta de la app
Interfaz gráfica (Jetpack Compose)
-
Pantallas principales:
- Galería de imágenes (grid)
- Editor de imagen individual
- Procesamiento por lotes
- Historial de proyectos
- Configuración
-
Componentes:
- Material 3 Design System
- TopAppBar con título y acciones
- Bottom sheet para selección de filtros
- Sliders para ajustar parámetros de filtros
- Progress indicators (linear y circular)
- Diálogos para confirmaciones
- Animaciones al cambiar entre imagen original y editada
-
UX:
- Feedback visual para cada filtro aplicado
- Estados de carga mientras se procesa
- Gestos: pinch-to-zoom, swipe para comparar antes/después
- Deshacer/rehacer cambios (stack de acciones)
- Indicador de rendimiento (FPS, tiempo de procesamiento)
Entregables específicos
-
Archivo
.apkpara instalación directa -
Vídeo demostrativo (6-10 minutos):
- Carga de imágenes
- Aplicación de diferentes filtros
- Demostración de procesamiento paralelo (múltiples imágenes)
- Comparación de tiempos (1 imagen vs. múltiples en paralelo)
- Preview en tiempo real
- Guardado y compartir
-
Código fuente bien organizado:
- Estructura clara de paquetes
- Algoritmos de filtros comentados
- README con instrucciones y explicación de paralelización
Proyecto 4: Sistema de Simulación de Tráfico Urbano 🚦
Plataforma: Solo Android
Descripción
Desarrolla una aplicación Android que simule el tráfico de una ciudad con múltiples vehículos, semáforos y cruces, usando hilos y corrutinas para gestionar el movimiento independiente de cada entidad. La simulación debe ser visual, en tiempo real y permitir configurar diferentes escenarios de tráfico.
Funcionalidades obligatorias
Simulación de tráfico
-
Mapa de la ciudad:
- Rejilla de calles (por ejemplo, 10x10 bloques)
- Múltiples tipos de calles:
- Calles horizontales y verticales
- Cruces (intersecciones)
- Rotondas (opcional)
- Vista personalizada de Canvas para dibujar
- Zoom y pan para explorar el mapa
-
Vehículos:
- 20-50 vehículos simultáneos en la simulación
- Cada vehículo en un hilo/corrutina independiente
- Tipos de vehículos:
- Coches (velocidad media)
- Autobuses (velocidad baja, mayor tamaño)
- Motos (velocidad alta)
- Ambulancias (prioridad en semáforos)
- Propiedades de cada vehículo:
- Posición actual (x, y)
- Velocidad
- Destino (punto de llegada)
- Color identificativo
- Ruta a seguir
- Comportamiento realista:
- Seguir calles (no atravesar edificios)
- Parar en semáforos en rojo
- Evitar colisiones con otros vehículos
- Respetar distancia de seguridad
-
Semáforos:
- 5-10 semáforos en cruces
- Cada semáforo con un hilo/corrutina independiente
- Ciclos automáticos:
- Verde → Amarillo → Rojo → Verde
- Tiempos configurables (5s, 10s, 15s)
- Sincronización de semáforos en cruces:
- Cuando uno es verde, el perpendicular es rojo
- Semáforos con prioridad para ambulancias
- Indicador visual del estado (colores)
-
Lógica de movimiento:
- Cada vehículo calcula su ruta al destino
- Algoritmo simple de pathfinding (por ejemplo, seguir eje X, después Y)
- Actualización de posición cada X milisegundos
- Detección de obstáculos (semáforos, otros vehículos)
- Espera si hay obstáculo
- Reasignación de destino cuando se llega
Configuración de la simulación
-
Parámetros configurables:
- Número de vehículos (5-100)
- Velocidad de la simulación (0.5x, 1x, 2x, 5x)
- Tiempo de ciclo de los semáforos
- Densidad de tráfico (baja, media, alta)
- Activar/desactivar colisiones
- Activar/desactivar semáforos (modo caos)
-
Escenarios predefinidos:
- Tráfico ligero (10 vehículos)
- Hora punta (50 vehículos)
- Emergencia (ambulancias con prioridad)
- Sin semáforos (comprobar caos)
-
Controles de la simulación:
- Iniciar/pausar/reanudar
- Resetear simulación
- Modo paso a paso (avanzar frame a frame)
- Acelerar/desacelerar tiempo
Estadísticas y visualización
-
Estadísticas en tiempo real:
- Número de vehículos activos
- Vehículos en movimiento vs. parados
- Velocidad media del tráfico
- Tiempo medio de espera en semáforos
- Número de colisiones evitadas
- Vehículos que llegaron al destino
- Tiempo total de simulación
-
Visualización del mapa:
- Vista superior (bird's eye)
- Dibujar calles con colores
- Dibujar vehículos con forma y color
- Dibujar semáforos con color actual (R/Y/G)
- Animación fluida del movimiento
- Rastro de vehículos (opcional)
- Minimap para orientación
-
Detalles de entidades:
- Clic en un vehículo para ver:
- ID
- Tipo
- Velocidad actual
- Destino
- Tiempo en movimiento
- Distancia recorrida
- Clic en un semáforo para ver:
- Estado actual
- Tiempo hasta cambio
- Vehículos esperando
- Clic en un vehículo para ver:
-
Gráficos:
- Gráfico de líneas con velocidad media a lo largo del tiempo
- Gráfico de barras con vehículos por estado (moviendo, parado, llegado)
- Gráfico de densidad de tráfico por zona
Gestión de eventos
-
Eventos aleatorios:
- Accidente: 2 vehículos colisionan, bloquean calle por X segundos
- Obras: cerrar una calle temporalmente
- Congestión: aumentar número de vehículos en una zona
- Vehículo de emergencia: ambulancia con prioridad
-
Notificaciones:
- Notificar cuando hay accidente
- Notificar cuando tráfico está congestionado
- Alertas de colisiones
Requisitos técnicos de concurrencia
-
Hilos y corrutinas:
- Cada vehículo en una corrutina independiente
- Cada semáforo en una corrutina independiente
- Corrutina maestra para actualizar UI (60 FPS)
Dispatchers.Defaultpara lógica de movimientoDispatchers.Mainpara dibujar en Canvas- Flow para emitir cambios de estado
-
Sincronización:
- ConcurrentHashMap para posiciones de vehículos
- Locks para acceso a cruces (evitar 2 vehículos en el mismo punto)
- Semaphore para limitar vehículos en zonas críticas
- Evitar deadlocks cuando múltiples vehículos esperan
- AtomicInteger para IDs de vehículos
-
Detección de colisiones:
- Comprobar distancia entre vehículos
- Bloquear movimiento si hay colisión inminente
- Thread-safe al acceder a las posiciones
-
Persistencia:
- Guardar configuración de la simulación en SharedPreferences
- Guardar estadísticas de sesiones previas en archivos JSON
- Exportar registro de simulación a CSV
Interfaz gráfica (Jetpack Compose + Canvas)
-
Pantallas:
- Configuración inicial
- Visualización de la simulación (Canvas)
- Panel de estadísticas
- Historial de simulaciones
- Configuración avanzada
-
Componentes:
- Vista personalizada de Canvas para mapa
- Sliders para configurar parámetros
- Botones de control (play, pause, reset)
- Panel de estadísticas en overlay
- Diálogo de detalles al clic en entidad
-
Material Design 3:
- Tema claro/oscuro
- Animaciones fluidas
- Indicadores de estado
Entregables específicos
-
Archivo
.apkpara instalación -
Vídeo demostrativo (6-10 minutos):
- Configuración de escenarios
- Simulación con pocos vehículos (ver comportamiento detallado)
- Simulación con muchos vehículos (hora punta)
- Mostrar semáforos funcionando
- Demostrar eventos (accidente, emergencia)
- Mostrar estadísticas y gráficos
- Comparar escenarios con y sin semáforos
-
Código fuente:
- Algoritmos de movimiento y pathfinding comentados
- Explicar sincronización de semáforos y vehículos
- README con instrucciones
Formato de Entrega y Documentación
Documentación obligatoria
Todos los proyectos deben incluir una memoria técnica en formato PDF que cumpla con los formatos establecidos en el módulo y que contenga los siguientes apartados:
Estructura de la memoria
-
Portada:
- Título del proyecto
- Nombre del alumno/a
- Fecha de entrega
- Módulo: Programación de Servicios y Procesos
-
Índice paginado
-
Apartados principales: (los apartados específicos serán completados por el/la docente)
-
Anexos:
- Capturas de pantalla de la aplicación
- Diagramas de arquitectura
- Manual de usuario básico
Entregables técnicos
Para proyectos multiplataforma (1 y 2):
-
Versión Windows:
- Archivo
.exeejecutable (usando jpackage, launch4j o similar) - O instalador
.msi/.exepara instalación completa - La aplicación debe ejecutarse sin requerir que el usuario instale JVM u otras dependencias
- Archivo
-
Versión Android:
- Archivo
.apkpara instalación directa - Probado en dispositivos con API 26+ (Android 8.0 o superior)
- Archivo
-
Vídeo demostrativo:
- Duración: 5-10 minutos
- Debe mostrar el funcionamiento en ambas plataformas (Windows y Android)
- Demostrar todas las funcionalidades principales especificadas
- Puede estar comentado en voz o con subtítulos explicativos
- Formato: MP4, MOV o similar
Para proyectos Android (3 y 4):
-
Archivo
.apk:- APK de depuración o release (con firma habilitada)
- Indicar requisitos mínimos (API level, permisos)
-
Vídeo demostrativo:
- Duración: 5-10 minutos
- Mostrar todas las funcionalidades principales
- Puede estar comentado o con subtítulos
Código fuente
-
Repositorio Git:
- Código organizado con estructura clara de paquetes/módulos
- README.md con:
- Descripción del proyecto
- Tecnologías utilizadas
- Instrucciones de compilación
- Instrucciones de ejecución
- Dependencias necesarias
- Capturas de pantalla
-
Calidad del código:
- Comentarios en funciones y clases principales
- Nombres de variables y funciones descriptivos
- Seguir buenas prácticas de Kotlin
- Organización lógica en capas (UI, lógica, datos)
Plazos y consideraciones
- Fecha límite de entrega: (será establecida por el/la docente)
- Formato de entrega: (ZIP o repositorio Git según indicaciones)
- Consultas sobre los proyectos: (horario de tutorías)
- Es obligatorio que las aplicaciones funcionen correctamente en ambas plataformas especificadas
- Trabajos que no cumplan los requisitos mínimos no serán evaluados
- Comienza por el proyecto más sencillo para ti
- Planifica bien la arquitectura antes de comenzar a codificar
- Prueba con frecuencia en ambas plataformas (para KMP)
- No dejes la documentación para el final
- Pide ayuda si tienes dificultades con algún concepto
Todos los proyectos deben ser trabajo original. El uso de código copiado de Internet sin citar o trabajos hechos por otras personas resultará en una calificación de 0.