1 Consejos

  • Lo que tienes a continuación son las transparencias empleadas en clase de teoría.
  • En clase se amplía de palabra el contenido que tienes en ellas.
  • Es importante que no te limites a escuchar y que tomes apuntes y preguntes dudas sobre lo que se explica. Cualquiera que te surja, por simple que te parezca.

2 Temario

2.1 Tema-0: Presentación de la asignatura.

2.2 Tema 1: Organización de la memoria. Tipos abstractos de datos.

  • El lenguaje de programación C++ (C++98, C++11, C++14, C++17, C++20, C++23).
  • Gestión y uso de memoria basada en la pila (stack), en almacenamiento global y en almacenamiento dinámico.
  • Introducción a los Tipos Abstractos de Datos (TADs).

2.3 Tema 2: Tipos abstractos de datos: Listas (Simples, Dobles), Pilas, Colas.

  • Definición.
  • Operaciones básicas.
  • Diferentes implementaciones.

2.4 Tema 3: Tipos abstractos de datos: Árboles, Grafos.

  • Definición.
  • Operaciones básicas.
  • Diferentes implementaciones.
  • Tipos de árboles. Tipos de grafos.

2.5 Tema 4: El paradigma orientado a objetos. Características básicas de los lenguajes orientados a objetos.

  • Presentación y justificación del modelo de programación orientado a objetos.
  • Requisitos para que un lenguaje se considere orientado a objetos.
  • C++ como lenguaje orientado a objetos.

2.6 Tema 5: Clases y objetos. Espacios de nombres.

  • Definición del concepto de clase y del concepto de objeto.
  • Diferentes tipos de clases (abstractas, metaclases, interfaces, etc…).
  • Concepto de espacio de nombres. Agrupación de símbolos en espacios de nombres.
  • Variables de clase y de instancia. Métodos de clase y de instancia.

2.7 Tema 6: Programación dirigida por eventos.

  • Conceptos básicos de este nuevo paradigma de programación (señal/evento, callback/slot, etc..).
  • Estructura básica de una aplicación según este nuevo paradigma.

2.8 Tema 7: Relaciones entre objetos. Herencia. Polimorfismo.

  • Tipos de relaciones entre objetos en ausencia de herencia (uso, composición).
  • Concepto de herencia entre clases. Herencia de implementación y herencia de interfaz.
  • Relación ‘Es un’ entre objetos. Concepto de polimorfismo.
  • Tipos de herencia (simple, múltiple).
  • Enlace dinámico: qué es. Ventajas e inconvenientes. Cómo influye en el diseño de lenguajes orientados a objetos (virtual, final).

2.9 Tema 8: Genericidad.

  • Aspectos básicos.
  • Genericidad restringida y no restringida.
  • Metaprogramación: ejecución de código en tiempo de compilación.

2.10 Tema 9: Excepciones. Patrón RAII.

  • Tratamiento de errores bajo el paradigma orientado a objetos.
  • Qué es una excepción, Jerarquía de clases de excepciones.
  • Cómo influye en el diseño de lenguajes orientados a objetos (try, throw, catch, finally).
  • Patrón de diseño RAII y tratamiento de excepciones.

2.11 Tema 10: Estudio de diversos lenguajes de programación orientados a objetos.

  • Cómo implementan diferentes lenguajes de programación las características explicadas hasta ahora. Java, C#, D, Python, etc…

2.12 Tema 11: POO con lenguajes no orientados a objetos.

  • Simulación en un lenguaje no orientado a objetos de herencia de clases, paso de mensajes, enlace dinámico y variables de clase.

2.13 Tema 12: Pruebas unitarias.

  • Creación y paso de tests.
  • Automatización del paso de tests y recogida de datos con el uso de CTest (CMake).

3 Ejemplos de preguntas de teoría.