Кафедра К3
Прикладная математика, информатика
и вычислительная техника
Программирование на языках высокого уровня
Преподаватель: Афанасьев Алексей Викторович
Направление подготовки: 09.03.01 Информатика и вычислительная техника
Направленность: Вычислительные машины, комплексы, системы и сети
Семестры: 1, 2, 3
Вид итогового контроля:
1 семестр — зачёт
2 семестр — зачёт
3 семестр — экзамен и курсовая
Содержание курса
Язык С (1 семестр)
- Язык С. стандарт ISO. Сандарт MISRA и CERT C. Каркас программы, функция main(). Алфавит языка, идентификатор, ключевые слова, литералы. Комментарии.
- Базовые типы данных (int, float ...). Суффиксы и префиксы констант, объявления переменных, инициализация. Время жизни и область видимости переменных. Оператор sizeof().
- Операторы и операции, арифметические операции, операции сравнения, битовые операции, логические операции. Операторы присваивания, операторы инкремента и декремента. составной оператор и пустой оператор. Тернарный оператор.
- Условные операторы и операторы выбора. Циклы, условные циклы, циклы с параметром. Переходы. Расширения GCC.
- Консольный ввод/вывод. Форматированный ввод/вывод (printf()/scanf()). Символьный ввод/вывод. строковый ввод/вывод.
- Массивы. Объявление массива, инициализация массива, использование массива. Многомерные массивы. Приведенный индекс.
- Указатели. Объявление указателя, использование указателя. 0 и NULL. Выделение и освобождение памяти (malloc()/free()). Сегменты программы (сегмент кода, сегмент данных...) массив как указатель. Строки и символы. VLA массивы. Ошибки связанные с памятью.
- Подпрограммы. Процедуры и функции. Сигнатура функции, фактические и формальные параметры. Объявление, определение и вызов функции. Рекурсия, типы рекурсии. Передача параметров. Передача массивов. Функция с переменным числом аргументов. Указатель на функцию. Глобальные и локальные переменные, область видимости и время жизни.
- Файлы, дескриптор файла. Открытие и закрытие файла С. Форматированный ввод/вывод. Символьный ввод/вывод. Двоичный ввод/вывод. работа с файлами в Linux.
- Определение псевдонима. Структуры и битовые поля. Анонимные структуры. Перечисления. Объединения. Операции над объединениями и структурами. ООП в С.
- Директивы препроцессора и макроопределения, предопределенные макросы, модульный подход. Квалификаторы и спецификаторы. Приведение типов, явное и неявное приведение.
- Стандартная библиотека языка С.
- Библиотеки. Статические и динамические библиотеки Linux. Статические и динамические библиотеки Windows. Соглашение о вызове. Атрибуты языка С. Встроенный ассемблер.
- Тестирование, покрытие кода, виды тестирования. Библиотеки юнит-тестирования для языка С (check и CMocka) mock объекты. Документирование кода (DOXYGEN), Локализация приложений.
- потоки POSIX. Функции работы с потоками, примитивы синхронизации (Мьютексы, условные переменные, спин-блокировки, RW-блокировки, барьеры).
- потоки языка С. Функции работы с потоками, примитивы синхронизации(Мьютексы, условные переменные). Атомарные переменные.
- Управление процессами POSIX. Межпроцессное взаимодействие примитивы POSIX и X/Open System Interfaces (неименованные каналы, каналы FIFO, очередь сообщений, семафор, разделяемая память).
- Сетевое программирование. Сокеты BSD. Каркас простого TCP клиента и сервера. Каркас простого UDP клиента и сервера.
- Мультиплексирование (poll, select, epoll, kqueue, POSIX AIO).
Язык С++ (2 семестр)
- Отличия языка С++ от языка С. стандарт ISO.
- ООП. Абстрагирование, инкапсуляция, полиморфизм, наследование. Понятие класса и объекта, поля и методы. Спецификаторы доступа.
- Конструктор, деструктор. Типы конструкторов. Список инициализации. Методы по умолчанию.
- Статические поля и методы. Inline методы. Константные поля и методы. Спецификаторы delete и default. Спецификатор explicit. Спецификатор volatile.
- Дружественные функции. Указатель this. Перегрузка функций, методов и операторов, бинарные и унарные операторы. Операторы преобразования.
- Наследование. Множественное наследование. Виртуальные функции. Абстрактный класс. Ковариантный тип возврата. Идентификаторы override и final. Виртуальное насследование, виртуальный диструктор.
- Обработка ошибок (С/С++). Исключения, исключения стандартной библиотеки. Обработка исключений. Генерация исключений. Try в конструкторе и деструкторе. Try в функции. Спецификатор noexept.
- Шаблон функций, шаблон классов, параметры шаблона. Инстанцирование шаблона. Шаблонные функции-члены. Виды аргументов шаблона. Шаблонные параметры шаблона, шаблоны с переменным числом аргументов. Специализация шаблона и перегрузка шаблонных функций. Шаблоны и дружественные функции. Взаимодействие одинаковых шаблонов. Наследование шаблонов.
- Императивное и декларативное программирование. Функтор. Лямбда-функции и замыкания. Рекурсивная лямбда-функция. Захват переменных. Каррирование и частичное применение. Обобщенные лямбда-функции.
- Параллельные вычисления в С++. std::thread, std::mutex. Ассинхронность, промисы и фьючеры.
- Аллокаторы и итераторы.
- Контейнеры стандартной библиотеки
- Библиотеки юнит-тестирования для языка С++ (Boost.Test, gTest, gMock)
- Сигналы и слоты
Язык Python (3 семестр)
- Введение в Python. Типизация и сборка мусора. Реализации Python. Зарезервированные слова, встроенные имена. Создание переменной. Комментарии. Получение справки.
- Типы данных, числовой и логичесикй типы. Встроенные типы данных. Классификация объектов. Числовые типы, арифметические операции, побитовые операции. Логический тип, операции сравнения, операции равенства, операции принадлежности, операции идентичности, логические операторы. Объект None и объект type.
- Строки, форматирование и файлы. Строки, создание строк, операции со строками. Сырые строки, bytes и bytearray. Извлечение среза. Методы строк. Форматирование строк, старый и новый форматы. Файлы, операции с файлами.
- Множества, списки, кортежи и словари. Множества, операции с множествами, методы множества. Списки, операции над списками, методы списков. Кортежи, операции над кортежами. Словари, операции над словарями, метод словарей.
- Операторы Python, условный оператор, циклы. Операторы Python, синтаксис операторов. Пустой оператор. Оператор присваивания, формы присваивания, операторы дополненного присваивания. Операторы ввода/вывода. Условный оператор, циклы, условный цикл, итерируемый цикл. Операторы перехода. Списковые включения.
- Функции и генераторы. Определение функции, вызов функции. Оператор возврата. Аргументы и их способы передачи. Область видимости, локальные и глобальные переменные. Атрибуты функций. Анонимные функции и функциональный подход. Аннотации атрибутов. Генераторы.
- Модули и пакеты. Операторы работы с модулями. Алгоритм импортирования. Import и from.
- ООП и классы. Подходы к ООП. Создание класса, атрибуты класса, объявление методов. Self. Класс object. Наследование. Атрибуты для интроспекции.
- ООП перегрузка операций. Методы для перегрузки операций. Индексирование, конструктор и деструктор. Доступ к атрибутам. Выражение вызова. Сравнения.
- Исключения. Операторы для работы с исключениями. Цели применения исключений. Обработка исключений, формат except. Действия при завершении. Генерация исключений. Оператор assert. Диспетчер контекстов. Встроенные исключения и исключения пользователей.
Язык Go (3 семестр)
- Язык go. Каркас программы. Синтаксис инструкции в go. Комментарии. ключевые слова и предопределенные идентификаторы. Пустой идентификатор. Базовые типы в go. Целые вещественные и комплексные числа. Объявление переменных и констант. Нулевые значения. Генератор констант. Указатель, операция над указателями
- Оператора. Арифметические операторы, операторы сравнения, побитовое оператора. Преобразовании типов. Инкремент и декремент. Логические оператора. Присваивание, присваивание кортежу. Условной оператор, оператор множественного выбора. Циклы и операторы перехода.
- Строки. Строковые литералы. Индексирование, встроенные функции для строк. Руны. Массивы. Объявление массива, работа с массивом. Инициализация массивов. Срезы. Встроенные функции для срезов, оператор среза. Отображение. встроенные функции для работы с отображениями.
- Форматированный ввод вывод. спецификаторы функции Printf().
- Функции. Объявление функций. Список параметров и список результатов. Возврат значений. Передача аргументов. Значения-функции. Локальные и глобальные переменные, время жизни. Анонимная функция, замыкания. Вариативные функции. Отложенный вызов функций.
- Паника. Встроенные функции связанные с паникой. Тип error. Встроенные функции печати.
- Определение нового типа. Явное преобразование типа, оператор преобразования типа. Структура, объявление структуры. Структурный литерал. Механизмо встраивания структур, анонимные поля.
- ООП в go. Методы. Объявление метода и вызов метода. Ограничения методов. Встраивания структур и их методы. Значение-метод. Интерфейс. Объявление интерфейса. Взаимозаменяемость. Пустой интерфейс. Выбор типа.
- Пакеты. Объявление пакета. Импортирование пакета. Псевдонимы. Инициализация в пакетах.
- Параллельность. Go-подпрограммы. Cостояние гонки, гонка данных, взаимная блокировка. Канал. Тип канала. Однонаправленные и двунаправленная каналы. Чтение и запись из канала. Буферизированный и не буферизированный каналы. Встроенные функции для работы с каналами. Конвейер. Мультиплексирование. Примитивы синхронизации стандартных пакетов (мьютекс, группа ожидание, условная переменная).
- Дженерики. Параметр типа. Дженерики с функциями, дженерики и типы.
- Сети. Простой веб-сервер. Получение данных. TCP клиент и сервер. UDB клиент и сервер. RPC.
- Небезопасный код. Взаимодействие с языком С. Рефлексия.
Список литературы
С
- Дейтел П., Дейтел Х. С для программистов с введением в С11 / пер. с анг. А. Киселева. — М.: ДМК Пресс, 2014. — 544 с.
- Клеменс Бен. Язык С в XXI веке / Пep. с англ. А. А. Слинкина. — М.: ДМК Пресс, 2015. 376 с.
- Амини Камран. Экстремальный Cи. Параллелизм, ООП и продвинутые возможности. — СПб.: Питер, 2021. — 752 с.
- Керниган, Брайан У., Ритчи, Деннис М. Язык программирования С, 2-е издание.: Пер. с англ. — М.: Издательский дом «Вильяме», 2009. — 304 с.
C++
- Страуструп, Бьярне. Язык программирования С++. Краткий курс, 2-е изд. СПб.: ООО «Диалектика»,2019. — 320с.
- Уильямс Энтони. C++. Практика многопоточного программирования. — СПб.: Питер, 2020. — 640 с.
- Мейерс, Скотт. Эффективный и современный С++: 42 рекомендации по исполыованию С++ 11 и С++14.: Пер. с англ. — М.: ООО «ИЛ. Вильяме», 2016. — 304 с.
- Артур О’Двайр. Осваиваем C++17 STL / пер. с англ. А. Н. Киселева — М.: ДМК Пресс, 2019. — 352 с.
- Гантерот, Курт. Оптимизация программ на С++. Проверенные методы для повышения производительности.: Пер. с анrл. — СпБ.: ООО «Альфа-книrа 2017. — 400 с.
- Антон Полухин. Разработка приложений на C++ с использованием Boost. Рецепты, упрощающие разработку вашего приложения / пер. с анг. Д. А. Беликова. — М.: ДМК Пресс, 2020. — 346 с.
- Страуструп, Бьярне. Программирование: принципы и практика с использованием С++, 2-е изд.: Пер. с англ. — М.: ООО «И. Д. Вильяме», 2016. — 1328 с.
- Эккель Б. Философия C++. Введение в стандартный C++. 2-е изд. — СПб.: Питер, 2004. — 572 с.
- Эккель Б., Эллисон Ч. Философия C++. Практическое программирование. — СПб.: Питер, 2004. — 608 с.
- Чукич И. Функциональное программирование на языке C++ / пер. с англ. В. Ю. Винника, А. Н. Киселева. — М.: ДМК Пресс, 2020. — 360 с.
- Липпман С., Лажойе, Ж. Язык программирования С++. Полное руководство.: Пер. с англ. — Саратов: Профобразование, 2019. — 1104 с.