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#
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).
Definición.
Operaciones básicas.
Diferentes implementaciones.
Definición.
Operaciones básicas.
Diferentes implementaciones.
Tipos de árboles. Tipos de grafos.
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.
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.
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.
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).
Aspectos básicos.
Genericidad restringida y no restringida.
Metaprogramación: ejecución de código en tiempo de compilación.
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.
Cómo implementan diferentes lenguajes de programación las
características explicadas hasta ahora. Java, C#, D, Python, etc…
Simulación en un lenguaje no orientado a objetos de herencia de
clases, paso de mensajes, enlace dinámico y variables de clase.
Creación y paso de tests.
Automatización del paso de tests y recogida de datos con el uso de
CTest (CMake).