Programación avanzada en C++

C++11 / 14 / 17
Lugar: Campus Puerta de Toledo
Edición octubre 2019: matrícula cerrada
Próxima edición: abril 2020

C++11, C++14, y más recientemente, C++17 han supuesto una revolución para muchos desarrolladores de software. Las nuevas revisiones del estándar permiten escribir código más fácil de mantener, al mismo tiempo que contienen sensibles modificaciones que afectan al rendimiento de las aplicaciones.

La mayoría de los compiladores han incorporado ya totalmente C++11 y C++14, así como una buena parte de C++17. Estas novedades de C++, incluidas en el curso, afectan la definición del lenguaje de programación, la nueva biblioteca estándar y el modelo de concurrencia del lenguaje.

Objetivos & Matrícula

El curso abarca las principales novedades que ofrece C++11, C++14 y C++17, y cómo pueden usarse para mejorar el desarrollo de software.

Se estudiará el impacto de estas novedades sobre el rendimiento y la facilidad de mantenimiento del software; los cambios más útiles para desarrolladores de aplicaciones y de bibliotecas; las oportunidades y limitaciones que ofrece C++11 para el desarrollo de aplicaciones concurrentes de forma portable.

Además se obtendrá una visión inicial de los próximos cambios previstos en las revisiones del estándar de C++ (C++20 y especificaciones técnicas).

Dirigido a desarrolladores con experiencia en el desarrollo en C++98/03 interesados en el paso a C++11/14/17. Los asistentes deberían tener experiencia en el uso de las principales características de C++98/03, con especial énfasis en programación genérica, así como en el uso de la biblioteca estándar.

Aquellas personas interesadas en matricularse deberán cumplimentar el formulario de inscripción y enviar su CV a formacion@fund.uc3m.es

Precio del curso: 490€

*Bonificable por Fundae

Lo que vas a aprender durante el curso

Sesión 1
De 9 a 13h y de 14 a 18h
Parte I: Lenguaje

Generalidades y Sistema de tipos Preprocesador / Aserciones en tiempo de compilación / Nuevos tipos primitivos / Puntero nulo / Caracteres Unicode / Inferencia de tipos / Bucles basados en rango / Nuevos enumerados / Nuevas conversiones contextuales / Separadores de dígitos en literales / Literales binarios

Iniciación Sintaxis uniforme de iniciación: Iniciación no uniforme / Iniciación uniforme / Semántica de iniciación uniforme / Variaciones sintácticas / Iniciación y estrechamiento Listas de iniciación: Extensión de iniciación uniforme / Constructores de lista de iniciación / Listas de iniciación como parámetro / Listas de iniciación y sobrecarga / Listas de iniciación y auto

Desarrollo de clases Semántica de movimiento/ Especificación noexcept / Constantes en tiempo de compilación: constexpr / Requisitos relajados para constexpr / Funciones miembro por defecto y eliminadas / Iniciación de miembros no estáticos / Iniciación de miembros agreagados / Constructores delegados y constructores heredados / Operadores explícitos de conversión / Control de herencia: override y final / Atributo [[deprecated]].

Novedades globales Espacios de nombre en línea / Sintaxis sufija de funciones / decltype y declval / Deducción de tipo de retorno y decltype(auto) / Literales definidos por el usuario / Uniones generalizadas / Asignación de memoria optimizada / Liberación de memoria con tamaño

Soporte a programación genérica Expresiones lambda / Capturas con iniciación / Expresiones lambda genéricas / Plantillas externas / Alias de plantilla y alias de tipos / Plantillas de variable / Clases locales y argumentos de plantilla / Plantillas con número variable de argumentos

Sesión 2
De 9 a 13h y de 14 a 18h
Parte II: La biblioteca estándar

Soporte para metapogramación Funciones sobre tipos / Type traits y soporte para metaprogramación / Transformation traits / Evaluación de constantes integrales / Secuencias enteras en tiempo de compilación.

Utilidades Smart pointers / Acceso a tuplas por tipo /Alias para metafunciones / Evoltorios de funciones / bind() 

Biblioteca de tiempo / Biblioteca de excepciones y errores del sistema / Literales definidos por el usuario en la biblioteca estándar.

Mejoras a la STL Contenedores / Iteradores / Algoritmos / Algoritmos no modificantes robustos / Objetos función mejorados / Búsqueda heterogénea en contenedores asociativos.

Tratamiento de cadenas Expresiones regulares / Conversiones de cadenas numéricas / Entrada & salida delimitada.

Sesión 3
De 9 a 13h y de 14 a 18h
Parte III: Concurrencia

Introducción a la concurrencia Concurrencia en C++ / Hilos / Acceso a datos compartidos / Mecanismos de espera / Futuros y promesas / Tareas asíncronas.

Modelo de memoria y tipos atómicos Modelo de memoria / Tipos atómicos / Relaciones de ordenación / Modelos de consistencia / Barreras

Hilos La clase thread / Construcción e identidad / Terminación de hilos / Espacio de nombres this_thread / Almacenamiento local al hilo

Exclusión mutua Objetos mutex / Utilidades para mutex / Adquisición múltiple / Variables condición / Cerrojos compartidos.

Futuros y promesas Promesas / Tareas empaquetadas / Futuros y futuros compartidos / Ejecución asíncrona de tareas.

Parte IV: Introducción a C++17

Cambios menores Trigrafos / Palabra reservada register / Incremento de booleanos / Especificaciones dinámicas de excepciones / Clase auto_ptr / Reglas para iniciación / static_assert

Aclaraciones Orden de evaluación / Elusión de copia / Excepciones y punteros a función / Memoria dinámica sobre-alineada /

Programación genérica Deducción de argumentos de plantilla de clase / Deducción de valores en plantillas / Plegamiento de expresiones / If en tiempo de compilación / Otros cambios en programación genérica / Atributos en C++11/14 / Nuevos atributos / Otras modificaciones sobre atributos / Vinculación estructurada / Iniciación en if y switch / Variables inline

Algoritmos paralelos Políticas de ejecución / Visión general / Algoritmos no numéricos / Algoritmos numéricos.

Acceso al sistema de ficheros

Nuevos tipos de la biblioteca Valores generalizados / Valores opcionales / Registros con variantes / Vistas sobre cadenas.

Profesorado

José Daniel García

Profesor Titular de Arquitectura y Tecnología de Computadores de la Universidad Carlos III de Madrid

Es profesor titular de Arquitectura de Computadores en la Universidad Carlos III de Madrid. Ha sido investigador visitante en la Universidad de Modena (Italia) y Profesor Visitante en la Universidad de Texas A&M (USA), donde estuvo trabajando con el Prof. Bjarne Stroustrup, creador del lenguaje C++. Así mismo, durante años ha trabajado en la industria desarrollando proyectos que hacían uso del lenguaje C++ en los sectores como la ingeniería civil, tecnología médica o el  aeroespacial.

Ha liderado la participación de la UC3M en proyectos financiados por la Comisión Europea para la la transformación de aplicaciones C++ para su ejecución en arquitecturas paralelas heterogéneas (REPARA) y la mejora los métodos de desarrollo de software para sistemas multi-core (RePhrase). Así mismo, ha desarrollado proyectos de colaboración entre la UC3M y empresas nacionales para la mejora de software desarrollado en C++ en sectores como las finanzas o la energía.

Es el presidente del comité español de normalización del lenguaje C++ (AENCTN71/SC22/GT21). Así mismo, desde 2008 representa a España en el comité internacional de normalización de C++ (ISO/IEC JTC1/SC22/WG21), donde ha participado en la elaboración de los estándares C++11, C++14 y C++17 habiendo realizado contribuciones a los mismos. Es autor de una de las principales cambios en el próximo C++20 para dar soporte a la programación basada en contratos.

Menú

Esta web utiliza cookies propias y de terceros para analizar su navegación y ofrecerle un servicio más personalizado acorde a sus intereses. Continuar navegando implica la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies