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

Материал из Кафедра математической кибернетики
Перейти к: навигация, поиск
(Содержание курса)
(Задание 3)
(не показаны 20 промежуточные версии 1 участника)
Строка 2: Строка 2:
 
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:KonovodovV|Коноводов В.А.]]
 
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:KonovodovV|Коноводов В.А.]]
  
Занятия проходят по пятницам, с 8:45, в ауд. '''612'''.
+
Занятия в осеннем семестре 2018 г. завершены.
  
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с обобщенным программированием, интеллектуальными указателями, исключениями, паттернами проектирования и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др.  
+
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с обобщенным программированием, интеллектуальными указателями, исключениями, паттернами проектирования, тестированием и отладкой кода, и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др.  
  
 
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++.  
 
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++.  
Строка 17: Строка 17:
 
* [https://github.com/konovodov/cmc_msu_cpp_course/tree/master/problem1 Ссылка на код].
 
* [https://github.com/konovodov/cmc_msu_cpp_course/tree/master/problem1 Ссылка на код].
  
 +
===Задание 2===
 +
Срок сдачи задания: 25 ноября 2018 г. 23:59.
 +
* [[Media:Pbscpp_problem2_2018.pdf|Условие]].
 +
 +
===Задание 3===
 +
Срок сдачи задания: 30 декабря 2018 г. 23:59.
 +
 +
Тем, кто сдает зачет по курсу, нужно прислать решение до 25 декабря 2018г.
 +
* [[Media:Pbscpp_problem3_2018.pdf|Условие]].
  
 
== Содержание курса ==
 
== Содержание курса ==
Строка 43: Строка 52:
 
'''Занятие 7.''' Указатель weak_ptr. enable_shared_from_this как пример CRTP. Идиома PImpl. Паттерн проектирования Bridge.
 
'''Занятие 7.''' Указатель weak_ptr. enable_shared_from_this как пример CRTP. Идиома PImpl. Паттерн проектирования Bridge.
 
* [[Media: Lection_pbscpp_7_2018.pdf ‎|Лекция 7]].
 
* [[Media: Lection_pbscpp_7_2018.pdf ‎|Лекция 7]].
* [[Media: Pbscpp_task_2018_7.pdf|Задачи к занятию 7]].
+
* [[Media: Pbscpp_task_2018_7.pdf|Задачи к занятию 7]]. ''[с 01.11 решение задачи больше не принимается]''
  
 
'''Занятие 8.''' Паттерны проектирования Command, Singleton, Strategy, Decorator, Observer, Abstract factory.
 
'''Занятие 8.''' Паттерны проектирования Command, Singleton, Strategy, Decorator, Observer, Abstract factory.
 
* [[Media: Lection_pbscpp_8_2018.pdf ‎|Лекция 8]].
 
* [[Media: Lection_pbscpp_8_2018.pdf ‎|Лекция 8]].
  
== Программа курса ==
+
'''Занятие 9.''' Паттерн Visitor. Идиома Type Erasure. Правило SFINAE. Диспетчеризация дескрипторов.
[[Media: Pbscpp_content2017.pdf|Программа курса (pdf)]] (осенний семестр 2017 года)
+
* [[Media: Lection_pbscpp_9_2018.pdf |Лекция 9]].
 +
* [[Media: Pbscpp_task_2018_9.pdf|Задачи к занятию 9]].  ''[с 08.11 решение задачи больше не принимается]''
  
 +
'''Занятие 10.''' Шаблонное метапрограммирование. X-macro. Исключения. ValueOrException.
 +
* [[Media: Lection_pbscpp_10_2018.pdf ‎|Лекция 10]].
 +
 +
'''Занятие 11.''' Гарантии безопасности исключений и noexcept. Основные подходы к тестированию систем. Unit-тесты через google testing framework.
 +
* [[Media: Lection_pbscpp_11_2018.pdf ‎|Лекция 11]].
 +
 +
'''Занятие 12.''' Mock-объекты в тестировании и gmock. Отладка кода. Инструменты strace и gdb.
 +
* [[Media: Lection_pbscpp_12_2018.pdf ‎|Лекция 12]].
 +
* [https://github.com/konovodov/cmc_msu_cpp_course/tree/master/testing Ссылка на код про тесты с занятия].
 +
 +
'''Занятие 13.''' Многопоточное программирование с использованием std::thread. Примитивы синхронизации. Потокобезопасность.
 +
* [[Media: Lection_pbscpp_13_2018.pdf ‎|Лекция 13]].
 +
 +
== Программа курса ==
 +
[[Media: Pbscpp_content2018.pdf|Программа курса (pdf)]]
  
 
== Литература ==
 
== Литература ==
Строка 60: Строка 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++. Справочник разработчика.