Información general


Tipo de asignatura: obligatoria

Coordinador:

trimestre:1

Créditos: 4

Profesorado: Catalina Juan Navidad

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 aplicar -la 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 Covidien-19. De esta forma se asegurará la consecución de los mismos conocimientos y competencias que se especifican en este plan docente.

Resultados de aprendizaje


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

  • Construir algoritmos correctos y eficientes para problemas de dificultad media.
  • Implementar algoritmos en un lenguaje de programación imperativo de referencia para el nivel medio.
  • Identificar las soluciones algorítmicas más adecuadas para resolver problemas de dificultad media.
  • Razonar sobre la corrección y la eficiencia de una solución algorítmica.
  • 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.
  • Usar las herramientas de un entorno de desarrollo de software para crear y diseñar aplicaciones.
  • Demostrar conocimiento y comprensión de hechos esenciales, conceptos, principios y teorías relativas a la informática ya 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 un nivel más concreto, al finalizar la asignatura el estudiante debe 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 qué y / o qué es la estructura de datos más adecuado 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 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 y depurar programas utilizando el paradigma de la programación orientado a objetos.

Metodología de trabajo


Todos los conceptos teóricos de la materia expondrán en clases de teoría (grupos grandes). En estas clases, ya 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 manera 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 adquisición 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 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 al efecto se darán las herramientas adecuadas para resolver las actividades programadas bueno y que se espera que estas 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 de tipo totalmente opcional que le ayuden a preparar ya prepararse para las de carácter obligatorio.

Este curso, debido a la situación generada por la Covidien, 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 ir rotativamente en las clases presenciales, respetando el máximo de estudiantes por aula que imponen 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ó), en su caso se trabajará simultáneamente en varios espacios pertal garantizar que se cumplen 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

  • Tipo de datos no estructurados
  • árboles binarios
  • Recorridos de árboles: inorden, preorden, postorden y ancho
  • 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 vence
  • 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 una serie de actividades de carácter eminentemente práctico (ejercicios cortos, problemas ...) que son la base de las actividades de aprendizaje de la asignatura. Estas actividades los estudiantes / se las tendrán que resolver, a menudo de manera no presencial, siguiendo las indicaciones de los docentes y también serán trabajadas en clase, ya sea como ejemplos en las sesiones de teoría, ya sea en las sesiones de laboratorio. Si bien estas actividades tendrán carácter optativo (los docentes no verificarán de manera individualizada la realización por parte de los estudiantes), serán imprescindibles para alcanzar los conocimientos teórico-prácticos de la asignatura.

Con el objetivo de recoger evidencia del logro de los resultados de aprendizaje esperados se realizarán las siguientes actividades de carácter evaluativo (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 deben codificar un diseño de clases orientado al objeto.

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

El aprendizaje del lenguaje será con un cierto grado de autonomía. A partir de un documento entregado por la profesora donde se indican las principales diferencias existentes entre el lenguaje usado hasta entonces en las asignaturas previas de programación y, las explicaciones y aclaraciones por parte de la profesora, de las partes que puedan ser más complejas y puedan generar más dificultad a los estudiantes, el estudiante debe ejercer y desarrollar sus habilidades de aprendizaje autónomo. El estudiante demostrará con esta actividad una capacidad de autoaprendizaje del nuevo lenguaje utilizándolo en la codificación pedida, valorando siempre la selección de los procedimientos algorítmicos básicos más idóneos en cada caso.

Los estudiantes deberán finalizar la codificación en las horas dedicadas al aprendizaje autónomo la totalidad del diseño.

La realización de esta actividad contribuye a la consecución de los resultados de aprendizaje RA10 y RA11.

 

PRÁCTICA 2

Esta práctica está específicamente pensada para que los estudiantes practiquen la gestión dinámica de la memoria, creando y gestionando 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 asignatura.

La profesora pondrá a disposición de los estudiantes documentación con los conceptos que se incorporarán, conceptos ya conocidos por el estudiante de las asignaturas previas de programación, pero que ahora se han implementar usando el nuevo lenguaje de programación. Será importante recalcar la existencia de elementos nuevos que el lenguaje conocido por ellos no ofrece. Hay que concienciar al estudiante de que no todos los lenguajes ofrecen lo mismo y que dependiendo de la aplicación que se quiere desarrollar es más o menos adecuado usar un uno otro lenguaje.

Los estudiantes deberán finalizar la codificación en las horas dedicadas al aprendizaje autónomo la totalidad del diseño.

La realización de esta actividad contribuye a la consecución de los resultados de aprendizaje RA1, RA2, RA10 y RA11.

 

PRÁCTICA 3

Esta práctica está específicamente destinada a que los estudiantes practiquen la implementación de una estructura de datos no lineal mediante secuencias enlazadas. La estructura de datos a implementar debe ajustarse a una modalidad de tipo de árbol.

El lenguaje de programación será escogido por el estudiante, continuar con el nuevo lenguaje aprendido o con lo que ya conocen de asignaturas previas y que se usa en las clases de teoría.

Los estudiantes deberán finalizar, en las horas dedicadas al aprendizaje autónomo la totalidad de la implementación de la estructura de datos.

La realización de esta actividad contribuye a la consecución 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 acompañarlo de métodos que hacen tratamientos, métodos que serán implementados usando la técnica del divide y vence.

Los estudiantes deberán finalizar, en las horas dedicadas al aprendizaje autónomo la totalidad de los problemas planteados.

La realización de esta actividad contribuye a la consecución de los resultados de aprendizaje RA4, RA5, RA7, RA8 y RA9.

 

PRÁCTICA 5

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

En esta actividad será primordial el análisis previo a la implementación, por lo que la profesora entregará toda una lista de cuestiones que el estudiante deberá contestar argumentadamente antes de hacer la codificación, y que, le ayudarán a tomar las decisiones adecuadas en la utilización de las técnicas. El estudiante debe tomar conciencia de la importancia de la elaboración y defensa de argumentos antes de la resolución de problemas dentro de su área de estudio.

Los estudiantes deberán finalizar, en las horas dedicadas al aprendizaje autónomo la totalidad del problema planteado.

La realización de esta actividad contribuye a la consecución 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 aplicaciones)
  • 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) y
  • EFB4 (uso de programas informáticos)

Las actividades prácticas 3 y 4 también contribuyen al logro de la competencia CIN7 (utilización de forma eficiente de estructuras de datos más adecuados a la resolución de un problema)

PRUEBA ESCRITA Y

Esta actividad será de carácter personal y evaluará los dos primeros contenidos de la asignatura. Con esta prueba se evalúan los resultados de aprendizaje: RA1, RA2, RA3, RA4, RA10 y RA11.

PRUEBA ESCRITA II

Esta actividad unipersonal evaluará el último contenido de la asignatura. Con esta prueba se evalúan 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 evaluativas, los estudiantes deberán demostrar

  • Que han adquirido los conocimientos teóricos relativos a los contenidos de la asignatura y que su comprensión les permite llevarlos a la práctica [MECES-2 punto a, punto c]
  • Que pueden desarrollar soluciones a problemas que, si bien son similares a otros vistos anteriormente, presentan aspectos que son 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 mucho más 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 asignatura:

 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 y en las que han de 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 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 actividades en las 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 siguientes actividades:

ACTIVIDAD PESO

PRUEBA ESCRITA Y 40%

PRUEBA ESCRITA II 30%

PRACTICA 1 6%

PRACTICA 2 6%

PRACTICA 3 6%

PRACTICA 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ásico

Juan Nadal, Lina. Programación: Notas de clase y ejercicios. Publicación interna del TCM 2020,

Complementario

Martí N., Ortega Y., Verdejo YA. Estructuras de datos y Métodos algorítmicos. Ejercicios resueltos. Ed. Ibergaceta Publicaciones, SL Edición 2.

 

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

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

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