Logo

Programación 2

Código: 107890
Créditos: 6
2026/2027
Titulación Tipo Curso
Ingeniería Informática FB 1

Profesor/a de contacto

Nombre :
Jorge Bernal Del Nozal
Correo electrónico :
jorge.bernal@uab.cat

Equipo docente

Mireia Bellot Garcia
Yael Tudela Barroso
Antonio Lozano Bagen
Miguel Hernández Cabronero
Marc Ortega Gil
Miguel Carpio Miranda

Idiomas de los grupos

Puede consultar esta información al final del documento.

Prerrequisitos

Información importante: la guía docente ha sido redactada con el catalán como idioma base. Es posible que la traducción al castellano no sea perfecta, pese que se ha hecho de manera manual y se ha revisado a conciencia. Si detectáis algún error o inconsistencia, por favor contactad con el profesor responsable.

La asignatura no tiene ningún prerrequisito oficial. De todas formas, se asume que el estudiante ha cursado la asignatura previa de Programación I y, por tanto, está familiarizado con las estructuras básicas de la programación.

Objetivos

Esta asignatura forma parte de la materia 3 (Informática) del Grado de Ingeniería Informática y debe verse como la continuación lógica de Programación I. El objetivo básico es profundizar en las nociones básicas de la programación imperativa introducidas en Programación I e introducir los principios de la programación orientada a objetos. De esta forma, los objetivos formativos que se proponen para la asignatura son los siguientes:

  • Entender el ciclo de vida del desarrollo software: analizar el problema (entender lo que se nos pide), diseño (proponer una solución al problema), implementación (codificación en un lenguaje de programación de la solución escogida), prueba (realización de un test de forma sistemática para asegurar la corrección de la solución implementada).
  • Entender el concepto de algoritmo como herramienta de resolución de problemas con el ordenador y aprender los conceptos fundamentales de la algorítmica.
  • Comprender las principales estructuras de la programación imperativa y utilizarlas correctamente para resolver problemas algorítmicos de cierta complejidad.
  • Conocer las diferentes estructuras para representar información dentro de los algoritmos, tanto los tipos de datos estáticos (tablas, registros y cadenas de caracteres) como los tipos de datos dinámicos (pilas, colas, listas), para poder utilizar la estructura de datos más adecuada para representar la información asociada a un problema algorítmico.
  • Entender y aplicar correctamente los principios básicos de la programación orientada a objetos: concepto de clase y encapsulamiento de datos.
  • Dotar al alumno de la capacidad de diseño de algoritmos para la resolución de problemas complejos, introduciendo de forma progresiva y sistemática una metodología rigurosa y estructurada de programación, basada fundamentalmente en la técnica del diseño descendente de algoritmos.
  • Programar en un lenguaje de programación real y conocer las distintas fases de desarrollo de un programa: escritura, compilación y montaje y ejecución y prueba.
  • Desarrollar los programas siguiendo unas normas de estilo tendentes a conseguir programas de calidad. Dentro de estas normas de estilo se engloban aquéllas que facilitan la comprensión del código, como pueden ser el uso de comentarios, la indentación del código, la utilización de nombres adecuados por variables y funciones, etc.
  • Ser capaz de realizar un ejercicio de abstracción para poder trasladar los conceptos teóricos de la asignatura, especialmente los relativos a la programación orientada a objetos, a diferentes lenguajes de programación, como pueden ser C++ o Python

Resultados de aprendizaje

  • CM04 (Validar las soluciones propuestas a problemas del ámbito de la informática en función de sus requisitos y atendiendo a las condiciones establecidas) Validar las soluciones propuestas a problemas del ámbito de la informática en función de sus requisitos y atendiendo a las condiciones establecidas
  • KM06 (Identificar los conceptos básicos de la programación estructurada, modular y orientada a objetos, así como las herramientas y entornos de desarrollo para la creación de software de calidad) Identificar los conceptos básicos de la programación estructurada, modular y orientada a objetos, así como las herramientas y entornos de desarrollo para la creación de software de calidad
  • KM07 (Identificar los tipos de datos simples y las estructuras de datos complejas de los lenguajes de programación de alto nivel, así como su almacenamiento en memoria) Identificar los tipos de datos simples y las estructuras de datos complejas de los lenguajes de programación de alto nivel, así como su almacenamiento en memoria
  • SM09 (Analizar las necesidades de programación de un sistema informático desde el punto de vista de la necesidad del cliente) Analizar las necesidades de programación de un sistema informático desde el punto de vista de la necesidad del cliente
  • SM10 (Utilizar herramientas para el análisis, diseño, codificación y depuración de programas) Utilizar herramientas para el análisis, diseño, codificación y depuración de programas
  • SM11 (Desarrollar software de pequeña o mediana complejidad para resolver problemas utilizando programación estructurada y orientada a objetos) Desarrollar software de pequeña o mediana complejidad para resolver problemas utilizando programación estructurada y orientada a objetos
  • SM12 (Demostrar habilidades para trabajar cooperativamente en el desarrollo de aplicaciones informáticas) Demostrar habilidades para trabajar cooperativamente en el desarrollo de aplicaciones informáticas

Contenidos

Tema 0: Introducción. Repaso de herramientas de desarrollo (IDE, Git)


Tema 1: Introducción a la programación orientada a objetos


  • Introducción al concepto de clase. Métodos y atributos. Parte privada y pública. Constructores y destructores.
  • Encapsulamiento de datos.
  • Composición de clases. Herencia.
  • Persistencia y serialización de objetos. Manejo de ficheros.
  • Complejidad Computacional.


Tema 2: Estructuras de datos dinámicos


  • Concepto de apuntador. Operaciones con apuntadores.
  • Objetos dinámicos. Arrays dinámicos
  • Representación e implementación de estructuras de datos dinámicos: listas, pilas y colas.


Tema 3: Standard Template Library


  • Introducción al concepto de Template
  • Utilización de estructuras de datos dinámicas con la librería STL (vector, lista, cola, pila)


Tema 4: Introducción a Python


  • Sintaxis básica. Estructuras condicionales, iterativas, funciones.
  • Orientación a objetos.
  • Serialización de objetos. Archivos.
  • Estructuras de datos (dictionarios, sets, listas)

Actividades formativas y Metodología

Título Horas ECTS Resultados de aprendizaje
Seguimiento de la resolución del proyecto de programación 1 0,04 CM04, SM09, SM10, SM11
Estudio individual para preparar pruebas de evaluación 11 0,44 KM06, KM07, SM09, SM11
Resolución de problemas 36 1,44 CM04, KM06, KM07, SM10, SM11
Realización del proyecto de programación 48 1,92 CM04, KM06, KM07, SM09, SM10, SM11, SM12
Sesiones de teoría y ejercicios 50 2 CM04, KM06, KM07, SM09, SM10, SM11

La metodología docente de la asignatura parte del principio de que “programar es la única manera de aprender a programar” y, por tanto, se centrará principalmente en el trabajo práctico del estudiante. Las sesiones presenciales se organizarán para introducir los contenidos teóricos de la asignatura desde una perspectiva muy práctica, a partir de ejemplos, ejercicios y problemas de programación que deberán resolverse en clase directamente con el ordenador. Uno de los objetivos de la asignatura es separar los conceptos teóricos (como la definición de una clase o el tratamiento de ficheros) de su implementación en un lenguaje de programación específico, aunque el lenguaje vehicular de la asignatura será C++.


Además de la explicación de los conceptos teóricos y la resolución de pequeños problemas a modo de ejemplo durante las clases, los estudiantes deberán realizar, en grupos de dos, un proyecto de programación que se desarrollará de forma autónoma durante todo el curso, fuera de las sesiones presenciales. Este proyecto permitirá abordar un problema de programación con cierta complejidad, integrando la mayoría de los conceptos explicados durante el curso. A lo largo del curso, se pueden dedicar algunas sesiones presenciales al control, seguimiento y evaluación del trabajo realizado.


Finalmente, también se propondrá un conjunto de ejercicios y actividades complementarias (como cuestionarios) que deberán resolverse de forma individual a lo largo del curso. Todos los ejercicios que forman parte de la evaluación se harán durante las sesiones de clases, con el objetivo de que el profesor o profesora acompañe en el proceso de aprendizaje mientras este se realice en el aula. Asimismo, se propondrán ejercicios adicionales para que los estudiantes puedan practicar en casa, sin que tengan peso en la nota. Esto es debido a la proliferación del uso de la IA en la elaboración de estos ejercicios por parte de los estudiantes, que les hace confiarse de cara a haber asimilado unos conocimientos que no han adquirido de manera efectiva. Por tanto, este año se dará todo el peso a actividades donde el profesor pueda asegurarse de que el estudiante ha realizado la tarea que tiene asignada.


En todas las actividades del curso (sesiones presenciales, problemas y prácticas) se utilizará principalmente el lenguaje de programación C++, aunque también se explicará de forma complementaria cómo codificar los conceptos más importantes utilizando Python.


En cuanto a la presencialidad, la asignatura no distinguirá entre sesiones de teoría, problemas y prácticas. Las sesiones presenciales se organizarán en cuatro horas semanales en grupos de unos 40 estudiantes. Durante estas sesiones se trabajarán los conceptos detallados en el temario de la asignatura. En algunos casos, se pondrán a disposición del estudiante vídeos explicativos que deberá visualizar antes de la clase. Las sesiones tendrán un enfoque muy práctico, con ejemplos y ejercicios que se plantearán para facilitar la comprensión y el aprendizaje de los conceptos explicados. Estos ejercicios se realizarán y discutirán durante la sesión, y servirán para introducir los contenidos de la asignatura y ver su aplicación práctica. Se recomienda que el estudiante lleve su propio ordenador portátil a clase, si dispone de uno, para poder realizar los ejercicios propuestos. Es importante tener en cuenta que el temario tiene una continuidad lógica a lo largo del curso, por lo que para poder seguir correctamente una clase es necesario haber asimilado lo explicado en las sesiones anteriores.


La gestión de la docencia de la asignatura se realizará a través del Campus Virtual de la UAB, que servirá para consultar los materiales, gestionar los grupos de prácticas, realizar las entregas correspondientes, consultar las calificaciones, comunicarse con el profesorado, etc.

Nota: se reservarán 15 minutos de una clase dentro del calendario establecido por el centro o por la titulación para que el alumnado rellene las encuestas de evaluación de la actuación del profesorado y de evaluación de la asignatura o módulo.

Evaluación

Actividades de evaluación continuada

Título Peso Horas ECTS Resultados de aprendizaje
Segundo examen parcial 45.5% 2 0,08 CM04, KM06, KM07, SM09, SM11
Primer examen parcial 19.5% 2 0,08 CM04, KM06, KM07, SM09, SM11
Actividades evaluables a realizar en clase 15% 0 0 CM04, KM06, KM07, SM09, SM10, SM11
Proyecto de programación 20% 0 0 CM04, KM06, KM07, SM09, SM10, SM11, SM12

Aquí tienes la versión en castellano con el mismo formato limpio y estructurado, manteniendo las fórmulas en texto normal:

La evaluación de la asignatura se basará en tres tipos de actividades:

  • Actividades de evaluación continua
  • Evaluación individual (exámenes parciales)
  • Proyecto de programación

La nota final de la asignatura se calculará combinando estas tres actividades mediante la siguiente fórmula:

Nota Final = (0,15 * Evaluación Continua) + (0,2 * Proyecto) + (0,65 * Evaluación Individual)

Es imprescindible obtener una nota igual o superior a 5 en el Proyecto de Programación y en la Evaluación Individual para optar a aprobar la asignatura. La Nota Final de la asignatura tendrá que ser igual o superior a 5 para aprobar.

1. Evaluación Continua (Individual)

Este apartado representa el 15% de la nota final e incluye:

  • Resolución y entrega de pequeños problemas durante las sesiones de clase.
  • Cuestionarios de autoevaluación en el Campus Virtual, realizados y entregados durante las sesiones de clase.
Importante: No se exige una nota mínima en este apartado, pero las actividades cuyas fechas de entrega hayan expirado no se podrán recuperar. Se recomienda participar activamente, ya que son clave para asimilar los conocimientos en tiempo real y permiten al profesorado adaptar las clases reforzando los conceptos que presenten más dudas.

2. Evaluación Individual

Este apartado representa el 65% de la nota final e incluye las pruebas individuales realizadas durante el curso:

  • Dos pruebas durante el periodo lectivo, un primer parcial y un examen final. El primer parcial no elimina materia de cara al examen final. El examen final contendrá contenidos explicados durante todo el curso.
  • Una prueba de recuperación, dirigida únicamente a estudiantes que no hayan superado la evaluación individual.

El cálculo de la nota de este bloque se realizará de la siguiente manera:

Evaluación Individual = máximo((0,3 * Nota Primer Parcial) + 0,7 * Nota Examen Final, Nota Examen Final)

Es necesario tener nota igual o superior a 5 en el Examen Final (o prueba de recuperación) para poder aprobar la Evaluación Individual y la asignatura.

3. Proyecto de Programación (Grupal e Individual)

Este apartado representa el 20% de la nota final e incluye:

  • Evaluación de las dos entregas del proyecto: una intermedia (Nota_Intermedia) y otra final (Nota_Final).
  • Seguimiento del proyecto durante el curso (Nota_Individual). Se podrá realizar una prueba de validación individual para garantizar la participación equitativa y efectiva de todos los miembros del grupo.

La nota del proyecto se calculará mediante la siguiente fórmula:

Nota Proyecto = (0,2 * Nota_Individual) + (0,3 * Nota_Intermedia) + (0,5 * Nota_Final)

Requisitos para aprobar el proyecto:

  • Obtener una nota mínima de 5 en la entrega final (Nota_Final).
  • Obtener una nota superior a 5 en el seguimiento del proyecto (Nota_Individual).

Recuperación del proyecto:

  • Se podrá recuperar la entrega final del proyecto en caso de que la nota de la entrega ordinaria no llegue al 5.
  • La prueba de validación individual podrá ser recuperada en el examen de recuperación.



Evaluación Única

El estudiantado que opte por la evaluación única deberá:

  • Entregar el proyecto de programación.
  • Realizar una prueba de evaluación individual que incluirá todo el contenido del curso.

Esta prueba individual será idéntica al examen final del resto de los estudiantes de la asignatura y requerirá una nota mínima de 5 para aprobar.

Cálculo de la nota final en evaluación única:

Nota Final = (0,15 * Proyecto) + (0,85 * Evaluación Individual)

Las notas mínimas requeridas para aprobar y el sistema de recuperación son los mismos que los aplicados en la evaluación continua.



Casos Especiales en las Calificaciones Finales

  • No Evaluable (NA): Se considerará no evaluable a aquel alumno que no participe en ninguna de las actividades evaluables de la asignatura.
  • Suspenso: Si no se supera la asignatura porque alguna de las actividades no alcanza la nota mínima exigida, la calificación numérica que constará en el expediente será el valor menor entre 4,5 y la media ponderada de las notas.
  • Matrícula de Honor (MH): La concesión de esta calificación es decisión exclusiva del profesorado. De acuerdo con la normativa de la UAB, solo se podrán conceder a estudiantes con una nota final igual o superior a 9,00, hasta un máximo del 5% del total de alumnos matriculados. El criterio de asignación será la nota final de la asignatura.


Revisión de Calificaciones

Para cada actividad de evaluación se publicará el lugar, la fecha y la hora de la revisión, espacio en el que el estudiante podrá examinar su prueba junto al profesorado y presentar reclamaciones. Si el estudiante no asiste en el horario establecido, perderá el derecho a revisar dicha actividad posteriormente.


Estudiantes Repetidores

Esta asignatura no contempla un tratamiento diferenciado para el alumnado repetidor. Al tratarse de una asignatura nueva con un equipo docente y una metodología renovados, no se convalidará ninguna nota de teoría, actividad de evaluación continua ni proyecto de años anteriores.


Nota Important: Copias y Plagios

Cualquier irregularidad cometida por un estudiante que pueda afectar a la calificación de una actividad evaluable será sancionada con una nota de cero (0) en dicha actividad, la cual no será recuperable. Si la actividad es obligatoria para aprobar la asignatura, esta se considerará suspendida automáticamente sin posibilidad de recuperación en el mismo curso.

Las irregularidades incluyen, entre otras:

  • Copia total o parcial de una práctica, informe o actividad de evaluación.
  • Permitir que otros estudiantes copien.
  • Presentar un trabajo en grupo que no haya sido elaborado íntegramente por sus miembros.
  • Presentar como propios materiales de terceros (incluidas traducciones o adaptaciones).
  • Utilizar dispositivos de comunicación (móviles, relojes inteligentes, etc.) o comunicarse con otros alumnos durante las pruebas.
  • Utilizar materiales no autorizados explícitamente durante los exámenes.

En estos casos, la nota numérica en el expediente será el valor menor entre 3,0 y la media ponderada de las calificaciones, por lo que no será posible aprobar por compensación. Se utilizarán herramientas automáticas de detección de copia de código en todas las entregas.


Planificación y Uso de Herramientas

  • Planificación de Actividades
  • Las fechas de evaluación continua y de entrega de trabajos se publicarán al inicio del curso y podrán modificarse ante posibles incidencias. Todos los cambios se comunicarán formalmente a través de la plataforma Caronte, canal habitual de información de la asignatura.
  • Uso de la Inteligencia Artificial (IA)
  • Se permite el uso de tecnologías de IA exclusivamente como herramienta de apoyo (búsqueda de información, interpretación de código, resolución de dudas conceptuales, etc.).
  • Está estrictamente prohibido utilizar la IA para desarrollar las tareas de programación que deban entregarse. Cualquier trabajo que incluya fragmentos de código o texto generados por IA se considerará una falta de honestidad académica, tratándose como una irregularidad y pudiendo conllevar el suspenso directo de la asignatura.
  • Consideraciones Adicionales
  • Los siguientes trámites administrativos deberán gestionarse directamente a través de la Gestión Académica de la Escuela de Ingeniería:
  • Solicitud de traducción del material de evaluación a un idioma distinto del catalán.
  • Petición de reprogramación de pruebas de evaluación.
  • Solicitud para acogerse a la modalidad de evaluación única.
  • El profesorado no tiene potestad para tomar decisiones sobre estos aspectos y se limitará a aplicar las resoluciones de los órganos competentes de la Escuela.

Bibliografía

  • http://www.cplusplus.com/ : The C++ Resources Network
  • https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B: Programación en C++ - Wikilibros
  • https://www.sololearn.com/: SoloLearn
  • L. Joyanes, I. Zahonero: Programación en C: metodología, estructura de datos y objetos, Mc Graw-Hill, 2001.
  • B. Eckel. Thinking in C++, Volume 1: Introduction to Standard C++, Prentice-Hall, 1999.
  • B. Eckel. Thinking in C++, Volume 2: Standard Libraries and Advanced Topics, Prentice-Hall, 1999.
  • E. Valveny, R. Benavente, A. Lapedriza, M. Ferrer, J. García: Programació en Llenguatge C. Amb 56 problemes resolts i comentats. Servei publicacions UAB, 2009.
  • L. Joyanes, A. Castillo, L. Sánchez, I. Zahonero: Programación en C: libro de problemas, Mc Graw-Hill, 2002.
  • B.W. Kernighan, D.M. Ritchie: El lenguaje de programación C. 2ª Edición, Prentice Hall, 1986.
  • B.W. Kernighan, R. Pike: La Práctica de la Programación. Pearson Educación, 2000.
  • L. Joyanes Aguilar : Fundamentos de Programación: Algoritmos, Estructuras de Datos y Objetos. 3ª Edición, Mc. Graw-Hill, 2003.
  • J. Guttag. Introduction to Computation and Programming Using Python: With Application to Understanding Data. Second Edition. MIT Press. ISBN-10: 9780262529624.
  • S. Chazallet Python 3. Los fundamentos del lenguaje. Eni, ISBN-10: 2409006140.
  • Steven F. Lott. Mastering object-oriented Python. Packt publishing, 2014.

Software

Cualquier entorno de desarrollo en C++ y Python (Visual Studio Code)

Grupos e idiomas de la asignatura

La información proporcionada es provisional hasta el 30 de noviembre. A partir de esta fecha, podrá consultar el idioma de cada grupo a través de este enlace. Para acceder a la información, será necesario introducir el CÓDIGO de la asignatura

Tipo de docencia Grupo Idioma Semestre Turno
(PAUL) Prácticas de aula 411 Catalán/Español segundo cuatrimestre manaña-mixto
(PAUL) Prácticas de aula 412 Catalán/Español segundo cuatrimestre manaña-mixto
(PAUL) Prácticas de aula 431 Catalán/Español segundo cuatrimestre manaña-mixto
(PAUL) Prácticas de aula 432 Catalán/Español segundo cuatrimestre manaña-mixto
(PAUL) Prácticas de aula 451 Catalán segundo cuatrimestre tarde
(PAUL) Prácticas de aula 452 Catalán/Español segundo cuatrimestre tarde
(PAUL) Prácticas de aula 471 Catalán/Español segundo cuatrimestre tarde
(PAUL) Prácticas de aula 472 Catalán/Español segundo cuatrimestre tarde
(PAUL) Prácticas de aula 511 Catalán/Español segundo cuatrimestre manaña-mixto