Tabla de contenidos
Los resultados de aprendizaje a obtener en este curso son:
El estudiante debe ser capaz de diseñar un sistema software utilizando el lenguaje de programación C. El sistema debe contener estructuras de datos no triviales, gestión dinámica de memoria y utilizar técnicas de ingeniería para traducir un conjunto de restricciones de alto nivel, derivadas de un hipotético escenario industrial, en una aplicación robusta.
El estudiante debe ser capaz de utilizar con soltura las siguientes herramientas utilizadas en entornos industriales: un compilador con las opciones para generar diferentes versiones para depuración y analizar los mensajes que se obtienen mientras se desarrolla una aplicación, un entorno de desarrollo integrado para implementar el sistema software, un programa de control de versiones para manejar los flujos de desarrollo, un compilador cruzado para crear versiones de una aplicación para los diferentes dispositivos y realizar experimentos de compatibilidad, y herramientas de análisis del comportamiento de memoria en una aplicación.
El estudiante debe ser capaz de: trabajar de forma efectiva en un equipo en la ejecución de un proyecto consistente en el diseño de una aplicación software para un dispositivo móvil, generar ideas de forma colaborativa en un equipo y optimizar su rendimiento para cumplir con los requisitos del proyecto, y dividir las tareas de forma efectiva entre los miembros del equipo.
El estudiante debe ser capaz de: aprender de forma autónoma, manipular las diferentes fuentes de información, generar información concisa sobre las tareas conseguidas, manejar el tiempo de trabajo personal, y presentar de forma efectiva los resultados derivados de su trabajo.
Los siguientes objetivos se agrupan en los cuatro resultados de aprendizaje descritos en la sección anterior.
Objetivo A
Conocer las estructuras básicas de C y listar las diferencias entre los lenguajes de programación C y Java con respecto a los tipos de datos y a gestión de memoria.
Enumerar los ámbitos de validez de las variables y funciones en C.
Explicar el funcionamiento y la gestión de datos de un fragmento de código en C que incluya la manipulación de punteros.
Describir el funcionamiento del mecanismo de punteros en C y su relación con Java.
Seleccionar entre las múltiples estructuras de datos ofrecidas por las librerías la más idonea en base a unos criterios dados.
Diseñar bloques de código que crean y destruyen estructuras de datos dinámicas.
Explicar la jerarquía de ficheros del código fuente de una aplicación en un dispositivo móvil.
Desarrollar un programa para un dispositivo móvil guiado por un tutorial.
Identificar las funciones que un sistema operativo ofrece a una aplicación.
Explicar la funcionalidad de las bibliotecas disponibles en un dispositivo móvil.
Identificar las operaciones de entrada/salida de un dispositivo móvil utilizando ficheros, sockets, gps, sensor de temperatura y sensor de luz.
Diseñar funciones para enviar y recibir estructuras de datos a través de un canal de comunicación.
Explicar los pasos previos necesarios para realizar una operación de entrada/salida en un dispositivo móvil.
Derivar una estructura de datos a partir de una especificación que contiene una descripción y una colección de operaciones.
Agrupar la funcionalidad de una porción de código en funciones.
Objetivo B
Definir los conceptos de compilación, compilación cruzada, entrelazado, ejecución, emulación.
Explicar las opciones más importantes del programa compilador (fichero de salida, flag de depuración, definición de constante, path a biblioteca, path a includes) y las principales directivas del pre-procesador
Demostrar el proceso para compilar, enlazar y ejecutar una aplicación en un dispositivo móvil.
Interpretar correctamente y eliminar los mensajes de error y advertencia que muestre el compilador.
Explicar el funcionamiento de un emulador así como las partes de las que consta y su instalación en una máquina.
Demostrar cómo se detiene la ejecución de un programa en un punto dado con una condición sobre sus valores de ejecución.
Demostrar como visualizar del contenido de una estructura de datos utilizando el depurador.
Explicar como se produce una fuga de memoria en dos situaciones diferentes con la misma estructura de datos
Explicar un escenario de trabajo en el que se necesite el controlador de versiones.
Listar los principales usos de un programa controlador de versiones.
Emplear los comandos más comunes de un programa de control de versiones.
Objetivo C
Redactar actas de las reuniones con los puntos a cubrir y las conclusiones finales.
Intercambiar información entre los miembros del equipo a través de chat, foros, email, blogs y wikis.
Describir una política para dividir las tareas equitativamente entre los miembros del grupo.
Identificar los puntos fuertes y débiles del grupo y describir un plan de acción para cuando surja un conflicto.
Explicar los requisitos que impone una especificación de un módulo de trabajo.
Explicar de forma concisa una técnica, solución, propuesta, estructura de datos, programa, etc. que haya sido consensuada en el grupo.
Diseñar un plan de trabajo con las tareas divididas entre los miembros del equipo en el que conste explícitamente los compromisos de cada miembro y su interrelación.
Objetivo D
Describir los diferentes tipos de información que ofrecen diferentes fuentes.
Elegir las fuentes más adecuadas y extraer información de ellas (incluye documentos en inglés).
Aplicar el conocimiento adquirido sobre fuentes de información a la resolución de un problema.
Describir con regularidad el trabajo desarrollado a título personal.
Realizar informes para supervisar el tiempo de trabajo individual, ofreciendo en estos soluciones para optimizar el uso de dicho tiempo.
Gestionar el tiempo de trabajo individual utilizando mecanismos de comunicación de progreso.