• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
Магистратура 2024/2025

Углубленный C++

Статус: Курс обязательный (Компьютерные системы и сети)
Направление: 09.04.01. Информатика и вычислительная техника
Когда читается: 1-й курс, 2-4 модуль
Формат изучения: с онлайн-курсом
Онлайн-часы: 30
Охват аудитории: для своего кампуса
Прогр. обучения: Компьютерные системы и сети
Язык: русский
Кредиты: 9

Программа дисциплины

Аннотация

Конструкции языка 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
  • Дополнительные разделы
Элементы контроля

Элементы контроля

  • блокирует часть оценки/расчета лабораторная str
  • блокирует часть оценки/расчета лабораторная mergesort
  • блокирует часть оценки/расчета лабораторная intrusive
  • блокирует часть оценки/расчета лабораторная C io
  • неблокирующий летучка 1
  • неблокирующий летучка 2
  • неблокирующий летучка 3
  • блокирует часть оценки/расчета тест 1
  • блокирует часть оценки/расчета тест 2
  • блокирует часть оценки/расчета экзамен 2 модуль
  • неблокирующий тест 3
  • неблокирующий тест 4
  • неблокирующий тест 5
  • неблокирующий летучки 3 модуль
  • блокирует часть оценки/расчета лабораторная s vector
  • блокирует часть оценки/расчета лабораторная 7 matrix
  • блокирует часть оценки/расчета лабораторная 8 L2 sh_ptr
  • блокирует часть оценки/расчета лабораторная 9 figures
  • блокирует часть оценки/расчета лабораторная 10 с++ io/t-io
  • блокирующий домашнее задание 1 bmp
  • неблокирующий летучки 4 модуль
  • блокирует часть оценки/расчета лабораторная работа 11 vector
  • блокирует часть оценки/расчета лабораторная работа 12 excpt
  • блокирующий Домашнее задание 2 K2:M2 Huffman
  • блокирующий экзамен 4 модуль
Промежуточная аттестация

Промежуточная аттестация

  • 2024/2025 2nd module
    0.08 * лабораторная C io + 0.08 * лабораторная intrusive + 0.08 * лабораторная mergesort + 0.08 * лабораторная str + 0.005 * летучка 1 + 0.005 * летучка 2 + 0.01 * летучка 3 + 0.08 * тест 1 + 0.08 * тест 2 + 0.5 * экзамен 2 модуль
  • 2024/2025 4th module
    0.1 * Домашнее задание 2 K2:M2 Huffman + 0.1 * домашнее задание 1 bmp + 0.05 * лабораторная s vector + 0.05 * лабораторная 10 с++ io/t-io + 0.05 * лабораторная 7 matrix + 0.05 * лабораторная 8 L2 sh_ptr + 0.05 * лабораторная 9 figures + 0.05 * лабораторная работа 11 vector + 0.05 * лабораторная работа 12 excpt + 0.05 * летучки 3 модуль + 0.05 * летучки 4 модуль + 0.05 * тест 3 + 0.05 * тест 4 + 0.05 * тест 5 + 0.2 * экзамен 4 модуль
Список литературы

Список литературы

Рекомендуемая основная литература

  • 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

Авторы

  • Башун Владимир Владимирович