+7 (812) 703-02-02 info@hse.spbstu.ru
28.06.2022 19:00 День открытых дверей программ профессиональной переподготовки
Онлайн-формат. Для участия нужна регистрация...

DEV-C200. Объектно-ориентированное программирование на языке С++. Базовый уровень

Длительность дисциплины: 48 ак.ч.


Аннотация

Продолжая линейку курсов по разработке ПО, курс знакомит с концепцией объектно-ориентированного программирования - одной из наиболее популярных и востребованных рынком концепций разработки программного обеспечения. В курсе изучаются основы объектно-ориентированного программирования, поддержка ООП в рамках языка C++. К читаемому курсу прилагается авторское пособие.

Согласно новому стандарту С++11 ядро языка С++ было доработано в целях повышения эффективности. В языке появились абсолютно новые понятия, для которых еще нет устоявшихся русских эквивалентов, такие как “move semantics”, “rvalue reference” и т.д. Соответственно был дополнен материал предлагаемого курса.

Данная программа интегрирована с инициативой C++ Institute, и готовит к сдаче сертификационного экзамена CPA.

В этом разделе курса слушатель осваивает отличный (от традиционного процедурного) подход к построению программы – программирование в объектах, когда центр тяжести для разработчика программного обеспечения перемещается с написания кода как такового на описание свойств объектов и связей между ними средствами языка С++ (классами).


Знания и умения, полученные в результате изучения

В результате освоения программы обучающийся должен уметь:

  • создавать посредством классов пользовательские типы данных для решения конкретных задач;
  • использовать объектно-ориентированные возможности стандартной библиотеки С++ для ускорения процесса разработки программного продукта;
  • различать понятия наследования и внедрения и применять их по назначению;
  • корректно разделять понятия интерфейса и реализации.

В результате освоения программы обучающийся должен знать:

  • объектно-ориентированные возможности стандартной библиотеки С++;
  • базовые понятия объектно-ориентированного программирования;
  • отличие понятия наследования и внедрения;
  • отличие понятия интерфейса и реализации.

В результате освоения программы обучающийся должен приобрести практический опыт:

  • отладки программного кода;
  • создания посредством классов пользовательских типов данных для решения конкретных задач;
  • использования объектно-ориентированных возможностей стандартной библиотеки С++.

Содержание дисциплины

Тема 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 Деструктор

Специфика объявления деструктора как метода класса. 

Создание и уничтожение объектов с разным способом хранения

Практические занятия

1. Объявление класса. Спецификаторы доступа.

3. Создание экземпляра класса. Реализация методов класса. 

5. Доступ к public членам класса посредством объекта, селектор «.». Указатель «this».

6. Конструктор по умолчанию. Конструктор с параметрами. Динамическое создание объектов и вызов конструктора. 

7. Специфика объявления деструктора как метода класса. Создание и уничтожение объектов с разным способом хранения.

8. Ключевое слово сonst и классы. Конструктор копирования. Указатель на класс. 

9. Доступ к членам класса посредством указателя. Селектор «->».

10. Массивы и классы. Массивы объектов класса. Массивы указателей на объекты класса

 

Тема 3. Структуры и объединения С++

3.1 Отличия структур языка С++ от структур и объединений языка С

Специфика struct в языке С++

3.2 Отличия объединений языка С++ от структур и объединений языка С

Специфика union в языке С++

Практические занятия

1. Использование объединений С++

2. Использование структур С++

 

Тема 4. Битовые поля в структурах и классах С++

4.1 Объявление битовых полей

Битовые поля в языке С++. 

Отличия битовых полей языка С++ от битовых полей языка С

4.2 Обращение к битовым полям. 

Специфика битовых полей Правила обращения к битовым полям

Практические занятия

Использование полей битов в С++

 

Тема 5. Взаимоотношения между классами. Открытое одиночное наследование

5.1 Объявление производного класса

Объявление производного класса. 

Спецификатор доступа protected в базовом классе. 

Спецификаторы наследования

5.2 Правила открытого наследования

Порядок вызова конструкторов и деструкторов.  

Передача параметров базовому классу при конструировании. 

Специфика передачи параметров конструктору копирования базового класса.

5.3 Пример неправильного построения иерархий классов

Пример неправильного построения иерархий классов

Практические занятия

1. Простое (single) открытое наследование.

2. Объявление производного класса.

3. Спецификатор доступа protected в базовом классе. Спецификаторы наследования. Порядок вызова конструкторов и деструкторов. 

4. Специфика передачи параметров конструктору копирования базового класса.

 

Тема 6. Полиморфизм

6.1 Раннее и позднее связывание

Понятие о раннем и позднем связывании

6.2 Виртуальные функции. Механизм вызова виртуальной функции

Понятие о виртуальных функциях. 

Специфика формирования компилятором вызова виртуальной функции

6.3 Чисто виртуальные функции. 

Абстрактные классы

Понятие о чисто виртуальных функциях и абстрактных классах. 

Специфика чисто виртуальных функций

6.4 Наследование интерфейса и наследование реализации

Отличие наследования интерфейса и наследования реализации

Практические занятия

1. Виртуальные методы класса. 

2. Виртуальные деструкторы. 

3. Чисто виртуальные функции и абстрактные классы.

 

Тема 7. Дружественные классы и функции

7.1 friend – функция

Понятие о friend – функциях. 

Назначение глобальных friend – функций

7.2 friend – класс, friend – метод класса

Понятие о friend – классах. 

Понятие о friend – методах класса.

Практические занятия

1. Использование глобальных friend –функций для доступа к защищенным членам класса. 

2. Использование friend –классов для доступа к защищенным членам другого класса

 

Тема 8. Перегрузка операторов

8.1 Специфика перегруженных операторов. 

Способы перегрузки

Правила перегрузки унарных и бинарных операторов. 

Перегрузка оператора с помощью метода класса. 

Перегрузка с помощью глобальной friend-функции

8.2 Перегрузка методом класса

Специфика перегрузки оператора с помощью метода класса

8.3 Семантика перемещения и оптимизация оператора присваивания

Использование move-оператора присваивания для повышения эффективности работы прогаммы.

8.4 Перегрузка глобальной функцией

Специфика перегрузки оператора с помощью глобальной функции

Практические занятия

1. Правила перегрузки унарных и бинарных операторов. Перегрузка оператора с помощью метода класса. 

2. Специфика перегрузки оператора присваивания. 

3. Move-оператор присваивания. Оператор присваивания и нетривиальные классы. Оператор присваивания и перегрузка. 

4. Перегрузка с помощью глобальной friend-функции. 

5. Перегрузка оператора << (вывод) в библиотечный ostream . 

6. Ассоциативный массив – программа «База данных о сотрудниках»

 

Тема 9. Сложные указатели

9.1 Указатели на переменные класса

Синтаксис описания указатели на переменные класса

9.2 Указатели на методы класса

Синтаксис описания указатели на методы класса

Практические занятия

Использование указателя на методы класса при выполнении сортировки по разным признакам

 

Тема 10. Взаимоотношения между классами. Внедренные (встроенные) объекты

10.1 Порядок конструирования и разрушения объектов

Взаимоотношения между классами. 

Понятие о внедренных объектах 

10.2 Передача параметров конструкторам встроенных объектов

Передача параметров конструкторам встроенных объектов

10.3 Двухсвязные объектно-ориентированные списки

Приемы разработки двухсвязного объектно-ориентированного списка

Практические занятия

1. Внедренные объекты.

2.  Порядок инициализации/деактивации объектов-контейнеров.

3.  Объектно-ориентированный однородный двухсвязный список.

 

Тема 11. Статические члены класса

11.1 Статические данные

Понятие о статических данных

11.2 Статические методы

Понятие о статических методах

11.3 Порождающие функции

Понятие порождающих функциях

11.4 Классы с подсчетом ссылок

Использование статических членов класса при реализации классов с подсчетом ссылок

Практические занятия

1. Односвязный список. 

2. Обеспечение уникальности хранения данных посредством вспомогательных классов с подсчетом ссылок и статических переменных и методов класса.