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. Проектирование для задачи генерации случайного текста на основе цепей Маркова.

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

Развернуть

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

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

Развернуть

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

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

Развернуть

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

27.03.2017. Лекция № 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/

20.03.2017. Лекция № 6. Стандартная библиотека C++. Часть 2

Развернуть

  1. std::list в сравнении с std::vector.
  2. std::list::splice.
  3. std::forward_list.
  4. Ассоциативные контейнеры. std::map. std::pair.
  5. Обход дерева поиска std::map с помощью итератора.
  6. Разница между std::map::operator[] и std::map::at.
  7. Пример. Подсчёт количества вхождений слов в файле.
  8. std::map::insert.
  9. std::map::erase.
  10. Использование пользовательского класса в качестве ключа.
  11. std::multimap и операция «group by».
  12. std::set.
  13. Хеш-таблицы. std::unordered_map.
  14. Задание хеш-функции для пользовательского класса.
  15. std::unordered_multimap.
  16. std::unordered_set.

Полезные материалы:

13.03.2017. Лекция № 5. Стандартная библиотека C++. Часть 1

Развернуть

  1. Hello, World!
  2. Операторы <<, >> и манипуляторы.
  3. Работа с файлами. Построчное чтение и запись.
  4. ostringstream.
  5. Операции со строками.
  6. Разбиение строки на слова.
  7. Конвертация строк в числа.
  8. std::vector и простейшие операции с ним.
  9. Итераторы.
  10. Итерирование std::vector. Обратные итераторы.
  11. Операции с std::vector.
  12. Итераторы и алгоритмы.

Исходники из лекции: https://github.com/be9/oopcode/tree/master/lection_1_05

Сайт с документацией по стандартной библиотеке: http://www.cplusplus.com/

В том числе:


06.03.2017. Лекция № 4. Базовый C++. Часть 2

Развернуть

  1. Преобразование типов в C++
  2. Модификатор const. Константные ссылки и указатели на объекты. Константные методы классов.
  3. Перегрузка функций. «Манглинг».
  4. Параметры функций и методов по умолчанию.
  5. Пространства имён (namespace). Директива using. Безымянные пространства имён.
  6. Шаблоны классов (template).
  7. Переопределение операторов.

Действия