18.09.2018. Лекция №3. «Черные ящики».

Развернуть

  1. Виды конструкторов.
  2. Конструкторы копирования и перемещения.
  3. Перегрузка оператора присваивания.
  4. Присваивание-копирование и присваивание-перемещение.
  5. Операции, генерируемые компилятором по умолчанию.
  6. Арифметические и побитовые операторы. Операторы (составного) присваивания, сравнения, логические, с указателями и др.
  7. Оператор преобразования типа. Создание временного объекта с вызовом конструктора с одним аргументом.
  8. Явные и неявные преобразования типов. Ключевое слово explicit.
  9. Глобальные operator new и operator delete.
  10. Placement new.
  11. Задание operator new и operator delete для конкретного класса.
  12. Удаление версий операторов, сгенерированных по умолчанию.
  13. Алгоритм поиска оператора.
  14. Операторы, которые нельзя перегрузить.

11.09.2018. Лекция №2. Вывод типов.

Развернуть

  1. Rvalue-ссылки.
  2. Правила вывода типа шаблона.
  3. Универсальные ссылки.
  4. Вывод типа auto.
  5. Отличие вывода типа auto от вывода типа шаблона.
  6. std::initializer_list.
  7. Унифицированная инициализация.
  8. Преимущества и недостатки фигурной инициализации.

04.09.2018. Лекция №1. Шаблоны

Развернуть

  1. Мотивация для шаблонов.
  2. Как работают шаблоны. Инстанцирование.
  3. Вывод параметров шаблона по типам параметров у шаблонной функции.
  4. Пример шаблона функции из STL.
  5. Шаблоны классов.
  6. Специализация шаблонов функций.
  7. Специализация шаблонов классов.
  8. Шаблоны методов классов.
  9. Классы свойств и значений.
  10. Классы стратегий.
  11. Готовые функторы из <functional>. std::bind.
  12. Лямбда-функции.
  13. Принцип SFINAE. Предикат, проверяющий, является ли переданный параметр шаблона классом.
  14. Реализация своего итератора до и после C++17.
  15. Метапрограммирование. Вычисление целочисленной степени с помощью шаблонов.

30.04.2018. Лекция № 13. Практическое руководство по разработке

Развернуть

  1. Планирование.
  2. Классы и объекты.
  3. Ядро и прототип.
  4. Рефакторинг.

23.04.2018. Лекция № 12. Ещё о проектировании

Развернуть

  1. Реализация задачи генерации текста на основе цепей Маркова.
  2. Принципы KISS, YAGNI и ЗСПКБР.
  3. Проектирование для задачи чтения и разбора CSV-файлов.

Код программы markovka: https://github.com/be9/oopcode/tree/master/markovka

16.04.2018. Лекция № 11. Принцип отделения интерфейса. «Малое ООП»

Развернуть

  1. Принцип отделения интерфейса (ISP).
  2. «Большое ООП» и «Малое ООП».
  3. Проектирование для задачи линейной аппроксимации набора точек.
  4. …и для задачи экспоненциальной аппроксимации.

09.04.2018. Лекция № 10. Графическая нотация. Принципы LSP и DIP

Развернуть

  1. Как узнать отношения между классами в коде?
  2. Графическая нотация для отношений.
  3. Пример: проектирование программы форматирования текста.
  4. Принцип подстановки Лискоу (LSP).
  5. Принцип инверсии зависимостей (DIP).

02.04.2018. Лекция № 9. Отношения между классами. Принцип открытия-закрытия

Развернуть

  1. Наследование.
  2. Композиция. Выбор между композицией и наследованием.
  3. Агрегация. Разница между композицией и агрегацией.
  4. Ассоциация.
  5. Пример замены композиции на ассоциацию.
  6. Принцип открытия-закрытия (OCP).
  7. Как вносить изменения, не нарушая принцип OCP? Выделение абстракции.

26.03.2018. Лекция № 8. Хорошие и плохие ОО-программы

Развернуть

  1. Общие требования к классам (декомпозиция, модульная композиция, модульная понятность, модульная непрерывность, модульная защищённость).
  2. Простая и незамысловатая реализация программы вычисления медиан.
  3. Реализация с одним большим классом.
  4. Принцип одной зоны ответственности (Single Responsibility Principle, SRP).
  5. Разнесение зон ответственности через структуры данных. Функциональный подход.
  6. Разделение вычисления медиан на классы Parser и MediansMedian.
  7. Альтернативное разделение на классы: Parser, ParserClient и MediansMedian. «Активные» и «пассивные» классы.

19.03.2018. Лекция № 7. algorithm. Исключения

Развернуть

  1. all_of, any_of, none_of.
  2. copy_if.
  3. Функции и функторы.
  4. transform.
  5. generate и fill.
  6. remove_if.
  7. Механизм исключений. Вызов деструкторов.
  8. Иерархии классов исключений.
  9. Повторная генерация.
  10. catch (...).
  11. «Обёртки».
  12. Исключения в конструкторах и защита от них.
  13. unique_ptr.

Код из лекции: https://github.com/be9/oopcode/tree/master/lection_1_07

Справка по algorithm: http://www.cplusplus.com/reference/algorithm/

Справка по unique_ptr: http://www.cplusplus.com/reference/memory/unique_ptr/

Действия