Аннотация
Данный курс знакомит с концепцией объектно-ориентированного программирования - одной из наиболее популярных и востребованных рынком концепций разработки программного обеспечения. В курсе изучаются основы объектно-ориентированного программирования, поддержка ООП в рамках языка C++.
Согласно новому стандарту С++11 ядро языка С++ было доработано в целях повышения эффективности. В языке появились абсолютно новые понятия, для которых еще нет устоявшихся русских эквивалентов, такие как “move semantics”, “rvalue reference” и т.д.
Данная программа готовит к сдаче сертификационного экзамена CPA.
Данный курс знакомит с концепцией объектно-ориентированного программирования - одной из наиболее популярных и востребованных рынком концепций разработки программного обеспечения. В курсе изучаются основы объектно-ориентированного программирования, поддержка ООП в рамках языка C++.
Согласно новому стандарту С++11 ядро языка С++ было доработано в целях повышения эффективности. В языке появились абсолютно новые понятия, для которых еще нет устоявшихся русских эквивалентов, такие как “move semantics”, “rvalue reference” и т.д.
Данная программа готовит к сдаче сертификационного экзамена CPA.
Необходимая предварительная подготовка:
• Приветствуется (но не обязателен) опыт разработки простых программ на любом языке программирования.
• Знание английского языка ускоряет получение контекстной справочной информации.
• Знакомство с основами языка C++
• Знания в объеме курсов [CPP-01] Основы алгоритмизации и программирования и [CPP-02] Процедурное программирование. Языки С/C++
• Приветствуется (но не обязателен) опыт разработки простых программ на любом языке программирования.
• Знание английского языка ускоряет получение контекстной справочной информации.
• Знакомство с основами языка C++
• Знания в объеме курсов [CPP-01] Основы алгоритмизации и программирования и [CPP-02] Процедурное программирование. Языки С/C++
Программа:
1. Базовые понятия объектно-ориентированного программирования, их реализация средствами С++
• Концепция объектно-ориентированного программирования.
• Отличия процедурного и ООП. Концепция классов в С++.
• Понятие класса. Объявление класса. Данные-члены класса + функции-члены класса = инкапсуляция. Оператор sizeof и размер класса.
• Спецификаторы доступа. Создание экземпляра класса.
• Реализация методов класса. Доступ к public членам класса посредством объекта, селектор «.».Указатель this.
• Анатомия вызова нестатического метода класса.
• Ключевое слово сonst и методы класса.
• Методы, возвращающие константные значения. Константные методы класса. Ключевое слово mutable Константные аргументы.
• Конструктор класса. Понятие конструктора. Конструктор по умолчанию. Конструктор с параметрами. Перегрузка конструкторов. Конструктор с параметрами по умолчанию. Возможные конфликты при использовании параметров по умолчанию. Специфика записи при вызове конструктора с одним параметром. Конструкторы и модификатор explicit. Конструкторы базовых типов. Динамическое создание объектов и вызов конструктора.
• Деструктор.
• Специфика объявления деструктора как метода класса. Деструктор – метод класса. Конструктор + деструктор = функциональное замыкание.
• Создание и уничтожение объектов с разным способом хранения.
• Конструктор копирования.
• Создание нового объекта по существующему объекту. Передача объектов в качестве параметров функции. Возвращение объекта по значению. Move конструктор копирования (новый стандарт С++11).
• Проблемы, которые могут возникнуть при использовании конструктора копирования по умолчанию и способы их решения.
• Указатель на класс. Указатель на объект класса. Доступ к членам класса посредством указателя. Селектор «->». Указатель this.
• Массивы и классы. Массивы объектов класса. Массивы указателей на объекты класса.
2. Битовые поля в структурах и классах С++ и наследование.
• Поля битов. Специфика использования.
• Взаимоотношения между классами. Наследование.
• Виды наследования. Простое (single) наследование. Объявление производного класса. Спецификатор protected в базовом классе.
• Спецификаторы наследования. Порядок вызова конструкторов и деструкторов. Передача параметров базовому классу при конструировании.
• Специфика передачи параметров конструктору копирования базового класса.
• Открытое наследование.
• Правила объектно-ориентированного проектирования. Пример ошибочного построения иерархии классов.
• Полиморфизм. Раннее и позднее связывание. Виртуальные функции. Механизм вызова виртуальной функции.
• Виртуальные деструкторы. Чисто виртуальные функции и абстрактные классы.
• Наследование интерфейса и наследование реализации при открытом наследовании.
• FRIEND (привилегированные) функции и классы.
• Внешняя friend-функция. Friend-функция, являющаяся методом другого класса. Friend-класс.
3. Перегрузка операторов и объекты.
• Перегрузка операторов для базовых и пользовательских типов. Правила перегрузки унарных и бинарных операторов.
• Порядок поиска компилятором функции. Формы перегрузки операторов.
• Перегрузка оператора с помощью метода класса.
• Специфика перегрузки оператора присваивания. Move оператор присваивания (новый стандарт С++11). Оператор присваивания и нетривиальные классы.
• Оператор присваивания и перегрузка. Оператор[] с проверкой выхода за границы массива. Оператор ++ (--).Оператор () и функциональные объекты.
• Перегрузка с помощью глобальной friend-функции. Пример перегрузки оператора << (вывод) в библиотечный ostream.
• Внедряемые объекты.
• Конструирование и уничтожение встроенных объектов. Передача параметров конструктора встроенным объектам. Список инициализации.
• Специфика инициализации константных объектов и ссылок.
• Порядок инициализации членов класса. Пример «ассоциативного массива».
• Указатели на объекты в качестве членов данных класса.
• Предварительное неполное объявление класса (forward reference). Ссылки на указатели.
4. Структуры и объединения языка С++.
• Статические члены класса.
• Ключевое слово static. Статические данные. Статические функции: для доступа извне к private или protected static-данным класса, для «косвенного» создания объекта.
• Структуры и объединения языка C++.
• Ключевые слова struct и union. Отличия структур и классов.
• Рекомендации по использованию Тип данных VARIANT. Анонимные объединения.
• Множественное наследование.
• Создание объектов производных классов при множественном наследовании.
• Полиморфизм и множественное наследование. Проблемы, возникающие при множественном наследовании.
1. Базовые понятия объектно-ориентированного программирования, их реализация средствами С++
• Концепция объектно-ориентированного программирования.
• Отличия процедурного и ООП. Концепция классов в С++.
• Понятие класса. Объявление класса. Данные-члены класса + функции-члены класса = инкапсуляция. Оператор sizeof и размер класса.
• Спецификаторы доступа. Создание экземпляра класса.
• Реализация методов класса. Доступ к public членам класса посредством объекта, селектор «.».Указатель this.
• Анатомия вызова нестатического метода класса.
• Ключевое слово сonst и методы класса.
• Методы, возвращающие константные значения. Константные методы класса. Ключевое слово mutable Константные аргументы.
• Конструктор класса. Понятие конструктора. Конструктор по умолчанию. Конструктор с параметрами. Перегрузка конструкторов. Конструктор с параметрами по умолчанию. Возможные конфликты при использовании параметров по умолчанию. Специфика записи при вызове конструктора с одним параметром. Конструкторы и модификатор explicit. Конструкторы базовых типов. Динамическое создание объектов и вызов конструктора.
• Деструктор.
• Специфика объявления деструктора как метода класса. Деструктор – метод класса. Конструктор + деструктор = функциональное замыкание.
• Создание и уничтожение объектов с разным способом хранения.
• Конструктор копирования.
• Создание нового объекта по существующему объекту. Передача объектов в качестве параметров функции. Возвращение объекта по значению. Move конструктор копирования (новый стандарт С++11).
• Проблемы, которые могут возникнуть при использовании конструктора копирования по умолчанию и способы их решения.
• Указатель на класс. Указатель на объект класса. Доступ к членам класса посредством указателя. Селектор «->». Указатель this.
• Массивы и классы. Массивы объектов класса. Массивы указателей на объекты класса.
2. Битовые поля в структурах и классах С++ и наследование.
• Поля битов. Специфика использования.
• Взаимоотношения между классами. Наследование.
• Виды наследования. Простое (single) наследование. Объявление производного класса. Спецификатор protected в базовом классе.
• Спецификаторы наследования. Порядок вызова конструкторов и деструкторов. Передача параметров базовому классу при конструировании.
• Специфика передачи параметров конструктору копирования базового класса.
• Открытое наследование.
• Правила объектно-ориентированного проектирования. Пример ошибочного построения иерархии классов.
• Полиморфизм. Раннее и позднее связывание. Виртуальные функции. Механизм вызова виртуальной функции.
• Виртуальные деструкторы. Чисто виртуальные функции и абстрактные классы.
• Наследование интерфейса и наследование реализации при открытом наследовании.
• FRIEND (привилегированные) функции и классы.
• Внешняя friend-функция. Friend-функция, являющаяся методом другого класса. Friend-класс.
3. Перегрузка операторов и объекты.
• Перегрузка операторов для базовых и пользовательских типов. Правила перегрузки унарных и бинарных операторов.
• Порядок поиска компилятором функции. Формы перегрузки операторов.
• Перегрузка оператора с помощью метода класса.
• Специфика перегрузки оператора присваивания. Move оператор присваивания (новый стандарт С++11). Оператор присваивания и нетривиальные классы.
• Оператор присваивания и перегрузка. Оператор[] с проверкой выхода за границы массива. Оператор ++ (--).Оператор () и функциональные объекты.
• Перегрузка с помощью глобальной friend-функции. Пример перегрузки оператора << (вывод) в библиотечный ostream.
• Внедряемые объекты.
• Конструирование и уничтожение встроенных объектов. Передача параметров конструктора встроенным объектам. Список инициализации.
• Специфика инициализации константных объектов и ссылок.
• Порядок инициализации членов класса. Пример «ассоциативного массива».
• Указатели на объекты в качестве членов данных класса.
• Предварительное неполное объявление класса (forward reference). Ссылки на указатели.
4. Структуры и объединения языка С++.
• Статические члены класса.
• Ключевое слово static. Статические данные. Статические функции: для доступа извне к private или protected static-данным класса, для «косвенного» создания объекта.
• Структуры и объединения языка C++.
• Ключевые слова struct и union. Отличия структур и классов.
• Рекомендации по использованию Тип данных VARIANT. Анонимные объединения.
• Множественное наследование.
• Создание объектов производных классов при множественном наследовании.
• Полиморфизм и множественное наследование. Проблемы, возникающие при множественном наследовании.
Практические работы
Практическое занятие 1.
• ООП. Объявление класса. Создание экземпляра класса. Вызов методов класса посредством объекта.
• Конструктор по умолчанию. Перегрузка конструкторов и методов класса.
• Конструктор копирования. Спецификаторы доступа. Инкапсуляция.
• Передача экземпляра класса в качестве параметра функции (по значению, по ссылке). Возвращение объекта класса по значению.
• Указатель на класс. Использование селектора «->».
• «Нетривиальные» классы. Конструктор + деструктор = функциональное замыкание. Конструктор копирования для нетривиальных классов.
• Массив объектов класса. Массив указателей на объекты класса.
Индивидуальное домашнее задание по пройденному материалу N1
Практическое занятие 1.
• ООП. Объявление класса. Создание экземпляра класса. Вызов методов класса посредством объекта.
• Конструктор по умолчанию. Перегрузка конструкторов и методов класса.
• Конструктор копирования. Спецификаторы доступа. Инкапсуляция.
• Передача экземпляра класса в качестве параметра функции (по значению, по ссылке). Возвращение объекта класса по значению.
• Указатель на класс. Использование селектора «->».
• «Нетривиальные» классы. Конструктор + деструктор = функциональное замыкание. Конструктор копирования для нетривиальных классов.
• Массив объектов класса. Массив указателей на объекты класса.
Индивидуальное домашнее задание по пройденному материалу N1
Практическое занятие 2.
• Простое наследование. Аргументы конструктора, передаваемые в базовый класс.
• Виртуальные функции.
• Виртуальные деструкторы.
• Оператор разрешения области видимости и наследование.
• Абстрактный базовый класс.
• Перегрузка операторов.
• Перегрузка операторов с помощью глобальных friend-функций.
• Перегрузка операторов с помощью методов класса.
• Индивидуальное домашнее задание по пройденному материалу N2
• Простое наследование. Аргументы конструктора, передаваемые в базовый класс.
• Виртуальные функции.
• Виртуальные деструкторы.
• Оператор разрешения области видимости и наследование.
• Абстрактный базовый класс.
• Перегрузка операторов.
• Перегрузка операторов с помощью глобальных friend-функций.
• Перегрузка операторов с помощью методов класса.
• Индивидуальное домашнее задание по пройденному материалу N2
Практическое занятие 3.
• Внедренные объекты класса. Передача параметров при конструировании внедренных объектов.
• Реализация двухсвязного объектно-ориентированного списка.
• Индивидуальное домашнее задание по пройденному материалу N3
• Внедренные объекты класса. Передача параметров при конструировании внедренных объектов.
• Реализация двухсвязного объектно-ориентированного списка.
• Индивидуальное домашнее задание по пройденному материалу N3
Практическое занятие 4.
• Статические члены класса. Производящие функции. Защищенный конструктор.
• Реализация контроля за всеми созданными объектами посредством статических данных и статических методов базового класса.
• Статические члены класса. Производящие функции. Защищенный конструктор.
• Реализация контроля за всеми созданными объектами посредством статических данных и статических методов базового класса.