<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://mk.cs.msu.ru/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://mk.cs.msu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ZhukovVV</id>
		<title>Кафедра математической кибернетики - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="https://mk.cs.msu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ZhukovVV"/>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/ZhukovVV"/>
		<updated>2026-05-22T09:23:21Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.5</generator>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-12-09T16:37:44Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: 23.12.2025 18:00 (ауд. 504)&lt;br /&gt;
* Основной экзамен: 20.01.2026 13:00 (ауд. 579)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/RgDFARE9MOXtXg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Принципы SOLID, DRY, KISS, закон Деметры и принцип Tell Don't Ask. Антипаттерны.&lt;br /&gt;
* [https://disk.yandex.ru/i/U8GEeji5tplglQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/i/HP-aGOtM8OzIdA Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Правило SFINAE и альтернативы. Проблема перегрузки универсальных ссылок. Обработка исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/BTykqhT7LgFG3w Лекция 11]&lt;br /&gt;
* [https://disk.yandex.ru/i/TtMsjb37VqfMXw Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/Y6dlmjnbsa4Tlw Лекция 12]&lt;br /&gt;
* [https://disk.yandex.ru/i/i4Ihcs_MZqr1yw Запись лекции]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Отладка кода на C++. Оптимизация программ. Идиома Copy-On-Write. Упаковка структур. Сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/pPHCQa6g2u_nrw Лекция 13]&lt;br /&gt;
* [https://disk.yandex.ru/d/lNCXgk7o0n7pVQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Многопоточность в C++. Синхронизация потоков, условные переменные, std::future, std::promise, std::async и др. OpenMP. Потокобезопасность, паттерны, особенности архитектуры. Современные возможности C++20. Параллельные алгоритмы STL в C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/EXqa_BMBTm4LnQ Лекция 14]&lt;br /&gt;
&lt;br /&gt;
'''Материалы для самостоятельного изучения.''' Корутины, концепты, ranges (не обязательно, на экзамене вопросов по этим темам не будет)&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов, сделанные студентами в 2024 году]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-12-09T16:37:32Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: 23.12.2025 18:00 (ауд. 504)&lt;br /&gt;
* Основной экзамен: 20.01.2026 13:00 (ауд. 579)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/RgDFARE9MOXtXg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Принципы SOLID, DRY, KISS, закон Деметры и принцип Tell Don't Ask. Антипаттерны.&lt;br /&gt;
* [https://disk.yandex.ru/i/U8GEeji5tplglQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/i/HP-aGOtM8OzIdA Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Правило SFINAE и альтернативы. Проблема перегрузки универсальных ссылок. Обработка исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/BTykqhT7LgFG3w Лекция 11]&lt;br /&gt;
* [https://disk.yandex.ru/i/TtMsjb37VqfMXw Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/Y6dlmjnbsa4Tlw Лекция 12]&lt;br /&gt;
* [https://disk.yandex.ru/i/i4Ihcs_MZqr1yw Запись лекции]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Отладка кода на C++. Оптимизация программ. Идиома Copy-On-Write. Упаковка структур. Сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/pPHCQa6g2u_nrw Лекция 13]&lt;br /&gt;
* [https://disk.yandex.ru/d/lNCXgk7o0n7pVQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Многопоточность в C++. Синхронизация потоков, условные переменные, std::future, std::promise, std::async и др. OpenMP. Потокобезопасность, паттерны, особенности архитектуры. Современные возможности C++20. Параллельные алгоритмы STL в C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/EXqa_BMBTm4LnQ Лекция 14]&lt;br /&gt;
&lt;br /&gt;
'''Материалы для самостоятельного изучения''' Корутины, концепты, ranges (не обязательно, на экзамене вопросов по этим темам не будет)&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов, сделанные студентами в 2024 году]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-12-07T09:54:21Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: 23.12.2025 18:00 (ауд. 504)&lt;br /&gt;
* Основной экзамен: 20.01.2026 13:00 (ауд. 579)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/RgDFARE9MOXtXg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Принципы SOLID, DRY, KISS, закон Деметры и принцип Tell Don't Ask. Антипаттерны.&lt;br /&gt;
* [https://disk.yandex.ru/i/U8GEeji5tplglQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/i/HP-aGOtM8OzIdA Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Правило SFINAE и альтернативы. Проблема перегрузки универсальных ссылок. Обработка исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/BTykqhT7LgFG3w Лекция 11]&lt;br /&gt;
* [https://disk.yandex.ru/i/TtMsjb37VqfMXw Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/Y6dlmjnbsa4Tlw Лекция 12]&lt;br /&gt;
* [https://disk.yandex.ru/i/i4Ihcs_MZqr1yw Запись лекции]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Отладка кода на C++. Оптимизация программ. Идиома Copy-On-Write. Упаковка структур. Сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/pPHCQa6g2u_nrw Лекция 13]&lt;br /&gt;
* [https://disk.yandex.ru/d/lNCXgk7o0n7pVQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Многопоточность в C++. Синхронизация потоков, условные переменные, std::future, std::promise, std::async и др. OpenMP. Потокобезопасность, паттерны, особенности архитектуры. Современные возможности C++20. Параллельные алгоритмы STL в C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/EXqa_BMBTm4LnQ Лекция 14]&lt;br /&gt;
&lt;br /&gt;
== Старое (ну типа лекции-дедульки, по мере добавления свежего контента буду делать им Press F) ==&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-12-05T11:53:04Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: 23.12.2025 18:00 (ауд. 504)&lt;br /&gt;
* Основной экзамен: 20.01.2026 13:00 (ауд. 579)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/RgDFARE9MOXtXg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Принципы SOLID, DRY, KISS, закон Деметры и принцип Tell Don't Ask. Антипаттерны.&lt;br /&gt;
* [https://disk.yandex.ru/i/U8GEeji5tplglQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/i/HP-aGOtM8OzIdA Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Правило SFINAE и альтернативы. Проблема перегрузки универсальных ссылок. Обработка исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/BTykqhT7LgFG3w Лекция 11]&lt;br /&gt;
* [https://disk.yandex.ru/i/TtMsjb37VqfMXw Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/Y6dlmjnbsa4Tlw Лекция 12]&lt;br /&gt;
* [https://disk.yandex.ru/i/i4Ihcs_MZqr1yw Запись лекции]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Отладка кода на C++. Оптимизация программ. Идиома Copy-On-Write. Упаковка структур. Сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/pPHCQa6g2u_nrw Лекция 13]&lt;br /&gt;
&lt;br /&gt;
== Старое (ну типа лекции-дедульки, по мере добавления свежего контента буду делать им Press F) ==&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-11-30T21:04:00Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/RgDFARE9MOXtXg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Принципы SOLID, DRY, KISS, закон Деметры и принцип Tell Don't Ask. Антипаттерны.&lt;br /&gt;
* [https://disk.yandex.ru/i/U8GEeji5tplglQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/i/HP-aGOtM8OzIdA Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Правило SFINAE и альтернативы. Проблема перегрузки универсальных ссылок. Обработка исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/BTykqhT7LgFG3w Лекция 11]&lt;br /&gt;
* [https://disk.yandex.ru/i/TtMsjb37VqfMXw Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/Y6dlmjnbsa4Tlw Лекция 12]&lt;br /&gt;
* [https://disk.yandex.ru/i/i4Ihcs_MZqr1yw Запись лекции]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Отладка кода на C++. Оптимизация программ. Идиома Copy-On-Write. Упаковка структур. Сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/pPHCQa6g2u_nrw Лекция 13]&lt;br /&gt;
&lt;br /&gt;
== Старое (ну типа лекции-дедульки, по мере добавления свежего контента буду делать им Press F) ==&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-11-23T05:22:58Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/RgDFARE9MOXtXg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Принципы SOLID, DRY, KISS, закон Деметры и принцип Tell Don't Ask. Антипаттерны.&lt;br /&gt;
* [https://disk.yandex.ru/i/U8GEeji5tplglQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/i/HP-aGOtM8OzIdA Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Правило SFINAE и альтернативы. Проблема перегрузки универсальных ссылок. Обработка исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/BTykqhT7LgFG3w Лекция 11]&lt;br /&gt;
* [https://disk.yandex.ru/i/TtMsjb37VqfMXw Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/Y6dlmjnbsa4Tlw Лекция 12]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
== Старое (ну типа лекции-дедульки, по мере добавления свежего контента буду делать им Press F) ==&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-11-22T19:42:03Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/RgDFARE9MOXtXg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Принципы SOLID, DRY, KISS, закон Деметры и принцип Tell Don't Ask. Антипаттерны.&lt;br /&gt;
* [https://disk.yandex.ru/i/U8GEeji5tplglQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/i/HP-aGOtM8OzIdA Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Правило SFINAE и альтернативы. Проблема перегрузки универсальных ссылок. Обработка исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/BTykqhT7LgFG3w Лекция 11]&lt;br /&gt;
* [https://disk.yandex.ru/i/TtMsjb37VqfMXw Запись лекции]&lt;br /&gt;
&lt;br /&gt;
== Старое (ну типа лекции-дедульки, по мере добавления свежего контента буду делать им Press F) ==&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-11-15T22:55:32Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/RgDFARE9MOXtXg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Принципы SOLID, DRY, KISS, закон Деметры и принцип Tell Don't Ask. Антипаттерны.&lt;br /&gt;
* [https://disk.yandex.ru/i/U8GEeji5tplglQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/i/HP-aGOtM8OzIdA Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Правило SFINAE и альтернативы. Проблема перегрузки универсальных ссылок. Обработка исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/BTykqhT7LgFG3w Лекция 11]&lt;br /&gt;
&lt;br /&gt;
== Старое (ну типа лекции-дедульки, по мере добавления свежего контента буду делать им Press F) ==&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-11-15T21:01:45Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/RgDFARE9MOXtXg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Принципы SOLID, DRY, KISS, закон Деметры и принцип Tell Don't Ask. Антипаттерны.&lt;br /&gt;
* [https://disk.yandex.ru/i/U8GEeji5tplglQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/i/HP-aGOtM8OzIdA Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Правило SFINAE и альтернативы. Проблема перегрузки универсальных ссылок. &lt;br /&gt;
&lt;br /&gt;
== Старое (ну типа лекции-дедульки, по мере добавления свежего контента буду делать им Press F) ==&lt;br /&gt;
'''Занятие 10 (2024).''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-11-15T17:17:24Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/RgDFARE9MOXtXg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Принципы SOLID, DRY, KISS, закон Деметры и принцип Tell Don't Ask. Антипаттерны.&lt;br /&gt;
* [https://disk.yandex.ru/i/U8GEeji5tplglQ Лекция 10]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Правило SFINAE и альтернативы. Проблема перегрузки универсальных ссылок. &lt;br /&gt;
&lt;br /&gt;
== Старое (ну типа лекции-дедульки, по мере добавления свежего контента буду делать им Press F) ==&lt;br /&gt;
'''Занятие 10 (2024).''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-11-09T02:40:40Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/RgDFARE9MOXtXg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Принципы SOLID, DRY, KISS, закон Деметры и принцип Tell Don't Ask. Антипаттерны.&lt;br /&gt;
* [https://disk.yandex.ru/i/U8GEeji5tplglQ Лекция 10]&lt;br /&gt;
&lt;br /&gt;
== Старое (ну типа лекции-дедульки, по мере добавления свежего контента буду делать им Press F) ==&lt;br /&gt;
'''Занятие 9 (2024).''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10 (2024).''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-11-09T02:34:26Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Принципы SOLID, DRY, KISS, закон Деметры и принцип Tell Don't Ask. Антипаттерны.&lt;br /&gt;
* [https://disk.yandex.ru/i/U8GEeji5tplglQ Лекция 10]&lt;br /&gt;
&lt;br /&gt;
== Старое (ну типа лекции-дедульки, по мере добавления свежего контента буду делать им Press F) ==&lt;br /&gt;
'''Занятие 9 (2024).''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10 (2024).''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-10-26T03:03:40Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
&lt;br /&gt;
== Старое (ну типа лекции-дедульки, по мере добавления свежего контента буду делать им Press F) ==&lt;br /&gt;
'''Занятие 9 (2024).''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10 (2024).''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-10-26T03:02:17Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
&lt;br /&gt;
== Старое (ну типа лекции-дедульки) ==&lt;br /&gt;
'''Занятие 9 (2024).''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10 (2024).''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-10-26T03:00:55Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://disk.yandex.ru/i/XjJStMwlxdIkkQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* [https://disk.yandex.ru/d/29jv8mY0b9pgbg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9 (2024).''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10 (2024).''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-10-26T02:56:56Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://www.youtube.com/watch?v=dQw4w9WgXcQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9 (2024).''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10 (2024).''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-10-26T02:56:41Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://www.youtube.com/watch?v=dQw4w9WgXcQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter, Facade, Proxy, Builder&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Composite, Template Method, Chain of Responsibility, Prototype, State, Flyweight, Interpreter, Mediator, Memento&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
* TODO на 2026 год: реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9 (2024).''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10 (2024).''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-10-19T05:22:21Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://www.youtube.com/watch?v=dQw4w9WgXcQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter.&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Facade, Proxy, Builder, Composite, Template Method, Chain of Responsibility&lt;br /&gt;
* [https://disk.yandex.ru/i/UJy3YqRQctV0xw Лекция 9]&lt;br /&gt;
* TODO на 2026 год: добавить примеры использования паттернов в реальных проектах с открытым исходным кодом. Реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие. Может быть добавить больше паттернов: Prototype, Flyweight, Interpreter, Mediator, Memento, State.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9 (2024).''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10 (2024).''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-10-19T04:16:46Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://www.youtube.com/watch?v=dQw4w9WgXcQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter.&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Facade, Proxy, Builder, Composite, Template Method, Chain of Responsibility&lt;br /&gt;
* TODO на 2026 год: добавить примеры использования паттернов в реальных проектах с открытым исходным кодом. Реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие. Может быть добавить больше паттернов: Prototype, Flyweight, Interpreter, Mediator, Memento, State.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9 (2024).''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10 (2024).''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-10-19T04:15:46Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://www.youtube.com/watch?v=dQw4w9WgXcQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Observer, Factory Method, Abstract Factory, Visitor, Adapter.&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Паттерны проектирования Facade, Proxy, Builder, Composite, Template Method, Chain of Responsibility&lt;br /&gt;
* TODO: добавить примеры использования паттернов в реальных проектах с открытым исходным кодом. Реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие. Добавить больше паттернов: Abstract Factory, Builder, Prototype; Adapter, Composite, Facade, Flyweight, Proxy; Chain of responsibility, Interpreter, Mediator, Memento, State, Template Method.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9 (2024).''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10 (2024).''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11 (2024).''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12 (2024).''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13 (2024).''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14 (2024).''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-10-18T20:44:56Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy, Decorator.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://www.youtube.com/watch?v=dQw4w9WgXcQ Запись лекции]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_task_2_2025 Задание 2]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Decorator, Observer, Factory Method, Visitor.&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* TODO: добавить примеры использования паттернов в реальных проектах с открытым исходным кодом. Реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие. Добавить больше паттернов: Abstract Factory, Builder, Prototype; Adapter, Composite, Facade, Flyweight, Proxy; Chain of responsibility, Interpreter, Mediator, Memento, State, Template Method.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-10-15T15:48:38Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
* [https://www.youtube.com/watch?v=dQw4w9WgXcQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Decorator, Observer, Factory Method, Visitor.&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* TODO: добавить примеры использования паттернов в реальных проектах с открытым исходным кодом. Реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие. Добавить больше паттернов: Abstract Factory, Builder, Prototype; Adapter, Composite, Facade, Flyweight, Proxy; Chain of responsibility, Interpreter, Mediator, Memento, State, Template Method.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-10-12T05:14:55Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Паттерны проектирования в C++. Паттерны проектирования Bridge, Command, Singleton, Strategy.&lt;br /&gt;
* [https://disk.yandex.ru/i/KoXyTFzqz1COlQ Лекция 7]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Паттерны проектирования Decorator, Observer, Factory Method, Visitor.&lt;br /&gt;
* [https://disk.yandex.ru/i/2t-AOTkblnoIUA Лекция 8]&lt;br /&gt;
* TODO: добавить примеры использования паттернов в реальных проектах с открытым исходным кодом. Реструктурировать презентации: сначала порождающие паттерны, потом структурные и поведенческие. Добавить больше паттернов: Abstract Factory, Builder, Prototype; Adapter, Composite, Facade, Flyweight, Proxy; Chain of responsibility, Interpreter, Mediator, Memento, State, Template Method.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-10-07T18:10:24Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/d/eFyL3Xl08USEAg Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/RGy1wEp6qVfICg Запись лекции]&lt;br /&gt;
* TODO на 2026 год: добавить хрона на 20 минут&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-30T17:15:32Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели. Управление владением памяти.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Идиомы в C++. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. Идиома PImpl. Идиома Type Erasure.&lt;br /&gt;
* [https://disk.yandex.ru/i/AVYcaBknBY2qMA Лекция 6]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-29T03:16:36Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации в лекциях 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Управление владением памяти. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. &lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-29T03:15:57Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
* TODO на 2026 год: устранить повторения информации с лекция 2-4. Скукота получается, если одно и то же повторяется. Как будто лекции Машечкина какие-то.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Управление владением памяти. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. &lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-28T04:07:33Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Управление владением памяти. Идиома CRTP. Шаблон std::enable_shared_from_this. Умный указатель boost::intrusive_ptr. &lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-28T04:06:39Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Управление владением памяти. Идиома CRTP. Шаблон std::enable_shared_from_this, умный указатель boost::intrusive_ptr. &lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-28T04:04:29Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/VIoQHePuAQd7ow Лекция 5]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-24T16:20:06Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
* [https://disk.yandex.ru/i/hflbAyVsoTVwBA Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-24T16:17:33Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/_p8FUMICX1XnwQ Запись лекции]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-21T03:02:02Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Операторы new и delete. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-21T02:52:53Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Семантика перемещения в C++.&lt;br /&gt;
* [https://disk.yandex.ru/i/fC2fUMpHDZ6IOA Лекция 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-16T03:46:50Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут. Можно, например, про STL напомнить.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-16T03:45:23Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* TODO на 2026 год: добавить в слайды контент на 20 минут.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-16T03:43:37Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программирование в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-16T03:43:04Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Категории выражений в C++. Вывод типов параметров шаблонов и auto. Некоторые особенности C++11 (универсальная инициализация, константные выражения, шаблоны с переменным числом аргументов и др.).&lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Функциональное программироавние в C++. Хеш-таблицы. Новые возможности C++17 (инициализация в условных выражениях, std::optional, std::string_view).&lt;br /&gt;
* [https://disk.yandex.ru/i/i3EFnpjuyybS6w Лекция 3]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-08T21:00:35Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Некоторые особенности C++11, вывод типа. Модификаторы функций, псевдонимы, scoped enums. Constexpr-выражения и объекты. Шаблоны с переменным числом аргументов. &lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1] (результаты см. в таблице успеваемости в отдельной вкладке)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Лямбда-выражения. Связыватели. Некоторые особенности C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/s_xbIq4nUrZ4PA Лекция 3 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-08T20:59:10Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Некоторые особенности C++11, вывод типа. Модификаторы функций, псевдонимы, scoped enums. Constexpr-выражения и объекты. Шаблоны с переменным числом аргументов. &lt;br /&gt;
* [https://disk.yandex.ru/i/7-DPnwcUrkONYA Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/d/L19s661Y8JrTyA Задание 1]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Лямбда-выражения. Связыватели. Некоторые особенности C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/s_xbIq4nUrZ4PA Лекция 3 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-04T16:35:49Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00) '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Некоторые особенности C++11, вывод типа. Модификаторы функций, псевдонимы, scoped enums. Constexpr-выражения и объекты. Шаблоны с переменным числом аргументов. &lt;br /&gt;
* [https://disk.yandex.ru/i/YgMRuCOO5XNAnw Лекция 2 (deprecated)]&lt;br /&gt;
* [https://disk.yandex.ru/i/YQRRH-kfxgs_Kw Дополнительные слайды (deprecated)] (исключения вывода типа для auto, value-категории, информация для теста)&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Лямбда-выражения. Связыватели. Некоторые особенности C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/s_xbIq4nUrZ4PA Лекция 3 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-04T16:35:31Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00).&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся '''ДИСТАНЦИОННО''', ссылка на видеоконференцию публикуется в [https://t.me/+OlbcW8JHJMdjOGZi чате в Telegram]&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Следующие задания проводятся дистанционно.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Некоторые особенности C++11, вывод типа. Модификаторы функций, псевдонимы, scoped enums. Constexpr-выражения и объекты. Шаблоны с переменным числом аргументов. &lt;br /&gt;
* [https://disk.yandex.ru/i/YgMRuCOO5XNAnw Лекция 2 (deprecated)]&lt;br /&gt;
* [https://disk.yandex.ru/i/YQRRH-kfxgs_Kw Дополнительные слайды (deprecated)] (исключения вывода типа для auto, value-категории, информация для теста)&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Лямбда-выражения. Связыватели. Некоторые особенности C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/s_xbIq4nUrZ4PA Лекция 3 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-04T16:33:30Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00).&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Введение. Организационные вопросы. Вводный тест. Стиль кодирования.&lt;br /&gt;
* [https://disk.yandex.ru/i/RS2x0iZmCY-NDQ Лекция 1]&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Некоторые особенности C++11, вывод типа. Модификаторы функций, псевдонимы, scoped enums. Constexpr-выражения и объекты. Шаблоны с переменным числом аргументов. &lt;br /&gt;
* [https://disk.yandex.ru/i/YgMRuCOO5XNAnw Лекция 2 (deprecated)]&lt;br /&gt;
* [https://disk.yandex.ru/i/YQRRH-kfxgs_Kw Дополнительные слайды (deprecated)] (исключения вывода типа для auto, value-категории, информация для теста)&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Лямбда-выражения. Связыватели. Некоторые особенности C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/s_xbIq4nUrZ4PA Лекция 3 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7 (deprecated)]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11 (deprecated)]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13 (deprecated)]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов (deprecated)]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-09-01T13:23:08Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00).&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* [https://t.me/+OlbcW8JHJMdjOGZi Чат в Telegram]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Организационные вопросы. C++ Style Guide. Вводный тест.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Некоторые особенности C++11, вывод типа. Модификаторы функций, псевдонимы, scoped enums. Constexpr-выражения и объекты. Шаблоны с переменным числом аргументов. &lt;br /&gt;
* [https://disk.yandex.ru/i/YgMRuCOO5XNAnw Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/i/YQRRH-kfxgs_Kw Дополнительные слайды] (исключения вывода типа для auto, value-категории, информация для теста)&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Лямбда-выражения. Связыватели. Некоторые особенности C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/s_xbIq4nUrZ4PA Лекция 3]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-08-31T18:12:41Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00).&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Организационные вопросы. C++ Style Guide. Вводный тест.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Некоторые особенности C++11, вывод типа. Модификаторы функций, псевдонимы, scoped enums. Constexpr-выражения и объекты. Шаблоны с переменным числом аргументов. &lt;br /&gt;
* [https://disk.yandex.ru/i/YgMRuCOO5XNAnw Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/i/YQRRH-kfxgs_Kw Дополнительные слайды] (исключения вывода типа для auto, value-категории, информация для теста)&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Лямбда-выражения. Связыватели. Некоторые особенности C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/s_xbIq4nUrZ4PA Лекция 3]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2025 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2025-08-31T18:03:02Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00).&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2025 г. ==&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1qxbn-J2YLaPhsL-msDzq8Od13aR1j1lp_JGvFNtwnmk/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* Первое занятие состоится 2 сентября в 18:00 в ауд. 504.&lt;br /&gt;
* Досрочный экзамен: DD.12.2024 HH:MM (ауд. N1)&lt;br /&gt;
* Основной экзамен: DD.01.2025 HH:MM (ауд. N2)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Организационные вопросы. C++ Style Guide. Вводный тест.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Некоторые особенности C++11, вывод типа. Модификаторы функций, псевдонимы, scoped enums. Constexpr-выражения и объекты. Шаблоны с переменным числом аргументов. &lt;br /&gt;
* [https://disk.yandex.ru/i/YgMRuCOO5XNAnw Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/i/YQRRH-kfxgs_Kw Дополнительные слайды] (исключения вывода типа для auto, value-категории, информация для теста)&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* [https://disk.yandex.ru/i/dSbYR9vwi8SGQw Задание 1] (больше не принимается)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Лямбда-выражения. Связыватели. Некоторые особенности C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/s_xbIq4nUrZ4PA Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/EsnIYzNCQylo9Q Задание 2] (больше не принимается)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/i/wsD6fWbzC5OkmQ Задание 3] (больше не принимается)&lt;br /&gt;
* [https://disk.yandex.ru/d/VCOpY0oE6NvgCQ Мемы про Ложкина]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/h6TH_DyT4ctS2A Задание 4] (больше не принимается)&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_tree Код для задания 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2024 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/wjUqFUiAv4dK_A Задание 5]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/d/xN7XO0vN9nJ9tQ Котики 2023]&lt;br /&gt;
* [https://disk.yandex.ru/d/-yCZ26QYPEh8iQ Котики 2024]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11]&lt;br /&gt;
* [https://disk.yandex.ru/i/PszIrXsYR52scg Задача 6]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12]&lt;br /&gt;
* [https://disk.yandex.ru/i/Du4WrQRZeGi0RQ Задача 7]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13]&lt;br /&gt;
* [https://disk.yandex.ru/i/XXJ48YldZyX9aw Задача 8] и [https://disk.yandex.ru/d/1Eur7mnEAK2hHw пример входного файла]&lt;br /&gt;
* Комментарии по проверке находятся в отдельном листе таблицы результатов.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2024-12-23T01:48:54Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00).&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2024 г. ==&lt;br /&gt;
'''Занятия 05.11.2024 не будет! (преподаватель на больничном по уходу за собой)'''&lt;br /&gt;
&lt;br /&gt;
'''Занятия 29.10.2024 не будет! (конференция у 421 группы)'''&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1daYZmqfhzrqL30kgwXsSy0f5zUFXY8yf5jTKFlMicJo/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* Первое занятие состоится 3 сентября.&lt;br /&gt;
* Тест 1: 17.09.2024&lt;br /&gt;
* Тест 2: 24.09.2024&lt;br /&gt;
* Тест 3: 01.10.2024&lt;br /&gt;
* Тест 4: 08.10.2024&lt;br /&gt;
* Тест 5: 15.10.2024&lt;br /&gt;
* Тест 6: 12.11.2024&lt;br /&gt;
* Тест 7: 19.11.2024&lt;br /&gt;
* Тест 8: 26.11.2024&lt;br /&gt;
* Досрочный экзамен: 24.12.2024 18:00 (ауд. 504)&lt;br /&gt;
* Основной экзамен: 12.01.2025 13:00 (ауд. 510)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
За тесты на лекциях и выполнение дополнительных заданий можно получить следующие бонусы:&lt;br /&gt;
* Оценка '''отлично''' (автомат)&lt;br /&gt;
* Дополнительные баллы на экзамене (до 10 баллов, что является эквивалентом повышения итоговой оценки на 1 балл)&lt;br /&gt;
* Возможность участвовать в досрочном экзамене&lt;br /&gt;
&lt;br /&gt;
Критерии получения бонусов см. в таблице успеваемости.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example_2024.pdf|Пример экзаменационного варианта (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Организационные вопросы. C++ Style Guide. Вводный тест.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Некоторые особенности C++11, вывод типа. Модификаторы функций, псевдонимы, scoped enums. Constexpr-выражения и объекты. Шаблоны с переменным числом аргументов. &lt;br /&gt;
* [https://disk.yandex.ru/i/YgMRuCOO5XNAnw Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/i/YQRRH-kfxgs_Kw Дополнительные слайды] (исключения вывода типа для auto, value-категории, информация для теста)&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* [https://disk.yandex.ru/i/dSbYR9vwi8SGQw Задание 1] (больше не принимается)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Лямбда-выражения. Связыватели. Некоторые особенности C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/s_xbIq4nUrZ4PA Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/EsnIYzNCQylo9Q Задание 2] (больше не принимается)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/i/wsD6fWbzC5OkmQ Задание 3] (больше не принимается)&lt;br /&gt;
* [https://disk.yandex.ru/d/VCOpY0oE6NvgCQ Мемы про Ложкина]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/h6TH_DyT4ctS2A Задание 4] (больше не принимается)&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_tree Код для задания 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2024 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/wjUqFUiAv4dK_A Задание 5]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/d/xN7XO0vN9nJ9tQ Котики 2023]&lt;br /&gt;
* [https://disk.yandex.ru/d/-yCZ26QYPEh8iQ Котики 2024]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11]&lt;br /&gt;
* [https://disk.yandex.ru/i/PszIrXsYR52scg Задача 6]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12]&lt;br /&gt;
* [https://disk.yandex.ru/i/Du4WrQRZeGi0RQ Задача 7]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13]&lt;br /&gt;
* [https://disk.yandex.ru/i/XXJ48YldZyX9aw Задача 8] и [https://disk.yandex.ru/d/1Eur7mnEAK2hHw пример входного файла]&lt;br /&gt;
* Комментарии по проверке находятся в отдельном листе таблицы результатов.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Pbs_exam_example_2024.pdf</id>
		<title>Файл:Pbs exam example 2024.pdf</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%A4%D0%B0%D0%B9%D0%BB:Pbs_exam_example_2024.pdf"/>
				<updated>2024-12-23T01:48:30Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: Пример экзаменационного варианта по курсу &amp;quot;Проектирование больших систем на C++&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Пример экзаменационного варианта по курсу &amp;quot;Проектирование больших систем на C++&amp;quot;&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2024-12-23T01:34:32Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00).&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2024 г. ==&lt;br /&gt;
'''Занятия 05.11.2024 не будет! (преподаватель на больничном по уходу за собой)'''&lt;br /&gt;
&lt;br /&gt;
'''Занятия 29.10.2024 не будет! (конференция у 421 группы)'''&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1daYZmqfhzrqL30kgwXsSy0f5zUFXY8yf5jTKFlMicJo/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* Первое занятие состоится 3 сентября.&lt;br /&gt;
* Тест 1: 17.09.2024&lt;br /&gt;
* Тест 2: 24.09.2024&lt;br /&gt;
* Тест 3: 01.10.2024&lt;br /&gt;
* Тест 4: 08.10.2024&lt;br /&gt;
* Тест 5: 15.10.2024&lt;br /&gt;
* Тест 6: 12.11.2024&lt;br /&gt;
* Тест 7: 19.11.2024&lt;br /&gt;
* Тест 8: 26.11.2024&lt;br /&gt;
* Досрочный экзамен: 24.12.2024 18:00 (ауд. 504)&lt;br /&gt;
* Основной экзамен: 12.01.2025 13:00 (ауд. 510)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 54.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
За тесты на лекциях и выполнение дополнительных заданий можно получить следующие бонусы:&lt;br /&gt;
* Оценка '''отлично''' (автомат)&lt;br /&gt;
* Дополнительные баллы на экзамене (до 10 баллов, что является эквивалентом повышения итоговой оценки на 1 балл)&lt;br /&gt;
* Возможность участвовать в досрочном экзамене&lt;br /&gt;
&lt;br /&gt;
Критерии получения бонусов см. в таблице успеваемости.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example.pdf|Пример экзаменационного варианта (pdf)]] (на баллы за каждое задание можно не обращать внимание, они будут скорректированы исходя из статистики прошлого года)&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Организационные вопросы. C++ Style Guide. Вводный тест.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Некоторые особенности C++11, вывод типа. Модификаторы функций, псевдонимы, scoped enums. Constexpr-выражения и объекты. Шаблоны с переменным числом аргументов. &lt;br /&gt;
* [https://disk.yandex.ru/i/YgMRuCOO5XNAnw Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/i/YQRRH-kfxgs_Kw Дополнительные слайды] (исключения вывода типа для auto, value-категории, информация для теста)&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* [https://disk.yandex.ru/i/dSbYR9vwi8SGQw Задание 1] (больше не принимается)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Лямбда-выражения. Связыватели. Некоторые особенности C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/s_xbIq4nUrZ4PA Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/EsnIYzNCQylo9Q Задание 2] (больше не принимается)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/i/wsD6fWbzC5OkmQ Задание 3] (больше не принимается)&lt;br /&gt;
* [https://disk.yandex.ru/d/VCOpY0oE6NvgCQ Мемы про Ложкина]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/h6TH_DyT4ctS2A Задание 4] (больше не принимается)&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_tree Код для задания 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2024 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/wjUqFUiAv4dK_A Задание 5]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/d/xN7XO0vN9nJ9tQ Котики 2023]&lt;br /&gt;
* [https://disk.yandex.ru/d/-yCZ26QYPEh8iQ Котики 2024]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11]&lt;br /&gt;
* [https://disk.yandex.ru/i/PszIrXsYR52scg Задача 6]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12]&lt;br /&gt;
* [https://disk.yandex.ru/i/Du4WrQRZeGi0RQ Задача 7]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13]&lt;br /&gt;
* [https://disk.yandex.ru/i/XXJ48YldZyX9aw Задача 8] и [https://disk.yandex.ru/d/1Eur7mnEAK2hHw пример входного файла]&lt;br /&gt;
* Комментарии по проверке находятся в отдельном листе таблицы результатов.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2024-12-22T16:40:01Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00).&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2024 г. ==&lt;br /&gt;
'''Занятия 05.11.2024 не будет! (преподаватель на больничном по уходу за собой)'''&lt;br /&gt;
&lt;br /&gt;
'''Занятия 29.10.2024 не будет! (конференция у 421 группы)'''&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1daYZmqfhzrqL30kgwXsSy0f5zUFXY8yf5jTKFlMicJo/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* Первое занятие состоится 3 сентября.&lt;br /&gt;
* Тест 1: 17.09.2024&lt;br /&gt;
* Тест 2: 24.09.2024&lt;br /&gt;
* Тест 3: 01.10.2024&lt;br /&gt;
* Тест 4: 08.10.2024&lt;br /&gt;
* Тест 5: 15.10.2024&lt;br /&gt;
* Тест 6: 12.11.2024&lt;br /&gt;
* Тест 7: 19.11.2024&lt;br /&gt;
* Тест 8: 26.11.2024&lt;br /&gt;
* Досрочный экзамен: 24.12.2024 18:00 (ауд. 504)&lt;br /&gt;
* Основной экзамен: 12.01.2025 13:00 (ауд. 510)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 50.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
За тесты на лекциях и выполнение дополнительных заданий можно получить следующие бонусы:&lt;br /&gt;
* Оценка '''отлично''' (автомат)&lt;br /&gt;
* Дополнительные баллы на экзамене (до 10 баллов, что является эквивалентом повышения итоговой оценки на 1 балл)&lt;br /&gt;
* Возможность участвовать в досрочном экзамене&lt;br /&gt;
&lt;br /&gt;
Критерии получения бонусов см. в таблице успеваемости.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example.pdf|Пример экзаменационного варианта (pdf)]] (на баллы за каждое задание можно не обращать внимание, они будут скорректированы исходя из статистики прошлого года)&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Организационные вопросы. C++ Style Guide. Вводный тест.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Некоторые особенности C++11, вывод типа. Модификаторы функций, псевдонимы, scoped enums. Constexpr-выражения и объекты. Шаблоны с переменным числом аргументов. &lt;br /&gt;
* [https://disk.yandex.ru/i/YgMRuCOO5XNAnw Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/i/YQRRH-kfxgs_Kw Дополнительные слайды] (исключения вывода типа для auto, value-категории, информация для теста)&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* [https://disk.yandex.ru/i/dSbYR9vwi8SGQw Задание 1] (больше не принимается)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Лямбда-выражения. Связыватели. Некоторые особенности C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/s_xbIq4nUrZ4PA Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/EsnIYzNCQylo9Q Задание 2] (больше не принимается)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/i/wsD6fWbzC5OkmQ Задание 3] (больше не принимается)&lt;br /&gt;
* [https://disk.yandex.ru/d/VCOpY0oE6NvgCQ Мемы про Ложкина]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/h6TH_DyT4ctS2A Задание 4] (больше не принимается)&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_tree Код для задания 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2024 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/wjUqFUiAv4dK_A Задание 5]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/d/xN7XO0vN9nJ9tQ Котики 2023]&lt;br /&gt;
* [https://disk.yandex.ru/d/-yCZ26QYPEh8iQ Котики 2024]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11]&lt;br /&gt;
* [https://disk.yandex.ru/i/PszIrXsYR52scg Задача 6]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12]&lt;br /&gt;
* [https://disk.yandex.ru/i/Du4WrQRZeGi0RQ Задача 7]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13]&lt;br /&gt;
* [https://disk.yandex.ru/i/XXJ48YldZyX9aw Задача 8] и [https://disk.yandex.ru/d/1Eur7mnEAK2hHw пример входного файла]&lt;br /&gt;
* Комментарии по проверке находятся в отдельном листе таблицы результатов.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	<entry>
		<id>//mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B</id>
		<title>Проектирование больших систем на С++</title>
		<link rel="alternate" type="text/html" href="https://mk.cs.msu.ru/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B0_%D0%A1%2B%2B"/>
				<updated>2024-12-22T16:39:03Z</updated>
		
		<summary type="html">&lt;p&gt;ZhukovVV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Спецкурсы кафедры МК]]&lt;br /&gt;
[[Категория:Лекционные курсы кафедры МК]]&lt;br /&gt;
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]&lt;br /&gt;
&lt;br /&gt;
Занятия проводятся по вторникам шестой парой (в 18:00).&lt;br /&gt;
&lt;br /&gt;
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:ZhukovVV|Владимир Владимирович Жуков.]]&lt;br /&gt;
&lt;br /&gt;
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с метапрограммированием, умными указателями, исключениями, паттернами проектирования, тестированием, отладкой кода и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17/20: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др. &lt;br /&gt;
&lt;br /&gt;
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++. &lt;br /&gt;
&lt;br /&gt;
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbscpp.pdf|Программа курса (pdf)]]&lt;br /&gt;
&lt;br /&gt;
== Занятия в 2024 г. ==&lt;br /&gt;
'''Занятия 05.11.2024 не будет! (преподаватель на больничном по уходу за собой)'''&lt;br /&gt;
&lt;br /&gt;
'''Занятия 29.10.2024 не будет!'''&lt;br /&gt;
&lt;br /&gt;
* [https://docs.google.com/spreadsheets/d/1daYZmqfhzrqL30kgwXsSy0f5zUFXY8yf5jTKFlMicJo/edit?usp=sharing Таблица результатов]&lt;br /&gt;
* Первое занятие состоится 3 сентября.&lt;br /&gt;
* Тест 1: 17.09.2024&lt;br /&gt;
* Тест 2: 24.09.2024&lt;br /&gt;
* Тест 3: 01.10.2024&lt;br /&gt;
* Тест 4: 08.10.2024&lt;br /&gt;
* Тест 5: 15.10.2024&lt;br /&gt;
* Тест 6: 12.11.2024&lt;br /&gt;
* Тест 7: 19.11.2024&lt;br /&gt;
* Тест 8: 26.11.2024&lt;br /&gt;
* Досрочный экзамен: 24.12.2024 18:00 (ауд. 504)&lt;br /&gt;
* Основной экзамен: 12.01.2025 13:00 (ауд. 510)&lt;br /&gt;
&lt;br /&gt;
== Экзамен ==&lt;br /&gt;
Экзамен по курсу письменный. Максимальная сумма баллов за экзаменационную работу – 50.&lt;br /&gt;
&lt;br /&gt;
* Оценка '''отлично''': не менее 40 баллов&lt;br /&gt;
* Оценка '''хорошо''': не менее 30 и не более 39 баллов&lt;br /&gt;
* Оценка '''удовлетворительно''': не менее 20 и не более 29 баллов&lt;br /&gt;
&lt;br /&gt;
За тесты на лекциях и выполнение дополнительных заданий можно получить следующие бонусы:&lt;br /&gt;
* Оценка '''отлично''' (автомат)&lt;br /&gt;
* Дополнительные баллы на экзамене (до 10 баллов, что является эквивалентом повышения итоговой оценки на 1 балл)&lt;br /&gt;
* Возможность участвовать в досрочном экзамене&lt;br /&gt;
&lt;br /&gt;
Критерии получения бонусов см. в таблице успеваемости.&lt;br /&gt;
&lt;br /&gt;
[[Media: Pbs_exam_example.pdf|Пример экзаменационного варианта (pdf)]] (на баллы за каждое задание можно не обращать внимание, они будут скорректированы исходя из статистики прошлого года)&lt;br /&gt;
&lt;br /&gt;
== Содержание курса ==&lt;br /&gt;
'''Занятие 1.''' Организационные вопросы. C++ Style Guide. Вводный тест.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 2.''' Некоторые особенности C++11, вывод типа. Модификаторы функций, псевдонимы, scoped enums. Constexpr-выражения и объекты. Шаблоны с переменным числом аргументов. &lt;br /&gt;
* [https://disk.yandex.ru/i/YgMRuCOO5XNAnw Лекция 2]&lt;br /&gt;
* [https://disk.yandex.ru/i/YQRRH-kfxgs_Kw Дополнительные слайды] (исключения вывода типа для auto, value-категории, информация для теста)&lt;br /&gt;
* Книги Скотта Мейерса на английском языке можно найти на [https://aovst.cs.msu.ru/ сайте практикума 318 группы]&lt;br /&gt;
* [https://disk.yandex.ru/i/dSbYR9vwi8SGQw Задание 1] (больше не принимается)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 3.''' Лямбда-выражения. Связыватели. Некоторые особенности C++17.&lt;br /&gt;
* [https://disk.yandex.ru/i/s_xbIq4nUrZ4PA Лекция 3]&lt;br /&gt;
* [https://disk.yandex.ru/i/EsnIYzNCQylo9Q Задание 2] (больше не принимается)&lt;br /&gt;
&lt;br /&gt;
'''Занятие 4.''' Move-семантика, типы ссылок. Проблема перегрузки универсальных ссылок.&lt;br /&gt;
* [https://disk.yandex.ru/i/kzEnu6IkyBDFyg Лекция 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 5.''' Особенности перемещающих операций в классах. Умные указатели.&lt;br /&gt;
* [https://disk.yandex.ru/i/h-uQEspqzaqR-g Лекция 5]&lt;br /&gt;
* [https://disk.yandex.ru/i/wsD6fWbzC5OkmQ Задание 3] (больше не принимается)&lt;br /&gt;
* [https://disk.yandex.ru/d/VCOpY0oE6NvgCQ Мемы про Ложкина]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 6.''' Умные указатели и владение памятью. Идиома CRTP.&lt;br /&gt;
* [https://disk.yandex.ru/i/1Nl2sBwn6ZTNxw Лекция 6]&lt;br /&gt;
* [https://disk.yandex.ru/i/h6TH_DyT4ctS2A Задание 4] (больше не принимается)&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_tree Код для задания 4]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 7.''' Идиома PImpl. Паттерны проектирования Bridge, Command, Strategy, Singleton.&lt;br /&gt;
* [https://disk.yandex.ru/i/EUs0mYjw8IVKeg Лекция 7]&lt;br /&gt;
* [https://mks2.cs.msu.ru/root/pbs_examples_2024 Репозиторий, где пишем код на занятиях]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 8.''' Создание объектов с помощью фабрик. Паттерны проектирования Decorator и Visitor. &lt;br /&gt;
* [https://disk.yandex.ru/i/5-9XGr4aQR9C2w Лекция 8]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 9.''' Идиома TypeErasure. Решение проблем перегрузки универсальных ссылок. Диспетчеризация дескрипторов. Правило SFINAE.&lt;br /&gt;
* [https://disk.yandex.ru/i/6Ggf49W6ABX9Ag Лекция 9]&lt;br /&gt;
* [https://disk.yandex.ru/i/wjUqFUiAv4dK_A Задание 5]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 10.''' Обработка исключений. Гарантии безопасности исключений. Неопределенное поведение.&lt;br /&gt;
* [https://disk.yandex.ru/i/A0z1X7NJZLPNFQ Лекция 10]&lt;br /&gt;
* [https://disk.yandex.ru/d/xN7XO0vN9nJ9tQ Котики 2023]&lt;br /&gt;
* [https://disk.yandex.ru/d/-yCZ26QYPEh8iQ Котики 2024]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 11.''' Тестирование кода, unit-тестирование, устранение зависимостей. Google C++ Testing Framework. &lt;br /&gt;
* [https://disk.yandex.ru/i/VX2GqMOB9t76wA Лекция 11]&lt;br /&gt;
* [https://disk.yandex.ru/i/PszIrXsYR52scg Задача 6]&lt;br /&gt;
* [http://google.github.io/googletest/ Документация по googletest]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 12.''' Отладка и дебаг кода. Оптимизация программ на C++. Строки.&lt;br /&gt;
* [https://disk.yandex.ru/i/gzYOfpC0JfJPJw Лекция 12]&lt;br /&gt;
* [https://disk.yandex.ru/i/Du4WrQRZeGi0RQ Задача 7]&lt;br /&gt;
&lt;br /&gt;
'''Занятие 13.''' Оптимизация алгоритмов, функций, памяти. Плотная упаковка полей. Бинарная сериализация данных. Protobuf.&lt;br /&gt;
* [https://disk.yandex.ru/i/A39zehIlyOn3qg Лекция 13]&lt;br /&gt;
* [https://disk.yandex.ru/i/XXJ48YldZyX9aw Задача 8] и [https://disk.yandex.ru/d/1Eur7mnEAK2hHw пример входного файла]&lt;br /&gt;
* Комментарии по проверке находятся в отдельном листе таблицы результатов.&lt;br /&gt;
&lt;br /&gt;
'''Занятие 14.''' Новые стандарты языка C++20 и C++23. Корутины, концепты, ranges library.&lt;br /&gt;
* [https://disk.yandex.ru/d/8efRlJsZ9ZFA2g Презентации докладов]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
===Основная===&lt;br /&gt;
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Ф. Пикус, Идиомы и паттерны проектирования в современном C++. ДМК Пресс, 2019 г.&lt;br /&gt;
* CppCoreGuidelines (ред. Б. Страуструп, Г. Саттер) https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности. М.:Диалектика, 2017 г.&lt;br /&gt;
&lt;br /&gt;
===Дополнительная===&lt;br /&gt;
* Klaus Iglberger. C++ Software Design: Design Principles and Patterns for High-Quality Software. O'Reilly Media; 1st edition. 2022.&lt;br /&gt;
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading. &lt;br /&gt;
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.&lt;br /&gt;
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования. &lt;br /&gt;
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.&lt;br /&gt;
* Б. Страуструп, Язык программирования С++, 4-е издание.&lt;br /&gt;
* Б. Страуструп, Программирование. Принципы и практика использования C++.&lt;br /&gt;
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.&lt;br /&gt;
* Курс [https://academy.yandex.ru/handbook/cpp Основы C++] от Академии Яндекса.&lt;br /&gt;
* [http://google.github.io/googletest/ Документация] по Google Test.&lt;br /&gt;
* [https://developers.google.com/protocol-buffers/docs/overview?hl=en Документация] protobuf.&lt;br /&gt;
* [https://github.com/catboost/catboost/blob/master/CPP_STYLE_GUIDE.md Yandex C++ Style Guide].&lt;br /&gt;
* [https://google.github.io/styleguide/cppguide.html Google C++ Style Guide].&lt;/div&gt;</summary>
		<author><name>ZhukovVV</name></author>	</entry>

	</feed>