Teoría
En esta sección se lista el temario de la asignatura con un enlace individual para cada uno y un breve resumen con su contenido. Dispones también de un menú a la izquierda para navegar por los diferentes temas y otro a la derecha con un mapa de la página que estás visualizando en cada momento.
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.
- Tienes la guía docente de la asignatura para más información sobre la asignatura.
2. Temario.
Tema 0: Presentación de la asignatura.
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).
Tema 2: Tipos abstractos de datos: Listas (Simples, Dobles), Pilas, Colas.
- Definición.
- Operaciones básicas.
- Diferentes implementaciones.
Tema 3: Tipos abstractos de datos: Árboles, Grafos.
- Definición.
- Operaciones básicas.
- Diferentes implementaciones.
- Tipos de árboles. Tipos de grafos.
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.
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.
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.
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).
Tema 8: Genericidad.
- Aspectos básicos.
- Genericidad restringida y no restringida.
- Metaprogramación: ejecución de código en tiempo de compilación.
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.
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…
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.
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).