Skip to content

Курс лекций "Проектирование больших систем на языке программирования С++"

License

Notifications You must be signed in to change notification settings

favorart/cpp_course

Repository files navigation

Курс лекций "Проектирование больших систем на языке программирования С++"

Создан: апрель 2019

Прочитан для магистров первого и второго года обучения механико-математического факультета филиала МГУ им. М.В. Ломоносова в городе Ташкенте.

  • весна/2019
  • осень/2020
  • осень/2021
  • осень/2023

Кафедра МаТИС.

Использованная литература

Задачи для самостоятельного решения

Вопросы для проведения аттестации

Список воспроизведения с лекциями

Благодарности:

Лекция 1. Введение в проектирование ПО

(2021) Содержание:

  • Анализ требований
  • Процесс разработки
  • Борьба со сложностью
  • Архитектура
  • Создание ПО - человеческая деятельность
  • Методология повторного использования
  • Тестирование
  • Документация

Видео-лекция: Watch the video

Лекция 1 — Проектирование.pdf

Тест для самопроверки 1

Лекция 2. Нововведения стандарта языка С++ 2011 года

(2021) Содержание:

  • Новые регулярные слова
  • Проверка инвариантов времени компиляции и времени выполнения
  • Типизированные перечисления
  • Тривиальный тип данных и тип со стандартным размещением
  • RAII и утечки ресурсов
  • Исправление шаблонов
  • Константа нулевого указателя
  • Нововведения в STL
  • Управление потоками

Видео-лекция (Часть 1): Watch the video

Видео-лекция (Часть 2): Watch the video

Лекция 2 — C++11.pdf

Тест для самопроверки 2

Лекция 3. Совмещение кодов на языках Си и С++

(2021) Содержание:

  • Обратно совместим ли С++ c ANSI/ISO Сu?
  • Как вызвать Cu/C++ функцию из Cu/C++?
  • Как включить Cи заголовок в коде на C++?
  • Почему компоновщик (linker) выдаёт ошибки?
  • Искажение имён
  • Как передать объект класса Cu/C++ в/из Cu/C++?
  • Различия C99 и современный С++

Видео-лекция: Watch the video

Лекция 3 — C and C++.pdf

Тест для самопроверки 3

Лекция 3.1. Полиморфизм

(2021) Содержание:

  • Полиморфизм динамический vs статический
  • CRTP. Curiously Recurring Template Pattern
  • MixIn вариации
  • std::enable_shared_from_this

Видео-лекция (извините за звук): Watch the video

Видео-лекция (2019) (старая версия, может, лучше звук): Watch the video

Лекция 3.1 — polymorphisms.pdf

Тест для самопроверки 3.1

Лекция 4. С++11. Семантика перемещения

(2021) Содержание:

  • Единообразная инициализация
  • Запрет на “сужение” типа
  • Конструирование
  • Операторы выравнивания адресов в памяти
  • Свойства выражений (lvalue и rvalue)
  • Семантика перемещения (move-semantic)
  • Специальные методы перемещения класса
  • Совершенная передача (perfect-forwarding)
  • Передача аргументов функций по ссылке или по значению
  • std::decay

Видео-лекция (Часть 1): Watch the video

Видео-лекция (Часть 2): Watch the video

Лекция 4 — move-semantics.pdf

Тест для самопроверки

Лекция 5. Лямбда выражения

(2021) Содержание:

  • C++11 auto, decltype
  • C++11 lambda-функции
  • Списко захвата (capture list)
  • Функторы
  • std::function
  • std::bind
  • Обобщённая лямбда-функция

Видео-лекция: Watch the video

Лекция 5 — lambda.pdf

Лекция 5.1 Нововведения стандарта языка С++ 2014 года

(2021) Содержание:

  • Авто-вывод типа возвращаемого значения функций
  • Обобщённые (полиморфные) лямбда-выражения
  • Нововведения в STL
  • Обособленные строки и пользовательские литералы
  • std::optional и std::exception_ptr
  • std::complex

Видео-лекция: Watch the video

Лекция 5.1 — C++14.pdf

Тест для самопроверки для 5 и 5.1

Лекция 6. Шаблоны с переменным числом параметров

(2021) Содержание:

  • Шаблоны языка С++
  • Variadic Templates
  • Пишем класс DiscriminatedPtr
  • Применение в виде std::tuple

Видео-лекция: Watch the video

Лекция 6 — variadic template.pdf

Лекция 6.1 Виды преобразований типов данных

(2021)

Видео-лекция: Watch the video

Тест для самопроверки для 6 и 6.1

Лекция 6*. Усложнённый вариант изучения шаблонов с переменным числом параметров

(2019) Содержание:

  • Продвинутые подходы мета-программирования
  • Пишем вместе std::tuple правильно!

Видео-лекция: Watch the video

6*. variadic_templates.pdf

Лекция 7. Идиомы языка С++

(2021) Содержание:

  • SFINAE
  • Lazy initialization
  • PImpl
  • TypeErasure
  • std::any
  • std::function

Видео-лекция (Часть 1): Watch the video

Видео-лекция (Часть 2): Watch the video

Лекция 7 — sfinae.pdf

Лекция 7.1 — type-erasure.pdf

Тест для самопроверки для 7 и 7.1

Лекция 8. Нововведения стандарта языка С++ 2017 года

(2021) Содержание:

  • Свёртка variadic templates
  • Вывод шаблонных аргументов
  • Структурное связывание
  • constexpr if
  • Новый порядок выполнения инструкций
  • Copy elision
  • Атрибуты C++

Видео-лекция: Watch the video

Лекция 8 — C++17.pdf

Тест для самопроверки 8

Лекция *. С++20 (дополнительная)

(2019) Содержание:

  • Заморозка нововведений (2019) для стандарта языка С++ 2020 г.
  • Исчерпывающий список нововведений с объяснением некоторых новых механизмов

Видео-лекция: Watch the video

Лекция * — C++20.pdf

Лекция 9. Процессы, потоки и методы синхронизации

(2021) Содержание:

  • Процесс, его свойства и классификация
  • Создание процессов, copy-on-write
  • Иерархия и аттрибуты процессов unix
  • Жизненный цикл процесса unix (fork + exec)
  • Поток исполнения, его свойства и аттрибуты
  • С++11: std::thread
  • Мьютексы
  • Условные переменные
  • Барьеры
  • Асинхронность (std::promise, std::future, std::async)

Видео-лекция: Watch the video

Лекция 9 — Процесс и поток.pdf

Тест для самопроверки 9

Лекция 10. Аллокаторы и управление памятью

(2019) Содержание:

  • Подходы управления памятью
  • Ручное управление памятью
  • Memory pool
  • Garbage collection
  • Ошибки памяти на языке С++
  • Самая опасная функция в С/С++
  • Область применения аллокаторов
  • Как написать свой аллокатор?
  • std::allocator
  • Allocator С++03
  • Allocator С++11
  • Allocator С++17
  • Polymorphic memory resource (PMR)
  • Polymorphic Allocator

Видео-лекция: Watch the video

Лекция 10 — allocator.pdf

Тест для самопроверки 10

Лекция 10.1. Умные указатели

(2021) Содержание:

  • Пишем свой умный указатель
  • std::unique_ptr
  • std::shared_ptr
  • std::weak_ptr

Видео-лекция: Watch the video

Лекция 10.1 — smart-pointers.pdf

Лекция 11. Введение в библиотеку Boost

(2021) Содержание:

  • Boost
  • Boost.Log
  • Boost.Test
  • Boost.Signals2
  • Boost.Algorithm
  • Boost.TypeTraits
  • Boost.Filesystem
  • Boost.Serialization
  • Boost.Numeric
  • Boost.Graph
  • Boost.Regex
  • Boost.MetaStateMachine
  • Boost.Spirit
  • Boost.PropertyTree
  • Boost.Pool
  • Boost.PointerContainer
  • Boost.ScopeExit

Видео-лекция: Watch the video

Лекция 11 — boost.pdf

Тест для самопроверки 11

Лекция 11.1. Тестирование. Тесты покрытия кода

(2021) Содержание:

  • boost-test
  • google-test
  • visual-studio native unit-test
  • visual-studio test-explorer
  • code-coverage: lcov

Видео-лекция: Watch the video

Лекция 11.1 — Тесты, покрытие кода.pdf

Тест для самопроверки 11.1

Лекция 12. Библиотека Boost.Geometry

(2019) Содержание:

  • Обзор
  • Дизайнерские идеи
  • Особенности
  • Примеры
  • Обоснование конструкции

Видео-лекция: Watch the video

Лекция 12 — boost geometry.pdf

Тест для самопроверки 12

Лекция 13. Сетевое взаимодействие

(2021) Содержание:

  • Сокеты Беркли
  • IPv4, IPv6
  • networking
  • TCP, UDP, HTTP
  • server-client
  • Мультиплексирование
  • select, poll, epoll, kqueue

Видео-лекция: Watch the video

Лекция 13 — Сокеты.pdf

Тест для самопроверки 13

Лекция 14. Библиотеки сетевого взаимодействия

(2021) Содержание:

  • libevent
  • libev
  • boost.asio

Видео-лекция: Watch the video

Лекция 14 — libevent-boost.asio.pdf

Тест для самопроверки 14

Рекомендованные видео-лекции для дальнейшего изучения

список

About

Курс лекций "Проектирование больших систем на языке программирования С++"

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published