31.10.2017. Лекция 7. Паттерны проектирования (ч. 3)

Развернуть

  1. Паттерн Адаптер. Адаптер класса и адаптер объектов.
  2. Паттерн Декоратор.
  3. Паттерн Заместитель.
  4. Паттерн Фасад.
  5. Паттерн Компоновщик.
  6. Паттерн Object Pool.
  7. Паттерн Null Object.
  8. Паттерн Servant.
  9. Модель MVC.
  10. Модель Event Loop.

24.10.2017. Лекция 6. Паттерны проектирования (ч. 2)

Развернуть

  1. Паттерн Итератор.
  2. Паттерн Команда.
  3. Паттерн Шаблонный метод.
  4. Паттерн Состояние.
  5. Паттерн Стратегия.

17.10.2017. Лекция 5. Паттерны проектирования (ч. 1)

Развернуть

  1. Design Patterns как явление.
  2. Виды паттернов.
  3. Паттерн Singleton (Одиночка).
  4. Паттерн Builder (Строитель).
  5. Паттерн Factory Method (Фабричный метод).
  6. Паттерн Prototype (Прототип).

10.10.2017. Лекция 4. «Чёрные ящики» (ч. 3)

Развернуть

  1. «Чёрный ящик» String на базе динамического буфера символов. Реализация базовых конструкторов, операторов присваивания и приращения строки.
  2. Принцип copy-on-write (COW).
  3. Реализация StringBuf и оптимизированной версии String, обеспечивающей возможность разделения одного StringBuf между многими объектами String.
  4. Корректная реализация получения ссылки на символ строки. Проблемы наивных подходов.
  5. Использование «неразделяемого» буфера для решения проблем ссылок.
  6. «Болевые точки» «чёрных ящиков». Обзор.

03.10.2017. Лекция 3. «Чёрные ящики» (ч. 2)

Развернуть

  1. Оператор вызова функции operator().
  2. Операторы, связанные с указателями: operator&(), operator*, operator->().
  3. Намётки реализации умного указателя (Smart Pointer).
  4. Оператор «запятая»: operator,.
  5. Оператор преобразования типа. Создание временного объекта с вызовом конструктора с одним аргументом.
  6. Явные и неявные преобразования типов. Ключевое слово explicit.
  7. Глобальные operator new и operator delete.
  8. placement new.
  9. Задание operator new и operator delete для конкретного класса.
  10. Константы пользовательских типов (user-defined literals).
  11. Удаление версий операторов, сгенерированных по умолчанию.
  12. Операторы и пространства имён — алгоритм поиска оператора.
  13. Операторы, которые нельзя перегрузить.

26.09.2017. Лекция 2. «Чёрные ящики» (ч. 1)

Развернуть

  1. Виды конструкторов.
  2. Конструктор копирования.
  3. Генерация конструктора копирования по умолчанию. В каких случаях переопределять?
  4. Семантика перемещения. Rvalue-ссылки.
  5. Конструктор перемещения.
  6. Перегрузка оператора присваивания.
  7. Присваивание-копирование и присваивание-перемещение.
  8. Операции, генерируемые компилятором по умолчанию.
  9. Инициализация в стиле C++11: { ... }.
  10. std::initializer_list.
  11. Принципы перегрузки операторов. Оператор-член класса и оператор-глобальная функция.
  12. Операторы арифметики.
  13. Побитовые операторы.
  14. Оператор присваивание.
  15. Операторы сравнения. std::rel_ops.
  16. Логические операторы. Потеря «короткого замыкания».
  17. Операторы присвоения-модификации.
  18. Операторы инкремента и декремента.
  19. Оператор индекса.

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

Развернуть

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

Статья про лямбды на хабре.

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

Развернуть

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

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

Развернуть

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

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

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

Развернуть

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

Действия