05.12.2017. Лекция 11. Критика ООП. Персистентные структуры данных

Развернуть

  1. Мнения разных экспертов относительно ООП.
  2. Сложность, присущая задаче vs. побочная сложность.
  3. Мутабельность состояния объекта как побочная сложность.
  4. Персистентные структуры данных.
  5. Мультиметоды в Clojure как пример сложной диспетчеризации.

21.11.2017. Лекция 10. Реализации ООП помимо C++

Развернуть

  1. Близкие по духу языки: Java, D, C#.
  2. Objective C.
  3. Язык Self как дальнейшее развитие идей Smalltalk. Концепция слотов.
  4. Язык JavaScript. Прототипы. Наследование с помощью прототипов.
  5. Язык Ruby. Блоки как реализация замыканий. Расширение иерархии наследования с помощью mixins.
  6. Язык Python.
  7. Язык Go. Невиртуальное наследование как композиция. Разделение наследования интерфейса и наследования реализации. Динамическая диспетчеризация на основе интерфейсов.
  8. Язык Rust. Динамическая диспетчеризация на основе traits.

14.11.2017. Лекция 9. Зарождение ООП и Smalltalk

Развернуть

  1. Предпосылки ООП.
  2. Simula 67 и «скандинавская школа».
  3. Идеи Алана Кея.
  4. Smalltalk.
  5. Почему Smalltalk не взлетел.

Pharo, среда Smalltalk.

Туториал с реализацией игры Lights Out.

07.11.2017. Лекция 8. Сборка кода. Библиотеки

Развернуть

  1. Алгоритм сборки программ на C++. Объектные файлы. Библиотеки.
  2. Динамические библиотеки.
  3. Что такое хорошая библиотека?
  4. Библиотечный подход к решению квадратного уравнения.
  5. Краткое описание самых полезных библиотек для C++: Qt, Boost, OpenCV.
  6. Структурирование исходных файлов в больших проектах.

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. Оператор индекса.

Действия