Información general


  • Tipo de asignatura: Obligatoria
  • Coordinador: Adso Fernández Baena
  • Trimestre: 1
  • Créditos: 4
  • Profesorado:

Idiomas de impartición


  • Català

Descripción


La asignatura de Programación Avanzada pertenece a la materia de la Programación. Los temas tratados en la asignatura están pensados para capacitar a los estudiantes para el aprendizaje de, por un lado, en el uso de las diferentes técnicas de diseño de algoritmos y por el otro, a hacer una gestión dinámica de la memoria y aplicarla en la implementación de las estructuras de datos árboles.

Esta asignatura dispone de recursos metodológicos y digitales para hacer posible su continuidad en modalidad no presencial en el caso de ser necesario por motivos relacionados con la Covid-19. De esta forma se asegurará el logro de los mismos conocimientos y competencias que se especifican en este plan docente.

Resultados de aprendizaje


A nivel general, esta asignatura contribuye en los siguientes resultados de aprendizaje especificados en la materia a la cual pertenece (Algorítmica y Programación):

  • Construir algoritmos correctos y eficientes para problemas de dificultad media.
  • Implementar algoritmos en un lenguaje de programación imperativa de referencia para un nivel medio.
  • Identificar las soluciones algorítmicas más adecuadas para resolver problemas de dificultad media.
  • Razonar sobre la corrección y eficiencia de una solución algorítmica.
  • Diseñar, escribir, probar, depurar, documentar y mantener código en un lenguaje de nivel alto para solucionar problemas de programación aplicando esquemas algorítmicos y usando estructuras de datos.
  • Usar las herramientas de un entorno de desarrollo de software para crear y diseñar aplicacions.
  • Demostrar conocimiento y comprensión de hechos  esenciales, conceptos, principios y teorías relativas a la informática y a sus disciplinas de referencia.
  • Colaborar en un entorno unidisciplinar. Identificar los objetivos del grupo y colaborar en el diseño de la estrategia a seguir y un plan de trabajo para conseguirlos. Identificar las responsabilidades de cada componente del grupo y asumir el compromiso personal de la tarea asignada. Evaluar y presentar los resultados propios. Identificar el valor de la cooperación e intercambiar información con los otros componentes del grupo. Intercambiar información sobre el progreso del grupo y proponer estrategias para mejorar su funcionamiento.

A nivel más concreto, al finalizar la asignatura el estudiante ha de ser capaz de: 

  • RA1: Crear y manipular secuencias enlazadas.     
  • RA2: Utilizar las secuencias enlazadas en la implementación de estructuras de datos.     
  • RA3: Definir e implementar las estructuras de datos árbol.  
  • RA4: Decidir y argumentar cual es la estructura o estructuras de datos más adecuadas para resolver una problemática determinada.    
  • RA5: Enumerar y explicar la filosofía de funcionamiento de las diferentes técnicas de diseño.
  • RA6: Comparar desde el punto de vista de la eficiencia las diferentes técnicas de diseño.     
  • RA7: Aplicar las diferentes técnicas de diseño de algoritmos en la resolución de problemas.     
  • RA8: Analizar un problema para poder determinar qué técnica es la adecuada para su resolución.     
  • RA9: Deducir y argumentar la correcta aplicación de las diferentes técnicas.
  • RA10: Tener un primer contacto con otro lenguaje de programación.
  • RA11: Codificar i depurar programas utilizando el paradigma de  la programación orientada al objeto.

Metodologia de trabajo


Todos los conceptos teóricos de la materia se expondrán en clases de teoría (grupos grandes). En estas clases, y a discreción de los docentes impartidores, también se resolverán ejercicios y problemas de carácter más práctico. Asimismo y siempre a discreción de los impartidores, se podrá pedir a los estudiantes que resuelvan, de forma individual o en grupo, problemas y/o ejercicios breves. Estas actividades, que por su naturaleza de optatividad y brevedad no aparecen reflejadas en la lista de actividades, servirán al estudiante como instrumento de autoevaluación de su logro de los contenidos de la materia y podrán ser utilizados por parte del docente para tomar decisiones sobre la calificación final del estudiante bueno y que nunca en detrimento de la calificación numérica calculada según el sistema de calificación antes indicado.

Los conceptos de carácter más práctico y todo lo que en esencia se pueda considerar la aplicación práctica de los conceptos teóricos serán trabajados en grupos pequeños (de laboratorio). En las sesiones que se programen se darán las herramientas adecuadas para resolver las actividades programadas, todo y que se espera que éstas se alarguen desde el punto de vista temporal más allá de las horas de laboratorio y que, en consecuencia, los estudiantes deban finalizar durante el tiempo de aprendizaje autónomo.

Se pondrá a disposición de los estudiantes actividades totalmente opcionales que contribuyan a preparar y a prepararse para las de carácter obligatorio.

Este curso, debido a la situación generada por la COVID, algunas de las sesiones de grupo grande se harán en formato híbrido: presencial y en línea (vía streaming). Esto permitirá que los estudiantes puedan asistir rotativamente a las clases presenciales, respetando el máximo de estudiantes por aula que mponen las medidas de distanciamiento. Cuando no les toque sesión presencial podrán seguir la clase en línea desde casa.


En cuanto a las sesiones de prácticas en espacios más reducidos (como laboratorios, estudios o plató), si es necesario se trabajará simultáneamente en varios espacios para garantizar que se cumplan las condiciones establecidas por los protocolos de seguridad.

Contenidos


1.- VARIABLE DINÁMICA

  • Variable dinámica
  • Gestión dinámica de la memoria
  • Secuencias enlazadas

2.- ESTRUCTURAS DE DATOS. LOS ÁRBOLES

  • Tipos de datos no estructurados
  • Árboles binarios
  • Recorridos de árboles: inorden, preorden, postorden y anchura
  • El TAD Árbol de Búsqueda binaria (ACB)

3.- TÉCNICAS DE DISEÑO DE ALGORITMOS

  • Introducción a los esquemas algorítmicos
  • Técnica del divide y vencerás
  • Técnica de la programación dinámica
  • Técnica voraz
  • Técnica del backtracking

Actividades de aprendizaje


Se pone a disposición de los estudiantes actividades de carácter práctico (ejercicios cortos, problemas...) que son la base de las actividades de aprendizaje de la asignatura. Los estudiantes las tendrán que resolver, a menudo en sesiones no presenciales, siguiendo las instrucciones de los profesores y también, se trabajarán en clase, ya sea como ejemplos en las sesiones teóricas, ya sea en las sesiones de laboratorio. Si bien estas actividades serán opcionales (los docentes no  verificaran individualmente la realización de los alumnos), serán imprescindibles para lograr el conocimiento teórico-práctico de la asignatura.

Con el objetivo de reunir pruebas del logro de los resultados de aprendizaje que se esperan, se realizaran las siguientes actividades evaluativas (prácticas y exámenes). Las prácticas deben ser realizadas en grupo de dos estudiantes. No necesariamente la calificación de los dos miembros del grupo debe ser la misma, se tendrá en cuenta el grado de participación de cada uno de ellos en la confección de cada una de las prácticas.

PRÀCTICA 1

En esta práctica, los estudiantes tienen que codificar un diseño de clases orientado a objetos.

El objetivo de la práctica es doble, por un lado pretende refrescar los conceptos de la POO trabajados en asignaturas precedentes y por otro aprender un nuevo lenguaje de programación (los elementos más básicos).

El aprendizaje del lenguaje de programación será con un cierto grado de autonomía. A partir de un documento entregado por la profesora, donde se encuentran las principales diferencias entre el lenguaje utilizado hasta entonces en la programación y, explicaciones y aclaraciones por parte del docente, de las partes que puede ser más complejas y pueden generar más dificultad para los estudiantes, el estudiante tiene que ejercitar y desarrollar sus habilidades para el aprendizaje autónomo.  El alumno demostrará con esta actividad una capacidad de autoaprendizaje del nuevo lenguaje utilizándolo en la codificación solicitada, evaluando la selección de los procedimientos algorítmicos  más adecuados en cada caso.

Los alumnos tendrán que completar la codificación del diseño en las horas pensadas para el aprendizaje autónomo.

La realización de esta actividad contribuye al logro de los resultados de aprendizaje RA10 y RA11.

PRÀCTICA 2

Esta práctica está pensada específicamente para que los estudiantes practiquen la gestión dinámica de la memoria, creando y administrando secuencias enlazadas.

Se trabajarán más conceptos con el nuevo lenguaje (elementos más complejas) y también practicarán el primer contenido trabajado en la assignatura.

El profesor entregará un nuevo documento con los conceptos que deben ser incorporados, conceptos ya conocidos por el alumno pero que ahora van a implementarse usando el nuevo lenguaje de programación. Será importante destacar la existencia de nuevos elementos que el lenguaje conocido no ofrece, y si lo hace el nuevo. Es necesario sensibilizar al estudiante de que no todos los lenguajes ofrecen lo mismo y dependiendo de la aplicación que desee desarrollar es más o menos apropiado utilizar un lenguaje u otro.

Los alumnos tendrán que completar la codificación del diseño en las horas pensadas para el aprendizaje autónomo.

La realización de esta actividad contribuye al logro de los resultados de aprendizaje RA1, RA2, RA10 y RA11.

PRÀCTICA 3

Esta práctica está orientada específicamente para que los estudiantes practiquen la implementación de una estructura de datos no lineal utilizando secuencias enlazadas. La estructura de datos a implementar será una modalidad de tipo de árbol.

El lenguaje de programación será elegido por el estudiante,  puede continuar con el nuevo lenguaje de programación aprendido o seguir con el que ya conoce de asignaturas precedentes y que se utiliza en las clases de teoría.

Los estudiantes tendrán que terminar, en las horas pensadas para el aprendizaje autónomo, la implementación de la estructura de datos.

La realización de esta actividad contribuye al logro de los resultados de aprendizaje RA1, RA2, RA3 y RA4.

PRÀCTICA 4

En esta práctica, los estudiantes deberán codificar otra modalidad de árbol y implementar métodos que realicen diferentes tratamientos sobre la estructura. Estos métodos serán implementados usando la técnica del divide y vencerás.

Los estudiantes tendrán que terminar, en las horas pensadas para el aprendizaje autónomo, los problemas planteados.

La realización de esta actividad contribuye al logro de los resultados de aprendizaje RA4, RA6, RA7, RA8 y RA9.

PRÀCTICA 5

Con esta práctica, los estudiantes deberán codificar, aplicando la técnica del Backtracking y la técnica Voraz, enunciados de una envergadura media.

En esta actividad será imprescindible el análisis previo a la implementación, por lo que el profesor le entregará una lista de cuestiones que el estudiante debe responder razonadamente antes de codificar, y que le ayudará a tomar decisiones adecuadas en el uso de las técnicas.  El estudiante debe tomar conciencia de la importancia de preparar y defender sus argumentos antes de la resolución de problemas dentro de su campo de estudio.

Los estudiantes tendrán que terminar, en las horas pasadas en el aprendizaje autónomo el conjunto del problema planteado.

La realización de esta actividad contribuye al logro de los resultados de aprendizaje RA5, RA6, RA7, RA8 y RA9.

A nivel competencial las cinco prácticas, que mayoritariamente se deberán desarrollar en tiempo no presencial, cubren las siguientes competencias comunes y específicas de la asignatura (entre paréntesis los aspectos más relevantes de cada competencia a los que contribuye):

  • CIN1 (desarrollar software)
  • CIN3 (hábitos de trabajo efectivos en los entornos de desarrollo de software y habilidades de comunicación)
  • CIN5 (mantenimiento aplicacions)
  • CIN6 (aplicar procedimientos algorítmicos)
  • CIN8 (construir aplicaciones de forma robusta, segura y eficiente y los lenguajes de programación más adecuados
  • EFB3 (comprender y dominar los conceptos de la algorítmica)
  • EFB4 (uso de programas informáticos)

Las actividades prácticas 3 y 4 también contribuyen a la consecución de la competencia CIN7 (utilización de forma eficiente de las estructuras de datos más adecuadas para la resolución de un problema).

PRUEBA ESCRITA I

Esta actividad sera personal y evaluará los dos primeros contenidos de la asignatura. La actividad  evaluará los resultados de aprendizaje: RA1, RA2, RA3, RA4, RA10 y RA11.

PRUEBA ESCRITA II

Esta actividad unipersonal evaluará el último contenido de la asignatura. La actividad evaluará los resultados de aprendizaje: RA5, RA6, RA7, RA8 y RA9.

 

A nivel competencial estas dos pruebas, cubren las siguientes competencias comunes y específicas de la asignatura:

  • CIN1 (desarrollar software)
  • CIN3 (hábitos de trabajo efectivo)
  • CIN5 (mantenimiento de sistemas)
  • CIN6 (aplicar procedimientos algorítmicos)
  • CIN7 (utilización de forma eficiente y diseño de estructuras de datos)
  • EFB3 (comprender y dominar los conceptos de la algorítmica y su aplicación para resolución de problemas)

Para superar (aprobar) las actividades de evaluación, los estudiantes deben demostrar

  • Han adquirido los conocimientos teóricos relacionados con los contenidos del curso y que su comprensión les permite llevarlos a la pràctica [MECES-2 punto a, punto c]
  • Puedan desarrollar soluciones a problemas que, si bien son similares a otros vistos anteriormente, presentan aspectos nuevos [MECES-2 punto f]

En relación a las competencias básicas asignadas a la asignatura, éstas quedan cubiertas especialmente en cuanto a los aspectos que se explicitan:

  • B2: resolución de problemas dentro de su área de estudio.
  • B5: desarrollo de habilidades de aprendizaje necesarias para estudios posteriores (acceso autónomo a documentación, hábitos de trabajo efectivo). Se trabaja más intensamente en el desarrollo de las actividades prácticas 1 y 2 donde el estudiante debe aprender y usar un lenguaje de programación diferente del usado en las asignaturas previas a esta.

Finalmente, y en cuanto a las competencias transversales asociadas a la assignatura:

  • T1: (conocimiento tercera lengua) esta se trabaja a partir de las fuentes documentales que los estudiantes deben consultar, dado que todas ellas se encuentran en inglés.
  • T2: (trabajo en grupo) se trabaja en las actividades de prácticas, que se realizan en grupos de dos estudiantes que deben contribuir y consensuar las soluciones de estas actividades.

 

 

Normas de realización de las actividades

Para cada actividad, los docentes informarán de las normas y condiciones particulares que las rijan.

Las actividades unipersonales presuponen el compromiso del estudiante de realizarlas de manera individual. Se considerarán suspendidas todas aquellas actividades en las que el estudiante no se ajuste a este compromiso, independientemente de su papel (origen o destino).

Igualmente, las actividades que se deban realizar en grupos presuponen el compromiso por parte de los estudiantes que lo integran de realizarlas en el seno del grupo. Se considerarán suspendidas todas aquellas actividad en la que el grupo no haya respetado este compromiso con independencia de su papel (origen o destino).

En las actividades realizadas en grupo el docente puede, en base a la información de que disponga, personalizar la calificación para cada integrante del grupo.

Cualquier actividad no entregada se considerará puntuada con cero puntos.

Es potestativo de los docentes aceptar o no entregas fuera de los plazos que se indiquen. En caso de que estas entregas fuera de plazo se acepten, es potestativo del docente decidir si aplica alguna penalización y la cuantía de la misma.

Sistema de evaluación


La calificación final es la suma ponderada de las calificaciones de las actividades:

ACTIVIDAD PESO

PRUEBA ESCRITA I   40%

PRUEBA ESCRITA II   30%

PRÁCTICA 1   6%

PRÁCTICA 2   6%

PRÁCTICA 3   6%

PRÁCTICA 4   6%

PRÁCTICA 5   6%

Con las ponderaciones anteriores, las actividades de laboratorio (prácticas) tienen un peso del 30%, las actividades de carácter teórico tienen un peso del 70%.

Para aprobar la asignatura es necesario que el estudiante:

  • como mínimo, haya entregado una de las dos primeras prácticas, y que la calificación sea superior o igual a 4
  • como mínimo, haya entregado dos de las tres últimas prácticas, y que la calificación de cada una sea superior o igual a 4

Si no se dan estas premisas la asignatura quedará suspendida y en este caso sin posibilidad de recuperarla.

La ponderación indicada previamente sólo se aplica si la calificación de cada una de las pruebas escritas es superior o igual a 3,5. Si no se aplica, la calificación final es la nota más baja de las dos pruebas escritas. El estudiante deberá recuperar obligatoriamente la/s parte/s con calificación inferior a la nota mínima indicada.

La recuperación sólo posibilita recuperar la calificación de las actividades teóricas, PRUEBA ESCRITA I y / o II, y siempre que esta nueva calificación no sea inferior a 3,5 se aplicará la ponderación descrita anteriormente limitando la calificación final máxima de la asignatura a 7 (Notable).

Bibliografía


Básica

Juan Nadal, Lina. Programació: Notes de classe i exercicis. Publicació interna del TCM 2020,


Complementaria

Allen Weiss, Mark. Estructuras de datos en Java. Ed. Addison Wesley,

Barnes D. J. , Kölling Michael. Programación orientada a objetos con Java. Ed. Pearson EDUCACION,

Lewis J., Chase J.. Estructuras de datos con Java. Diseño de estructuras y algoritmos. Ed. Pearson EDUCACION,

Martí N., Ortega Y., Verdejo J.A.. Estructuras de datos y métodos algorítmicos. Ejercicios resueltos. Ed. Ibergaceta Publicaciones, S.L. Edición 2.