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

Материал из Кафедра математической кибернетики
Перейти к: навигация, поиск
(Новая страница: «Курс по магистерской программе Дискретные управляющие системы и их приложения. Чтение …»)
 
м (fix title)
(не показаны 39 промежуточные версии 2 участников)
Строка 1: Строка 1:
Курс по магистерской программе Дискретные управляющие системы и их приложения.
+
{{DISPLAYTITLE:Проектирование больших систем на С++}}
 +
Курс по магистерской программе Дискретные управляющие системы и их приложения. Занятия проводит [[Участник:KonovodovV|Коноводов В.А.]]
  
Чтение курса обеспечивается кафедрой математической кибернетики, лектор к.т.н. Мелик-Адамян Арег Фрикович (areg@cs.msu.ru).
+
В курсе рассматриваются темы, востребованные в промышленном программировании на языке C++. Разбираются вопросы, связанные с обобщенным программированием, интеллектуальными указателями, исключениями, паттернами проектирования и др. Отдельно разбираются возможности современного языка С++, введенные в стандартах C++11/14: вывод типов, семантика перемещения, rvalue-ссылки, поддержка многопоточности, лямбда-выражения и др.  
  
Рассматриваются вопросы, которые обычно остаются за рамками академических курсов по программированию на С++, но очень востребованы в промышленном программировании. Разбираются  вопросы связанные с обобщенным программированием, шаблонами, перегрузкой, исключениями, множественным наследованием и стандартной библиотекой шаблонов. Отдельно разбираются новые возможности появившиеся в стандарте языка С++ 11 (C++11 Programming Language Standard ISO/IEC 14882:2011 ): семантика переноса и ссылки на временные объекты, внешние шаблоны, списки инициализации, поддержка многопоточности, лямбда выражения и др. Даются примеры использования из реальных САПР во время занятий.
+
В задачи курса входят актуализация студентами знаний языка С++ и ознакомление с современными принципами проектирования больших систем с использованием языка C++.
 +
На занятиях предполагается разбор примеров использования конструкций языка и применения рассматриваемых методов проектирования, а также проведение промежуточных небольших тестов-контрольных.
  
Цель курса — научить приемам и навыкам промышленного программирования и прогаммной инженерии с помощью совереммного языка С++.
 
  
Задачи курса:
+
== Содержание курса ==
* актуализировать знание языка С++;
+
* способствовать пониманию студентами принципов и возможностей языка С++ для построения промышленных систем;
+
* ознакомить с технологией построения больших систем с использованием языка С++ на примере программирования современных САПР микроэлектроники.
+
  
Изучение курса основывается на знаниях, полученных студентами при изучении языков программирования ранее, а также приобретенных знаний на спец. курсах уроках по САПР и технологиям программирования.
+
'''Занятие 1.''' Вводный тест. Вывод типов шаблонов и auto. Ключевое слово decltype. Инициализация с фигурными скобками.
  
Представлено значительное число практических работ. Последовательность изучения материала также способствует облегчению понимания разделов связанных с технологиями программирования и интеграции курса с другими предметами, такими как технологии САПР. В программе уделяется очень большое внимание решению прикладных задач с помощью С++.
+
'''[[Media: Lection_pbscpp_2.pdf|Занятие 2]].'''  Ключевые слова override и final. Удаленные функции. Псевдонимы. Перечисления с областью видимости. Объекты и функции constexpr.
  
== Содержание курса ==
+
'''[[Media: Lection_pbscpp_3.pdf|Занятие 3]].'''  Лямбда-выражения, функторы и связыватели.
'''Занятиe 1.''' Обзор основных возможностей С++ 14. Структура компилятора, структура компоновщка. Система хранения исходных кодов. Примеры.
+
 
 +
'''Занятие 4.''' Семантика перемещения, std::move, перемещающие конструкторы и операторы перемещения, типы ссылок.
 +
 
 +
'''[[Media: Lection_pbscpp_4.pdf|Занятие 5]].'''  Универсальные ссылки, прямая передача, свертка ссылок, return value optimization, проблемы перегрузки.
 +
 
 +
'''[[Media: Lection_pbscpp_6.pdf|Занятие 6]].'''  Операторы new, delete и аллокаторы. Умные указатели. std::unique_ptr.
 +
 
 +
'''[[Media: Lection_pbscpp_7.pdf|Занятие 7]].'''  Указатели std::shared_ptr, std::weak_ptr, особенности использования make_shared.
 +
 
 +
'''[[Media: Lection_pbscpp_8.pdf|Занятие 8]].'''  Идиомы CRTP, PIMPL. Примеры паттернов проектирования: Bridge, Command.
 +
 
 +
'''[[Media: Lection_pbscpp_9.pdf|Занятие 9]].'''  Паттерны Singleton, Strategy, Decorator, Observer.
  
'''Занятиe 2.''' Шаблоны. Перегрузка функций. Шаблонные функции. Специализация шаблонных функций. Разрешение конфликтов во время специализации. Классы шаблоны. Инстанциация классов-шаблонов. Правила для классов-шаблонов. Не функции-члены с шаблонными аргументами.
+
'''[[Media: Lection_pbscpp_10.pdf|Занятие 10]].''' Создание объектов с помощью фабрик. Паттерн Visitor. Шаблонное метапрограммирование, std::enable_if, решение проблемы перегрузки и универсальных ссылок.
  
'''Занятиe 3.''' Списки инициализации для членов класса. Списки инициализации во время простого наследования, множественного наследования, множественного наследования и композиции. Operator=, конструкторы и композиция. Публичное наследование. Виртуальные функции. Полиморфизм. Чистые виртуальные функции и абстрактные классы. Закрытое наследование, ассоциации.
+
'''[[Media: Lection_pbscpp_11.pdf|Занятие 11]].''' Метапрограммирование с шаблонами и X-macro. Идиома Type Erasure.
  
'''Занятиe 4.''' Множественное наследование. Неопределенности при множественном наследовании. Виртуальный базовый класс. Правило доминирования. Список инициализации членов класса. Простой список. Шаблонный список. Итераторы. Шаблонные итераторы. Шаблоны и наследование.
+
'''[[Media: Lection_pbscpp_12.pdf|Занятие 12]].''' Обработка ошибок.
  
'''Занятиe 5.''' Указатели на функции. Передача функций в качестве параметров. Указатели функций в С++. Функции обратного вызова. Функторы в STL. Bind. Boost::function и Boost::bind. Пример класса Cell.
+
'''[[Media: Lection_pbscpp_13.pdf|Занятие 13]].''' Введение в многопоточность. Примитивы синхронизации.
  
'''Занятиe 6.''' Исключения. Традиционные подходы к обработке ошибок. try, catch и throw. Множественные блоки catch. Список спецификации исключений. Повторный вызов исключений (rethrow). Очистка. Сопоставление исключений. Аллокация ресурсов. Конструкторы, десктрукторы и исключения. Стандартные исключения.
+
'''[[Media: Lection_pbscpp_14.pdf|Занятие 14]].'''  Многопоточность. Некоторые особенности C++14 и C++17.
  
'''Занятиe 7.''' Стандартная библиотека шаблонов – STL. Принцип проектирования. Обобщенное программирование. Компоненты STL: алгоритмы, итераторы, контейнеры, функционалы. Адапторы. Примеры использования.
+
== Задачи ==
 +
'''[[Media: Pbscpp_tasks.pdf|Условия задач]]'''
  
'''Занятиe 8.''' Ввод/вывод. Манипуляторы. Перегрузка операторов ввода/вывода. Файлы. Чтение и запись объектов. Обработка потоков внутри конструкторов и деструкторов.  Примеры.
+
== Экзамен ==
 +
Экзамен по курсу письменный. В работе 15 заданий, на выполнение отводится 90 минут. Максимальная сумма баллов – 30.
  
'''Занятиe 9.''' Эволюция языка. C++11. Зачем был нужен новый стандарт? Изменения в ядре языка: семантика переноса и ссылки на временные объекты. Внешние шаблоны. Списки инициализации. Циклы в диапазоне. Лямбда-выражения. Альтернативный синтаксис функций. Явная перегрузка и final. Вариадические шаблоны. Новые литералы. Поддержка многопоточности. Статический утверждения. Обновление STL. Возможности, которые не вошли в новый стандарт. Устаревшие и удаленные возможности.
+
* Оценка отлично: не менее 24 баллов
 +
* Оценка хорошо: не менее 18 и не более 23 баллов
 +
* Оценка удовлетворительно: не менее 12 и не более 17 баллов
  
'''Занятиe 9.''' Шаблоны программирования. Обобщенное программирование. Применение. 
+
[[Media: Pbscpp_exam_example.pdf|Примерный вариант экзаменационной работы]].
  
'''Занятиe 10.''' Учебный пример проектирования и программирования системы физического проектирования микроэелктроники. Разбор входного формата. Внутреннее представление. Алгоритмы. Вывод.
+
== Программа курса ==
 +
[[Media: Pbscpp_content2017.pdf|Программа курса (pdf)]] (осенний семестр 2017 года)
  
'''Занятия 11, 12.''' Практические занятия с примерами в аудитории. Желательно иметь ноутбук с собой.
 
  
 
== Литература ==
 
== Литература ==
* ISO/IEC C++ Programming Language Standard 14482:2011.
+
* С. Мейерс, Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14, изд. Вильямс, М.: 2017 г.
 +
* Anthony Williams. C++ Concurrency in Action: Practical Multithreading.
 +
* А. Александреску, Современное проектирование на C++, изд. Вильямс, М.: 2017 г.
 +
* Э.Гамма, Р.Хелм, Р.Джонсон, Дж. Влиссидес, Приемы объектно-ориентированного проектирования.  
 
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.
 
* Г. Саттер, А. Александреску, Стандарты программирования на С++. 101 правило и рекомендация.
 
* Б. Страуструп, Язык программирования С++, 4-е издание.
 
* Б. Страуструп, Язык программирования С++, 4-е издание.
 
* Б. Страуструп, Программирование. Принципы и практика использования C++.
 
* Б. Страуструп, Программирование. Принципы и практика использования C++.
 
* Б. Страуструп, Дизайн и эволюция языка С++.
 
* Б. Страуструп, Дизайн и эволюция языка С++.
* J. Lakos, Large Scale Software Design in C++, Addison-Wesley, 1996.
+
* D. Abrahams, A. Gurtovoy C++ Template Metaprogramming.
* A. Fox, D. Patterson, Engineering Software as a Service: An Agile Approach Using Cloud Computing, Addison-Wesley, 2013.
+
* D. Spinellis, G. Gousios, Beautiful Architecture: Leading Thinkers Reveal the Hidden Beauty in Software Design, O’Reilly Media, 2009.
+
* N. Martz, J, Warren, Big Data:Principles and best practices of scalable realtime data systems, Manning, 2013.
+
* J. L. Hennessy and D. A. Patterson, Computer Architecture: A Quantitative Approach, 5th Edition, Morgan Kaufmann Publishing Co., Menlo Park, CA. 2013.  
+
  
  
 
[[Категория:Лекционные курсы кафедры МК]]
 
[[Категория:Лекционные курсы кафедры МК]]
 
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]
 
[[Категория:Магистерская программа Дискретные управляющие системы и их приложения]]

Версия 22:52, 3 февраля 2018

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

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

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


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

Занятие 1. Вводный тест. Вывод типов шаблонов и auto. Ключевое слово decltype. Инициализация с фигурными скобками.

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

Занятие 3. Лямбда-выражения, функторы и связыватели.

Занятие 4. Семантика перемещения, std::move, перемещающие конструкторы и операторы перемещения, типы ссылок.

Занятие 5. Универсальные ссылки, прямая передача, свертка ссылок, return value optimization, проблемы перегрузки.

Занятие 6. Операторы new, delete и аллокаторы. Умные указатели. std::unique_ptr.

Занятие 7. Указатели std::shared_ptr, std::weak_ptr, особенности использования make_shared.

Занятие 8. Идиомы CRTP, PIMPL. Примеры паттернов проектирования: Bridge, Command.

Занятие 9. Паттерны Singleton, Strategy, Decorator, Observer.

Занятие 10. Создание объектов с помощью фабрик. Паттерн Visitor. Шаблонное метапрограммирование, std::enable_if, решение проблемы перегрузки и универсальных ссылок.

Занятие 11. Метапрограммирование с шаблонами и X-macro. Идиома Type Erasure.

Занятие 12. Обработка ошибок.

Занятие 13. Введение в многопоточность. Примитивы синхронизации.

Занятие 14. Многопоточность. Некоторые особенности C++14 и C++17.

Задачи

Условия задач

Экзамен

Экзамен по курсу письменный. В работе 15 заданий, на выполнение отводится 90 минут. Максимальная сумма баллов – 30.

  • Оценка отлично: не менее 24 баллов
  • Оценка хорошо: не менее 18 и не более 23 баллов
  • Оценка удовлетворительно: не менее 12 и не более 17 баллов

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

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

Программа курса (pdf) (осенний семестр 2017 года)


Литература

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