• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
Магистратура 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 module
    0.3 * лабораторные + 0.1 * летучки + 0.2 * тесты + 0.4 * экзамен
  • 2023/2024 4th module
    0.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