Тема 2. Класс как основной механизм абстракции

Введение в объектно-ориентрованное программирование

  1. История создания, назначение и общая характеристика языка С++.
  2. Сравнительная характеристика языков С и С++. Новые возможности (расширения) языка С++.
  3. Новые способы объявления переменных в С++ (по отношению к языку С).
  4. Логический тип bool в языке С++ и логические значения true и false (привести примеры).
  5. Стандартные потоки ввода cin и вывода cout в языке С++, операции потокового ввода и вывода (привести примеры).
  6. Встроенные (подставляемые) функции языке С++.
  7. Ссылки и их назначение. Сравнение ссылок с указателями.
  8. Константы и свойство константности в языке С++. Сущности, к которым применяется описатель const. Варианты использования описателя const с указателями и ссылками.
  9. Перечисления, структуры и объединения языка С++ как полноценные типы данных. Анонимные перечисления.
  10. Сравнение средств управления динамической памятью языков С и С++. Конструирование и разрушение объектов.
  11. Динамические массивы и операторы new[] и delete[].
  12. Использование аргументов по умолчанию в функциях языка С++.
  13. Перегрузка (совмещение имен) функций, сигнатура функции, правила перегрузки и ограничения на перегрузку. Различия между статическим и динамическим полиморфизмом.
  14. Общая характеристика стандартной библиотеки С++.

 

Тема 1. Объектная модель

  1. Характеристика понятий «парадигма» и «парадигма программирования». Роль языка программирования в эффективном использовании возможностей вычислительных средств.
  2. Соотношение между парадигмами языков ассемблера и процедурного программирования. Примеры процедурных языков программирования и их недостатки.
  3. Парадигмы функционального и логического программирования, примеры языков и области их применения.
  4. Сущность объектно-ориентированного подхода.
  5. Характеристика главных элементов объектной модели (абстрагирование, инкапсуляция, иерархия и модульность).
  6. Характеристика понятия «абстрагирование». Классы и объекты. Состояние, поведение и идентичность объектов. Пример простейшей абстрактной модели «электрическая лампочка». Интерфейс и абстрагирование. Объявление класса и объявление экземпляра класса.
  7. Характеристика понятия «инкапсуляция». Инкапсуляция и сокрытие реализации. Соотношение между терминами «инкапсулированный» и «скалярный». Механизмы управления инкапсулированием в языке С++. Понятие о дружественных классах и функциях.
  8. Основные виды отношений между объектно-ориентированными абстракциями и их краткая характеристика.
  9. Наследование как основная и самая распространенная форма отношения обобщения. Базовые и производные классы. Графическое изображение отношения наследования. Синтаксис объявления производного класса.
  10. Общее понятие об отношении ассоциации. Агрегация и композиция как разновидности ассоциации. Графическое изображение отношений ассоциации, агрегации и композиции.
  11. Отношение зависимости между классами.
  12. Отношение реализации. Понятие о классе-интерфейсе.
  13. Понятие о физической и логической модульности программ.

 

Тема 2. Класс как основной механизм абстракции

  1. Класс как тип данных. Общая характеристика набора средств языка С++ для конструирования класса (основные структурные элементы класса).
  2. Разграничение доступа к членам класса. Открытые, закрытые и защищённые члены класса. Обеспечение инкапсуляции. Открытый интерфейс класса. Абстрактная модель класса с точки зрения пользователя и разработчика.
  3. Конструктор класса. Способы вызова конструктора класса. Перегрузка конструкторов. Конструктор «по умолчанию» и правила его создания компилятором.
  4. Конструктор преобразования типа. Неявное преобразование типа и запрет неявного преобразования. Использование спецификатора explicit.
  5. Назначение закрытых и защищённых конструкторов. Закрытые и защищённые конструкторы как механизм создания абстрактных классов.
  6. Деструктор класса. Случаи вызова деструктора класса.
  7. Константные члены класса: константные данные и константные функции. Инициализация константных данных – членов класса.
  8. Статические переменные – члены класса и статические константы – члены класса. Инициализация и использование статических членов класса. Статические функции – члены класса и особенности их использования.
  9. Члены класса, требующие обязательную инициализацию.
  10. Константный указатель this, его назначение и случаи использования.
  11. Встроенные функции-члены класса.
  12. Перегрузка операций для класса. Понятие о «совместимости с соглашениями для встроенных типов». Синтаксис объявления перегруженных операций (бинарных и унарных) как функций-членов класса и как внешних функций. Операции, запрещённые для перегрузки. Приоритет и порядок выполнения операций при перегрузке.
  13. Основные правила перегрузки операций. Рекомендуемые формы перегрузки операций.
  14. Правильные форматы перегрузки унарных операций.
  15. Правильный формат перегрузки бинарных операций. Почему бинарные операции должны перегружаться внешними функциями.
  16. Правильный формат перегрузки операции присваивания, а также операций, совмещённых с присваиванием.
  17. Правильный формат перегрузки операций потокового ввода и вывода.
  18. Перегрузка операции индексации массива []. Операция [] с нецелыми аргументами.
  19. Проблемы копирования объектов и понятие поверхностного копирования. Реализация корректной семантики копирования объектов. Копирующая инициализация и копирующее присваивание. Копирующий конструктор и перегрузка операции присваивания. Понятие о глубинном копировании. Закрытие копирующего конструктора и операции присваивания.
  20. Особенности перегрузки операций приведения типов. Операции приведения между классами.