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

Материал из Кафедра математической кибернетики
Перейти к: навигация, поиск
(Содержание курса)
(Задание 2)
Строка 19: Строка 19:
 
===Задание 2===
 
===Задание 2===
 
Задание обязательно для всех.
 
Задание обязательно для всех.
Срок сдачи задания: 7 декабря 2019 г. 23:59.
+
Срок сдачи задания для всех, кроме студентов 421ой группы: 7 декабря 2019 г. 23:59.
 +
Студенты 421ой группы сдают это задание в рамках практикума.
 
* [[Media:Pbscpp_problem2_2019.pdf|Условие]].
 
* [[Media:Pbscpp_problem2_2019.pdf|Условие]].
  

Версия 12:28, 27 ноября 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. Обработка ошибок и исключений.

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

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

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

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

Литература

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