Proyectos de Programación

Usted está aquí

Créditos
6
Tipos
Obligatoria
Requisitos
  • Precorrequisito: IDI
  • Precorrequisito: IES
  • Prerrequisito: EDA
Departamento
CS
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.

Profesores

Responsable

  • Alicia Maria Ageno Pulido ( )

Otros

  • Borja Valles Fuente ( )
  • Elvira Pino Blanco ( )
  • Horacio Rodríguez Hontoria ( )
  • Jordi Turmo Borrás ( )
  • Jose Miguel Rivero Almeida ( )
  • Miquel Sanchez Marre ( )

Horas semanales

Teoría
2
Problemas
0
Laboratorio
2
Aprendizaje dirigido
0.4
Aprendizaje autónomo
5.75

Competencias

Competencias Transversales

Trabajo en equipo

  • G5 - 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 - 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

  1. 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.
    Related competences: CT4.1, CT4.2, CT5.2,
  2. Organizar el trabajo de diseño y programación de un grupo 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.
    Related competences: CT6.1, CT8.6, G5.2, CT8.7,
  3. 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.
    Related competences: CT5.4, CT5.5, CT5.1, CT2.3,
  4. 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.
    Related competences: CT5.4, CT5.1,
  5. 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.
    Related competences: CT4.2, CT5.2, CT5.3, CT2.3,
  6. Tratar correctamente las situaciones anómalas dentro del programa, usando, si es conveniente, el mecanismo de excepciones ofrecido por el lenguaje de programación.
    Related competences: CT5.1, CT5.3,
  7. Diseñar una interfaz de usuario razonablemente cómoda y eficaz para el programa, usando una librería GUI.
    Related competences: CT2.5, CT5.6,
  8. 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.
    Related competences: 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

  1. 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.
  2. 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.
  3. 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
  4. Depuración de programas
    Verificación. Program Testing: prueba y depuración.
    Prueba de componentes.
    Estategias de prueba e integración. Planificación de pruebas.
    "Andamiaje" y tests de regresión.
    Herramientas de ayuda a la prueba (junit).
    Tratamiento de errores y excepciones.
  5. Patrones de diseño en Java
    Se describiran e implementaran algunos de los patrones de diseño clásicos (decorador, estado, singleton, etc)
  6. Conceptos básicos de diseño de interfaces
    Tipos de entrada y salida.
    Principios de comunicación con interlocutores humanos. Presentación de información, entrada y validación de datos, navegación, niveles de ayuda, modelos de usuario.
  7. 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

Actividad Acto evaluativo


Descripción del proyecto y formación de grupos

Descripción de las entregas del proyecto. Formación de los grupos de prácticas.
Objetivos: 8 2
Teoría
1h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h

Introducción a Java y Conceptos básicos de OO

Desarrollo del tema 2 de la asignatura.
Objetivos: 8 4 5
Contenidos:
Teoría
8h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
8h

Diseño e implementación en Java de la arquitectura en 3 capas

Desarrollo del tema 3 de la asignatura.
Objetivos: 8 3 4 5
Contenidos:
Teoría
4h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
2h

Depuración de programas

Desarrollo del tema 4 de la asignatura.
Objetivos: 8 6
Contenidos:
Teoría
4h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

Patrones de diseño en Java

Se explicaran (o repasaran si ya se vieron en IES) e implementaran algunos de los patrones clásicos de diseño.
Objetivos: 4 5
Contenidos:
Teoría
4h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
4h

Java: implementación de interfaces

Desarrollo del tema 6 de la asignatura.
Objetivos: 8 7
Contenidos:
Teoría
4h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
4h

Primera entrega del proyecto

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 de la parte implementada, tests y un diseño preliminar de las pantallas que componen la interfaz de la aplicación .
Objetivos: 8 1 2 3 6 4 5
Semana: 9
Tipo: entrega
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h

Examen Teoría

Este examen evaluará los contenidos introducidos en las clases de teoría.
Objetivos: 1 4 5
Semana: 12 (Fuera de horario lectivo)
Tipo: examen final
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
2h
Aprendizaje autónomo
15h

Segunda entrega del proyecto

Entrega final. La documentación a presentar debe incluir el diagrama de clases completo (UML) y la implementación completa del proyecto, así como los juegos de prueba (si procede) y el manual de usuario. Además de la entrega de la documentación, cada grupo deberá hacer una presentación de su proyecto.
Objetivos: 8 1 2 3 6 7 4 5
Semana: 15 (Fuera de horario lectivo)
Tipo: entrega
Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
2h
Aprendizaje autónomo
0h

Teoría
0h
Problemas
0h
Laboratorio
10h
Aprendizaje dirigido
0h
Aprendizaje autónomo
20h

Teoría
0h
Problemas
0h
Laboratorio
12h
Aprendizaje dirigido
0h
Aprendizaje autónomo
28h

Teoría
0h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
7.5h
Aprendizaje autónomo
0h

Metodología docente

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 que sólo se hace teoría 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 3 personas, y los grupos se estructuran en macrogrupos de grupos (los "clusters") de 12-15 personas.
- Cada "cluster" tendrá un profesor tutor asignado.
- Dentro de cada grupo, un estudiante y sólo uno es responsable de programar y probar cada clase.

El curso utiliza el lenguaje de programación Java.

Método de evaluación

Nota Final: 0.20 * Nota_Examen_Teoria + 0.80 * Nota_Projecte

Nota_Projecte: (0.40 * Entrega1 + 0.60 * Entrega2) * FT

Dado que el proyecto es un trabajo en equipo en el que deben participar todos y sólo los miembros del grupo, 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 grupo. Se hará público junto con las notas de la segunda entrega, y se determinará a partir del reparto de tareas dentro del grupo (entregado a la Entrega1 y la Entrega2) y de las presentaciones finales del grupo con su tutor.


Competencia transversal "Trabajo en equipo": Se evalúa usando una rúbrica simple en que el tutor de cada grupo puntúa los diferentes aspectos relacionados con la competencia de cada miembro de los grupos.

Competencia transversal "Emprendeduría e innovación": Se evalúa usando una rúbrica simple en que el tutor de cada grupo puntúa los diferentes aspectos relacionados con la competencia de cada miembro de los grupos.

Bibliografía

Básica:

Complementaria:

Web links

Capacidades previas

- 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.