Проектирование больших систем на С++ — различия между версиями

Материал из Кафедра математической кибернетики
Перейти к: навигация, поиск
Строка 2: Строка 2:
 
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:KonovodovV|Коноводов В.А.]]
 
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:KonovodovV|Коноводов В.А.]]
  
Занятия проходят по пятницам, с 8:45, в ауд. '''612'''.
+
Занятия в осеннем семестре 2018 г. завершены.
  
 
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с обобщенным программированием, интеллектуальными указателями, исключениями, паттернами проектирования, тестированием и отладкой кода, и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др.  
 
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с обобщенным программированием, интеллектуальными указателями, исключениями, паттернами проектирования, тестированием и отладкой кода, и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др.  
Строка 20: Строка 20:
 
Срок сдачи задания: 25 ноября 2018 г. 23:59.
 
Срок сдачи задания: 25 ноября 2018 г. 23:59.
 
* [[Media:Pbscpp_problem2_2018.pdf|Условие]].
 
* [[Media:Pbscpp_problem2_2018.pdf|Условие]].
 +
 +
===Задание 3===
 +
TBA
  
 
== Содержание курса ==
 
== Содержание курса ==

Версия 19:26, 7 декабря 2018

Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит Коноводов В.А.

Занятия в осеннем семестре 2018 г. завершены.

В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с обобщенным программированием, интеллектуальными указателями, исключениями, паттернами проектирования, тестированием и отладкой кода, и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др.

В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.

Таблица результатов (задачи, тесты на занятиях и т.п.) доступна по ссылке.

Задания по курсу

Задание 1

Срок сдачи задания: 31 октября 2018 г. 23:59.

Задание 2

Срок сдачи задания: 25 ноября 2018 г. 23:59.

Задание 3

TBA

Содержание курса

Занятие 1. Вводный тест. Особенности языка C++11. Вывод типов. Ключевые слова decltype и auto.

Занятие 2. Ключевые слова override и final. Удаленные функции. Псевдонимы. Перечисления с областью видимости. Объекты и функции constexpr.

Занятие 3. Функции constexpr, variadic templates, std::tuple, лямбда-выражения, функторы.

Занятие 4. Связыватели. move-семантика.

Занятие 5. Типы ссылок. Прямая передача. Проблемы перегрузки универсальных ссылок. Перемещающие операции.

Занятие 6. Выделение и распределение памяти. Умные указатели unique_ptr и shared_ptr.

Занятие 7. Указатель weak_ptr. enable_shared_from_this как пример CRTP. Идиома PImpl. Паттерн проектирования Bridge.

Занятие 8. Паттерны проектирования Command, Singleton, Strategy, Decorator, Observer, Abstract factory.

Занятие 9. Паттерн Visitor. Идиома Type Erasure. Правило SFINAE. Диспетчеризация дескрипторов.

Занятие 10. Шаблонное метапрограммирование. X-macro. Исключения. ValueOrException.

Занятие 11. Гарантии безопасности исключений и noexcept. Основные подходы к тестированию систем. Unit-тесты через google testing framework.

Занятие 12. Mock-объекты в тестировании и gmock. Отладка кода. Инструменты strace и gdb.

Занятие 13. Многопоточное программирование с использованием std::thread. Примитивы синхронизации. Потокобезопасность.

Программа курса

Программа курса (pdf)

Литература

  • С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.
  • Anthony Williams. C++ Concurrency in Action: Practical Multithreading.
  • А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.
  • Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования.
  • Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.
  • Б. Страуструп, Язык программирования С++, 4-е издание.
  • Б. Страуструп, Программирование. Принципы и практика использования C++.
  • Б. Страуструп, Дизайн и эволюция языка С++.
  • D. Abrahams, A. Gurtovoy C++ Template Metaprogramming.