Проектирование больших систем на С++

Материал из Кафедра математической кибернетики
Версия от 12:14, 2 января 2020; KonovodovV (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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

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

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

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

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

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

Суммарная оценка за задания по курсу выставляется из 50 баллов. Для студентов 421 группы задание 1 оценивается как дополнительное, вес задания 0.5.

Задание 1

Задание обязательно для всех, кроме студентов 421ой группы. Срок сдачи задания: 5 ноября 2019 г. 23:59.

Задание 2

Задание обязательно для всех.

Срок сдачи задания для всех, кроме студентов 421ой группы: 7 декабря 2019 г. 23:59.

Студенты 421ой группы сдают это задание в рамках практикума.

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

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

Занятие 2. Разбор задач из теста. Особенности языка C++11/14/17: псевдонимы, constexpr, структурное связывание, variadic templates, lambda-функции.

Занятие 3. Особенности lambda-функций. Неупорядоченные контейнеры hashmap/hashset. Функторы и связыватели. std::bind, std::invoke, std::apply.

Занятие 4. Ссылки и копии. Алиасинг. Невладеющий std::string_view. Типы ссылок. Move-семантика. RVO.

Занятие 5. Проблемы перегрузки с универсальными ссылками. Операторы new и delete. Умные указатели. std::shared_ptr, std::unique_ptr.

Занятие 6. Указатель std::weak_ptr. Рекурсивный шаблон CRTP. Идиома PImpl.

Занятие 7. Паттерны проектирования Bridge, Command, Strategy, Singleton.

Занятие 8. Паттерны проектирования Decorator, Observer, Factory.

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

Занятие 10. Правило SFINAE, примеры. Способы тестирования кода. Unit-тестирование и устранение зависимостей.

Занятие 11. Mock-объекты в тестировании. Поиск проблем с помощью gdb, strace. Обработка ошибок и исключений.

Занятие 12. Исключения в стандартной библиотеке, std::exception_ptr, идиома ValueOrError. Итераторы и iterator_traits в C++17.

Занятие 13. Оптимизация программ на C++. Оптимизации строк, идиома COW. Оптимизация алгоритмов.

Занятие 14. Оптимизация программ на С++: функции, инструкции, размещение в динамической памяти. Дополнения: строковые литералы, идиома X macro.

Критерии оценок

Таблица результатов 2019 ссылка

Экзамен по курсу письменный. Максимальная сумма баллов – 50. Баллы, полученные за выполнение домашних заданий (максимум – 50), дополнительных задач и тестов на занятиях, суммируются с баллами, полученными за экзамен.

  • Оценка отлично: не менее 80 баллов
  • Оценка хорошо: не менее 70 и не более 79 баллов
  • Оценка удовлетворительно: не менее 55 и не более 69 баллов

Примерный вариант экзаменационной работы (pdf)

Литература

  • С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.
  • Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.
  • CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
  • Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности.
  • Anthony Williams. C++ Concurrency in Action: Practical Multithreading.
  • А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.
  • Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования.
  • Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.
  • Б. Страуструп, Язык программирования С++, 4-е издание.
  • Б. Страуструп, Программирование. Принципы и практика использования C++.
  • Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.