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

Развернуть

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

01.04.2019. Лекция №8. Исключения.

Развернуть

  1. Abnormal program termination.
  2. Return error codes.
  3. Macro errno.
  4. try/catch/throw.
  5. Using objects as exceptions.
  6. Exception specifications.
  7. Unwinding stack.
  8. More exception features.
  9. RAII.
  10. Exceptions in constructors.
  11. Best practices.

25.03.2019. Лекция №7. STL алгоритмы.

Развернуть

  1. Copying items from containers to containers.
  2. Sorting containers.
  3. Transforming items in containers.
  4. Finding items.
  5. Locating patterns in strings with std::search.
  6. Dictionary merging tool.
  7. Fill and generate containers.
  8. Checks by predicate.
  9. Functor.

18.03.2019. Лекция №6. STL контейнеры.

Развернуть

  1. std::list.
  2. std::forward_list.
  3. std::map.
  4. std::multimap.
  5. std::set.
  6. std::unordered_map.
  7. std::unordered_multimap.
  8. std::unordered_set.
  9. Erase-remove idiom on std::vector.
  10. Filtering duplicates.
  11. Fast or safe way to access std::array or std::vector.
  12. Word frequency counter.

11.03.2019. Лекция №5. STL введение.

Развернуть

  1. Стандартные потоки ввода / вывода (standard input / output streams).
  2. Манипуляторы (manipulators).
  3. Файловый поток (std::fstream).
  4. Строковый поток (std::stringstream).
  5. std::string.
  6. Итераторы (iterators).
  7. auto & range-based for-loop.

04.03.2019. Лекция №4. Наследование.

Развернуть

  1. Виртуальный деструктор (virtual destructor).
  2. Спецификатор final.
  3. Спецификатор override.
  4. Абстрактный класс (abstract class).
  5. Модификаторы доступа (access modifiers).
  6. Спецификатор friend.
  7. Отличия struct и class.
  8. Пространство имен (namespace).
  9. Перегрузка операторов (operators overloading).
  10. Правило трех (rule of three).
  11. Спецификаторы default и delete.
  12. Аргументы по умолчанию (default arguments).

25.02.2019. Лекция №3. Наследование.

Развернуть

  1. Список инициализации (member initializer list)
  2. Делегирующие конструкторы (delegating constructors).
  3. Порядок инициализации.
  4. Ссылки (reference).
  5. Композиция (composition).
  6. Наследование (inheritance).
  7. Множественное наследование (multiple inheritance).
  8. "Dreaded diamond".
  9. Виртуальное наследование (virtual inheritance).
  10. Виртуальные функции (virtual functions).

18.02.2019. Лекция №2. C++ как Си с классами.

Развернуть

  1. Сравнение языков C & C++ на примере stack'а .
  2. Конструктор (constructor), деструктор (destructor), методы (methods).
  3. Что скрывает компилятор?
  4. Keyword this.
  5. new / delete vs malloc / free.
  6. Реализация new / delete на С.
  7. Статические члены класса (static members).
  8. Inline функции.
  9. Перегрузка функций (function overloading).
  10. Mangling.
  11. Введение в наследование (inheritance).
  12. Реализация наследования на С.

11.02.2019. Лекция №1. Введение в ООП.

Развернуть

  1. Почему ООП и С++? О курсе.
  2. Парадигмы программирования.
  3. Объекты и их взаимодействие.
  4. Основные принципы ООП.
  5. Вспоминаем С.
  6. Правила оформления кода на С.

11.12.2018. Лекция №14. Рефакторинг (ч.3).

Развернуть

  1. Решение задач обобщения.
  2. Подъем поля (Pull up field).
  3. Подъем метода (Pull up method).
  4. Спуск метода (Push down method).
  5. Спуск поля (Push down field).
  6. Извлечение подкласса (Extract subclass).
  7. Извлечение суперкласса (Extract superclass).
  8. Извлечение интерфейса (Extract interface).
  9. Свертывание иерархии (Collapse hierarchy).
  10. Замена наследования делегированием (Replace Inheritance with delegation).
  11. Замена делегирования наследованием (Replace delegation with inheritance).
  12. Раздувальщики (сode smells).
  13. Длинный метод (Long method).
  14. Большой класс (Large class).
  15. Одержимость элементарными типами (Primitive obsession).
  16. Длинный список параметров (Long parameter list).
  17. Группы данных (Data clumps).
  18. Утяжелители изменений (code smells).
  19. Расходящиеся модификации (Divergent change).
  20. Стрельба дробью (Shotgun surgery).
  21. Замусориватели (code smells).
  22. Комментарии (Comments).
  23. Дублирование кода (Duplicate code).
  24. Мертвый код (Dead code).
  25. Теоретическая общность (Speculate generality).
  26. Опутыватели связями (code smells).
  27. Завистливые функции (Feature envy).
  28. Неуместная близость (Inappropriate intimacy).
  29. Цепочка вызовов (Message chains).
  30. Посредник (Middle man).

Действия