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

Материал из Кафедра математической кибернетики
Перейти к: навигация, поиск
(Задание 3)
(не показаны 40 промежуточные версии 1 участника)
Строка 1: Строка 1:
 
{{DISPLAYTITLE:Проектирование больших систем на С++}}
 
{{DISPLAYTITLE:Проектирование больших систем на С++}}
 +
 +
----
 +
'''Вниманию студентов, сдающих экзамен по курсу!''' Экзамен будет проходить 10 января в 9:00 в аудитории '''609'''.
 +
 +
Студенты, сдающие курс в качестве спецкурса, должны иметь при себе ведомость.
 +
----
 +
 
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:KonovodovV|Коноводов В.А.]]
 
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:KonovodovV|Коноводов В.А.]]
  
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с обобщенным программированием, интеллектуальными указателями, исключениями, паттернами проектирования и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др.  
+
Занятия в осеннем семестре 2018 г. завершены.
 +
 
 +
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с обобщенным программированием, интеллектуальными указателями, исключениями, паттернами проектирования, тестированием и отладкой кода, и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14/17: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др.  
  
 
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++.  
 
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++.  
 
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.
 
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.
 +
 +
'''Таблица результатов''' (задачи, тесты на занятиях и т.п.) доступна по [https://goo.gl/Br2zAd ссылке].
 +
 +
==Задания по курсу==
 +
===Задание 1===
 +
Срок сдачи задания: 31 октября 2018 г. 23:59.
 +
* [[Media:Pbscpp_problem1_2018.pdf|Условие]].
 +
* [https://github.com/konovodov/cmc_msu_cpp_course/tree/master/problem1 Ссылка на код].
 +
 +
===Задание 2===
 +
Срок сдачи задания: 25 ноября 2018 г. 23:59.
 +
* [[Media:Pbscpp_problem2_2018.pdf|Условие]].
 +
 +
===Задание 3===
 +
Срок сдачи задания: 30 декабря 2018 г. 23:59.
 +
Решения задания принимаются после дедлайна, максимальный балл при этом значительно снижается.
 +
 +
Тем, кто сдает зачет по курсу, нужно прислать решение до 25 декабря 2018г.
 +
* [[Media:Pbscpp_problem3_2018.pdf|Условие]].
  
 
== Содержание курса ==
 
== Содержание курса ==
'''Занятие 1.''' Вводный тест. Особенности языка C++11. Вывод типов. Ключевые слова decltype и auto.  
+
'''Занятие 1.''' Вводный тест. Особенности языка C++11. Вывод типов. Ключевые слова decltype и auto.
  
 +
'''Занятие 2.''' Ключевые слова override и final. Удаленные функции. Псевдонимы. Перечисления с областью видимости. Объекты и функции constexpr.
  
== Программа курса ==
+
* [[Media: Pbscpp_task_2018_2.pdf|Задачи к занятию 2]]. ''[c 29.09 решения задач больше не принимаются]''
[[Media: Pbscpp_content2017.pdf|Программа курса (pdf)]] (осенний семестр 2017 года)
+
* [[Media: Lection_pbscpp_1_2_2018.pdf|Лекция 1-2]].
  
 +
'''Занятие 3.''' Функции constexpr, variadic templates, std::tuple, лямбда-выражения, функторы.
 +
 +
* [[Media: Pbscpp_task_2018_3.pdf|Задачи к занятию 3]].  ''[c 28.09 решение задачи больше не принимается]''
 +
* [[Media: Lection_pbscpp_3_2018_part1.pdf ‎|Лекция 3]].
 +
 +
'''Занятие 4.''' Связыватели. move-семантика.
 +
* [[Media: Pbscpp_task_2018_4.pdf|Задачи к занятию 4]].  ''[с 05.10 решение задачи больше не принимается]''
 +
 +
'''Занятие 5.''' Типы ссылок. Прямая передача. Проблемы перегрузки универсальных ссылок. Перемещающие операции.
 +
* [[Media: Lection_pbscpp_4_2018.pdf ‎|Лекция 5]].
 +
 +
'''Занятие 6.''' Выделение и распределение памяти. Умные указатели unique_ptr и shared_ptr.
 +
* [[Media: Lection_pbscpp_6_2018.pdf ‎|Лекция 6]].
 +
* [[Media: Pbscpp_task_2018_6.pdf|Задачи к занятию 6]].  ''[с 19.10 решение задачи больше не принимается]''
 +
 +
'''Занятие 7.''' Указатель weak_ptr. enable_shared_from_this как пример CRTP. Идиома PImpl. Паттерн проектирования Bridge.
 +
* [[Media: Lection_pbscpp_7_2018.pdf ‎|Лекция 7]].
 +
* [[Media: Pbscpp_task_2018_7.pdf|Задачи к занятию 7]].  ''[с 01.11 решение задачи больше не принимается]''
 +
 +
'''Занятие 8.''' Паттерны проектирования Command, Singleton, Strategy, Decorator, Observer, Abstract factory.
 +
* [[Media: Lection_pbscpp_8_2018.pdf ‎|Лекция 8]].
 +
 +
'''Занятие 9.''' Паттерн Visitor. Идиома Type Erasure. Правило SFINAE. Диспетчеризация дескрипторов.
 +
* [[Media: Lection_pbscpp_9_2018.pdf ‎|Лекция 9]].
 +
* [[Media: Pbscpp_task_2018_9.pdf|Задачи к занятию 9]].  ''[с 08.11 решение задачи больше не принимается]''
 +
 +
'''Занятие 10.''' Шаблонное метапрограммирование. X-macro. Исключения. ValueOrException.
 +
* [[Media: Lection_pbscpp_10_2018.pdf ‎|Лекция 10]].
 +
 +
'''Занятие 11.''' Гарантии безопасности исключений и noexcept. Основные подходы к тестированию систем. Unit-тесты через google testing framework.
 +
* [[Media: Lection_pbscpp_11_2018.pdf ‎|Лекция 11]].
 +
 +
'''Занятие 12.''' Mock-объекты в тестировании и gmock. Отладка кода. Инструменты strace и gdb.
 +
* [[Media: Lection_pbscpp_12_2018.pdf ‎|Лекция 12]].
 +
* [https://github.com/konovodov/cmc_msu_cpp_course/tree/master/testing Ссылка на код про тесты с занятия].
 +
 +
'''Занятие 13.''' Многопоточное программирование с использованием std::thread. Примитивы синхронизации. Потокобезопасность.
 +
* [[Media: Lection_pbscpp_13_2018.pdf ‎|Лекция 13]].
 +
 +
== Критерии оценок ==
 +
Экзамен по курсу письменный. Максимальная сумма баллов – 50. Баллы, полученные за выполнение домашних заданий (максимум – 50), дополнительных задач и тестов на занятиях, суммируются с баллами, полученными за экзамен.
 +
 +
* Оценка отлично: не менее 80 баллов
 +
* Оценка хорошо: не менее 70 и не более 79 баллов
 +
* Оценка удовлетворительно: не менее 55 и не более 69 баллов
 +
 +
[[Media: Pbscpp_exam_review_2018.pdf|Примерный вариант экзаменационной работы (pdf)]]
 +
 +
== Программа курса ==
 +
[[Media: Pbscpp_content2018.pdf|Программа курса (pdf)]]
  
 
== Литература ==
 
== Литература ==
Строка 23: Строка 102:
 
* Б. Страуструп, Язык программирования С++, 4-е издание.
 
* Б. Страуструп, Язык программирования С++, 4-е издание.
 
* Б. Страуструп, Программирование. Принципы и практика использования C++.
 
* Б. Страуструп, Программирование. Принципы и практика использования C++.
* Б. Страуструп, Дизайн и эволюция языка С++.
+
* Курт Гантерот: Оптимизация программ на C++. Проверенные методы повышения производительности.
* D. Abrahams, A. Gurtovoy C++ Template Metaprogramming.
+
* Вандевурд Д., Джосаттис Н. Шаблоны C++. Справочник разработчика.
  
  
 
[[Категория:Лекционные курсы кафедры МК]]
 
[[Категория:Лекционные курсы кафедры МК]]
 
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]
 
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]

Версия 19:24, 1 января 2019



Вниманию студентов, сдающих экзамен по курсу! Экзамен будет проходить 10 января в 9:00 в аудитории 609.

Студенты, сдающие курс в качестве спецкурса, должны иметь при себе ведомость.


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

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

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

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

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

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

Задание 1

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

Задание 2

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

Задание 3

Срок сдачи задания: 30 декабря 2018 г. 23:59. Решения задания принимаются после дедлайна, максимальный балл при этом значительно снижается.

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

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

Занятие 1. Вводный тест. Особенности языка C++11. Вывод типов. Ключевые слова decltype и auto.

Занятие 2. Ключевые слова override и final. Удаленные функции. Псевдонимы. Перечисления с областью видимости. Объекты и функции constexpr.

Занятие 3. Функции constexpr, variadic templates, std::tuple, лямбда-выражения, функторы.

Занятие 4. Связыватели. move-семантика.

Занятие 5. Типы ссылок. Прямая передача. Проблемы перегрузки универсальных ссылок. Перемещающие операции.

Занятие 6. Выделение и распределение памяти. Умные указатели unique_ptr и shared_ptr.

Занятие 7. Указатель weak_ptr. enable_shared_from_this как пример CRTP. Идиома PImpl. Паттерн проектирования Bridge.

Занятие 8. Паттерны проектирования Command, Singleton, Strategy, Decorator, Observer, Abstract factory.

Занятие 9. Паттерн Visitor. Идиома Type Erasure. Правило SFINAE. Диспетчеризация дескрипторов.

Занятие 10. Шаблонное метапрограммирование. X-macro. Исключения. ValueOrException.

Занятие 11. Гарантии безопасности исключений и noexcept. Основные подходы к тестированию систем. Unit-тесты через google testing framework.

Занятие 12. Mock-объекты в тестировании и gmock. Отладка кода. Инструменты strace и gdb.

Занятие 13. Многопоточное программирование с использованием std::thread. Примитивы синхронизации. Потокобезопасность.

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

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

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

Примерный вариант экзаменационной работы (pdf)

Программа курса

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

Литература

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