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

Материал из Кафедра математической кибернетики
Перейти к: навигация, поиск
м
(Задание 3)
(не показана 41 промежуточная версия 1 участника)
Строка 1: Строка 1:
 +
{{DISPLAYTITLE:Проектирование больших систем на С++}}
 
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:KonovodovV|Коноводов В.А.]]
 
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:KonovodovV|Коноводов В.А.]]
  
Занятия проходят по пятницам, с 8:45, в ауд. '''609'''.
+
Занятия в осеннем семестре 2018 г. завершены.
  
 
+
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с обобщенным программированием, интеллектуальными указателями, исключениями, паттернами проектирования, тестированием и отладкой кода, и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др.  
----
+
'''Внимание!'''
+
 
+
Просьба студентам, которые собираются сдавать курс в качестве спецкурса, сообщить об этом  в произвольной форме по e-mail vkonovodov@gmail.com, указав ФИО и номер группы.
+
 
+
Экзамен для всех таких студентов (кроме 518/2 группы), пройдет в пятницу, 22 декабря, в 9.00 в ауд. ???
+
 
+
----
+
 
+
 
+
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с обобщенным программированием, интеллектуальными указателями, исключениями, паттернами проектирования и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др.  
+
  
 
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++.  
 
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++.  
 
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.
 
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.
  
 +
'''Таблица результатов''' (задачи, тесты на занятиях и т.п.) доступна по [https://goo.gl/Br2zAd ссылке].
  
== Содержание курса ==
+
==Задания по курсу==
 +
===Задание 1===
 +
Срок сдачи задания: 31 октября 2018 г. 23:59.
 +
* [[Media:Pbscpp_problem1_2018.pdf|Условие]].
 +
* [https://github.com/konovodov/cmc_msu_cpp_course/tree/master/problem1 Ссылка на код].
  
'''Занятие 1.''' Вводный тест. Вывод типов шаблонов и auto. Ключевое слово decltype. Инициализация с фигурными скобками.
+
===Задание 2===
 +
Срок сдачи задания: 25 ноября 2018 г. 23:59.
 +
* [[Media:Pbscpp_problem2_2018.pdf|Условие]].
  
'''[[Media: Lection_pbscpp_2.pdf|Занятие 2]].'''  Ключевые слова override и final. Удаленные функции. Псевдонимы. Перечисления с областью видимости. Объекты и функции constexpr.
+
===Задание 3===
 +
Срок сдачи задания: 30 декабря 2018 г. 23:59.
  
'''[[Media: Lection_pbscpp_3.pdf|Занятие 3]].'''  Лямбда-выражения, функторы и связыватели.
+
Тем, кто сдает зачет по курсу, нужно прислать решение до 25 декабря 2018г.
 +
* [[Media:Pbscpp_problem3_2018.pdf|Условие]].
  
'''Занятие 4.''' Семантика перемещения, std::move, перемещающие конструкторы и операторы перемещения, типы ссылок.
+
== Содержание курса ==
 +
'''Занятие 1.''' Вводный тест. Особенности языка C++11. Вывод типов. Ключевые слова decltype и auto.
  
'''[[Media: Lection_pbscpp_4.pdf|Занятие 5]].''' Универсальные ссылки, прямая передача, свертка ссылок, return value optimization, проблемы перегрузки.
+
'''Занятие 2.''' Ключевые слова override и final. Удаленные функции. Псевдонимы. Перечисления с областью видимости. Объекты и функции constexpr.
  
'''[[Media: Lection_pbscpp_6.pdf|Занятие 6]].'''  Операторы new, delete и аллокаторы. Умные указатели. std::unique_ptr.
+
* [[Media: Pbscpp_task_2018_2.pdf|Задачи к занятию 2]]. ''[c 29.09 решения задач больше не принимаются]''
 +
* [[Media: Lection_pbscpp_1_2_2018.pdf|Лекция 1-2]].
  
'''[[Media: Lection_pbscpp_7.pdf|Занятие 7]].'''   Указатели std::shared_ptr, std::weak_ptr, особенности использования make_shared.
+
'''Занятие 3.''' Функции constexpr, variadic templates, std::tuple, лямбда-выражения, функторы.
  
'''[[Media: Lection_pbscpp_8.pdf|Занятие 8]].'''  Идиомы CRTP, PIMPL. Примеры паттернов проектирования: Bridge, Command.
+
* [[Media: Pbscpp_task_2018_3.pdf|Задачи к занятию 3]]. ''[c 28.09 решение задачи больше не принимается]''
 +
* [[Media: Lection_pbscpp_3_2018_part1.pdf ‎|Лекция 3]].
  
'''[[Media: Lection_pbscpp_9.pdf|Занятие 9]].'''  Паттерны Singleton, Strategy, Decorator, Observer.
+
'''Занятие 4.''' Связыватели. move-семантика.
 +
* [[Media: Pbscpp_task_2018_4.pdf|Задачи к занятию 4]]. ''[с 05.10 решение задачи больше не принимается]''
  
'''[[Media: Lection_pbscpp_10.pdf|Занятие 10]].''' Создание объектов с помощью фабрик. Паттерн Visitor. Шаблонное метапрограммирование, std::enable_if, решение проблемы перегрузки и универсальных ссылок.
+
'''Занятие 5.''' Типы ссылок. Прямая передача. Проблемы перегрузки универсальных ссылок. Перемещающие операции.
 +
* [[Media: Lection_pbscpp_4_2018.pdf ‎|Лекция 5]].
  
'''[[Media: Lection_pbscpp_11.pdf|Занятие 11]].'''  Метапрограммирование с шаблонами и X-macro. Идиома Type Erasure.
+
'''Занятие 6.''' Выделение и распределение памяти. Умные указатели unique_ptr и shared_ptr.
 +
* [[Media: Lection_pbscpp_6_2018.pdf |Лекция 6]].
 +
* [[Media: Pbscpp_task_2018_6.pdf|Задачи к занятию 6]].  ''[с 19.10 решение задачи больше не принимается]''
  
'''[[Media: Lection_pbscpp_12.pdf|Занятие 12]].'''  Обработка ошибок.
+
'''Занятие 7.''' Указатель weak_ptr. enable_shared_from_this как пример CRTP. Идиома PImpl. Паттерн проектирования Bridge.
 +
* [[Media: Lection_pbscpp_7_2018.pdf |Лекция 7]].
 +
* [[Media: Pbscpp_task_2018_7.pdf|Задачи к занятию 7]].  ''[с 01.11 решение задачи больше не принимается]''
  
'''[[Media: Lection_pbscpp_13.pdf|Занятие 13]].'''  Введение в многопоточность. Примитивы синхронизации.
+
'''Занятие 8.''' Паттерны проектирования Command, Singleton, Strategy, Decorator, Observer, Abstract factory.
 +
* [[Media: Lection_pbscpp_8_2018.pdf |Лекция 8]].
  
'''[[Media: Lection_pbscpp_14.pdf|Занятие 14]].'''  Многопоточность. Некоторые особенности C++14 и C++17.
+
'''Занятие 9.''' Паттерн Visitor. Идиома Type Erasure. Правило SFINAE. Диспетчеризация дескрипторов.
 +
* [[Media: Lection_pbscpp_9_2018.pdf |Лекция 9]].
 +
* [[Media: Pbscpp_task_2018_9.pdf|Задачи к занятию 9]].  ''[с 08.11 решение задачи больше не принимается]''
  
== Задачи ==
+
'''Занятие 10.''' Шаблонное метапрограммирование. X-macro. Исключения. ValueOrException.
'''[[Media: Pbscpp_tasks.pdf|Условия задач]]''' (список обновляется).
+
* [[Media: Lection_pbscpp_10_2018.pdf |Лекция 10]].
  
== Экзамен ==
+
'''Занятие 11.''' Гарантии безопасности исключений и noexcept. Основные подходы к тестированию систем. Unit-тесты через google testing framework.
Экзамен по курсу письменный. В работе 15 заданий, на выполнение отводится 90 минут. Максимальная сумма баллов – 30.
+
* [[Media: Lection_pbscpp_11_2018.pdf ‎|Лекция 11]].
  
* Оценка отлично: не менее 24 баллов
+
'''Занятие 12.''' Mock-объекты в тестировании и gmock. Отладка кода. Инструменты strace и gdb.
* Оценка хорошо: не менее 18 и не более 23 баллов
+
* [[Media: Lection_pbscpp_12_2018.pdf ‎|Лекция 12]].
* Оценка удовлетворительно: не менее 12 и не более 17 баллов
+
* [https://github.com/konovodov/cmc_msu_cpp_course/tree/master/testing Ссылка на код про тесты с занятия].
  
[[Media: Pbscpp_exam_example.pdf|Примерный вариант экзаменационной работы]].
+
'''Занятие 13.''' Многопоточное программирование с использованием std::thread. Примитивы синхронизации. Потокобезопасность.
 
+
* [[Media: Lection_pbscpp_13_2018.pdf |Лекция 13]].
Присланные правильные решения задач из списка раздела "Задачи" дают дополнительные бонусы при сдаче экзамена.
+
  
 
== Программа курса ==
 
== Программа курса ==
[[Media: Pbscpp_content2017.pdf|Программа курса (pdf)]]
+
[[Media: Pbscpp_content2018.pdf|Программа курса (pdf)]]
 
+
  
 
== Литература ==
 
== Литература ==
Строка 76: Строка 85:
 
* Б. Страуструп, Язык программирования С++, 4-е издание.
 
* Б. Страуструп, Язык программирования С++, 4-е издание.
 
* Б. Страуструп, Программирование. Принципы и практика использования C++.
 
* Б. Страуструп, Программирование. Принципы и практика использования C++.
* Б. Страуструп, Дизайн и эволюция языка С++.
+
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности.
* D. Abrahams, A. Gurtovoy C++ Template Metaprogramming.
+
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.
  
  
 
[[Категория:Лекционные курсы кафедры МК]]
 
[[Категория:Лекционные курсы кафедры МК]]
 
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]
 
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]

Версия 00:03, 9 декабря 2018

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

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

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

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

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

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

Задание 1

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

Задание 2

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

Задание 3

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

Тем, кто сдает зачет по курсу, нужно прислать решение до 25 декабря 2018г.

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

Занятие 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++.
  • Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности.
  • Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.