Магистратура
2023/2024
Углубленный C++
Статус:
Курс обязательный (Компьютерные системы и сети)
Направление:
09.04.01. Информатика и вычислительная техника
Кто читает:
Департамент компьютерной инженерии
Когда читается:
1-й курс, 2-4 модуль
Формат изучения:
с онлайн-курсом
Онлайн-часы:
30
Охват аудитории:
для своего кампуса
Прогр. обучения:
Компьютерные системы и сети
Язык:
русский
Кредиты:
9
Контактные часы:
112
Программа дисциплины
Аннотация
Конструкции языка C близко сопоставляются типичным машинным инструкциям, благодаря чему он традиционно является одним из основных языков системного программирования (в частности, на нем написана ОС Linux). Изучение приемов программирования на C позволяет не только научится писать эффективные программы, но и разобраться как работает компьютер при их выполнении. Язык C повлиял на синтаксис таких языков как C++, C#, Java и Objective-C. Знание С позволит лучше понять решения, принятые авторами этих языков, и оценить накладные расходы по времени и памяти при их использовании.Язык C++ является де-факто стандартом для написания высокопроизводительных программ. С одной стороны он позволяет эффективно использовать ресурсы компьютера, а с другой стороны --- позволяет писать программы с использованием наиболее популярных подходов современного программирования (процедурного, объектно-ориентированного, обобщенного, метапрограммирования и других).Целью курса является обучение написанию на C++ больших программ и библиотек, которые можно переиспользовать в других проектах. Особенностью курса является то, что очередной механизм языка рассматривается только после того, как слушатели смогут написать его сами.
Цель освоения дисциплины
- Читать и писать полезные программы на языке C
- Читать и писать программы на современном C++
- Детально понимать процесс построения программы из исходных кодов (gcc, make, cmake)
- Детально понимать процесс выполнения программы
- Использовать библиотеки
- Проектировать и реализовывать код, который можно использовать повторно
- Использовать все возможности библиотеки STL
Планируемые результаты обучения
- Понимание архитектуры компьютера
- Понимание процесса превращения программы в машинный код (компилятор, ассемблер, линковщик)
- Умение работать с указателями
- Понимание того, как устроен вызов функции
- Понимание карты памяти: стек и куча
- Умение использовать указатели на функции и интрузивные списки
- Знание стандартной библиотеки libc
- Умение работать с gcc, gdb, make, cmake, valgrind, sanitizers, perf
- Умение разработать утилиту командной строки под ОС Linux
- Понимание основных идей ООП
- Понимание особенностей ООП в C++ (конструктор копий, перегрузка операторов, move-семантика, множественное наследование)
- Понимание реализации ООП в C++ (vtable, this)
- Понимание реализации умных указателей
- Умение использовать ввод-вывод на С++
- Умение разрабатывать объектно-ориентированных программ на C++ (элементы проектирования на примере архитектуры MV, юнит тесты)
- Понимание способов обработки ошибок (errno, исключения)
- Умение использовать шаблоны
- Умение использовать метапрограммирование (ifdef, variadic templates, enable_if, concepts)
- Знание стандартных контейнеров STL
- Понимание концепции итераторов
- Знания стандартных алгоритмов в STL и особенностей их использования (функторы, ламбда)
- Умение использовать примитивы многопоточного программирования в STL (thread, mutex, conditional variables)
- Аллокаторы
- std::bind, std::function
- std::unique_ptr, std::shared_ptr
- Нововведения из последних стандартов: modules, parallel_algs, formats, filesystem
Содержание учебной дисциплины
- Отдельные главы языка C
- Объектно-ориентированное программирование на языке C++
- Разработка библиотек с помощью обобщенного программирования и метапрограммирования
- Обзор библиотеки STL
- Дополнительные разделы
Элементы контроля
- летучки
- тесты
- экзамен
- лабораторныелабораторные работы с частичной автопроверкой
- итоговый экзамен
Промежуточная аттестация
- 2023/2024 2nd module0.3 * лабораторные + 0.1 * летучки + 0.2 * тесты + 0.4 * экзамен
- 2023/2024 4th module0.4 * итоговый экзамен + 0.15 * лабораторные + 0.15 * лабораторные + 0.05 * летучки + 0.05 * летучки + 0.1 * тесты + 0.1 * тесты
Список литературы
Рекомендуемая основная литература
- C++ programming : program design including data structures, Malik, D. S., 2009
- Алгоритмы на С++ : анализ структуры данных, сортировка, поиск, алгоритмы на графах, Седжвик, Р., 2014
- Дизайн и эволюция C++, Страуструп, Б., 2014
- С++ : полное руководство: классическое издание, Шилдт, Г., 2018
- Шаблоны C++. Справочник разработчика, Вандевурд, Д., 2020
- Язык программирования C++: Базовый курс, Липпман, С. Б., 2014
Рекомендуемая дополнительная литература
- C++17 STL. Стандартная библиотека шаблонов, Галовиц, Я., 2019
- С++ для "чайников", Дэвис, С. Р., 2004
- Язык программирования С, Керниган, Б., 2015