Saltar al contingut Menu
Mapa
  • Inicio
  • Información
  • Contacto
  • Mapa

Prácticas de Programación (PRAP)

Créditos Dept. Tipo Requisitos
7.5 (6.0 ECTS) CS
  • Obligatoria para la EI
  • Obligatoria para la ETIG
  • Obligatoria para la ETIS
P1 - Prerequisito para la EI , ETIG , ETIS

Profesores

Responsable:  (-)
Otros:(-)

Objectivos Generales

Profundizar en el aprendizaje de la programación estructurada. Introducir técnicas para diseñar programas de tamaño medio. Proporcionar al estudiante una mayor experiencia en el campo de la programación mediante la realización de prácticas. Ampliar el dominio de la recursividad como herramienta de construcción de programas.

Objectivos Específicos

Conocimientos

  1. Comprender los conceptos de módulo y de abstracción de datos.
  2. Aprender técnicas de descomposición modular de programas.
  3. Tener un primer contacto con las estructuras de datos lineales y arborescentes.
  4. Acostumbrarse a analizar la eficiencia de los programas como un criterio más de calidad.
  5. Adquirir conceptos básicos de programación orientada a objetos.
  6. Conocer la técnica de diseño recursivo por inmersión y su relación con la iteración.

Habilidades

  1. Crear nuevos tipos de datos, separando las fases de especificación e implementación.
  2. Descomponer un problema de cierto tamaño en módulos independientes.
  3. Producir programas de tamaño medio fiables y fáciles de entender, modificar, mantener y reusar.
  4. Codificar en un lenguaje orientado a objetos un diseño modular.
  5. Usar módulos predefinidos.
  6. Escribir programas recursivos sobre tipos no necesariamente básicos y poder razonar sobre su corrección y eficiencia.

Competencias

  1. Capacidad para entender problemas: ante el enunciado de un problema, distinguir los datos (o los elementos de partida), las incógnitas (o lo que se pide) y las hipótesis y leyes aplicables.
  2. Capacidad de abstracción. Capacidad para enfrentarse a problemas nuevos recorriendo conscientemente a estrategias que han sido útiles en problemas resueltos anteriormente.
  3. Capacidad para argumentar lógicamente las decisiones tomadas, el trabajo hecho o un punto de vista. Capacidad para dar opiniones, razonamientos y justificaciones fundamentadas con tal de convencer.
  4. Capacidad para presentar por escrito, de forma clara y correcta, los resultados del propio trabajo (al nivel de documentar una entrega de prácticas).
  5. Capacidad de organización del trabajo personal: capacidad para establecer prioridades entre varias tareas, para planificar el tiempo y por elaborar y organizar el propio material de trabajo.

Contenidos

Horas estimadas de:

T P L Alt L Ext. Est O. Ext.
Teoria Problemas Laboratorio Otras actividades Laboratorio externo Estudio Otras horas fuera del horario fijado

1. Introducción a los módulos
T      P      L      Alt    L Ext. Est    O. Ext. Total 
6,0 0 12,0 0 8,0 3,0 0 29,0
Descomposición de problemas complejos. Reusabilidad. Modularidad. Independencia de la representación. Especificación de módulos: datos y operaciones.

Jerarquía de módulos. Enriquecimientos.

Uso de módulos. Programación con módulos predefinidos. Especificación y uso de tipo de datos genéricos: pilas, colas, listas y árboles binarios.

Implementación de módulos. Implementación de nuevos tipos: el constructor Tupla.





  • Laboratorio:
    En las sesiones se muestran ejemplos de uso de módulos ya traducidos a C++. A continuación los alumnos resuelven varios ejercicios.

2. Diseño modular
T      P      L      Alt    L Ext. Est    O. Ext. Total 
6,0 0 9,0 0 6,0 3,0 0 24,0
Se presentan las técnicas para descomponer programas en módulos satisfaciendo los requisitos de calidad introducidos anteriormente.



Entre otros temas, se incluyen:



- Descomposición de problemas complejos.

- Abstracción funcional y de datos.

- Refinamientos sucesivos.

- Diseño ascendente/descendente.



Los conceptos y técnicas se ilustran con casos de estudio.

Al mismo tiempo se repasan los conocimientos algorítmicos vistos en la asignatura Programación 1.





  • Laboratorio:
    En las sesiones se retoman los casos de estudio vistos en las clases de teoría y se trabaja su traducción a C++.

3. Proyecto de laboratorio
T      P      L      Alt    L Ext. Est    O. Ext. Total 
0 0 21,0 0 42,0 0 0 63,0
Se trata de un trabajo individual donde el alumno debe resolver un problema de complejidad media. Se deberán aplicar tanto los conocimientos de diseño modular y orientado a objetos, vistos en los contenidos 1 y 2, como los conocimientos de Programación a pequeña escala estudiados en el curso anterior.



Los temas de ayuda al desarrollo del proyecto que se tratarán en las sesiones de laboratorio serán los siguientes:



1. Codificación en C++.

2. Bibliotecas (libraries).

3. Depuración y prueba de programas ("debugging" y "testing").

4. Entrada/salida con ficheros de texto.



  • Laboratorio:
    El proyecto se estructurará de forma que se pueda resolver incrementalmente durando varias semanas del curso, con supervisión semanal y entregas parciales.
  • Actividades de laboratorio adicionales:
    El alumno deberá invertir un cierto tiempo fuera de clase para preparar las sesiones de supervisión y la documentación para las diversas entregas. El alumno podrá hacer consultas a los profesores fuera de clase (con cita previa). También la traducción a C++ se puede hacer en horario libre.

4. Programación recursiva
T      P      L      Alt    L Ext. Est    O. Ext. Total 
4,0 0 0 0 0 4,0 0 8,0
Inmersión/generalización de una función. Cómo y cuándo generalizar funciones en el diseño recursivo. Relación entre los nuevos parámetros de las funciones recursivas generalizadas y las variables locales en las iteraciones.

5. Mejoras de eficiencia en programas recursivos e iterativos
T      P      L      Alt    L Ext. Est    O. Ext. Total 
4,0 0 0 0 0 4,0 0 8,0
El problema de repetir cálculos en un programa. Cómo evitar repetir cálculos. Recursividad: nuevos parámetros y/o resultados (inmersiones por razones de eficiencia). Iteración: nuevas variables locales.

6. Tipos recursivos
T      P      L      Alt    L Ext. Est    O. Ext. Total 
4,0 0 0 0 0 4,0 0 8,0
Introducción al uso de tipos recursivos. Definiciones recursivas de tipos. Implementación de los tipos abstractos de datos mediante tipos recursivos. Implementación de las operaciones básicas.

7. Combinación de recursividad e iteración
T      P      L      Alt    L Ext. Est    O. Ext. Total 
4,0 0 0 0 0 4,0 0 8,0
Algoritmos de búsqueda exhaustiva. Algoritmos de cálculo de objetos combinatorios.


Total por tipo T      P      L      Alt    L Ext. Est    O. Ext. Total 
28,0 0 42,0 0 56,0 22,0 0 148,0
Horas adicionales dedicadas a la evaluación 6,0
Total horas de trabajo para el estudiante 154,0

Metodología docente

En clase de teoría el profesor presenta los nuevos conceptos, argumentando su utilidad y mostrando mediante ejemplos cómo se utilizan.

En clase de laboratorio hay una primera parte basada en la resolución de ejercicios pequeños por parte del alumno.



En la segunda parte se publica un enunciado para un programa algo más grande que el alumno resolverá con la supervisión personalizada del profesor. Este proceso incluirá entregas intermedias de partes de la solución, con el fin de orientar al alumno en la dirección correcta.

Método de evaluación

La nota final de la asignatura se calcula así:

65% práctica + 35% examen final

La nota de la práctica se obtiene a partir de dos notas, procedentes de la evaluación de:

- El desarrollo de la Práctica, reflejado en el Informe de Resolución y en la Codificación en C++ de la Práctica, que conjuntamente valdrán el 55%.
- Un Control sobre los contenidos de la Práctica, que valdrá el otro 45%. Este control se convocará como si fuera un examen parcial.

Cualquier intento de fraude realizado durante el curso comportará la aplicación de la normativa académica general de la UPC i el inicio de un proceso disciplinario.

Bibliografía básica

  • Rubio, Albert, Valles, Borja Apunts de PRAP, web de l'assignatura, 2004.
  • Valles, Borja Laboratori de PRAP , Web de l'assignatura, 2004.
  • Cortadella J., Rubio A., Valentín L. Programació 1 (notes de curs), CPET, 2001.

Bibliografía complementaria

  • Jorge Castro ... [et al.] Curs de programació, McGraw-Hill,, 1992.
  • Balcázar, José Luis Programación Metódica, McGraw-Hill, 1993.
  • Barbara Liskov and John Guttag Abstraction and specification in program development, The MIT Press / McGraw-Hill, 1986.
  • Roura, Salvador Normes de Programació de P1, Pàgina web de l'assignatura P1, .
  • Pozo, Salvador y otros C más más con clase, http://www.conclase.net/c/index.php, .

Enlaces web

  1. http://www.lsi.upc.es/~prap/prap.html


Capacidades previas

Conocimientos y habilidades de programación básica y del lenguaje de programación C++.


Compartir

 
logo FIB © Facultad de Informática de Barcelona - Contacto - RSS
Esta web utiliza cookies propias para ofrecerle una mejor experiencia y servicio. Si continúa la navegación, entendemos que acepta nuestra política de cookies. Versión clássica Versión móvil