Тема 2. Класс как основной механизм абстракции
Введение в объектно-ориентрованное программирование
- История создания, назначение и общая характеристика языка С++.
- Сравнительная характеристика языков С и С++. Новые возможности (расширения) языка С++.
- Новые способы объявления переменных в С++ (по отношению к языку С).
- Логический тип bool в языке С++ и логические значения true и false (привести примеры).
- Стандартные потоки ввода cin и вывода cout в языке С++, операции потокового ввода и вывода (привести примеры).
- Встроенные (подставляемые) функции языке С++.
- Ссылки и их назначение. Сравнение ссылок с указателями.
- Константы и свойство константности в языке С++. Сущности, к которым применяется описатель const. Варианты использования описателя const с указателями и ссылками.
- Перечисления, структуры и объединения языка С++ как полноценные типы данных. Анонимные перечисления.
- Сравнение средств управления динамической памятью языков С и С++. Конструирование и разрушение объектов.
- Динамические массивы и операторы new[] и delete[].
- Использование аргументов по умолчанию в функциях языка С++.
- Перегрузка (совмещение имен) функций, сигнатура функции, правила перегрузки и ограничения на перегрузку. Различия между статическим и динамическим полиморфизмом.
- Общая характеристика стандартной библиотеки С++.
Тема 1. Объектная модель
- Характеристика понятий «парадигма» и «парадигма программирования». Роль языка программирования в эффективном использовании возможностей вычислительных средств.
- Соотношение между парадигмами языков ассемблера и процедурного программирования. Примеры процедурных языков программирования и их недостатки.
- Парадигмы функционального и логического программирования, примеры языков и области их применения.
- Сущность объектно-ориентированного подхода.
- Характеристика главных элементов объектной модели (абстрагирование, инкапсуляция, иерархия и модульность).
- Характеристика понятия «абстрагирование». Классы и объекты. Состояние, поведение и идентичность объектов. Пример простейшей абстрактной модели «электрическая лампочка». Интерфейс и абстрагирование. Объявление класса и объявление экземпляра класса.
- Характеристика понятия «инкапсуляция». Инкапсуляция и сокрытие реализации. Соотношение между терминами «инкапсулированный» и «скалярный». Механизмы управления инкапсулированием в языке С++. Понятие о дружественных классах и функциях.
- Основные виды отношений между объектно-ориентированными абстракциями и их краткая характеристика.
- Наследование как основная и самая распространенная форма отношения обобщения. Базовые и производные классы. Графическое изображение отношения наследования. Синтаксис объявления производного класса.
- Общее понятие об отношении ассоциации. Агрегация и композиция как разновидности ассоциации. Графическое изображение отношений ассоциации, агрегации и композиции.
- Отношение зависимости между классами.
- Отношение реализации. Понятие о классе-интерфейсе.
- Понятие о физической и логической модульности программ.
Тема 2. Класс как основной механизм абстракции
- Класс как тип данных. Общая характеристика набора средств языка С++ для конструирования класса (основные структурные элементы класса).
- Разграничение доступа к членам класса. Открытые, закрытые и защищённые члены класса. Обеспечение инкапсуляции. Открытый интерфейс класса. Абстрактная модель класса с точки зрения пользователя и разработчика.
- Конструктор класса. Способы вызова конструктора класса. Перегрузка конструкторов. Конструктор «по умолчанию» и правила его создания компилятором.
- Конструктор преобразования типа. Неявное преобразование типа и запрет неявного преобразования. Использование спецификатора explicit.
- Назначение закрытых и защищённых конструкторов. Закрытые и защищённые конструкторы как механизм создания абстрактных классов.
- Деструктор класса. Случаи вызова деструктора класса.
- Константные члены класса: константные данные и константные функции. Инициализация константных данных – членов класса.
- Статические переменные – члены класса и статические константы – члены класса. Инициализация и использование статических членов класса. Статические функции – члены класса и особенности их использования.
- Члены класса, требующие обязательную инициализацию.
- Константный указатель this, его назначение и случаи использования.
- Встроенные функции-члены класса.
- Перегрузка операций для класса. Понятие о «совместимости с соглашениями для встроенных типов». Синтаксис объявления перегруженных операций (бинарных и унарных) как функций-членов класса и как внешних функций. Операции, запрещённые для перегрузки. Приоритет и порядок выполнения операций при перегрузке.
- Основные правила перегрузки операций. Рекомендуемые формы перегрузки операций.
- Правильные форматы перегрузки унарных операций.
- Правильный формат перегрузки бинарных операций. Почему бинарные операции должны перегружаться внешними функциями.
- Правильный формат перегрузки операции присваивания, а также операций, совмещённых с присваиванием.
- Правильный формат перегрузки операций потокового ввода и вывода.
- Перегрузка операции индексации массива []. Операция [] с нецелыми аргументами.
- Проблемы копирования объектов и понятие поверхностного копирования. Реализация корректной семантики копирования объектов. Копирующая инициализация и копирующее присваивание. Копирующий конструктор и перегрузка операции присваивания. Понятие о глубинном копировании. Закрытие копирующего конструктора и операции присваивания.
- Особенности перегрузки операций приведения типов. Операции приведения между классами.