• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
Специалитет 2019/2020

Языки программирования

Лучший по критерию «Полезность курса для Вашей будущей карьеры»
Лучший по критерию «Полезность курса для расширения кругозора и разностороннего развития»
Лучший по критерию «Новизна полученных знаний»
Статус: Курс обязательный (Компьютерная безопасность)
Когда читается: 2-й курс, 1, 2 модуль
Формат изучения: без онлайн-курса
Специальность: 10.05.01. Компьютерная безопасность
Язык: русский
Кредиты: 4
Контактные часы: 56

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

Аннотация

Данная дисциплина относится к базовой части Профессионального цикла (Major), проводится на 2 курсе обучения и является обязательной. Для освоения учебной дисциплины студенты должны владеть базовыми школьными знаниями и компетенциями. Результаты освоения дисциплины используются в дальнейшем при изучении следующих дисциплин: Математическое программное обеспечение, Методы программирования, Операционные системы, Языки ассемблера.
Цель освоения дисциплины

Цель освоения дисциплины

  • Формирование базовых компетенций, связанных с разработкой программного обеспечения при решении профессиональных задач
  • Выработать навыки программирования и алгоритмизации с применением современных процедурных и объектно-ориентированных языков программирования
  • Заложить понимание иерархии существующего ПО
  • Освоить разнообразие инструментария и подготовиться к проектированию и анализу программных систем
Планируемые результаты обучения

Планируемые результаты обучения

  • Знать особенности взаимодействия языков высокого и низкого уровня, организации работы с памятью в скриптовых языках
  • Знать базовые структуры данных
  • Знать основные комбинаторные и теоретико-графовые алгоритмы, а также способы их эффективной реализации и оценки сложности
  • Знать современные технологии программирования
  • Уметь формализовать поставленную задачу
  • Уметь работать с интегрированными средами разработки программного обеспечения
  • Уметь разрабатывать системное и прикладное программное обеспечение для многозадачных, многопользовательских и многопроцессорных сред, а также для сред с интерфейсом, управляемым сообщениями
  • Уметь проводить оценку сложности алгоритмов
  • Уметь разрабатывать эффективные алгоритмы и программы
  • Уметь планировать разработку сложного программного обеспечения
  • Уметь оценивать качество готового программного обеспечения
  • Владеть навыками разработки, документирования, тестирования и отладки программ
  • Владеть навыками использования инструментальных средств отладки и дизассемблирования программного кода
  • Владеть навыками разработки алгоритмов решения типовых профессиональных задач
Содержание учебной дисциплины

Содержание учебной дисциплины

  • Основы процедурного программирования на языке C++
    1. Введение в языки программирования. 2. Использование виртуальных машин. Основы языка оболочки командной строки. Взаимодействие программ со средой выполнения. 3. Обзор и основные понятия языка C++. Лексический состав языка. Обзор структуры программы. 4. Основные арифметические типы данных. Основные операции с арифметическими типами. 5. Объекты и доступ к ним. Составной оператор. Дополнительные операции записи 6. Пример компиляции выражения. Функции. Аппаратный стек и автоматическое время хранения. 7. Условный оператор if. Введение в форматированный ввод-вывод. Простые циклы. 8. Тернарная операция, оператор for, операторы перехода, константные выражения, оператор switch. Изменение порядка выполнения команд в машинном коде. Стили оформления программ. clang-format. 9. Пространства имён. Квалифицированные имена. Связанность описаний функций, прототипы и рекурсия. Анонимные пространства имён. Статическое время хранения. Описание и директива using, псевдонимы областей видимости. 10. Использование компилятора из командной строки. Undefined Behavior Sanitizer. Среда Qt Creator и система сборки CMake. Средства статического анализа: clang-tidy. 11. Инициализация копированием и её использование в определениях и операторах ветвления и цикла. Псевдонимы типов. Типы фиксированной ширины. Перегрузка функций и аргументы по умолчанию. Математические функции стандартной библиотеки. 12. Возможности предварительной обработки. Заголовочные файлы. Программы из нескольких единиц трансляции. 13. Указатели на отдельные объекты. Операция sizeof. Простое использование массивов. Комбинирование конструкций создания производных типов. Указатели на функции. 14. Квалификаторы типов, const-корректность. Расширенные константные выражения. Нулевой указатель. Средства динамического анализа: Address Sanitizer, Valgrind. 15. Побитовые операции. 16. Строковые литералы. Функции классификации символов и работы с нуль-терминированными строками. Передача информации об ошибках между функциями.
  • Основные структуры данных. Архитектура программ и проектов
    1. Сложность вычислений. Работа с динамической памятью. Функции работы с последовательностями тривиальных типов. 2. Графы. Многомерные структуры данных. Введение в классовые типы. 3. Графовые структуры данных: связанные списки, деревья. Представления в виде массивов: куча. 4. Хэш-таблицы. Сравнение динамических структур данных. 5. Встраиваемые функции. Неполные типы и инкапсуляция в стиле C. Утверждения и тесты. 6. Библиотеки. 7. Системы контроля версий: git.
  • Основы объектно-ориентированного программирования на языке С++
    1. Прочие виды инициализации. Временные объекты. Ссылки. 2. Классовые типы и их члены: статические и нестатические члены данных и функции члены, псевдонимы типов, вложенные классы. Локальные классы. 3. Инициализация классов: конструкторы. Пользовательские преобразования типов. Перегрузка операций. Аргументо-зависимый поиск имён. Друзья классов. 4. Специальные функции-члены класса. 5. Перечисления. std::byte. Intrinsic-функции и конфигурационные проверки в системах сборки, has_include. 6. Наследование классов. 7. Виртуальные функции и виртуальное наследование. RTTI. typeid и dynamic_cast.
  • Обобщённое программирование на языке C++
    1. Концепции. Шаблоны функций и классов. Дедукция для шаблонов функций и классов. Инстанциация и специализация шаблонов. std::enable_if. 2. Простые применения шаблонов. Комплексные числа. std::array/std::span/std::string_view. Вариадические шаблоны. Свёртки. 3. Стандартная библиотека шаблонов. Простые концепции. Итераторы. Контейнеры. Последовательности. Универсальный доступ к контейнерам. 4. Строки и виды в них. Регулярные выражения. Адаптеры контейнеров. std::bitset. 5. Цикл for для диапазона. Функциональные объекты. Лямбда-выражения. Алгоритмы стандартной библиотеки. 6. Детали реализации контейнеров. Работа с памятью для нетривиальных типов, раздельная с инициализацией/уничтожением. Перегрузки операций new/delete. Аллокаторы. Работа с неинициализированной памятью. Диспетчеризация по тегам. if constexpr. 7. Пары, кортежи. Ассоциативные контейнеры. Структурные привязки.
  • Дополнительные возможности C++
    1. Smart-указатели. std::optional/std::any. Объединения и std::variant. 2. Подходы к обработке ошибок: std::exception/std::error_code. 3. Потоки ввода/вывода. 4. Дата/время. (Псевдо)случайные числа и распределения. 5. Язык C: отличия. 6. Использование библиотек языка C в C++. 7. Обзор библиотек boost. 8. Сборка и использование сторонних библиотек. 9. Работа с файловой системой. 10. Многопоточное программирование в модели с общей памятью. Потоки. Упорядоченность операций. std::thread. Простые примеры без общего доступа к объектам. 11. Примитивы синхронизации: мьютексы и условия. Атомарные операции.
  • Разработка программ с графическим интерфейсом пользователя
    1. Библиотеки Qt. QObject и метакомпилятор. Контейнеры и QString. 2. QVariant. QIODevice, QDataStream/QTextStream. clazy. 3. QWidget. Обзор Виджетов. QPainter. QDialog / QInputDialog / QMessageBox. 4. Дизайнер форм и UIC, Layouts. Ресурсы и RCC. 5. Виджеты с архитектурой модель/вид для элементов и графических объектов. 6. QRunnable/QThread и использование фоновых операций. 7. Интернационализация. 8. Обзор прочих модулей библиотек Qt. 9. Паттерны программирования. 10. Приёмы документирования исходного кода.
Элементы контроля

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

  • неблокирующий Домашняя работа
  • неблокирующий Контрольная работа
  • неблокирующий Курсовая работа
  • неблокирующий Зачет
  • неблокирующий Экзамен
Промежуточная аттестация

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

  • Промежуточная аттестация (2 модуль)
    0.144 * Домашняя работа + 0.12 * Зачет + 0.036 * Контрольная работа + 0.3 * Курсовая работа + 0.4 * Экзамен
Список литературы

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

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

  • Основы программирования на С++ : учеб. пособие, Захарова, С. С., 2012

Рекомендуемая дополнительная литература

  • Как программировать на С++, Дейтел, Х. М., 2008