Hacer un proyecto de programación asociado al ciclo de vida de una aplicación informática, con énfasis en la fase de implementación.
Profesorado
Responsable
Alicia Ageno Pulido (
)
Otros
Alejandro Ivan Paz Ortiz (
)
Carles Arnal Castello (
)
Guillem Godoy Balil (
)
Ignasi Gómez Sebastià (
)
Salvador Medina Herrera (
)
Sergio Álvarez Napagao (
)
Horas semanales
Teoría
2
Problemas
0
Laboratorio
2
Aprendizaje dirigido
0.28
Aprendizaje autónomo
5.72
Competencias
Competencias Transversales
Trabajo en equipo
G5 [Avaluable] - Ser capaz de trabajar como miembro de un equipo, ya sea como un miembro más, o realizando tareas de dirección con la finalidad de contribuir a desarrollar proyectos con pragmatismo y sentido de la responsabilidad, asumiendo compromisos teniendo en cuenta los recursos disponibles.
G5.2
- Planificar y acordar los objetivos, las reglas de funcionamiento, las responsabilidades, la agenda y el procedimiento de revisión del trabajo. Identificar conflictos, negociarlos y resolverlos de forma efectiva. Adaptarse a diferentes tipos de grupo (grande-pequeño, técnico-mixto, presencial-a distancia). Interactuar con eficacia y promover la participación de todos los miembros del grupo.
Espíritu emprendedor e innovador
G1 [Avaluable] - Conocer y comprender la organización de una empresa y las ciencias que rigen su actividad; capacidad de comprender las reglas laborales y las relaciones entre la planificación, las estrategias industriales y comerciales, la calidad y el beneficio. Desarrollar la creatividad, el espíritu emprendedor y la tendencia a la innovación.
G1.2
- Tomar iniciativas que generen oportunidades, nuevos objetos o soluciones nuevas, con una visión de implementación de proceso y de mercado, y que implique y haga partícipes a los otros en proyectos que se tienen que desarrollar (capacidad de actuar de manera autónoma).
Competencias Técnicas
Competencias técnicas comunes
CT2 - Utilizar de forma apropiada teorías, procedimientos y herramientas en el desarrollo profesional de la ingeniería informática en todos sus ámbitos (especificación, diseño, implementación, despliegue -implantación- y evaluación de productos) de manera que se demuestre la comprensión de los compromisos adoptados en las decisiones de diseño.
CT2.3
- Diseñar, desarrollar, seleccionar y evaluar aplicaciones, sistemas y servicios informáticos, y al mismo tiempo asegurar su fiabilidad, su seguridad y su calidad, conforme a principios éticos y a la legislación y la normativa vigente.
CT2.4
- Demostrar conocimiento y capacidad de aplicación de las herramientas necesarias para el almacenaje, el procesamiento y el acceso a los Sistemas de información, incluidos los basados en web.
CT2.5
- Diseñar y evaluar interfaces persona-computador que garanticen la accesibilidad y la usabilidad a los sistemas, a los servicios y a las aplicaciones informáticas.
CT3 - Demostrar conocimiento y comprensión del contexto organizativo, económico y legal en el que desarrolla su trabajo (Conocimiento adecuado del concepto de empresa, marco institucional y jurídico de la empresa, organización y gestión de empresas.)
CT3.6
- Demostrar conocimiento de la dimensión ética en la empresa: la responsabilidad social y corporativa en general y, en particular, las responsabilidades civiles y profesionales del ingeniero en informática.
CT4 - Demostrar conocimiento y capacidad de aplicación de los procedimientos algorítmicos básicos de las tecnologías informáticas para diseñar soluciones a problemas, analizando la idoneidad y la complejidad de los algoritmos
CT4.1
- Identificar las soluciones algorítmicas más adecuadas para resolver problemas de dificultad mediana.
CT4.2
- Razonar sobre la corrección y la eficiencia de una solución algorítmica.
CT4.3
- Demostrar conocimiento y capacidad de aplicación de los principios fundamentales y las técnicas básicas de los sistemas inteligentes y su aplicación práctica.
CT5 - Analizar, diseñar, construir y mantener aplicaciones de forma robusta, segura y eficiente, escogiendo el paradigma y los lenguajes de programación más adecuados.
CT5.1
- Escoger, combinar y explotar diferentes paradigmas de programación, en el momento de construir software, atendiendo a criterios como la facilidad de desarrollo, la eficiencia, la portabilidad y la mantenibilidad.
CT5.2
- Conocer, diseñar y utilizar de forma eficiente los tipos y las estructuras de datos más adecuados para la resolución de un problema.
CT5.3
- Diseñar, escribir, probar, depurar, documentar y mantener código en un lenguaje de alto nivel para resolver problemas de programación aplicando esquemas algorítmicos y usando estructuras de datos.
CT5.4
- Diseñar la arquitectura de los programas utilizando técnicas de orientación a objetos, de modularización y de especificación e implementación de tipos abstractos de datos.
CT5.5
- Usar las herramientas de un entorno de desarrollo de software para crear y desarrollar aplicaciones.
CT5.6
- Demostrar conocimiento y capacidad de aplicación de los principios fundamentales y de las técnicas básicas de la programación paralela, concurrente, distribuida y de tiempo real.
CT6 - Demostrar conocimiento y comprensión del funcionamiento interno de un computador y del funcionamiento de las comunicaciones entre ordenadores.
CT6.1
- Demostrar conocimiento y tener capacidad para administrar y mantener sistemas, servicios y aplicaciones informáticas.
CT8 - Planificar, concebir, desplegar y dirigir proyectos, servicios y sistemas informáticos en todos los ámbitos, liderando su puesta en marcha, su mejora continua y valorando su impacto económico y social
CT8.6
- Demostrar comprensión de la importancia de la negociación, de los hábitos de trabajo efectivos, del liderazgo y de las habilidades de comunicación en todos los entornos de desarrollo de software.
CT8.7
- Controlar versiones y configuraciones del proyecto.
Objetivos
Invocar los conocimientos de programación adquiridos en asignaturas anteriores durante el desarrollo de un proyecto de programación de tamaño medio, eligiendo algoritmos y estructuras de datos adecuados para construir un programa correcto y eficiente.
Competencias relacionadas:
CT4.1,
CT4.2,
CT5.2,
Organizar el trabajo de diseño y programación de un equipo de personas de tamaño medio (de tres a cuatro), de acuerdo con una planificación temporal preestablecida. Esta organización incluye tanto el cumplimiento de la planificación dada como el reparto de tareas entre los miembros del grupo.
Competencias relacionadas:
CT6.1,
CT8.6,
G5.2,
CT8.7,
Identificar partes susceptibles de ser factorizadas en la especificación, diseño e implementación de un programa, para resolverlas una sola vez. Usar de manera efectiva los mecanismos de la orientación a objetos para hacer la factorización.
Competencias relacionadas:
CT5.4,
CT5.5,
CT5.1,
CT2.3,
Conocer los principios del diseño y la programación orientadas a objetos, su justificación, y las ventajas e inconvenientes de adoptar este paradigma en un proyecto de programación.
Competencias relacionadas:
CT5.4,
CT5.1,
Usar el mecanismo de clases y herencia para evitar la redundancia y para capturar abstracciones de especificación, diseño e implementación. Entender las ventajas de este uso de la orientación a objetos con respecto a fiabilidad, modificabilidad, portabilidad, reusabilidad y productividad.
Competencias relacionadas:
CT4.2,
CT5.2,
CT5.3,
CT2.3,
Tratar correctamente las situaciones anómalas dentro del programa, usando, si es conveniente, el mecanismo de excepciones ofrecido por el lenguaje de programación. Testear el programa de forma sistemática y exhaustiva.
Competencias relacionadas:
CT5.1,
CT5.3,
Diseñar una interfaz de usuario razonablemente cómoda y eficaz para el programa, usando una librería GUI.
Competencias relacionadas:
CT2.5,
CT5.6,
Desarrollar un proyecto de programación de tamaño medio, en grupo, de acuerdo con un plan de desarrollo y una arquitectura proporcionados de antemano.
Competencias relacionadas:
G5.2,
CT3.6,
CT4.1,
CT4.2,
CT5.2,
CT5.4,
CT5.5,
G1.2,
CT2.4,
CT4.3,
CT5.3,
CT2.3,
Contenidos
Repaso IES: Especificación, diagramas de clases y casos de uso.
Ciclos de vida.
Definición del proyecto. Requerimientos. Especificación funcional. Modelar primero el dominio.
UML: diagrama de clases (dominio). Diagrama de casos de uso. Explicaciones textuales. Estudio de un caso.
Introducción a Java y Conceptos de OO en Java
Especificación, diseño y programación orientadas a objetos (OO). Clases, objetos, atributos, métodos y relaciones. Encapsulamiento y ocultación, abstracción y clasificación, herencia. Polimorfismo, "binding" estático y dinámico. Otras relaciones: asociación, agregación, dependencia.
Diseño e implementación en Java de la arquitectura en 3 capas
Descripción del paradigma de diseño de arquitectura en 3 capas y su implementación en Java
Prueba de programas
Verificación. Program Testing: prueba y depuración.
Prueba de componentes.
Estategias de prueba e integración. Drivers y stubs/mocks. Planificación de pruebas.
"Andamiaje" y tests de regresión.
Herramientas de ayuda a la prueba (JUnit).
Tratamiento de errores y excepciones.
Patrones de diseño en Java
Se describiran e implementaran algunos de los patrones de diseño clásicos (decorador, estado, singleton, etc)
Conceptos básicos de diseño de interfaces en Java
Cómo diseñar una interfice gráfica sencilla usando las librerías standard de Java y aplicando los principios de arquitectura en capas
Herramientas para el desarrollo de programas
Se describiran a grandes rasgos las herramientas para desarrollar software: control de versiones (Git), integración con testing (JUnit)
Actividades
ActividadActo evaluativo
Repaso ciclo de vida del software
Repaso de conceptos de ingeniería del software y UML.
Ejemplo práctico de (parte de ) una primera entrega. Objetivos:345 Contenidos:
Diseño y principio de la implementación. Se debe implementar completamente el modelo del dominio y el núcleo básico algorítmico del proyecto, proporcionando los juegos de pruebas y tests de la parte implementada. Objetivos:8123645 Semana:
10
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h
Segunda entrega del proyecto
Entrega intermedia. La documentación a presentar debe incluir el diagrama de clases completo (UML) del proyecto. Objetivos:8123745 Semana:
14
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h
Tercera entrega del proyecto
Entrega final. La documentación a presentar debe incluir la implementación completa del proyecto, así como los juegos de prueba y el manual de usuario. Además de la entrega de la documentación, cada equipo deberá hacer una presentación de su proyecto. Objetivos:81236745 Semana:
15 (Fuera de horario lectivo)
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
2h
Aprendizaje autónomo
0h
Supervisión primera entrega
Clases de laboratorio relacionadas con la primera entrega. Objetivos:8123645 Contenidos:
El temario se expone de forma muy práctica, a través de la presentación de muchos ejemplos.
Las clases de teoría introducen todo los conocimientos, las técnicas y los conceptos necesarios para la realización del proyecto de la asignatura. Algunas de las clases de laboratorio, normalmente hacia principio de curso, sirven para que el profesor presente brevemente las notaciones, lenguajes, librerías y herramientas a utilizar. En la mayoría de clases de laboratorio, sin embargo, no es el profesor quien lleva la iniciativa. Son unas horas que cada grupo de proyecto puede utilizar para trabajar en común, o bien para consultar dudas con el profesor y recibir sus comentarios.
Las dos horas de clases de teoría y las dos de laboratorio se hacen semanalmente, excepto la primera semana en que sólo se hace teoría (dos sesiones) y las dos últimas que sólo se hace laboratorio.
La realización del proyecto es la parte principal del trabajo a realizar dentro de la asignatura. Este proyecto tendrá un fuerte componente algorítmico y de estructuras de datos.
Para implementar este proyecto, el sistema de trabajo será el siguiente:
- Los estudiantes se organizan en grupos de 4 personas, y los equipos se estructuran en grupos de laboratorio de 15-20 personas.
- Cada grupo de laboratorio tendrá un profesor tutor asignado.
- Dentro de cada equipo, un estudiante y sólo uno es responsable de programar y probar cada clase.
El curso utiliza el lenguaje de programación Java.
Dado que el proyecto es un trabajo en grupo en el que deben participar todos y sólo los miembros del equipo, la nota final del proyecto está ponderada por FT. Este Factor de Trabajo (FT) es una ponderación (0 <= FT <= 1) individual que valora el grado de trabajo de cada miembro del equipo. Se hará público junto con las notas de la última entrega, y se determinará a partir del reparto de tareas dentro del equipo (entregado en la Entrega1 y la Entrega3) y de las presentaciones finales del equipo con su tutor.
Competencia transversal "Trabajo en equipo": Se evalúa usando una rúbrica simple, disponible para los estudiantes, en que el tutor de cada grupo puntúa los diferentes aspectos relacionados con la competencia de cada miembro de los equipos.
Competencia transversal "Emprendeduría e innovación": Se evalúa considerando la iniciativa del equipo en los dos momentos en que se han de tomar decisiones propias, no predeterminadas en la asignatura: las funcionalidades extras del proyecto y los algoritmos y estructuras de datos con los que se va a resolver la funcionalidad principal. Por tanto, la evaluación es una combinación de dos criterios:
1) En función de las funcionalidades opcionales propuestas versus las funcionalidades opcionales implementadas
2) En función de la iniciativa del equipo al escoger algoritmos y EDs para implementar las funcionalidades principales
Pàgina de Java, el llenguatge de programació usat a l'assignatura. L'última versió disponible de la Java Platform es pot descarregar lliurement d'aquesta web. https://www.oracle.com/java/index.html
- Capacidad para resolver problemas algorítmicos de dificultad media a partir de una especificación clara, y de implementar las soluciones en un lenguaje de programación imperativo.
- Conocimiento de los mecanismos básicos de estructuración de programas (modularización, encapsulación, tipos abstractos de datos, clases) y capacidad para aplicarlos a problemas pequeños-medios (unos pocos módulos)
- Conocimiento de los elementos de programación orientada a objetos (clases, objetos, mecanismos de ejecución).
- Familiaridad con un lenguaje imperativo orientado a objetos.
- Capacidad de usar y programar estructuras de datos en este lenguaje.
- Capacidad de usar librerías en este lenguaje.
- Dominio de estrategias básicas para encontrar y corregir errores en módulos sencillos.