Разработчик прикладного программного обеспечения (Языки C и C++) [2021]
Высшая инженерная школа СПбПУ
Марина Абрамова, Иван Брык, Наталия Костина, Алексей Маслаков, Марина Полубенцева, Евгения Тучкевич
Программа посвящена одной из самых популярных технологий разработки программного обеспечения. Особенностью программы является модульный подход, позволяющий осваивать дисциплины от простого к сложному.
Традиционно языки C/C++ используются для различных прикладных задач: расчеты и вычисления, графические приложения, игры, встраиваемые системы и решения.
Вы освоите не только основы программирования на языках С/C++, но и познакомитесь с прикладной библиотекой Qt и новыми стандартами С++11, 14, 17, 20.
Обучаясь на программе, вы узнаете
- Базовую структуру цифрового компьютера, организацию основной памяти и коммуникаций в вычислительном узле;
- Существующие приложения и интерфейсы взаимодействия с ними;
- Типы данных и действия с ними в цифровом компьютере;
- Системы кодировки символов и форматы хранения исходных текстов программ;
- Базовые понятия алгоритмизации и процедурного программирования;
- Отличия процедурных и объектно-ориентированных языков программирования высокого уровня;
- Этапы жизненного цикла программного обеспечения и этапы получения исполняемого файла;
- Встроенные типы данных в языках программирования;
- Основные синтаксические конструкции языка программирования высокого уровня;
- Пространство имен стандартной библиотеки;
- Особенности создания и использования многомерных массивов;
- Динамическое выделение памяти;
- Возможности использования функций и указателей;
- Объектно-ориентированные возможности среды разработки MS Developer Studio.Net;
- Объектно-ориентированные возможности стандартной библиотеки С++;
- Отличие понятия наследования и внедрения, отличие понятия интерфейса и реализации.
- Внутреннее устройство контейнеров стандартной библиотеки;
- Средства, предоставляемые стандартной библиотекой С++ для обобщенного программирования;
- Средства, предоставляемые языком С++ для поддержки RTTI;
- Средства, предоставляемые языком С++ и стандартной библиотекой С++ для обработки нештатных ситуаций;
- Технологии использования новых встроенных понятий языка С++ согласно стандартам С++11, 14, 17, 20;
- Принципы использования новых средств, предоставляемых согласно стандарту стандартной библиотекой (C RunTime library).
- Состав интегрированной среды разработки и синтаксис Qt;
- Методологии разработки программного обеспечения, основные составляющие мета-объектной системы Qt;
- Принципы архитектуры приложения MVC (model-view-controller);
- Методы и приемы формализации и алгоритмизации поставленных задач.
Тема 1. Базовая структура цифрового компьютера
1.1. Основные понятия электронной цифровой информационной техники
Изучение операций с элементами данных.
Знакомство с комбинационными исполнительными блоками.
Знакомство со структурой простейшего тракта цифровой обработки.
Тема 2. Организация основной памяти и коммуникаций в вычислительном узле.- Типы данных (операндов) в программировании.
- Двоичное кодирование в электронной цифровой информационной технике.
- Операции с элементами данных и комбинационные исполнительные блоки. Электронные элементы с памятью и хранение элементов данных.
- Структура простейшего тракта цифровой обработки и понятие тактирования в цифровом устройстве.
- Простейший цифровой компьютер с хранимой программой и его составные части.
- Процессорный (исполнительный) блок, его назначение и выполняемые функции. Реализация системы команд процессора и расширения АСК.
- Основная память: адресная организация.
- Процессорные команды и инструкции языка высокого уровня.
- Трансляция.
- Цикл выполнения процессорной команды (кратко)
- Структура команды «в пространстве битов» и экономичное кодирование команды. Структурные способы ускорения выполнения потока команд. Суперскалярность как средство выравнивания времени выполнения микроопераций. Многопоточность.
Изучение операций с элементами данных.
Знакомство с комбинационными исполнительными блоками.
Знакомство со структурой простейшего тракта цифровой обработки.
2.1. Адресная организация
Знакомство с адресной организацией.
Использование коммуникационных подсистем в компьютере.
Изучение организации подсистемы памяти в ВУ.
Тема 3. Типы данных и действия с ними в цифровом компьютере. Организация системы команд- Соотношение скоростей процессора и памяти.
- Задержка доступа (Latency, Responce Time) и пропускная способность (ThroughPut, Bandwidth).
- Уровни иерархии памяти: регистры процессора, КЭШ (многоуровневый), основная память (с адресной организацией), локальная подсистема хранения (диски), сеть.
- Типовая организация КЭШ как многослойной памяти с ассоциативной выборкой.
- Основная память: распределение адресов в минимальной вычислительной системе.
- Основная память: трансляция адресов: отображение адресных пространств друг на друга – для чего и как.
- Виртуальная память – что это.
- Механизмы защиты памяти: аппаратная поддержка.
- Аппаратная поддержка глобальной адресации в многоядерном компьютере с несколькими блоками локальной основной памяти.
- Проблема обеспечения когерентности памяти в компьютере с глобальной адресацией
- Параллельная адресуемая магистраль (шина).
- Последовательные шины.
- Причины перехода от параллельных шин к последовательным
- Организация подсистемы памяти в ВУ.
- Глобальная адресация в пределах ВУ и задачи оптимизации кода.
- Преимущества, недостатки, проблемы, связанные с использованием глобальной адресации.
Знакомство с адресной организацией.
Использование коммуникационных подсистем в компьютере.
Изучение организации подсистемы памяти в ВУ.
3.1. Целочисленные операнды
Правила выполнения действий с целыми и набор целочисленных команд обработки в цифровом процессоре.
Проблемы точности представления и диапазона представимых значений.
Поддержка работы с битовыми полями в системе команд процессора.
Модуль 2 - DEV-C100. Основы процедурного программирования на языках C/C++- Двоичная система счисления, ограниченность разрядной сетки и диапазона представимых значений.
- Знакопеременные целые и дополнительный код.
- Правила выполнения действий с целыми и набор целочисленных команд обработки в цифровом процессоре.
- Адреса: числа или не вполне числа?
- Проблемы точности представления и диапазона представимых значений.
- Проблемы нарастания ошибки при выполнении действий. Всегда ли можно использовать результат плавающей операции?
- Набор команд плавающей точки.
- Конвейеры плавающей точки.
- Битовые поля: что это?
- Примеры использования битовых полей.
- Основные операции с битовыми полями.
- Поддержка работы с битовыми полями в системе команд процессора.
- Кодирование текстов. Стандарт Unicode ISO/IEC 10646.
- Звуковая, видео- и 3D-информация: одномерный либо многомерный массив элементов
Правила выполнения действий с целыми и набор целочисленных команд обработки в цифровом процессоре.
Проблемы точности представления и диапазона представимых значений.
Поддержка работы с битовыми полями в системе команд процессора.
Тема 1. Введение в программирование на языках C/C++
1.1 Стандарт языка С++. Общие принципы структурного программирования
1.2 Базовые понятия языка. (Структура программы. Ключевые слова. Идентификаторы.)
Тема 2. Стандартные типы данных1.2 Базовые понятия языка. (Структура программы. Ключевые слова. Идентификаторы.)
2.1 Понятие типа данных. Константы (литералы).
2.2 Переменные. Понятия, связанные с переменными. Инициализация переменных
Практические занятия:
Использование литералов при написании выражений.
Перечисления - enum
Базовые типы данных, неявное приведение типов данных
Явное приведение типов данных. Операторы явного приведения типа
Область действия, область видимости, время существования переменной
Тема 3. Операторы 2.2 Переменные. Понятия, связанные с переменными. Инициализация переменных
Практические занятия:
Использование литералов при написании выражений.
Перечисления - enum
Базовые типы данных, неявное приведение типов данных
Явное приведение типов данных. Операторы явного приведения типа
Область действия, область видимости, время существования переменной
3.1 Понятия, связанные с операторами.
3.2 Категории операторов. Специфика использования
3.3 Побитовые операторы
Практические занятия:
Ассоциативность и приоритет операторов.
Оператор присваивания и арифметические операторы.
Логические операторы и операторы отношения.
Побитовые операторы и операторы сдвига.
Тема 4. Инструкции3.2 Категории операторов. Специфика использования
3.3 Побитовые операторы
Практические занятия:
Ассоциативность и приоритет операторов.
Оператор присваивания и арифметические операторы.
Логические операторы и операторы отношения.
Побитовые операторы и операторы сдвига.
4.1 Категории инструкций. Инструкции условия. Инструкции выбора
4.2 Инструкции цикла. Инструкции безусловной передачи управления
Практические занятия:
Выполнение инструкции if…else. Выполнение инструкции switch.
Выполнение инструкции for, while, do… while.
Выполнение инструкции break, continue.
Тема 5. Препроцессор4.2 Инструкции цикла. Инструкции безусловной передачи управления
Практические занятия:
Выполнение инструкции if…else. Выполнение инструкции switch.
Выполнение инструкции for, while, do… while.
Выполнение инструкции break, continue.
5.1 Назначение препроцессора. Макроподстановки.
5.2 Директивы условной трансляции. Заголовочные файлы.
Практические занятия:
Использование макросов с параметрами. Директивы #define и #undef
Использование директив условной трансляции: #ifdef, #ifndef, #else, #endif. Директивы #if, #elif, #else, #endif. Оператор препроцессора defined.
Настройка опций проекта.
Использование заголовочных файлов. Директива #include
Тема 6. Указатели5.2 Директивы условной трансляции. Заголовочные файлы.
Практические занятия:
Использование макросов с параметрами. Директивы #define и #undef
Использование директив условной трансляции: #ifdef, #ifndef, #else, #endif. Директивы #if, #elif, #else, #endif. Оператор препроцессора defined.
Настройка опций проекта.
Использование заголовочных файлов. Директива #include
6.1 Понятие указателя. Виды указателей
6.2 Арифметика указателей. Преобразование указателей.
Практические занятия:
Объявление и определение указателя.
Инициализация указателя и оператор получения адреса объекта.
Разыменование указателя.
Арифметика указателей.
Преобразование типа указателя.
void* – указатель.
Указатели и ключевое слово const.
Конструкции типа "указатель на указатель".
Тема 7. Массивы. Связь массивов и указателей6.2 Арифметика указателей. Преобразование указателей.
Практические занятия:
Объявление и определение указателя.
Инициализация указателя и оператор получения адреса объекта.
Разыменование указателя.
Арифметика указателей.
Преобразование типа указателя.
void* – указатель.
Указатели и ключевое слово const.
Конструкции типа "указатель на указатель".
7.1 Понятие массива. Встроенные одномерные массивы.
7.2 Алгоритмы работы с массивами. (сортировка, поиск)
Практические занятия:
Объявление, определение и инициализация встроенных массивов.
Неполная инициализация встроенных массивов.
Модификатор const применительно к массивам.
Простейшие алгоритмы поиска и сортировки.
Тема 8. Ссылки7.2 Алгоритмы работы с массивами. (сортировка, поиск)
Практические занятия:
Объявление, определение и инициализация встроенных массивов.
Неполная инициализация встроенных массивов.
Модификатор const применительно к массивам.
Простейшие алгоритмы поиска и сортировки.
8.1 Понятие ссылки. Сравнение ссылок и указателей.
Практические занятия:
Специфика инициализации и использования ссылок.
Ссылка на указатель
Тема 9. ФункцииПрактические занятия:
Специфика инициализации и использования ссылок.
Ссылка на указатель
9.1 Понятия, связанные с функциями в С/C++.
9.2 Способы передачи параметров функции
9.3 Возвращаемое функцией значение. Ключевое слово const и функции.
Практические занятия:
Объявление, определение и вызов функции.
Передача параметров по значению, по ссылке, по указателю.
Передача функции указателя на массив (встроенный массив, динамический массив).
Итоговая аттестация9.2 Способы передачи параметров функции
9.3 Возвращаемое функцией значение. Ключевое слово const и функции.
Практические занятия:
Объявление, определение и вызов функции.
Передача параметров по значению, по ссылке, по указателю.
Передача функции указателя на массив (встроенный массив, динамический массив).
Модуль 3 - DEV-C110. Процедурное программирование на языках C/C++
Тема 1. Данные
1.1 Пространства имен Директива using.
Тема 2. Массивы- Пространство имен стандартной библиотеки.
- Неименованные пространства имен.
- Псевдонимы пространств имен.
2.1 Многомерные массивы
Создание (и уничтожение) динамических массивов.
Операторы new и delete.
Указатели на многомерные массивы.
Тема 3. Функции- Эквивалентные указатели на многомерные массивы.
- Динамические массивы.
- Операторы new и delete.
- Формы оператора delete.
- Способы создания динамических двумерных массивов.
Создание (и уничтожение) динамических массивов.
Операторы new и delete.
Указатели на многомерные массивы.
3.1 Функции и массивы
Передача функции указателя на массив (встроенный массив, динамический массив).
Функции с переменным числом параметров.
Рекурсивные функции.
Указатель на функцию. Указатель на функцию в качестве аргумента другой функции.
Массивы указателей на функции.
Тема 4. Типы данных, определяемые пользователем- Передача функции указателя на массив.
- Рекурсивные функции.
- Перегрузка имен функций.
- Использование рекурсивных функций.
- Файловый ввод/вывод.
- Переменное число параметров.
- "Старые" потоки ввода/вывода языка С.
- Функции printf и scanf.
- Ключи формата ввода/вывода.
- Файловый ввод/вывод. Диагностика ошибок.
- Сложные указатели.
- Указатель на функцию.
- Вызов функции с помощью указателя.
- Использование указателей на функции в качестве параметров.
- Массив указателей на функции.
- Примеры сложных объявлений функций и указателей на функции.
Передача функции указателя на массив (встроенный массив, динамический массив).
Функции с переменным числом параметров.
Рекурсивные функции.
Указатель на функцию. Указатель на функцию в качестве аргумента другой функции.
Массивы указателей на функции.
4.1 Структуры языка Си.
Объявление структуры.
Создание экземпляров пользовательского типа.
Использование структур: массив объектов пользовательского типа, передача агрегатного объекта в функцию.
Пример использования структур - картотека.
Модуль 4 - DEV-C200. Объектно-ориентированное программирование на языке С++. Базовый уровень- Структуры и функции.
- Назначение структур.
- Использование структур.
- Объединения языка Си.
- Назначение битовых полей.
- Использование битовых полей.
- Назначение объединений.
- Использование объединений.
Объявление структуры.
Создание экземпляров пользовательского типа.
Использование структур: массив объектов пользовательского типа, передача агрегатного объекта в функцию.
Пример использования структур - картотека.
Тема 1. Парадигмы объектно-ориентированного программирования
1.1 Делегирование
1.2 Инкапсуляция
1.3 Наследование
1.4 Полиморфизм
Тема 2. Базовые понятия объектно-ориентированного программирования, их реализация средствами С++1.2 Инкапсуляция
1.3 Наследование
1.4 Полиморфизм
2.1 Переход от процедурного к объектно-ориентированному программированию
Объявление класса. Спецификаторы доступа.
Создание экземпляра класса. Реализация методов класса.
Доступ к public членам класса посредством объекта, селектор «.». Указатель «this».
Конструктор по умолчанию. Конструктор с параметрами. Динамическое создание объектов и вызов конструктора.
Специфика объявления деструктора как метода класса. Создание и уничтожение объектов с разным способом хранения.
Ключевое слово сonst и классы. Конструктор копирования. Указатель на класс.
Доступ к членам класса посредством указателя. Селектор «->».
Массивы и классы. Массивы объектов класса. Массивы указателей на объекты класса.
Тема 3. Структуры и объединения С++- Рассмотрение решения одной и той же задачи в процедурном и объектно-ориентированном стиле
- Доступ к public членам класса посредством объекта.
- Доступ к членам класса посредством указателя.
- Спецификаторы доступа public, private.
- Конструктор по умолчанию.
- Конструктор с параметрами.
- Конструктор копирования
- Конструктор перемещения (move конструктор копирования)
- Специфика объявления деструктора как метода класса.
- Создание и уничтожение объектов с разным способом хранения
Объявление класса. Спецификаторы доступа.
Создание экземпляра класса. Реализация методов класса.
Доступ к public членам класса посредством объекта, селектор «.». Указатель «this».
Конструктор по умолчанию. Конструктор с параметрами. Динамическое создание объектов и вызов конструктора.
Специфика объявления деструктора как метода класса. Создание и уничтожение объектов с разным способом хранения.
Ключевое слово сonst и классы. Конструктор копирования. Указатель на класс.
Доступ к членам класса посредством указателя. Селектор «->».
Массивы и классы. Массивы объектов класса. Массивы указателей на объекты класса.
3.1 Отличия структур языка С++ от структур и объединений языка С
Тема 4. Битовые поля в структурах и классах С++- Специфика struct в языке С++
- Специфика union в языке С++
- Использование объединений С++
- Использование структур С++
4.1 Объявление битовых полей
Использование полей битов в С++.
Тема 5. Взаимоотношения между классами. Открытое одиночное наследование- Битовые поля в языке С++.
- Отличия битовых полей языка С++ от битовых полей языка С
- Специфика битовых полей Правила обращения к битовым полям
Использование полей битов в С++.
5.1 Объявление производного класса
Простое (single) открытое наследование.
Объявление производного класса.
Спецификатор доступа protected в базовом классе. Спецификаторы наследования. Порядок вызова конструкторов и деструкторов.
Специфика передачи параметров конструктору копирования базового класса.
Тема 6. Полиморфизм- Объявление производного класса.
- Спецификатор доступа protected в базовом классе.
- Спецификаторы наследования
- Порядок вызова конструкторов и деструкторов.
- Передача параметров базовому классу при конструировании.
- Специфика передачи параметров конструктору копирования базового класса.
- Пример неправильного построения иерархий классов
Простое (single) открытое наследование.
Объявление производного класса.
Спецификатор доступа protected в базовом классе. Спецификаторы наследования. Порядок вызова конструкторов и деструкторов.
Специфика передачи параметров конструктору копирования базового класса.
6.1 Раннее и позднее связывание
Виртуальные методы класса.
Виртуальные деструкторы.
Чисто виртуальные функции и абстрактные классы.
Тема 7. Дружественные классы и функции- Понятие о раннем и позднем связывании
- Понятие о виртуальных функциях.
- Специфика формирования компилятором вызова виртуальной функции
- Абстрактные классы
- Понятие о чисто виртуальных функциях и абстрактных классах.
- Специфика чисто виртуальных функций
- Отличие наследования интерфейса и наследования реализации
Виртуальные методы класса.
Виртуальные деструкторы.
Чисто виртуальные функции и абстрактные классы.
7.1 friend – функция
Использование глобальных friend –функций для доступа к защищенным членам класса.
Использование friend –классов для доступа к защищенным членам другого класса.
Тема 8. Перегрузка операторов- Понятие о friend – функциях.
- Назначение глобальных friend – функций
- Понятие о friend – классах.
- Понятие о friend – методах класса.
Использование глобальных friend –функций для доступа к защищенным членам класса.
Использование friend –классов для доступа к защищенным членам другого класса.
8.1 Специфика перегруженных операторов.
Правила перегрузки унарных и бинарных операторов. Перегрузка оператора с помощью метода класса.
Специфика перегрузки оператора присваивания.
Move-оператор присваивания. Оператор присваивания и нетривиальные классы. Оператор присваивания и перегрузка.
Перегрузка с помощью глобальной friend-функции.
Перегрузка оператора ** (вывод) в библиотечный ostream .
Ассоциативный массив – программа «База данных о сотрудниках»
Тема 9. Сложные указатели- Способы перегрузки
- Правила перегрузки унарных и бинарных операторов.
- Перегрузка оператора с помощью метода класса.
- Перегрузка с помощью глобальной friend-функции
- Специфика перегрузки оператора с помощью метода класса
- Использование move-оператора присваивания для повышения эффективности работы прогаммы.
- Специфика перегрузки оператора с помощью глобальной функции
Правила перегрузки унарных и бинарных операторов. Перегрузка оператора с помощью метода класса.
Специфика перегрузки оператора присваивания.
Move-оператор присваивания. Оператор присваивания и нетривиальные классы. Оператор присваивания и перегрузка.
Перегрузка с помощью глобальной friend-функции.
Перегрузка оператора ** (вывод) в библиотечный ostream .
Ассоциативный массив – программа «База данных о сотрудниках»
9.1 Указатели на переменные класса
Использование указателя на методы класса при выполнении сортировки по разным признакам
Тема 10. Взаимоотношения между классами. Внедренные (встроенные) объекты- Синтаксис описания указатели на переменные класса
- Синтаксис описания указатели на методы класса
Использование указателя на методы класса при выполнении сортировки по разным признакам
10.1 Порядок конструирования и разрушения объектов
Внедренные объекты.
Порядок инициализации/деактивации объектов-контейнеров.
Объектно-ориентированный однородный двухсвязный список.
Тема 11. Статические члены класса- Взаимоотношения между классами.
- Понятие о внедренных объектах
- Передача параметров конструкторам встроенных объектов
- Приемы разработки двухсвязного объектно-ориентированного списка
Внедренные объекты.
Порядок инициализации/деактивации объектов-контейнеров.
Объектно-ориентированный однородный двухсвязный список.
11.1 Статические данные
Односвязный список.
Обеспечение уникальности хранения данных посредством вспомогательных классов с подсчетом ссылок и статических переменных и методов класса.
Модуль 5 - DEV-C210. Объектно-ориентированное программирование на языке С++. Углубленное изучение- Понятие о статических данных
- Понятие о статических методах
- Понятие порождающих функциях
- Использование статических членов класса при реализации классов с подсчетом ссылок
Односвязный список.
Обеспечение уникальности хранения данных посредством вспомогательных классов с подсчетом ссылок и статических переменных и методов класса.
Тема 1. Защищенное наследование
1.1 Спецификаторы наследования private и protected.
Тема 2. Множественное наследование- Отношение между классами «подобен»
- Специфика защищенного наследования.
- Использование защищенного наследования для изоляции пользователя от использования функциональности базового класса.
- Защищенное наследование при построении иерархий классов
- Использование защищенного наследования для изоляции классов потомков от использования функциональности базового класса
2.1 Отличия множественного и одиночного наследования.
Построение иерархий классов при множественном наследовании.
Тема 3. Механизм RTTI- Построение иерархий классов при множественном наследовании.
- Множественное наследование и полиморфизм
- Проблемы, возникающие при множественном наследовании.
- Множественное наследование и директива using.
- Виртуальное наследование
Построение иерархий классов при множественном наследовании.
3.1 Оператор static_cast и иерархии классов
Использование static_cast при реализации гетерогенного двухсвязного списка.
Использование механизма динамического определения типа для реализации гетерогенного двухсвязного списка.
Тема 4. Исключительные ситуации- Использование оператора static_cast для определения типа на этапе компиляции применительно к классам, связанным наследованием
- Оператор dynamic_cast, оператор typeid, класс type_info.
- Встроенный механизм динамического определения типа
Использование static_cast при реализации гетерогенного двухсвязного списка.
Использование механизма динамического определения типа для реализации гетерогенного двухсвязного списка.
4.1 Понятие исключительной ситуации.
Использование механизма обработки исключений при реализации стека.
Тема 5. Шаблоны- Обзор способов обработки аварийных ситуаций.
- Встроенные средства С++ для обработки исключительных ситуаций: операторы try, catch, throw
- Генерация исключения и способы приема объекта-исключения обработчиком исключительной ситуации.
- Последовательность выполнения кода и выбор исключений.
- Что может предусмотреть программист в обработчике исключения.
- Исключения в конструкторах и деструкторах.
- Стандартные исключения
- Function-level try-блок.
- Обработка непредусмотренных исключений.
- Спецификация исключений.
- Специфика оператора new
Использование механизма обработки исключений при реализации стека.
5.1 Идеи обобщенного программирования
Реализация шаблона функции.
Реализация шаблона ограниченного стека посредством встроенного массива.
Реализация шаблона неограниченного стека посредством односвязного списка.
Реализация шаблона кольцевой очереди посредством динамического массива.
Тема 6. Контейнеры стандартной библиотеки- Способы обобщения действий: перегрузка имен функций, макросы с параметрами.
- Зачем нужны шаблоны.
- Использование ключевого слова template для обобщения.
- Параметры шаблона. Механизм инстанцирования.
- Специализация шаблона функции.
- Специализация шаблона класса. Эмуляция шаблона «vector».
- Эмуляция шаблона «list».
- Введение понятия псевдоним типа.
- Реализация итератора для разных структур данных.
Реализация шаблона функции.
Реализация шаблона ограниченного стека посредством встроенного массива.
Реализация шаблона неограниченного стека посредством односвязного списка.
Реализация шаблона кольцевой очереди посредством динамического массива.
6.1 Базовые контейнеры
Использование контейнеров std::vector, std::list, std::deque для реализации поставленных задач.
Использование контейнеров std::stack, std::queue, std:riority_queue для реализации поставленных задач.
Использование контейнеров std::set, std::multiset, std::map, std::multimap для реализации поставленных задач.
Тема 7. Итераторы- Обзор и примеры использования контейнеров std::vector, std::list, std::deque
- Обзор и примеры использования контейнеров std::stack, std::queue, std:riority_queue
- Обзор и примеры использования контейнеров std::set, std::multiset, std::map, std::multimap
Использование контейнеров std::vector, std::list, std::deque для реализации поставленных задач.
Использование контейнеров std::stack, std::queue, std:riority_queue для реализации поставленных задач.
Использование контейнеров std::set, std::multiset, std::map, std::multimap для реализации поставленных задач.
7.1 Понятие итератора
Использование прямых и реверсивных итераторов для работы с контейнерами.
Использование потоковых итераторов для вывода элементов контейнера на экран и в файл.
Использование и итераторов вставки для манипулирования контейнерами.
Тема 8. Обобщенные алгоритмы стандартной библиотеки- Реализация прямых и реверсивных итераторов для разных структур данных
- Итераторы-адаптеры. Потоковые итераторы. Итераторы вставки
Использование прямых и реверсивных итераторов для работы с контейнерами.
Использование потоковых итераторов для вывода элементов контейнера на экран и в файл.
Использование и итераторов вставки для манипулирования контейнерами.
8.1 Понятие обобщенного алгоритма
Использование алгоритма for_each() для работы с последовательностями.
Использование алгоритмов find(), find_if()) для работы с последовательностями.
Использование алгоритмов count(), count_if() для работы с последовательностями.
Использование алгоритма sort(), merge(), transform()для работы с последовательностями.
Тема 9. Предикаты- Цели введения обобщенных алгоритмов. Реализация обобщенного алгоритма.
- Эмуляция алгоритма for_each().
- Эмуляция алгоритмов find(), find_if().
- Алгоритмы count(), count_if().
- Алгоритмы sort(), merge(), transform()
Использование алгоритма for_each() для работы с последовательностями.
Использование алгоритмов find(), find_if()) для работы с последовательностями.
Использование алгоритмов count(), count_if() для работы с последовательностями.
Использование алгоритма sort(), merge(), transform()для работы с последовательностями.
9.1 Назначение предикатов.
Использование предикатов стандартной библиотеки.
Разработка пользовательских предикатов.
Модуль 6 - DEV-C220.Прикладное программирование с использованием стандартов С++11, 14, 17, 20. Базовый уровень- Способы задания предикатов
- Цель введения предикатов.
- Реализация предиката посредством глобальной функции.
- Реализация предиката посредством шаблона глобальной функции.
- Реализация предиката посредством функционального объекта.
- Реализация предиката посредством шаблона функционального объекта
- Универсальный способ обобщения предиката.
- Шаблоны структур, предоставляемые стандартной библиотекой для задания предикатов.
- Использование шаблонов function и mem_fn для универсального задания пользовательского предиката
Использование предикатов стандартной библиотеки.
Разработка пользовательских предикатов.
Тема 1. Введение
1.1 Обзор новых возможностей. языка С++ согласно стандарту С++11 (14, 17, 20)
Тема 2. Нововведения в ядре языка.- Преемственность от библиотеки Boost.
- Изменения в ядре языка.
- Изменения в стандартной библиотеки
- Повышение эффективности работы программы.
- Предоставление программисту удобных средств для автоматического вывода типов компилятором.
- Повышение надежности.
2.1 Сильно типизированные перечисления.
Использование strongly typed enums для обеспечения надежности и экономии памяти.
Использование auto для автоматического выведения типов.
Применение декомпозиции.
Тема 3. Новые правила и возможности инициализации.- Nullptr.
- Новые фундаментальные типы.
- Проблемы использования перечислений С/С++.
- Добавление strongly typed enums.
- Проблемы при использовании неинициализированных указателей.
- Задание нулевых указателей.
- Переменная nullptr.
- Тип nullptr_t.
- Независящие от платформы и компилятора псевдонимы для целых типов.
- Суффикс LL.
- Префиксы 0b, u, U
- Декомпозиция.
- Автоматическое выведение типов компилятором.
- Задание обобщенных параметров.
- Trailing return type.
- Понятие structured binding.
- Компактность и читабельность текста программы.
- Использование с массивами, структурами и кортежами.
- Range based for.
- Использование с массивами и контейнерами стандартной библиотеки.
Использование strongly typed enums для обеспечения надежности и экономии памяти.
Использование auto для автоматического выведения типов.
Применение декомпозиции.
3.1 Автоматический вывод параметров шаблона при инициализации.
Обобщенная инициализация объектов и контейнеров.
Реализация класса с использованием initializer_list при инициализации, присваивании и в других методах.
Применение decltype при реализации шаблонов.
Тема 4. Модификация контейнеров стандартной библиотеки. using- Упрощение синтаксиса.
- Возможность формирования «подсказок» для выведения типа компилятором (deduction guides)
- Задание значений переменных «по умолчанию».
- Специфика.
- Способы инициализации членов класса.
- Понятие обобщенной инициализации.
- Исполь-зование обобщенной инициализации для инициализации объектов и коллекций.
- Списки инициализации при динамическом выделении памяти.
- Класс initializer_list
- Правила выведения компилятором типа при использовании decltype.
- Отличия auto и decltype.
- Конструкция decltype(auto).
- Спецификатор declval
Обобщенная инициализация объектов и контейнеров.
Реализация класса с использованием initializer_list при инициализации, присваивании и в других методах.
Применение decltype при реализации шаблонов.
4.1 Дополнения функциональности контейнеров стандартной библиотеки.
Применение новых возможностей стандартных контейнеров при решении типовых задач.
Использование псевдонимов шаблонов для упрощения сложных объявлений.
Тема 5. Лямбда выражения- Методы, использующие move-семантику, конструрование «по месту», списки инициализации
- Задание псевдонимов типов посредством using.
- Псевдонимы шаблона.
Применение новых возможностей стандартных контейнеров при решении типовых задач.
Использование псевдонимов шаблонов для упрощения сложных объявлений.
5.1 Лямбда функции.
Использование лямбда функций для решения локальных задач.
Использование лямбда функций в качестве предикатов в обобщенных алгоритмах.
Тема 6. Нововведения при объявлении классов- Синтаксис лямбда функции
- Реализация локальных действий посредством лямбда функции.
- Параметры, передаваемые лямбда функции.
- Возвращаемое лямбда функцией значение
- Захват значений из внешнего контекста.
- Средства организации рекурсии посредством лямбда функции.
- Обобщенные лямбда функции.
Использование лямбда функций для решения локальных задач.
Использование лямбда функций в качестве предикатов в обобщенных алгоритмах.
6.1 Явное указание компилятору генерации методов класса по умолчанию.
Разработка иерархий классов с использованием default, override, final и deleted.
Использование ключевого слова explicit.
Тема 7. Семантика перемещения.- Явная перегрузка виртуальных методов.
- Явный запрет вызова метода.
- Использование ключевого слова default для автоматической генерации компилятором метода класса.
- Использование ключевого слова override для явного указания перегруженного виртуаль-ного метода класса.
- Использование ключевого слова final для предотвращения перегрузки виртуального метода в производном классе.
- Понятие deleted.
- Использование ключевого слова delete для предотвращения вызова метода класса
- Делегирующие конструкторы.
- Наследуемые конструкторы.
- Использование ключевого слова explicit для предотвращения неявных преобразований.
- Понятия наследования и делегирования инициализирующих методов.
- Синтаксис.
Разработка иерархий классов с использованием default, override, final и deleted.
Использование ключевого слова explicit.
7.1 Rvalue reference.
Разработка нетривиальных классов с использованием семантики перемещения.
Использование семантики перемещения при внедрении.
Использование семантики перемещения при наследовании.
Использование перемещающих итераторов.
Тема 8. Семантика продвижения типов (forwarding)- Цель введения семантики перемещения
- Использование правосторонних ссылок для обозначения временных объектов.
- Использование семантики перемещения для повышения эффективности ПО.
- Повышение эффективности программы посред-ством использования семантики перемещения для нетривиальных классов
- Семантика перемещения и наследование
- Классы с нетривиальными внедренными объектами.
- Иерархии классов с нетривиальным базовым классом
- Перемещающие итераторы
- Перегрузка методов для вызова посредством временных объектов.
- Класс move_iterator.
- Шаблон make_move_iterator
Разработка нетривиальных классов с использованием семантики перемещения.
Использование семантики перемещения при внедрении.
Использование семантики перемещения при наследовании.
Использование перемещающих итераторов.
8.1 Цели введения продвижения типа Использование forward для уменьшения дублирования текста программы
8.2 Универсальные ссылки.
Разработка функций с использованием forward.
Разработка классов с использованием forward.
Тема 9. Спецификатор constexpr8.2 Универсальные ссылки.
- Вывод компилятором типа при использовании универсальных ссылок.
- Отличие от rvalue reference
- Использование forward при построении иерархий классов
- Использование forward при внедрении объектов нетривиальных классов
Разработка функций с использованием forward.
Разработка классов с использованием forward.
9.1 Пользовательские литералы.
Реализация пользовательского литерала.
Реализация сonstexpr-функции.
Реализация constexpr-класса.
Тема 10.Интеллектуальные указатели.- Перегрузка operator””.
- Пользовательские литералы.
- Литералы, предоставляемые стандартной библиотекой: std::string_literals, std::chrono_literals
- Повышение эффективности программы при использовании вычислений на этапе компиляции.
- Constexpr-функции, constexpr-«переменные», constexpr-классы. Специфика.
Реализация пользовательского литерала.
Реализация сonstexpr-функции.
Реализация constexpr-класса.
10.1 Шаблон класса unique_ptr
Практические занятия
Реализация задания с использованием unique_ptr.
Реализация задания с использованием shared_ptr.
Реализация задания с использованием weak_ptr.
Модуль 7 - DEV-QT10. Прикладное программирование на С++ с использованием Qt. Базовый уровень- Использование unique_ptr для реализации концепции единоличного владения ресурсом (для надежной работы с динамически выделенной памятью, …)
- Использование shared _ptr для совместного владения ресурсом.
Практические занятия
Реализация задания с использованием unique_ptr.
Реализация задания с использованием shared_ptr.
Реализация задания с использованием weak_ptr.
Тема 1. Классы Qt для создания приложений c графическим интерфейсом
1.1 Кроссплатформенность Qt.
1.2 Состав Qt. Модули Qt. Инструменты разработчика.
1.3 Иерархия классов Qt. Обзор основных классов Qt.
1.4 Директивы проекта
1.5 Виджеты и окна. Свойства виджетов. Настройка вешнего вида окон. Стандартные диалоговые окна
Лабораторные занятия
Создание приложения с графическим интерфейсом и настройка его внешнего вида.
Размеры окна. Задание размеров окна. Создание и использование диалоговых окон.
Локализация приложения средствами Qt.
Тема 2. Событийно-ориентированное программирование1.2 Состав Qt. Модули Qt. Инструменты разработчика.
1.3 Иерархия классов Qt. Обзор основных классов Qt.
1.4 Директивы проекта
1.5 Виджеты и окна. Свойства виджетов. Настройка вешнего вида окон. Стандартные диалоговые окна
Лабораторные занятия
Создание приложения с графическим интерфейсом и настройка его внешнего вида.
Размеры окна. Задание размеров окна. Создание и использование диалоговых окон.
Локализация приложения средствами Qt.
2.1 Архитектура приложений, управляемых событиями.
2.2 Обработка событий средствами Qt. Система доставки, контроля и фильтрации событий Qt. Очередь событий Qt. Обработчики событий различных типов.
2.3 Аппаратно-независимый ввод/вывод. Реализация графического вывода средствами Qt – классы QPaintDevice и QPainter. Инструменты для «рисования». Вывод текста, векторной и растровой графики.
Лабораторные занятия
События: рисования, таймера, изменения размеров.
События мыши.
Тема 3. Мета объектная модель Qt. Механизм сигналов и слотов2.2 Обработка событий средствами Qt. Система доставки, контроля и фильтрации событий Qt. Очередь событий Qt. Обработчики событий различных типов.
2.3 Аппаратно-независимый ввод/вывод. Реализация графического вывода средствами Qt – классы QPaintDevice и QPainter. Инструменты для «рисования». Вывод текста, векторной и растровой графики.
Лабораторные занятия
События: рисования, таймера, изменения размеров.
События мыши.
3.1 Qt как расширение С++. Мета объектный компилятор. Система динамических свойств Qt. Автоматические иерархии объектов. Именование объектов.
3.2 Механизм сигналов и слотов. Отличия сигналов/слотов от событий. Реализация механизма сигналов/слотов. Установка соединения между объектами.
Лабораторные занятия
Взаимодействие (синхронизация) элементов управления посредством сигналов/слотов. Сигналы и слоты, предоставляемые классами Qt. Пользовательские сигналы/слоты;
Использование QtDesigner для конструирования графического приложения. Использование редактора сигналов/слотов. Использование редактора действий (QAction). Ресурсы приложения;
Класс QMainWindow. Ui. CentralWidget. Создание пользовательского виджета. Меню. ToolBar. Статусная строка
Тема 4. Введение в архитектуру Модель-Представление-Контроллер (MVC)3.2 Механизм сигналов и слотов. Отличия сигналов/слотов от событий. Реализация механизма сигналов/слотов. Установка соединения между объектами.
Лабораторные занятия
Взаимодействие (синхронизация) элементов управления посредством сигналов/слотов. Сигналы и слоты, предоставляемые классами Qt. Пользовательские сигналы/слоты;
Использование QtDesigner для конструирования графического приложения. Использование редактора сигналов/слотов. Использование редактора действий (QAction). Ресурсы приложения;
Класс QMainWindow. Ui. CentralWidget. Создание пользовательского виджета. Меню. ToolBar. Статусная строка
4.1 Архитектура MVC. Понятие MVC. Элементы управления, содержащие модели (QListWidget, QTableWidget, QTreeWidget, QComboBox)
4.2 Система Graphics View Framework. Понятие сцены - класс QGraphicsScene. Класс для отображения – QGraphicsView. Классы графических примитивов: QGraphicsItem. QAbstractGraphicsShapeItem. QGraphicsRectItem. QGraphicsEllipseItem.
Лабораторные занятия
Использование Qt Graphics View Framework для рисования, хранения и манипулирования примитивами.
Использование стандартных диалогов для задания атрибутов рисования. Разработка пользовательского диалога для задания атрибутов рисования.
Модуль 8 - Выпускная квалификационная работа4.2 Система Graphics View Framework. Понятие сцены - класс QGraphicsScene. Класс для отображения – QGraphicsView. Классы графических примитивов: QGraphicsItem. QAbstractGraphicsShapeItem. QGraphicsRectItem. QGraphicsEllipseItem.
Лабораторные занятия
Использование Qt Graphics View Framework для рисования, хранения и манипулирования примитивами.
Использование стандартных диалогов для задания атрибутов рисования. Разработка пользовательского диалога для задания атрибутов рисования.
Выпускная квалификационная работа
https://www.avalon.ru/Retraining/Programs/CPPDeveloper/