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

Материал из Кафедра математической кибернетики
Перейти к: навигация, поиск
(Содержание курса)
(Содержание курса)
Строка 54: Строка 54:
 
* [https://github.com/konovodov/cmc_msu_cpp_course/tree/master/testing Ссылка на код про тесты с занятия].
 
* [https://github.com/konovodov/cmc_msu_cpp_course/tree/master/testing Ссылка на код про тесты с занятия].
 
* [[Media: pbscpp_task5.pdf|Задачи]].(больше не принимаются)
 
* [[Media: pbscpp_task5.pdf|Задачи]].(больше не принимаются)
 +
'''Занятие 12.''' Исключения в стандартной библиотеке, std::exception_ptr, идиома ValueOrError. Итераторы и iterator_traits в C++17.
 +
* [[Media: Lecture_pbscpp_12.pdf|Лекция 12]].
  
 
== Критерии оценок ==
 
== Критерии оценок ==

Версия 13:24, 4 декабря 2019


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

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

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

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

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

Задание 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.

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

Таблица результатов 2019 ссылка (знаки вопроса означают, что решение получено, но не проверялось; отсутствие знака вопроса не означает, что решение не получено)

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

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

Литература

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