Кафедра К3 Прикладная математика, информатика
и вычислительная техника

Дисциплины

Программирование на языках высокого уровня

Преподаватель: Афанасьев Алексей Викторович

Направление подготовки: 09.03.01 Информатика и вычислительная техника
Направленность: Вычислительные машины, комплексы, системы и сети

Семестры: 1, 2, 3

Вид итогового контроля:
1 семестр — зачёт
2 семестр — зачёт
3 семестр — экзамен и курсовая

Содержание курса

Язык С (1 семестр)

  1. Язык С. стандарт ISO. Сандарт MISRA и CERT C. Каркас программы, функция main(). Алфавит языка, идентификатор, ключевые слова, литералы. Комментарии.
  2. Базовые типы данных (int, float ...). Суффиксы и префиксы констант, объявления переменных, инициализация. Время жизни и область видимости переменных. Оператор sizeof().
  3. Операторы и операции, арифметические операции, операции сравнения, битовые операции, логические операции. Операторы присваивания, операторы инкремента и декремента. составной оператор и пустой оператор. Тернарный оператор.
  4. Условные операторы и операторы выбора. Циклы, условные циклы, циклы с параметром. Переходы. Расширения GCC.
  5. Консольный ввод/вывод. Форматированный ввод/вывод (printf()/scanf()). Символьный ввод/вывод. строковый ввод/вывод.
  6. Массивы. Объявление массива, инициализация массива, использование массива. Многомерные массивы. Приведенный индекс.
  7. Указатели. Объявление указателя, использование указателя. 0 и NULL. Выделение и освобождение памяти (malloc()/free()). Сегменты программы (сегмент кода, сегмент данных...) массив как указатель. Строки и символы. VLA массивы. Ошибки связанные с памятью.
  8. Подпрограммы. Процедуры и функции. Сигнатура функции, фактические и формальные параметры. Объявление, определение и вызов функции. Рекурсия, типы рекурсии. Передача параметров. Передача массивов. Функция с переменным числом аргументов. Указатель на функцию. Глобальные и локальные переменные, область видимости и время жизни.
  9. Файлы, дескриптор файла. Открытие и закрытие файла С. Форматированный ввод/вывод. Символьный ввод/вывод. Двоичный ввод/вывод. работа с файлами в Linux.
  10. Определение псевдонима. Структуры и битовые поля. Анонимные структуры. Перечисления. Объединения. Операции над объединениями и структурами. ООП в С.
  11. Директивы препроцессора и макроопределения, предопределенные макросы, модульный подход. Квалификаторы и спецификаторы. Приведение типов, явное и неявное приведение.
  12. Стандартная библиотека языка С.
  13. Библиотеки. Статические и динамические библиотеки Linux. Статические и динамические библиотеки Windows. Соглашение о вызове. Атрибуты языка С. Встроенный ассемблер.
  14. Тестирование, покрытие кода, виды тестирования. Библиотеки юнит-тестирования для языка С (check и CMocka) mock объекты. Документирование кода (DOXYGEN), Локализация приложений.
  15. потоки POSIX. Функции работы с потоками, примитивы синхронизации (Мьютексы, условные переменные, спин-блокировки, RW-блокировки, барьеры).
  16. потоки языка С. Функции работы с потоками, примитивы синхронизации(Мьютексы, условные переменные). Атомарные переменные.
  17. Управление процессами POSIX. Межпроцессное взаимодействие примитивы POSIX и X/Open System Interfaces (неименованные каналы, каналы FIFO, очередь сообщений, семафор, разделяемая память).
  18. Сетевое программирование. Сокеты BSD. Каркас простого TCP клиента и сервера. Каркас простого UDP клиента и сервера.
  19. Мультиплексирование (poll, select, epoll, kqueue, POSIX AIO).

Язык С++ (2 семестр)

  1. Отличия языка С++ от языка С. стандарт ISO.
  2. ООП. Абстрагирование, инкапсуляция, полиморфизм, наследование. Понятие класса и объекта, поля и методы. Спецификаторы доступа.
  3. Конструктор, деструктор. Типы конструкторов. Список инициализации. Методы по умолчанию.
  4. Статические поля и методы. Inline методы. Константные поля и методы. Спецификаторы delete и default. Спецификатор explicit. Спецификатор volatile.
  5. Дружественные функции. Указатель this. Перегрузка функций, методов и операторов, бинарные и унарные операторы. Операторы преобразования.
  6. Наследование. Множественное наследование. Виртуальные функции. Абстрактный класс. Ковариантный тип возврата. Идентификаторы override и final. Виртуальное насследование, виртуальный диструктор.
  7. Обработка ошибок (С/С++). Исключения, исключения стандартной библиотеки. Обработка исключений. Генерация исключений. Try в конструкторе и деструкторе. Try в функции. Спецификатор noexept.
  8. Шаблон функций, шаблон классов, параметры шаблона. Инстанцирование шаблона. Шаблонные функции-члены. Виды аргументов шаблона. Шаблонные параметры шаблона, шаблоны с переменным числом аргументов. Специализация шаблона и перегрузка шаблонных функций. Шаблоны и дружественные функции. Взаимодействие одинаковых шаблонов. Наследование шаблонов.
  9. Императивное и декларативное программирование. Функтор. Лямбда-функции и замыкания. Рекурсивная лямбда-функция. Захват переменных. Каррирование и частичное применение. Обобщенные лямбда-функции.
  10. Параллельные вычисления в С++. std::thread, std::mutex. Ассинхронность, промисы и фьючеры.
  11. Аллокаторы и итераторы.
  12. Контейнеры стандартной библиотеки
  13. Библиотеки юнит-тестирования для языка С++ (Boost.Test, gTest, gMock)
  14. Сигналы и слоты

Язык Python (3 семестр)

  1. Введение в Python. Типизация и сборка мусора. Реализации Python. Зарезервированные слова, встроенные имена. Создание переменной. Комментарии. Получение справки.
  2. Типы данных, числовой и логичесикй типы. Встроенные типы данных. Классификация объектов. Числовые типы, арифметические операции, побитовые операции. Логический тип, операции сравнения, операции равенства, операции принадлежности, операции идентичности, логические операторы. Объект None и объект type.
  3. Строки, форматирование и файлы. Строки, создание строк, операции со строками. Сырые строки, bytes и bytearray. Извлечение среза. Методы строк. Форматирование строк, старый и новый форматы. Файлы, операции с файлами.
  4. Множества, списки, кортежи и словари. Множества, операции с множествами, методы множества. Списки, операции над списками, методы списков. Кортежи, операции над кортежами. Словари, операции над словарями, метод словарей.
  5. Операторы Python, условный оператор, циклы. Операторы Python, синтаксис операторов. Пустой оператор. Оператор присваивания, формы присваивания, операторы дополненного присваивания. Операторы ввода/вывода. Условный оператор, циклы, условный цикл, итерируемый цикл. Операторы перехода. Списковые включения.
  6. Функции и генераторы. Определение функции, вызов функции. Оператор возврата. Аргументы и их способы передачи. Область видимости, локальные и глобальные переменные. Атрибуты функций. Анонимные функции и функциональный подход. Аннотации атрибутов. Генераторы.
  7. Модули и пакеты. Операторы работы с модулями. Алгоритм импортирования. Import и from.
  8. ООП и классы. Подходы к ООП. Создание класса, атрибуты класса, объявление методов. Self. Класс object. Наследование. Атрибуты для интроспекции.
  9. ООП перегрузка операций. Методы для перегрузки операций. Индексирование, конструктор и деструктор. Доступ к атрибутам. Выражение вызова. Сравнения.
  10. Исключения. Операторы для работы с исключениями. Цели применения исключений. Обработка исключений, формат except. Действия при завершении. Генерация исключений. Оператор assert. Диспетчер контекстов. Встроенные исключения и исключения пользователей.

Язык Go (3 семестр)

  1. Язык go. Каркас программы. Синтаксис инструкции в go. Комментарии. ключевые слова и предопределенные идентификаторы. Пустой идентификатор. Базовые типы в go. Целые вещественные и комплексные числа. Объявление переменных и констант. Нулевые значения. Генератор констант. Указатель, операция над указателями
  2. Оператора. Арифметические операторы, операторы сравнения, побитовое оператора. Преобразовании типов. Инкремент и декремент. Логические оператора. Присваивание, присваивание кортежу. Условной оператор, оператор множественного выбора. Циклы и операторы перехода.
  3. Строки. Строковые литералы. Индексирование, встроенные функции для строк. Руны. Массивы. Объявление массива, работа с массивом. Инициализация массивов. Срезы. Встроенные функции для срезов, оператор среза. Отображение. встроенные функции для работы с отображениями.
  4. Форматированный ввод вывод. спецификаторы функции Printf().
  5. Функции. Объявление функций. Список параметров и список результатов. Возврат значений. Передача аргументов. Значения-функции. Локальные и глобальные переменные, время жизни. Анонимная функция, замыкания. Вариативные функции. Отложенный вызов функций.
  6. Паника. Встроенные функции связанные с паникой. Тип error. Встроенные функции печати.
  7. Определение нового типа. Явное преобразование типа, оператор преобразования типа. Структура, объявление структуры. Структурный литерал. Механизмо встраивания структур, анонимные поля.
  8. ООП в go. Методы. Объявление метода и вызов метода. Ограничения методов. Встраивания структур и их методы. Значение-метод. Интерфейс. Объявление интерфейса. Взаимозаменяемость. Пустой интерфейс. Выбор типа.
  9. Пакеты. Объявление пакета. Импортирование пакета. Псевдонимы. Инициализация в пакетах.
  10. Параллельность. Go-подпрограммы. Cостояние гонки, гонка данных, взаимная блокировка. Канал. Тип канала. Однонаправленные и двунаправленная каналы. Чтение и запись из канала. Буферизированный и не буферизированный каналы. Встроенные функции для работы с каналами. Конвейер. Мультиплексирование. Примитивы синхронизации стандартных пакетов (мьютекс, группа ожидание, условная переменная).
  11. Дженерики. Параметр типа. Дженерики с функциями, дженерики и типы.
  12. Сети. Простой веб-сервер. Получение данных. TCP клиент и сервер. UDB клиент и сервер. RPC.
  13. Небезопасный код. Взаимодействие с языком С. Рефлексия.
Список литературы

С

  1. Дейтел П., Дейтел Х. С для программистов с введением в С11 / пер. с анг. А. Киселева. — М.: ДМК Пресс, 2014. — 544 с.
  2. Клеменс Бен. Язык С в XXI веке / Пep. с англ. А. А. Слинкина. — М.: ДМК Пресс, 2015. 376 с.
  3. Амини Камран. Экстремальный Cи. Параллелизм, ООП и продвинутые возможности. — СПб.: Питер, 2021. — 752 с.
  4. Керниган, Брайан У., Ритчи, Деннис М. Язык программирования С, 2-е издание.: Пер. с англ. — М.: Издательский дом «Вильяме», 2009. — 304 с.

C++

  1. Страуструп, Бьярне. Язык программирования С++. Краткий курс, 2-е изд. СПб.: ООО «Диалектика»,2019. — 320с.
  2. Уильямс Энтони. C++. Практика многопоточного программирования. — СПб.: Питер, 2020. — 640 с.
  3. Мейерс, Скотт. Эффективный и современный С++: 42 рекомендации по исполыованию С++ 11 и С++14.: Пер. с англ. — М.: ООО «ИЛ. Вильяме», 2016. — 304 с.
  4. Артур О’Двайр. Осваиваем C++17 STL / пер. с англ. А. Н. Киселева — М.: ДМК Пресс, 2019. — 352 с.
  5. Гантерот, Курт. Оптимизация программ на С++. Проверенные методы для повышения производительности.: Пер. с анrл. — СпБ.: ООО «Альфа-книrа 2017. — 400 с.
  6. Антон Полухин. Разработка приложений на C++ с использованием Boost. Рецепты, упрощающие разработку вашего приложения / пер. с анг. Д. А. Беликова. — М.: ДМК Пресс, 2020. — 346 с.
  7. Страуструп, Бьярне. Программирование: принципы и практика с использованием С++, 2-е изд.: Пер. с англ. — М.: ООО «И. Д. Вильяме», 2016. — 1328 с.
  8. Эккель Б. Философия C++. Введение в стандартный C++. 2-е изд. — СПб.: Питер, 2004. — 572 с.
  9. Эккель Б., Эллисон Ч. Философия C++. Практическое программирование. — СПб.: Питер, 2004. — 608 с.
  10. Чукич И. Функциональное программирование на языке C++ / пер. с англ. В. Ю. Винника, А. Н. Киселева. — М.: ДМК Пресс, 2020. — 360 с.
  11. Липпман С., Лажойе, Ж. Язык программирования С++. Полное руководство.: Пер. с англ. — Саратов: Профобразование, 2019. — 1104 с.