СкладчикРазработчик прикладного программного обеспечения (Языки C и C++) [2021] [Высшая инженерная школа СПбПУ] [М. Абрамова, И. Брык, Н. Костина]
Указаны на площадке: Языки C, М. Абрамова, И. Брык, Н. Костина
Разработчик прикладного программного обеспечения (Языки C и C++) [2021]
Высшая инженерная школа СПбПУ
Марина Абрамова, Иван Брык, Наталия Костина, Алексей Маслаков, Марина Полубенцева, Евгения Тучкевич
Программа посвящена одной из самых популярных технологий разработки программного обеспечения. Особенностью программы является модульный подход, позволяющий осваивать дисциплины от простого к сложному.
Традиционно языки C/C++ используются для различных прикладных задач: расчеты и вычисления, графические приложения, игры, встраиваемые системы и решения.
Вы освоите не только основы программирования на языках С/C++, но и познакомитесь с прикладной библиотекой Qt и новыми стандартами С++11, 14, 17, 20.
1. Базовую структуру цифрового компьютера, организацию основной памяти и коммуникаций в вычислительном узле;
2. Существующие приложения и интерфейсы взаимодействия с ними;
3. Типы данных и действия с ними в цифровом компьютере;
4. Системы кодировки символов и форматы хранения исходных текстов программ;
5. Базовые понятия алгоритмизации и процедурного программирования;
6. Отличия процедурных и объектно-ориентированных языков программирования высокого уровня;
7. Этапы жизненного цикла программного обеспечения и этапы получения исполняемого файла;
8. Встроенные типы данных в языках программирования;
9. Основные синтаксические конструкции языка программирования высокого уровня;
10. Пространство имен стандартной библиотеки;
11. Особенности создания и использования многомерных массивов;
12. Динамическое выделение памяти;
13. Возможности использования функций и указателей;
14. Объектно-ориентированные возможности среды разработки MS Developer Studio.Net;
15. Объектно-ориентированные возможности стандартной библиотеки С++;
16. Отличие понятия наследования и внедрения, отличие понятия интерфейса и реализации.
17. Внутреннее устройство контейнеров стандартной библиотеки;
18. Средства, предоставляемые стандартной библиотекой С++ для обобщенного программирования;
19. Средства, предоставляемые языком С++ для поддержки RTTI;
20. Средства, предоставляемые языком С++ и стандартной библиотекой С++ для обработки нештатных ситуаций;
21. Технологии использования новых встроенных понятий языка С++ согласно стандартам С++11, 14, 17, 20;
22. Принципы использования новых средств, предоставляемых согласно стандарту стандартной библиотекой (C RunTime library).
23. Состав интегрированной среды разработки и синтаксис Qt;
24. Методологии разработки программного обеспечения, основные составляющие мета-объектной системы Qt;
25. Принципы архитектуры приложения MVC (model-view-controller);
26. Методы и приемы формализации и алгоритмизации поставленных задач.
Тема 1. Базовая структура цифрового компьютера
1.1. Основные понятия электронной цифровой информационной техники
Типы данных (операндов) в программировании.
Двоичное кодирование в электронной цифровой информационной технике.
Операции с элементами данных и комбинационные исполнительные блоки. Электронные элементы с памятью и хранение элементов данных.
Структура простейшего тракта цифровой обработки и понятие тактирования в цифровом устройстве.
1.2. Классы цифровых компьютеров и развитие классификации
Простейший цифровой компьютер с хранимой программой и его составные части.
Процессорный (исполнительный) блок, его назначение и выполняемые функции. Реализация системы команд процессора и расширения АСК.
Основная память: адресная организация.
Процессорные команды и инструкции языка высокого уровня.
Трансляция.
Цикл выполнения процессорной команды (кратко)
1.3. Основы организации цифрового процессора
Структура команды «в пространстве битов» и экономичное кодирование команды. Структурные способы ускорения выполнения потока команд. Суперскалярность как средство выравнивания времени выполнения микроопераций. Многопоточность.
Практические занятия:
Изучение операций с элементами данных.
Знакомство с комбинационными исполнительными блоками.
Знакомство со структурой простейшего тракта цифровой обработки.
Тема 2. Организация основной памяти и коммуникаций в вычислительном узле.
2.1. Адресная организация
Соотношение скоростей процессора и памяти.
Задержка доступа (Latency, Responce Time) и пропускная способность (ThroughPut, Bandwidth).
Уровни иерархии памяти: регистры процессора, КЭШ (многоуровневый), основная память (с адресной организацией), локальная подсистема хранения (диски), сеть.
Типовая организация КЭШ как многослойной памяти с ассоциативной выборкой.
Основная память: распределение адресов в минимальной вычислительной системе.
Основная память: трансляция адресов: отображение адресных пространств друг на друга – для чего и как.
Виртуальная память – что это.
Механизмы защиты памяти: аппаратная поддержка.
Аппаратная поддержка глобальной адресации в многоядерном компьютере с несколькими блоками локальной основной памяти.
Проблема обеспечения когерентности памяти в компьютере с глобальной адресацией
2.2. Коммуникационные подсистемы в компьютере
Параллельная адресуемая магистраль (шина).
Последовательные шины.
Причины перехода от параллельных шин к последовательным
2.3. Вычислительный узел
Организация подсистемы памяти в ВУ.
Глобальная адресация в пределах ВУ и задачи оптимизации кода.
Преимущества, недостатки, проблемы, связанные с использованием глобальной адресации.
Практические занятия:
Знакомство с адресной организацией.
Использование коммуникационных подсистем в компьютере.
Изучение организации подсистемы памяти в ВУ.
Тема 3. Типы данных и действия с ними в цифровом компьютере. Организация системы команд
3.1. Целочисленные операнды
Двоичная система счисления, ограниченность разрядной сетки и диапазона представимых значений.
Знакопеременные целые и дополнительный код.
Правила выполнения действий с целыми и набор целочисленных команд обработки в цифровом процессоре.
Адреса: числа или не вполне числа?
3.2. Стандарт кодирования чисел плавающей точки
Проблемы точности представления и диапазона представимых значений.
Проблемы нарастания ошибки при выполнении действий. Всегда ли можно использовать результат плавающей операции?
Набор команд плавающей точки.
Конвейеры плавающей точки.
3.3. Нечисловые данные
Битовые поля: что это?
Примеры использования битовых полей.
Основные операции с битовыми полями.
Поддержка работы с битовыми полями в системе команд процессора.
Кодирование текстов. Стандарт Unicode ISO/IEC 10646.
Звуковая, видео- и 3D-информация: одномерный либо многомерный массив элементов
Практические занятия:
Правила выполнения действий с целыми и набор целочисленных команд обработки в цифровом процессоре.
Проблемы точности представления и диапазона представимых значений.
Поддержка работы с битовыми полями в системе команд процессора.
Тема 1. Введение в программирование на языках C/C++
1.1 Стандарт языка С++. Общие принципы структурного программирования
1.2 Базовые понятия языка. (Структура программы. Ключевые слова. Идентификаторы.)
Тема 2. Стандартные типы данных
2.1 Понятие типа данных. Константы (литералы).
2.2 Переменные. Понятия, связанные с переменными. Инициализация переменных
Практические занятия:
Использование литералов при написании выражений.
Перечисления - enum
Базовые типы данных, неявное приведение типов данных
Явное приведение типов данных. Операторы явного приведения типа
Область действия, область видимости, время существования переменной
Тема 3. Операторы
3.1 Понятия, связанные с операторами.
3.2 Категории операторов. Специфика использования
3.3 Побитовые операторы
Практические занятия:
Ассоциативность и приоритет операторов.
Оператор присваивания и арифметические операторы.
Логические операторы и операторы отношения.
Побитовые операторы и операторы сдвига.
Тема 4. Инструкции
4.1 Категории инструкций. Инструкции условия. Инструкции выбора
4.2 Инструкции цикла. Инструкции безусловной передачи управления
Практические занятия:
Выполнение инструкции if…else. Выполнение инструкции switch.
Выполнение инструкции for, while, do… while.
Выполнение инструкции break, continue.
Тема 5. Препроцессор
5.1 Назначение препроцессора. Макроподстановки.
5.2 Директивы условной трансляции. Заголовочные файлы.
Практические занятия:
Использование макросов с параметрами. Директивы #define и #undef
Использование директив условной трансляции: #ifdef, #ifndef, #else, #endif. Директивы #if, #elif, #else, #endif. Оператор препроцессора defined.
Настройка опций проекта.
Использование заголовочных файлов. Директива #include
Тема 6. Указатели
6.1 Понятие указателя. Виды указателей
6.2 Арифметика указателей. Преобразование указателей.
Практические занятия:
Объявление и определение указателя.
Инициализация указателя и оператор получения адреса объекта.
Разыменование указателя.
Арифметика указателей.
Преобразование типа указателя.
void* – указатель.
Указатели и ключевое слово const.
Конструкции типа "указатель на указатель".
Тема 7. Массивы. Связь массивов и указателей
7.1 Понятие массива. Встроенные одномерные массивы.
7.2 Алгоритмы работы с массивами. (сортировка, поиск)
Практические занятия:
Объявление, определение и инициализация встроенных массивов.
Неполная инициализация встроенных массивов.
Модификатор const применительно к массивам.
Простейшие алгоритмы поиска и сортировки.
Тема 8. Ссылки
8.1 Понятие ссылки. Сравнение ссылок и указателей.
Практические занятия:
Специфика инициализации и использования ссылок.
Ссылка на указатель
Тема 9. Функции
9.1 Понятия, связанные с функциями в С/C++.
9.2 Способы передачи параметров функции
9.3 Возвращаемое функцией значение. Ключевое слово const и функции.
Практические занятия:
Объявление, определение и вызов функции.
Передача параметров по значению, по ссылке, по указателю.
Передача функции указателя на массив (встроенный массив, динамический массив).
Итоговая аттестация
Тема 1. Данные
1.1 Пространства имен Директива using.
Пространство имен стандартной библиотеки.
Неименованные пространства имен.
Псевдонимы пространств имен.
Тема 2. Массивы
2.1 Многомерные массивы
Эквивалентные указатели на многомерные массивы.
2.2 Динамическое выделение памяти.
Динамические массивы.
Операторы new и delete.
Формы оператора delete.
Способы создания динамических двумерных массивов.
Практические занятия
Создание (и уничтожение) динамических массивов.
Операторы new и delete.
Указатели на многомерные массивы.
Тема 3. Функции
3.1 Функции и массивы
Передача функции указателя на массив.
3.2 Перегрузка имен функций.
Рекурсивные функции.
Перегрузка имен функций.
Использование рекурсивных функций.
3.3 Переменное число параметров.
Файловый ввод/вывод.
Переменное число параметров.
"Старые" потоки ввода/вывода языка С.
Функции printf и scanf.
Ключи формата ввода/вывода.
Файловый ввод/вывод. Диагностика ошибок.
3.4 Указатели на функции.
Сложные указатели.
Указатель на функцию.
Вызов функции с помощью указателя.
Использование указателей на функции в качестве параметров.
Массив указателей на функции.
Примеры сложных объявлений функций и указателей на функции.
Практические занятия
Передача функции указателя на массив (встроенный массив, динамический массив).
Функции с переменным числом параметров.
Рекурсивные функции.
Указатель на функцию. Указатель на функцию в качестве аргумента другой функции.
Массивы указателей на функции.
Тема 4. Типы данных, определяемые пользователем
4.1 Структуры языка Си.
Структуры и функции.
Назначение структур.
Использование структур.
4.2 Битовые поля.
Объединения языка Си.
Назначение битовых полей.
Использование битовых полей.
Назначение объединений.
Использование объединений.
Практические занятия
Объявление структуры.
Создание экземпляров пользовательского типа.
Использование структур: массив объектов пользовательского типа, передача агрегатного объекта в функцию.
Пример использования структур - картотека.
Тема 1. Парадигмы объектно-ориентированного программирования
1.1 Делегирование
1.2 Инкапсуляция
1.3 Наследование
1.4 Полиморфизм
Тема 2. Базовые понятия объектно-ориентированного программирования, их реализация средствами С++
2.1 Переход от процедурного к объектно-ориентированному программированию
Рассмотрение решения одной и той же задачи в процедурном и объектно-ориентированном стиле
2.2 Понятие класса Члены класса (поля, методы). Создание экземпляра класса.
Доступ к public членам класса посредством объекта.
Доступ к членам класса посредством указателя.
2.3 Спецификаторы доступа
Спецификаторы доступа public, private.
2.4 Конструкторы
Конструктор по умолчанию.
Конструктор с параметрами.
Конструктор копирования
2.5 Семантика перемещения и конструктор копирования
Конструктор перемещения (move конструктор копирования)
2.6 Деструктор
Специфика объявления деструктора как метода класса.
Создание и уничтожение объектов с разным способом хранения
Практические занятия
Объявление класса. Спецификаторы доступа.
Создание экземпляра класса. Реализация методов класса.
Доступ к public членам класса посредством объекта, селектор «.». Указатель «this».
Конструктор по умолчанию. Конструктор с параметрами. Динамическое создание объектов и вызов конструктора.
Специфика объявления деструктора как метода класса. Создание и уничтожение объектов с разным способом хранения.
Ключевое слово сonst и классы. Конструктор копирования. Указатель на класс.
Доступ к членам класса посредством указателя. Селектор «->».
Массивы и классы. Массивы объектов класса. Массивы указателей на объекты класса.
Тема 3. Структуры и объединения С++
3.1 Отличия структур языка С++ от структур и объединений языка С
Специфика struct в языке С++
3.2 Отличия объединений языка С++ от структур и объединений языка С
Специфика union в языке С++
Практические занятия
1. Использование объединений С++
2. Использование структур С++
Тема 4. Битовые поля в структурах и классах С++
4.1 Объявление битовых полей
Битовые поля в языке С++.
Отличия битовых полей языка С++ от битовых полей языка С
4.2 Обращение к битовым полям.
Специфика битовых полей Правила обращения к битовым полям
Практические занятия
Использование полей битов в С++.
Тема 5. Взаимоотношения между классами. Открытое одиночное наследование
5.1 Объявление производного класса
Объявление производного класса.
Спецификатор доступа protected в базовом классе.
Спецификаторы наследования
5.2 Правила открытого наследования
Порядок вызова конструкторов и деструкторов.
Передача параметров базовому классу при конструировании.
Специфика передачи параметров конструктору копирования базового класса.
5.3 Пример неправильного построения иерархий классов
Пример неправильного построения иерархий классов
Практические занятия
Простое (single) открытое наследование.
Объявление производного класса.
Спецификатор доступа protected в базовом классе. Спецификаторы наследования. Порядок вызова конструкторов и деструкторов.
Специфика передачи параметров конструктору копирования базового класса.
Тема 6. Полиморфизм
6.1 Раннее и позднее связывание
Понятие о раннем и позднем связывании
6.2 Виртуальные функции. Механизм вызова виртуальной функции
Понятие о виртуальных функциях.
Специфика формирования компилятором вызова виртуальной функции
6.3 Чисто виртуальные функции.
Абстрактные классы
Понятие о чисто виртуальных функциях и абстрактных классах.
Специфика чисто виртуальных функций
6.4 Наследование интерфейса и наследование реализации
Отличие наследования интерфейса и наследования реализации
Практические занятия
Виртуальные методы класса.
Виртуальные деструкторы.
Чисто виртуальные функции и абстрактные классы.
Тема 7. Дружественные классы и функции
7.1 friend – функция
Понятие о friend – функциях.
Назначение глобальных friend – функций
7.2 friend – класс, friend – метод класса
Понятие о friend – классах.
Понятие о friend – методах класса.
Практические занятия
Использование глобальных friend –функций для доступа к защищенным членам класса.
Использование friend –классов для доступа к защищенным членам другого класса.
Тема 8. Перегрузка операторов
8.1 Специфика перегруженных операторов.
Способы перегрузки
Правила перегрузки унарных и бинарных операторов.
Перегрузка оператора с помощью метода класса.
Перегрузка с помощью глобальной friend-функции
8.2 Перегрузка методом класса
Специфика перегрузки оператора с помощью метода класса
8.3 Семантика перемещения и оптимизация оператора присваивания
Использование move-оператора присваивания для повышения эффективности работы прогаммы.
8.4 Перегрузка глобальной функцией
Специфика перегрузки оператора с помощью глобальной функции
Практические занятия
Правила перегрузки унарных и бинарных операторов. Перегрузка оператора с помощью метода класса.
Специфика перегрузки оператора присваивания.
Move-оператор присваивания. Оператор присваивания и нетривиальные классы. Оператор присваивания и перегрузка.
Перегрузка с помощью глобальной friend-функции.
Перегрузка оператора << (вывод) в библиотечный ostream .
Ассоциативный массив – программа «База данных о сотрудниках»
Тема 9. Сложные указатели
9.1 Указатели на переменные класса
Синтаксис описания указатели на переменные класса
9.2 Указатели на методы класса
Синтаксис описания указатели на методы класса
Практические занятия
Использование указателя на методы класса при выполнении сортировки по разным признакам
Тема 10. Взаимоотношения между классами. Внедренные (встроенные) объекты
10.1 Порядок конструирования и разрушения объектов
Взаимоотношения между классами.
Понятие о внедренных объектах
10.2 Передача параметров конструкторам встроенных объектов
Передача параметров конструкторам встроенных объектов
10.3 Двухсвязные объектно-ориентированные списки
Приемы разработки двухсвязного объектно-ориентированного списка
Практические занятия
Внедренные объекты.
Порядок инициализации/деактивации объектов-контейнеров.
Объектно-ориентированный однородный двухсвязный список.
Тема 11. Статические члены класса
11.1 Статические данные
Понятие о статических данных
11.2 Статические методы
Понятие о статических методах
11.3 Порождающие функции
Понятие порождающих функциях
11.4 Классы с подсчетом ссылок
Использование статических членов класса при реализации классов с подсчетом ссылок
Практические занятия
Односвязный список.
Обеспечение уникальности хранения данных посредством вспомогательных классов с подсчетом ссылок и статических переменных и методов класса.
Тема 1. Защищенное наследование
1.1 Спецификаторы наследования private и protected.
Отношение между классами «подобен»
Специфика защищенного наследования.
Использование защищенного наследования для изоляции пользователя от использования функциональности базового класса.
1.2 Ключевое слово friend и защищенное наследование.
Защищенное наследование при построении иерархий классов
Использование защищенного наследования для изоляции классов потомков от использования функциональности базового класса
Тема 2. Множественное наследование
2.1 Отличия множественного и одиночного наследования.
Построение иерархий классов при множественном наследовании.
Множественное наследование и полиморфизм
2.2 Специфика множественного наследования
Проблемы, возникающие при множественном наследовании.
Множественное наследование и директива using.
Виртуальное наследование
Практические занятия
Построение иерархий классов при множественном наследовании.
Тема 3. Механизм RTTI
3.1 Оператор static_cast и иерархии классов
Использование оператора static_cast для определения типа на этапе компиляции применительно к классам, связанным наследованием
3.2 Динамическая идентификация типа.
Оператор dynamic_cast, оператор typeid, класс type_info.
Встроенный механизм динамического определения типа
Практические занятия
Использование static_cast при реализации гетерогенного двухсвязного списка.
Использование механизма динамического определения типа для реализации гетерогенного двухсвязн
Получено 28.09.2026