P2IR: Curso 2022-2023. Teoría

Table of Contents

Home Avisos Prácticas Teoría Enlaces de interés Ficha de la asignatura

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.

Temario

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).

Ejemplos de preguntas de teoría.

Emacs 28.2 (Org mode 9.5.5)